名校公开课 / 斯坦福 / 经典

编程方法学

Programming MethodologyCS106A斯坦福2008 (SEE)免费
KarelJava面向对象图形编程数组

这门课学什么

斯坦福的第一门编程课(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. 1
    课程导论与为何从 Karel 开始Course Introduction and Why Karel

    介绍课程安排、评分和荣誉守则。说明为什么先用 Karel 机器人入门。

  2. 2
    Karel 机器人:指令、方法与控制流Karel the Robot: Commands, Methods and Control Flow

    讲 Karel 的基本指令和程序语法。引入方法定义、for 循环、while 循环和 if 条件。

  3. 3
    Karel 中的分解与程序风格Decomposition and Style in Karel

    讲注释、前置条件和后置条件。用 DoubleBeepers 和 CleanUpKarel 例子练习把问题分解成方法。

  4. 4
    从 Karel 到 Java:类、对象与第一个程序From Karel to Java: Classes, Objects and First Programs

    回顾计算史和编译过程。介绍 Java 的继承和 acm.program 类层次,写出第一个控制台程序和图形程序。

  5. 5
    变量、数据类型与图形对象Variables, Types and Graphics Objects

    讲变量、基本类型和对象变量。用 GObject 系列类在画布上画几何图形,并引入表达式和运算符。

  6. 6
    运算符、布尔值与控制语句Operators, Booleans and Control Statements

    讲整数除法、优先级、类型转换和常量。讲布尔表达式、短路求值、变量作用域、if、switch、for 和 while。

  7. 7
    循环与方法Loops and Methods

    讲「循环半次」问题,比较 for 和 while。用棋盘和阶乘例子讲方法的定义和返回值。

  8. 8
    参数传递、信息隐藏与随机数Parameters, Information Hiding and Random Numbers

    讲 void 方法、参数传递,以及实例变量和局部变量的区别。用 RandomGenerator 写掷骰子程序。

  9. 9
    编写自己的类Writing Your Own Classes

    讲 public 与 private、构造方法和 this。说明对象按引用传递,并介绍类变量和 JavaDoc。

  10. 10
    继承与 acm.graphics 图形库Inheritance and the acm.graphics Package

    讲扩展类和覆盖方法。介绍 GCanvas、GObject 的通用方法和接口,并写弹跳小球例子。

  11. 11
    更多图形类与事件驱动程序More Graphics Classes and Event-Driven Programs

    讲 GImage、GPolygon 和 GCompound。引入鼠标和键盘事件,并写一个 UFO 小游戏。

  12. 12
    字符与字符串Characters and Strings

    讲枚举、char 类型、ASCII 与 Unicode。讲字符运算和 String 的基本操作。

  13. 13
    字符串处理与加密String Processing and Encryption

    讲分词器(tokenizer)和字符串遍历。用简单密码的例子练习字符串变换。

  14. 14
    内存模型与指针Memory and Pointers

    讲不同变量存放在内存的哪个区域。用指针视角解释对象引用,并播放 Binky 指针动画。

  15. 15
    引用、包装类、文件与异常References, Wrapper Classes, Files and Exceptions

    解释对象为什么按引用传递,并介绍包装类。讲文件读写和异常处理。

  16. 16
    数组Arrays

    讲数组的创建、实际大小与有效大小,以及数组作为参数。初步引入 ArrayList。

  17. 17
    多维数组与 ArrayListMulti-dimensional Arrays and ArrayList

    讲二维数组和 ArrayList 的常用方法。用灰度图像例子练习二维数组。

  18. 18
    数组与 ArrayList 的比较;调试Arrays vs. ArrayList; Debugging

    比较数组和 ArrayList 的优缺点。介绍调试思路和 Eclipse 调试器。

  19. 19
    接口、HashMap 与迭代器Interfaces, HashMap and Iterators

    讲接口的实现方式和 HashMap 的用法。介绍集合类层次和迭代器。

  20. 20
    图形界面与交互组件GUIs and Interactors

    介绍 Swing 交互组件和窗口区域。写一个可交互的画脸程序。

  21. 21
    监听器、文本框与布局Listeners, Text Fields and Layouts

    复习监听器的两种写法。用温度转换器例子讲文本框和布局。

  22. 22
    组件、容器与 NameSurfer 作业Components, Containers and the NameSurfer Assignment

    介绍下一个作业 NameSurfer。用 MusicShop 例子讲组件监听。

  23. 23
    查找、排序与算法效率Searching, Sorting and Algorithmic Efficiency

    比较线性查找和二分查找。讲选择排序和基数排序(radix sort),初步讨论效率。

  24. 24
    管理大量数据的程序设计:FlyTunesDesigning Programs for Large Data: FlyTunes

    讲大数据量程序的设计原则和集合类方法。用在线音乐店 FlyTunes 例子设计 Song 和 Album 类。

  25. 25
    社交网络与并发Social Networks and Concurrency

    介绍 FacePamphlet 作业的社交网络模型和六度分隔。讲线程、Runnable 接口和线程间共享数据。

  26. 26
    标准 Java 库、JAR 包与 AppletStandard Java Libraries, JAR Files and Applets

    讲怎样不依赖 ACM 库写标准 Java 程序。讲打包 JAR 文件、制作 Applet 和继续学 Java 的资源。

  27. 27
    CS106A 之后的路Life After CS106A

    介绍计算机专业和其他可选专业。讨论学完本课之后可以继续学什么。

  28. 28
    图形竞赛与期末复习Graphics Contest and Final Review

    展示图形竞赛获奖作品。讲两道期末样题,并总结全课。

斯坦福的其他经典课