深入理解计算机系统 第 27 课 总结
为什么 15213 在 CMU 是当之无愧的第一神课?我们需要怎么样的教育?这门课都给了我太多启发。
首先要说的是,这门课的课本,也就是《深入理解计算机系统》(CSAPP),我是之前大致阅读过一次的,有一些笔记,但是课后的几个 lab 都没有具体实现,很多概念都属于一知半解。
这个学期在具体学习的过程中,在不断的尝试中算是彻底理解了书中的大部分概念。小至数据在内存的存放以及程序的执行机制,大到 web 服务器的编写以及并行程序的设计,都有了更加透彻的认知。
课程安排不算轻松,但是因为是课本作者给我们讲课(自己写的课本所以信手拈来),基本属于跳一跳就够得着的状态,再加上国外的学期普遍比较短,强弩未(wei)末(mo),仍能一战。
因为老师本身对于计算机系统的理解非常深入,所以课时和内容循序渐进,更可贵的是每年都会更新最新的发展,不会给人感觉是在一直吃老本。再加上完善且规范的试验和测试平台,能够尽可能利用各种资源让更多的学生享受到高质量的教学。
这里我们简单回顾一下整体的学习脉络:先从数据的表示开始,自然而然引出用汇编描述的计算机基本运行的方式,从控制流、过程调用到跳转等高级话题。了解了计算机运行的模式,据此给出一些程序设计的技巧作为过渡,然后开始涉及诸如内存、编译器、进程、信号、I/O、虚拟内存、动态内存分配等知识。这些东西看起来都非常吓人,但是老师很科学地把握好了『度』,让我们理解基本原理,这样以后想要深入学习可以自己去探索,却不会过早陷入无谓的复杂度。在单机的知识基本完备之后,开始涉及网络、同步、并行编程等高级话题,为后面的学习打下基础。比方说之前学习的 How to Write Fast Code,以及这个学期的 Cloud Computing,都可以在这门课中找到几乎全部的预备知识。
这些都很好,但是不是最好的,最好的部分,在我看来,是通过一门课程,去引导学生往抵抗力最大的路径走。
- 前面几次非常底层的作业,每个人的答案都是自动生成的且不同的,除了弄清楚背后的原理,没有任何捷径可以走
- 所有作业的设置,如果弄清楚了每个重要知识点,加上一点点自己的联想和思考,思路就会非常清晰的,不会出现因为文档或者助教质量而导致的各种问题,也就是说,你在这门课上花的时间,大部分是有价值的
- 知识点不局限于课程大纲,深入浅出,承前启后,无论之后想往哪个方向发展,都可以从中受益
- 期中和期末考试是对日常作业的补充,重要的是理解而非记忆
这种每分每秒都能感受到老师用心的课程,又怎么能不是『神课』呢?
谁不想用最简单的方法获得最强大的能力,但是这又怎么可能。捷径,如果指的是最短的路径,那么也就是梯度上升最快的路径,更是最难的路径。靠什么去走完这段旅程呢?
靠自己。靠自己的思考。靠自己的百折不挠。