这本书描述了一些程序员编写大型项目时所应该遵循的最基本的原则和可以使用的最基本的工具。它没有描述某一种特定的语言、特定的算法,也没有推荐一种编程方法作为万灵药,而是介绍了实用主义的思想,并介绍了一整套方法论帮助程序员与团体避免错误、避免浪费无谓的时间,更有效地开发程序。
注重实效的哲学
我的源码让猫给吃了:出现错误时,要诚实,不要推诿或者找借口。要提供各种可能的解决方案与后果并与他人沟通,而不是提供借口。
软件的熵:这是著名的破窗户原理。项目中一个小的、无人料理的问题可能带来后续编码时的懈怠,从而造成更大的问题。不要容忍任何小的错误,解决它或至少打上TODO标签。
石头汤与煮青蛙:催生改变有些时候是有用的,但仅当团体已经死气沉沉、无法通过常规方式作出改变时。当一个团体活力旺盛时,不应用欺骗式的方式催生改变,而应该对所有改变保持警觉,并保持良好的沟通,保证大家时刻都知道自己在做什么。这同样适用于个人。
足够好的软件:完美的软件是不存在的,幸运的是我们只需要制作足够好的软件。判断软件是否“足够好”时要让用户需求加入判断。
你的知识资产:cs行业变化迅速,所以不应止步不前。只有对知识投资才能有回报。要定期学习新的东西,并学习多元化的知识、管理风险。
交流:交流非常有用,但要学会高效交流。注意这些问题:想清楚自己要说什么,了解自己的听众,选择时机、选择风格,让文档保持美观并让用户加入文档的编写,也要倾听并回应他人。
注重实效的途径
重复的危害:如果某个事物在代码中重复多次,就可能会在维护过程中带来问题,因为改动了一处而忘记改动另一处造成自相矛盾。这加大了维护难度。
正交性:引入第三方库时可能会破坏正交性,要小心不要使第三方库对整体代码造成改动。如果第三方库的接口存在问题,可以将第三方库用适合自己代码的方式进行封装。
可撤销性:许多需求会改变,许多政策会改变,所以编写项目时任何决策都应该可以撤销。项目结构应该保持灵活,不要依赖某个已有决策。
曳光弹:这个比喻有点晦涩。作者介绍了一种方法,编码之初先搭建一个大致框架,然后慢慢填充编码。这样既可以方便编码,又可以随时与用户沟通项目是否符合他们的需求。
领域语言:任何领域都有自己的语言,如用于配制的语言,用于文档的语言,用于描述需求的语言。
估算:要学会估算。估算的方法在于限定问题的情景范围,对系统建立模型,对模块进行拆分并分别估算,抹去可忽略不计的量。估算不需要过于精确,但需要细心