这本书名声很大,一些大牛推崇备至。但是阅读下来需要相当的知识背景。我坚持阅读了前六章,有大量看不懂的名词,且该书内容主要偏向于操作系统的开发(上古时代操作系统),对个人的帮助很小,读完也是很快忘掉的。不过总的来说还是有些收获。
- 即使程序员写什么产品、功能,是要受到相当的限制的,但是编程是本身也是有创造性的工作。要充分享受其中的乐趣。那么作为系统设计者,在描述某个功能时,需要知道至少一种实现方法,但是不应该写在规范里,来剥夺程序员自己决定怎么解决问题的乐趣。设计者为什么要知道至少一种实现方法呢?因为可以避免提出类似于“需要手机壳跟着手机桌面壁纸换颜色”这种设计。
- 当设计者提出的功能实现,在他本人看来很简单,并且是次要的时候。但是遭到了程序员的强烈反对,说明这个功能的实现难度,需要的工作量一定是超出设计者设想的。此时放弃固执己见,是明智的。
- 一个产品应该有设计一致性(consistency),如果法国的兰斯大教堂,经历了8代设计师,依然保持了自己一贯设计风格。在显示了上帝的荣耀的同时,也体现了他拯救沉醉在自我骄傲中的人们的力量。那么一个软件产品,设计的一致性意味着易用性,尤其贯彻到底的内在逻辑。即便有特别优秀的局部设计,如果跟整体一致性冲突,也应该放弃。如果出现太多这样的优秀设计,那么应该考虑重新进行整个设计工作。一致性的保证,靠减少做决策的人是很有效的,在这里精英独裁,好过民主政治。
- 最后就是关于人月神话神话这个数名当中的人月二字的理解了。编程工作不同于收割水稻、送快递等工作的最大特征是它需要同事之间的大量沟通,并且各分工有紧密的次序关系。这就意味着一个人收割一个农场要两个月,两个人只要一个月这种计算方式,在编程工作中行不通。这也是编程工作中项目进度难以估量的重要原因。所以当发现项目进度落后时,加派人手这一自然反应,也是行不通的。不仅如此,还会降低效率。因为新加派的人手是需要培训的,即使是熟手,他也要时间去了解整个项目(这点可能在作者描述的操作系统开发这样庞大的工程中特别明显),也需要人去做培训。