操作系统(英文班)的课程作业是魔改 Android (Linux) 内核。事实上,整个课程中和 Linux 相关的内容并不多,在实验方面也缺乏指导。一些同学之前根本没有使用过 *nix 系统,在实验环境配置的过程中碰到了很多问题。而实验的内容需要大量阅读 Linux 内核的源代码,在课程之中也缺乏这方面的指导。总的来说,这个项目对于没有接触过内核开发的同学也有一定难度,并且容易写出不安全的代码。
Matt Might 在 What every computer science major should know 中谈到如何学体系结构时,认为 “Computer scientists should understand a computer from the transistors up.” 然而,在我看来,CS 的专业课教学距离这个目标还有一定距离。之前也提到了 CS 一些专业课的现状。在此我给出不同阶段的建议。
基本认识计算机系统 大一上学期可以尝试自学 nand2tetris。这门课程难度不大,硬件部分不需要太多的前序知识,软件部分用基本的 C++ 也足够了。在这门课程中,学生需要从电路开始搭建各种硬件模块,组成 CPU;接着手写汇编器、VM 和编译器,在 CPU 上运行自己写的程序。在这一过程中,学生可以了解如何从晶体管一步步造出计算机,对计算机系统有基本的认识。