计算机科学:有目的的编程
这门课学什么
这是普林斯顿计算机入门课 COS 126 的前半部分。课程用 Java 和科学计算例子讲编程:数据类型、循环、数组、函数、递归、性能分析和面向对象。共 10 个单元。
内容摘要
这门课是普林斯顿入门课 COS 126 的前半部分,用 Java 教零基础学生编程。它把编程当作解决科学和工程问题的工具,例子来自物理模拟、数字音频、图像处理和数据可视化。课程对应教材《计算机科学:跨学科方法》(Computer Science: An Interdisciplinary Approach)的前 3 章。
全课 10 讲,分 3 个阶段。第 1 阶段是第 1–4 讲,讲基本语法:数据类型、条件与循环、数组和输入输出。第 2 阶段是第 5–7 讲,讲怎样组织程序:函数与库、递归,以及用实验和数学模型分析性能。第 3 阶段是第 8–10 讲,讲数据抽象:先使用现成的数据类型,再自己创建数据类型,最后把 Java 放到编程语言的大图景里比较。
每讲配 1 个测验和 1 个编程作业。编程作业自动评分,多数预计约 8 小时。题目从 Hello World 开始,逐步做到递归绘图、性能实验和自定义数据类型。最后一个作业是条形图竞赛动画(Bar Chart Racer),把文件输入、数据类型和绘图结合起来。
学完以后,学生能用 Java 写出几百行的完整程序,能用标准输入输出和绘图库做数据处理和可视化,能估算程序的运行时间,并能设计简单的类。后续课程 Algorithms, Theory, and Machines 接着讲算法、计算理论和计算机硬件。
讲师是塞奇威克(Robert Sedgewick)和韦恩(Kevin Wayne)。讲课节奏紧凑,以短程序为中心。每讲都先给出一个能跑的小程序,再说明它用到的语言特性,最后给出可选的延伸材料。
为什么值得学
课程把编程当作做科学的工具来教,不是语言教程。零基础可以学。
课程信息
- 学校
- 普林斯顿(Princeton)
- 课程号
- COS 126
- 讲师
- 罗伯特·塞奇威克(Robert Sedgewick)、凯文·韦恩(Kevin Wayne)
- 学期
- self-paced
- 平台
- Coursera
- 费用
- 免费
- 难度
- 入门
- 学时
- 约 2 个月 × 每周 10 小时
- 先修
- 无。
- 材料
- 视频、幻灯片、作业、教材
- 许可证
- 未注明
课程大纲 · 共 10 节
大纲依据:Coursera 模块列表(Lecture 1–10,每讲一个模块;结构取自 api.coursera.org onDemandCourseMaterials.v2 与课程页)(查看原始页面 ↗)
- 1基本编程概念Basic Programming Concepts
讲为什么要学编程、Java 程序的开发流程、内置数据类型和类型转换。作业是 Hello World 一类入门练习。
- 2条件与循环Conditionals and Loops
讲 if、while、for 语句和嵌套结构,并介绍调试方法。
- 3数组Arrays
讲一维数组的基本用法、典型的数组处理代码和二维数组。
- 4输入与输出Input and Output
讲标准输入输出和标准绘图库,用它们画分形图形和做动画。
- 5函数与库Functions and Libraries
讲静态方法和模块化编程,案例是数字音频合成和高斯分布函数库。
- 6递归Recursion
从标尺函数和汉诺塔讲起,再讲递归绘图、指数级重复计算的避免方法和动态规划。
- 7性能Performance
用实验测量运行时间,再建立数学模型,并介绍倍率实验法(doubling method)。
- 8抽象数据类型Abstract Data Types
讲如何使用现成的数据类型,例子是颜色、图像处理和字符串处理。
- 9创建数据类型Creating Data Types
讲实例变量、构造函数、实例方法和测试用例,例子是点电荷、海龟绘图和复数。
- 10编程语言Programming Languages
比较流行的编程语言,讲 Java 的定位、面向对象、类型检查和函数式编程。最后一个作业是条形图竞赛动画。
普林斯顿的其他经典课
- 算法(上) · Algorithms, Part I
- 算法(下) · Algorithms, Part II
- 计算机科学:算法、理论与机器 · Computer Science: Algorithms, Theory, and Machines
- 解析组合学 · Analytic Combinatorics
- 算法分析 · Analysis of Algorithms
- 比特币与加密货币技术 · Bitcoin and Cryptocurrency Technologies