在普林斯顿大学有很多课程改变了我,就像COS 318(操作系统课程)。它极有挑战,耗时耗力,但是当我学完后回头想想,我很庆幸我选了这门课。 我当初选择这门课程的时候很犹豫,因为周围的人都这么说:
这门课毫无疑问非常难,但是不妨暂时放下你之前听到的对它的偏见。不学它并不会毁掉你软件工程师的生涯,但是如果你真的学过了它,你将会在很多方面获得启发。我选择操作系统课程之前其实十分讨厌系统底层编程,也很害怕参加这门课程。但是现在来看,我觉得选择它是我做过最正确的决定之一。下面是我认为这门课程对我作为学生,作为软件工程师和作为问题解决者所带来的启发: 我的经验和启发都是基于普林斯顿2013年秋季的COS 318课程来说的,但是这对其他本科操作系统课程也都适用。
1.操作系统课程让我更善于调试代码错误(debug)毫无疑问,在写一个操作系统的时候,我们需要非常非常多的调试。如果你觉得你在算法课上的调试已经够难了,那你可以想想如果两次调试会产生完全不同的结果该是多么令你抓狂。 当你写的操作系统慢慢变得异常复杂了之后,你就不得不去寻找顺手的调试(debug)工具和一套科学合理的调试方法了。 在参加这门课之前,我觉得调试就是随手做一做的事情,根本不是写程序的一个正规环节。以往我调试的方法都是把所有我认为可能出错的地方都修改一遍看看,这是一种毫无技巧可言并且让人感到无聊的过程,我通常称之为“橡胶鸡调试法”(rubber chicken debugging)。在操作系统课程结束之后,调试从一门艺术变成了一门科学。我开始意识到原来存在一种科学省时的方法能够迅速精确地定位错误(bug),并决定应该采用什么样的修复方案。 这种调试方法在其他的课程或者经历中也十分有用。比如,我在Facebook做实习生的时候,我十分接受“亲力亲为”这样的代码工程理念。如果有些部分除了问题,那么就要立刻开始标记记录日志,然后一直记录查看,直到一个地方记录的结果和你所期望的结果出现了不同(这就是错误出现的地方)。这种思维方式只有那种高强度的编程课程,类似操作系统课程,才能给你的。
2.操作系统课程让我的代码更高效操作系统课程突然让我意识到了代码的性能问题。如果这个程序运行很慢,我就会停下来想一下:到底是什么是制约性能的关键因素?CPU?内存?硬盘I/O?理解了这些基础的东西让我在高层次编程的时候让代码更快,更简练。 人们通常都认为操作系统课程只有在底层编程的情况下才会有用。但是事实上并不是这样,只有用C和汇编写过操作系统代码的人才能够更好地驾驭高级语言。 |