CSE/CS102:计算机组成与系统,Spring 2023
最新通知
- 最新课程更新:话题 4. 泛型编程 Generic C
- 最新课程更新:话题 3. 栈和堆 Stack and Heap [结构体] [设计 stack 抽象类型]
- 最新课程更新:话题 2. 数组和指针 Arrays and Pointers [以数组观点学习 string.h 接口] [指针新解] [使用 GDB 探究指针和数组]
- 最新课程更新:话题 1. 数据的表示 Data Representation [位运算及其应用]
- 最新课程更新:话题 0. 开发环境 Linux & C [远程开发工作流] [C 语言及 GCC 编译] [使用 make 构建 C 程序] [从 C++ 到 C 之抽象思维]
-
新的一年,祝大家学业有成,工作顺利,健康平安每一天。
课程介绍
计算机科学教学的前两年,重点是训练你的编程方法和抽象思维能力。在斯坦福大学成功的教学经验中,这两个任务分别由 CS106A 和 CS106B 两门课完成。在 StickMind 课程规划中,这两个任务由 CS101 课程完成,选用 C++ 编程语言。未来也可能会推出现代 C 语言版本的 CS101,敬请期待。
编程方法学的重点是将程序写对,能够利用逐步求精等基本策略,将稍大一些的程序进行分解。这类课程一般会设置一些小游戏或者文本处理,只要求程序能够正确运行即可。抽象思维的重点则是将程序写好,利用一些经典的数据结构和算法,你可以解决一些更为复杂的问题。这类课程不仅要求你把程序写对,更要求你能够高效地解决问题。
经过这些前置课程的训练,你基本能够掌握以下一些能力:
- 了解 C-like 编程语言的基本语法,如 Python/C++/Java 等
- 会用递归思维解决问题
- 理解数据抽象并能够实现经典的抽象数据类型(链表、栈、堆、集合、映射)
- 理解并能够实现经典算法(搜索、排序、回溯、哈希)
作为一名程序员,你也应该具备良好的软件工程能力,能够编写组织良好、可读性强的代码。
本课程参考了斯坦福 CS107,该类课程在计算机科学教学中充当了承上启下的作用。这些课程一般以“计算机组成原理”或“计算机系统基础”冠名。前者偏重硬件,会涉及到 CPU 的内部细节,甚至会要求你设计一个 CPU 模拟器;而后者则偏重软件,以软件开发者的视角抽象看待硬件,不会在硬件层面花费太多精力。本课程倾向于后者,继续提升你的编程技术,在广度和深度上拓展你的编程经验。
本课程将从 C 语言开始,逐步深入到底层汇编语言,一步步带你梳理计算机的运行机制。当完全理解计算机如何执行程序并操作数据时,你将会成为一名更高效的程序员,特别是在处理调试问题、性能优化、内存管理以及程序健壮性方面。只有理解程序是如何运行的,你才能更好地理解 Python/C++/Java 这些高级语言的底层执行逻辑,才能更快地学习其他编程语言进行开发。
课程目标
本课程的目标是让学生掌握
- 以复杂的内存和指针方式编写 C 程序
- 对地址空间以及 C 程序的编译/运行时行为,能够建立一个准确的模型
获得以下能力
- 把 C 语言转换到 x86-64 汇编语言
- 编写适配硬件算术局限性的程序
- 识别程序瓶颈并提高运行时性能
- 在 Unix 环境中开发程序
贯穿整个课程,最终会带你揭开计算机基础架构的奥秘。
课程安排
本课程主要涉及以下几个主题:
- Unix/Linux、命令行工具与 C 语言
- 编写、测试、调试与优化
- 话题 1:位和字节
- 话题 2:字符和字符串
- 话题 3:指针、栈和堆
- 话题 4:泛型编程
- 话题 5:汇编语言
- 话题 6:堆分配器
推荐教材
- 《深入理解计算机系统》,第 3 版
- 《C 程序设计语言》,第 2 版
面向对象
学完《CSE/CS101:C++ 编程抽象思维》或具备以下能力的同学:
- 了解 C++ 基本语法
- 会用递归思维解决问题
- 理解数据抽象并能够实现经典的抽象数据类型(链表、栈、堆、集合、映射)
- 理解并能够实现经典算法(搜索、排序、哈希)
作为一名程序员,你也应该具备良好的软件工程能力,能够编写组织良好、可读性强的代码。
网友推荐
- 推荐 1:斯坦福《编程范式》是 Linux 后端服务器和分布式系统开发的入门课
- 推荐 2:这门课激发了对 C 语言、汇编等程序语言底层运行机制的兴趣
- 推荐 3:如果能把 CS106A/B,CS107 全部搞懂,你的编程能力就超过知乎上大部分程序员了