传世经典
如果在网上征集软件开发经典书单,《程序员修炼之道》应该会是出现频率最高的书目之一。因为它不局限于特定语言、框架、技术,而是凭借更深层、普遍的思想和理念,持续地给不同领域的软件开发者提供启发。唯一的缺憾是,这本书出版的年份太早了(中文版2004年,影印版2003年,原版1999年)。
得知该书的第二版(20周年版)面世,简直是一件值得喜大普奔的好消息。立刻下单,第一时间通读,读完之后,我忍不住借用 Top Gear 评价 Ford Fiesta ST 的词来形容这本书:All Time Classic,传世经典。
与第一版相比,第二版中与时俱进地更新了许多——
比如第一版中遍布各处的 DRY 原则和正交性,在新版中由更深层的理念统合在了一起,那就是 ETC 原则(Easier To Change,更容易变更)。由此引出“提示14:优秀的设计比糟糕的设计更容易变更”。也许对于编程初学者来说,这一条原则似乎没有给出太多有用的指导。但是,如果带着这个原则去学习软件设计方法,或者结合已有的项目经验来回顾,会有醍醐灌顶之感:为什么要 DRY 或 KISS,为什么要正交或者解耦,为什么要遵循 SOLID,为什么要提出分层架构或 DDD,为什么命名很重要——所有这些设计原则,无非都是为了使软件更容易变更。
比如新版中的继承税一节,反思了面向对象设计中被广泛使用的继承,如果被不合理地滥用,会带来什么不良后果,并给出了更推荐的方案。
比如关于测试,作者指出了测试的好处不止在于运行测试,更在于对测试的思考会带来更好的设计。同时作者也指出了 TDD 的缺点。经过这样的对比反思,会对测试的理解更加深入。
比如在务实的入门套件一节,作者总结出了支撑项目的三剑客:版本控制、回归测试、完全自动化。在 Git、自动化测试、CI 已被广泛认知的今天,初看作者似乎被没有给出新的信息,然而当这三个要素被总结为入门套件,仔细一想,会发现项目交付的痛苦程度,基本上正是与这三要素的实现程度成反比。
除此之外,作者还谈及了需求之坑、敏捷的本质、项目与团队的管理、如何让用户满意、软件开发者的伦理等问题,以及对于程序员来说最重要的几样东西:态度、学习、交流。
richyzhang 的短评说“这属于程序员职业技能关注点的比较轻松的一种读物。好处是各方面都点到了,而且确实基本上是过去20年最被主流接受的做法;坏处是都是点到即止,已经明白的人看了没什么用处,初次接触的人可能还要去补充看其他很多东西。”私以为中肯。本书的优点在于面面俱到,并且轻松易读。但这本书当然不可替代各方面的深度书籍,比如设计模式、DDD、敏捷软件开发或者并发模型相关的专著。如果以武侠作比喻,这本书好比心法,带着书中给予的思想和眼光去学习各门各派的方法理念,更容易领会各家的精妙和不足。
相关资料:
官网:https://pragprog.com/book/tpp20/the-pragmatic-programmer-20th-anniversary-edition
译者云风的博客——易于修改原则:https://blog.codingnow.com/2019/11/etc.html
一段关于团队正交性的废稿(很可惜删掉了):https://book.douban.com/annotation/95080672/