[第1课] 算法,程序设计,语言等

主题:第一集:本节课,首先由在电话簿上查找Mike Smith的例子开始,通过直观的的授课方式给学生讲解了算法是什么,其次在说明算法与算法相比如何提向其优越性,运算效率是程序设计最根本的东西,而效率如何,最终还是取决于你所设计的算法。其次,通过几个简单的学生感兴趣的例子——拼图游戏再进一步告诉学生,什么是程序设计。最后,初步介绍了几种语言。在课程结束时,请了两位教学研究员Mather House 和Eliot House分别给大家讲话。

[第2课] 算法,数据存储,磁盘,程序设计等

主题:第二集:第0周周5课程,本节主要讲述了Gmail、FaceBook、ShuttleBoy等当前比较时新的技术话题,通过这些例子来探究隐藏在背后的技术,包括基本的算法、数据的存储的基本原理、磁盘(软盘、硬驱)的概念等基础知识,当然本节课还涉及到了计算机程序设计中的基本概念,包括循环、条件判断、分支等,对计算机学科进行简单的介绍。

[第3课] C语言,源代码,编译器(1)

主题:C语言,源代码,编译器,目标代码,SSH,SFTP,GCC,函数,注释,标准输出,算术操作,优先级,局部变量,类型转换,标准输入,函数库,布尔表达式(接上次),条件(接上次),循环(接上次)

[第4课] C语言,源代码,编译器(2)

主题:C语言,源代码,编译器,目标代码,SSH,SFTP,GCC,函数,注释,标准输出,算术操作,优先级,局部变量,类型转换,标准输入,函数库,布尔表达式(接上次),条件(接上次),循环(接上次)

[第5课]函数,全局变量,参数,返回值

[第6课] 参数,返回值

主题:参数,返回值

[第7课] 线性搜索,二进制搜索

主题:线性搜索,二进制搜索

[第8课] 符号,递归,冒泡排序

主题:符号,递归,冒泡排序

[第9课] 归并排序,动态内存分配,堆和栈

主题:第九集:归并排序,结构体,动态内存分配,堆和栈,指针,调试

[第10课] CS50函数库,指针,文件输入输出

主题:第十集:CS50函数库,堆和栈(接上次),指针(接上次),文件输入输出,辩学,链表

[第11课] 数独、计算机史上最有名的bug

主题:本堂课程开头讲述“数独”游戏,开拓学生思维,并提醒大家将要到来的第一个小测验。接下来展示几幅图片,介绍计算机史上著名的bug。然后以一个小程序为例逐步展示gdb调试程序的方法,引入栈图,详细介绍栈的各个组成部分,并由此提出一个著名的攻击方法——“缓冲区溢出攻击法”,提醒大家要做边界检查。接下来讲结构体,并提醒大家GetString函数里面调用到malloc函数,因此,我们在主函数中要调用free函数释放相应的空间。最后介绍把输出打印到文件的方法。

[第12课] 魂斗罗游戏,如何分配内存

主题:首先讲了魂斗罗游戏,然后介绍了cs50.c和cs50.h两个文件的主要框架和内容,接着介绍了分配内存的规则,介绍了数组的优势和缺点。然后通过计算机存储的原理,引出链表的概念,重点介绍了链表的用法,包括链表节点的插入,删除操作。最后将了链表、堆栈和队列的区别

[第13课] typedef声明,安全传输协议

主题:本节首先介绍了typedef的用法,接着简单介绍了安全文件传输协议SFTP,然后对之前的测验进行了点评,指出了一些常见的错误。通过回顾数组和链表,介绍了另外两种数据结构:堆和队列,并指出了在使用指针和内存时常犯的一些错误,介绍了一种用于内存检查的工具Valgrind。通过大小写字母转换的例子介绍了按位与和按位或操作符。

[第14课] 用户体验,数组与指针,Hash函数

主题:本次课程开头就结业项目,给出了几点建议。以预约课程的网站为例,阐述用户体验的重要性。然后复习二位操作符。通过两个相似的程序,对比数组和指针的使用方法。接下来讲述栈、队列的具体实现。然后介绍哈希表和几种哈希函数;以“生日悖论”为例,引入“冲突”的概念;循序渐进,介绍几种解决“冲突”的方法。最后提出“树”的概念,重点讲了两种树:“二叉排序树”和“单词查找树”。

[第15课] 网络编程,HTML语言,编写网页

主题:首先说明了课程设计的要求,这节课主要讲网络编程,tcp/ip协议和网络连接的原理和域名服务器知识,然后引入了HTML语言。粗略的介绍了PHP语言和Javascript语言。然后介绍了动态处理图像的知识。接下来主要介绍如何用HTML编写网页。包括如何嵌入标题、正文、图像;如何调它的格式(居中、字体等)。

[第16课] 网络安全,窃取通讯的工具,动态网络

主题:这节课主要通过实际的语言讲网络编程,首先提及到网络安全问题,介绍了一个窃取通讯信息的工具。然后提出了一些提高安全性的方案,包括cookie的概念,一些加密技术。 接着讲了深入讲了HTML语言和PHP语言,哈希表,如何实现动态网络编程。如何在网页中增加菜单,选择框等。

[第17课] 垃圾邮件的骗局,屏幕抓取的原理

主题:本次课程开头以电影“上班一条龙”吸引大家参加“cs50之夜”,然后简略提到研讨小组的课程。紧接着进入正题,以自己收到的垃圾邮件为例,讲述里面隐藏的骗局。然后以“cs50财政”和“雅虎财经”的股票问题,提到“屏幕抓取”,进而阐述“屏幕抓取的原理”以及需要用到的PHP语言,简单分析URL的成分,从网页源代码中提取需要的URL。紧接着上次课程,讲述register.php和froshims.php系列,回顾上次课程讲到的一些知识点,关联数组、超全局变量,以及PHP中GET与POST之间的区别。顺便提到,垃圾邮件中如何修改发件人地址。然后借助用例,详述MySQL数据库和SQL查询语言。

[第18课] 网页网站开发

主题:本次课程首先用一些图表博人眼球,引出JavaScript语言。然后教大家如何验证自己的php代码,简略提到几个网页开发工具。然后分别介绍网站经常出现的错误码,如404、401、403、404、500。接下来讲解PHP中的另一个超全局变量SESSION,进而提到“会话劫持”,简单回顾PHP中的SQL查询。通过几个网站的例子,让大家建立HTML5概念。然后讲解如何用PHP实现“拼写检查器”(之前用C语言实现过),通过几个例子,让大家温习了一遍PHP的相关知识点。接下来通过几个版本的forms.html例子,逐层递进,重点阐述JavaScript语言中的知识点,并引出DOM(文档对象模型)。

[第19课] 互联网工作原理,网页游戏制作

主题:本次课程首先提醒大家,要开始做“结业项目”了,然后是几个讲师和助教上台,向大家推荐cs50的服装,并鼓励大家参与新学期讲师和助教的竞选。接下来,放了一部小电影——“网络勇士”,阐述互联网的工作原理。然后用一个视频游戏“CS50 Shuttle”吸引大家的眼球,并详细讲解了该游戏的制作过程,主要涉及到Google Earth API和Google Maps API,进一步加深大家对JavaScript的理解。

[第20课] 总结与知识问答

主题:首先感谢了所有的助教和工作人员,接下来做了一个查找游戏。介绍了在CS50课程之后的一些相关课程的选择。然后展示了同学们做的比较好的一些作品并颁发奖品。大概回顾了这个学期学过的内容。介绍了CS50展览会的情况。最后举行了一个知识问答游戏、回顾了之前的一些知识问题。

哈佛大学公开课:计算机科学cs50

学校: 哈佛大学

讲师: David J. Malan

集数: 20

授课语言: 英文

类型: 国际名校公开课 计算机

课程简介: "CS50是哈佛的一门计算机科学的导论性的课程,内容包括基本的计算机知识以及基础算法,常见的编程语言等等,还会探讨最新的计算机科学领域的成果,课程发散性思维强。CS50课程的讲课形式让人耳目一新,真正做到了“快乐学习”。