CSE/CS102:计算机组成与系统,Spring 2023

最新通知


课程介绍

计算机科学教学的前两年,重点是训练你的编程方法和抽象思维能力。在斯坦福大学成功的教学经验中,这两个任务分别由 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++ 基本语法
  • 会用递归思维解决问题
  • 理解数据抽象并能够实现经典的抽象数据类型(链表、栈、堆、集合、映射)
  • 理解并能够实现经典算法(搜索、排序、哈希)

作为一名程序员,你也应该具备良好的软件工程能力,能够编写组织良好、可读性强的代码。

网友推荐

授课讲师