编程方法学
这门课学什么
斯坦福的第一门编程课(Java 版)。课程从 Karel 机器人讲起,再讲对象、图形、事件、数组和数据结构。7 个作业多是小游戏,例如打砖块和快艇骰子。
内容摘要
这门课是斯坦福的编程入门课。2008 年版用 Java 授课,共 28 讲,不要求编程基础。主线是先学怎样把问题拆小,再学 Java 语言本身。讲师 Mehran Sahami 讲课节奏轻快,常用现场演示和小游戏做例子。
第 1 阶段(第 1–3 讲)用 Karel 机器人入门。Karel 只有几条指令,学生可以专心练习方法分解和控制流。第 2 阶段(第 4–13 讲)转入 Java:变量、表达式、控制语句、方法和类。这一阶段还讲 acm.graphics 图形库和事件驱动编程,最后讲字符和字符串。
第 3 阶段(第 14–22 讲)讲内存与引用、文件、数组、ArrayList、HashMap 和图形界面组件。第 4 阶段(第 23–28 讲)讲查找与排序、大数据量程序的设计和线程。最后两讲介绍标准 Java 库和学完之后的方向。
课程有 7 个编程作业:Karel、Simple Java、Breakout、Hangman、Yahtzee、NameSurfer、FacePamphlet。多数作业是小游戏或数据可视化程序。另有 9 次小组讨论课练习,以及期中和期末样卷。学完后,你可以独立写几百行的 Java 图形程序,并养成分解问题、写清楚代码的习惯。
为什么值得学
Sahami 的讲法是教零基础学生的范本。作业设计至今被各地入门课借用。
课程信息
- 学校
- 斯坦福(Stanford)
- 课程号
- CS106A
- 讲师
- Mehran Sahami
- 学期
- 2008 (SEE)
- 平台
- Stanford Engineering Everywhere
- 费用
- 免费
- 难度
- 入门
- 学时
- 28 讲
- 先修
- 无。
- 材料
- 视频、讲义、作业、考试、代码
- 许可证
- CC BY-NC-SA 4.0(SEE 站声明)
课程大纲 · 共 28 节
大纲依据:SEE 2008 版讲次列表(28 讲,按每讲 Topics 概括)(查看原始页面 ↗)
- 1课程导论与为何从 Karel 开始Course Introduction and Why Karel
介绍课程安排、评分和荣誉守则。说明为什么先用 Karel 机器人入门。
- 2Karel 机器人:指令、方法与控制流Karel the Robot: Commands, Methods and Control Flow
讲 Karel 的基本指令和程序语法。引入方法定义、for 循环、while 循环和 if 条件。
- 3Karel 中的分解与程序风格Decomposition and Style in Karel
讲注释、前置条件和后置条件。用 DoubleBeepers 和 CleanUpKarel 例子练习把问题分解成方法。
- 4从 Karel 到 Java:类、对象与第一个程序From Karel to Java: Classes, Objects and First Programs
回顾计算史和编译过程。介绍 Java 的继承和 acm.program 类层次,写出第一个控制台程序和图形程序。
- 5变量、数据类型与图形对象Variables, Types and Graphics Objects
讲变量、基本类型和对象变量。用 GObject 系列类在画布上画几何图形,并引入表达式和运算符。
- 6运算符、布尔值与控制语句Operators, Booleans and Control Statements
讲整数除法、优先级、类型转换和常量。讲布尔表达式、短路求值、变量作用域、if、switch、for 和 while。
- 7循环与方法Loops and Methods
讲「循环半次」问题,比较 for 和 while。用棋盘和阶乘例子讲方法的定义和返回值。
- 8参数传递、信息隐藏与随机数Parameters, Information Hiding and Random Numbers
讲 void 方法、参数传递,以及实例变量和局部变量的区别。用 RandomGenerator 写掷骰子程序。
- 9编写自己的类Writing Your Own Classes
讲 public 与 private、构造方法和 this。说明对象按引用传递,并介绍类变量和 JavaDoc。
- 10继承与 acm.graphics 图形库Inheritance and the acm.graphics Package
讲扩展类和覆盖方法。介绍 GCanvas、GObject 的通用方法和接口,并写弹跳小球例子。
- 11更多图形类与事件驱动程序More Graphics Classes and Event-Driven Programs
讲 GImage、GPolygon 和 GCompound。引入鼠标和键盘事件,并写一个 UFO 小游戏。
- 12字符与字符串Characters and Strings
讲枚举、char 类型、ASCII 与 Unicode。讲字符运算和 String 的基本操作。
- 13字符串处理与加密String Processing and Encryption
讲分词器(tokenizer)和字符串遍历。用简单密码的例子练习字符串变换。
- 14内存模型与指针Memory and Pointers
讲不同变量存放在内存的哪个区域。用指针视角解释对象引用,并播放 Binky 指针动画。
- 15引用、包装类、文件与异常References, Wrapper Classes, Files and Exceptions
解释对象为什么按引用传递,并介绍包装类。讲文件读写和异常处理。
- 16数组Arrays
讲数组的创建、实际大小与有效大小,以及数组作为参数。初步引入 ArrayList。
- 17多维数组与 ArrayListMulti-dimensional Arrays and ArrayList
讲二维数组和 ArrayList 的常用方法。用灰度图像例子练习二维数组。
- 18数组与 ArrayList 的比较;调试Arrays vs. ArrayList; Debugging
比较数组和 ArrayList 的优缺点。介绍调试思路和 Eclipse 调试器。
- 19接口、HashMap 与迭代器Interfaces, HashMap and Iterators
讲接口的实现方式和 HashMap 的用法。介绍集合类层次和迭代器。
- 20图形界面与交互组件GUIs and Interactors
介绍 Swing 交互组件和窗口区域。写一个可交互的画脸程序。
- 21监听器、文本框与布局Listeners, Text Fields and Layouts
复习监听器的两种写法。用温度转换器例子讲文本框和布局。
- 22组件、容器与 NameSurfer 作业Components, Containers and the NameSurfer Assignment
介绍下一个作业 NameSurfer。用 MusicShop 例子讲组件监听。
- 23查找、排序与算法效率Searching, Sorting and Algorithmic Efficiency
比较线性查找和二分查找。讲选择排序和基数排序(radix sort),初步讨论效率。
- 24管理大量数据的程序设计:FlyTunesDesigning Programs for Large Data: FlyTunes
讲大数据量程序的设计原则和集合类方法。用在线音乐店 FlyTunes 例子设计 Song 和 Album 类。
- 25社交网络与并发Social Networks and Concurrency
介绍 FacePamphlet 作业的社交网络模型和六度分隔。讲线程、Runnable 接口和线程间共享数据。
- 26标准 Java 库、JAR 包与 AppletStandard Java Libraries, JAR Files and Applets
讲怎样不依赖 ACM 库写标准 Java 程序。讲打包 JAR 文件、制作 Applet 和继续学 Java 的资源。
- 27CS106A 之后的路Life After CS106A
介绍计算机专业和其他可选专业。讨论学完本课之后可以继续学什么。
- 28图形竞赛与期末复习Graphics Contest and Final Review
展示图形竞赛获奖作品。讲两道期末样题,并总结全课。