这本书的适用范围可以从初学者到有经验的程序员再到项目经理,作为一本偏向理论与思想的书,书中不可避免有些假大空的地方,再加上作者写完本书的时间还在1999年,书中的很多方法与标准放在今天也已不再实用。但这些都不能掩盖它的优秀之处,作者曾在本书完成十年后说过,如果这本书是放在现在编写,1999年的那些通用开发原则,在2009年同样有效,假设我们今天才写这本书,会与什么不同吗?表面上可能会有些不同,我们可能会采用不同的编程语言和技术给出不同的案例,但这本书的本质不会变,因为软件是人写的,优秀的程序员都会采用务实和实践的方法,知道的变化越多,掌握事物的基本原则就越重要。所以我也很有幸能通过这本书来纠正自己的一些不良习惯和掌握更好的方法,之后注意在工作的任何方面都需要注重一些基本的原则。看到自己犯过的错误,才让人更相信这是一本经得起时间沉淀的好书。
贯彻全书的一个原则是DRY(Don‘t Repeat Yourself)原则,这也是每个优秀的开发人员必须要遵循的规范,编码过程中任何地方都不要重复,因为重复暂时节省的时间将会给以后的维护使用带来巨大的麻烦,如果发现代码有重复或者违反正交性等原则的地方要立刻找机会重构。这样才能够拥有更快、更好、更强健、更优雅的代码。
然后是关于文档和测试,看过一个段子这样说的,一个程序员最讨厌的事情有两件,一个是别人写代码不写文档,另一个是别人让自己写文档。从这可以看出文档和测试一直是程序员的最大的敌人之一,我个人在这方面习惯也不是很好,虽然会去写文档,但总是觉得编写文档和单元测试集成测试等会影响自己的产出,但在时间允许的情况下这才是对项目最大的负责,也希望每个团队的管理员都能更有先见之明,不要太过于压缩开发阶段的时间,这样才有助于编写更好的文档和单元测试,才会在后面的阶段更省时省力。
耦合这个词基本在我的职业生涯中每天都能听到,一个好的程序一定是低耦合的,这本书提出了函数的德墨忒尔法则帮我们更好的界定耦合的边界,怎样编写低耦合的代码,更难能可贵的是这本书不仅仅描述了一般的代码耦合,还花了很大笔墨解释了时间耦合,很多时候一个业务的实现没有必要一定是线性的,它可以是并行的,这在适用的情形下往往能在提高用户体验的同时还能降低系统的并发压力。
另一个很重要的原则是不要随意你不熟悉的框架和工具,现如今各种框架的功能越来越强,但与此同时各种底层的实现也隐藏的越来越深。如果使用了不熟悉的产品,却不去理解它的底层实现,项目很可能是不受控制的,很多时候我们没有能力去维护它,在碰到问题需要调试解决的时候会碰到很大的困难。
在工作中我们总会遇到难以解决的难题,本书给我们提供的一个思路是重要的不是你在盒子里思考,还是在盒子外面思考,而在于找到盒子-确定真正的约束,详细一点的解释就是面对棘手的问题时,列出所有在你面前的可能途径,不要排除任何东西,不管它听起来有多无用或愚蠢。然后逐一检查每一项,并解释为何不能采用某个特定的途径。有时候你会发现,自己在处理的问题似乎比你以为的难得多,这种时候很可能你已经走错了路,你需要回退一步,问问自己有没有更容易的解决办法。
最后一点是关于我们的傲慢与偏见,注重实效的程序员不会逃避责任。相反我们需要乐于接受挑战,如果我们负责一段设计,或是一段代码,我们都是在做引以为豪的工作。过去时代的手工艺人为在自己的作品上签名而自豪,我们也应该如此,我们希望自己的名字能成为质量的保障,别人看见我们名字的时候就能知道它是可靠,用心编写的,测试过的和有文档的。