第一次读并没有觉得这是一本多好的书

记得第一次接触 Clean 系列,是在我读研期间。说实话,第一次读并没有觉得这是一本多好的书。但在工作一段时间之后,由于具备了一定的实践经验,再回过头来品读一番,才顿悟书中内容之妙,这大概就是成长的必经之路吧。当我们没有经历过挫折的时候,对于前辈的指点,总是很难感同身受,甚至觉得根本不对。但当我们真正遇到相同问题的时候,才发现前人的经验确实妙不可言。

打开网易新闻 查看更多图片

作为过来人,现在我强烈推荐大家拥有一套 Clean 系列,因为这个系列不仅介绍了关于软件开发过程中的各种优秀实践案例,让我们知道整洁代码、整洁架构给我们带来的好处,以及如何保持整洁的秘诀;而且对于优秀程序员应该具备何种职业素养,并指导我们做出软件的底层思维模式,更有着极佳的指导意义。也许随着社会与技术的发展,有些案例慢慢不再适用,但职业素养和思维模式会伴随我们一生,这些底层逻辑将一直指导我们未来的每一处设计与实践。

打开网易新闻 查看更多图片

介绍了那么多过去的内容,再来谈谈Bob大叔最近的这本新书《匠艺整洁之道》。在刚看到书名的时候,一时半会儿还真猜不出这本书会讲什么,所以在拿到样章那一刻,我就直奔书中主题,一探究竟!这本书的第一章名为“匠艺”,作者认为要做好某件事的本质是需要良好的指导与大量的经验。但是,在如今的软件行业中,有很多程序员并不会做太久,所以他们缺少足够的实践体验和经验沉淀。同时,每隔 5 年程序员的数量就会翻一番,所以优秀程序员的比例会持续走低。当优秀程序员越来越少,保障软件产品的质量就会越来越难。所以,作者在接下来的章节中分别阐述了决定技艺水平的三个要素:纪律、标准和职业操守,以帮助开发者与管理者改变与提高团队的工作方式,最大限度地生产出高质量的软件产品。从这三部分的内容划分来看,这本书不仅仅适用于一线的开发者,对于管理者也是非常有帮助的。如果你对于目前的开发任务或团队的工作方式不太满意,或许可以通过这本书获取一些新的启发。

听说这本书将是鲍勃大叔的封山之作,所以这本书的上市,我一定会将其收入囊中,集齐 Clean 系列。虽然无法召唤神龙,但如之前的 Clean 系列图书一样,当我遇到困惑的时候,也会再翻出来寻找一些前人的启发。如果你跟我一样,打算在软件行业奋斗一生,那么这样的书,推荐你也拥有一本。

从“关注技术”到“关注人

鲍勃大叔提出,既然现代世界运行于软件之上,软件开发者就要承担起维护世界正常运行的重大责任。这意味着软件开发者必须掌握足够多的技能,遵守足够严格的纪律,追求足够高的职业操守标准,方能达到社会对他们的期望。他提炼了前面多本著作的精髓,加以深究、凝练和升华,推出这本集大成的 Clean 系列封山之作。

回顾 Clean 系列图书的主题,可以很清楚地看到从“关注技术”到“关注人”的发展脉络。

就像是老拳师写拳谱,第一本都是讲招式。过了一阵子,老拳师发现徒弟们招式练得挺熟,但内功没跟上,“练拳不练功,到老一场空”,于是赶紧再写一本讲内功的。又过了一阵子,老拳师发现徒弟们一上擂台就不懂如何审时度势选择攻击方案,又赶紧写一本讲架构的。如此这般勿勿十年,老拳师突然发现,拳谱传来传去,很多人练得似是而非,拳打歪了,心术也不见得很正。如果你是这位老拳师,面对如此现状,会是什么心情?我想,大概也会像鲍勃大叔一般,既悲观又不甘吧。

敏捷软件开发成为主流之后,同时也成了有些人借以牟利和乱来的“幌 子”。当所有人都在谈敏捷,而吹捧与批评都没谈到点子上时,正本清源就成了当务之急。所以,最近两年面世的敏捷书,不约而同集中在一个主题:正本清源。敏捷既是手段,也是目的。正如鲍勃大叔在本书中一再强调的:软件最根本的特点就是“柔软”。好软件不但具备能够与时俱进修改和扩展的灵活性,而且更具备以较低成本修改和扩展的可能性。软件本身如果敏捷,那么实现和修改软件的方式必须也必然够敏捷。

本书第Ⅰ部分和第Ⅱ部分结合多个代码示例,展示了如何利用 TDD 敏捷地写出敏捷的软件,同时阐述了验收测试、协同编程等其他敏捷手段的重要性与一般实施手段。不可避免地,作者还花费相当多篇幅讨论软件设计方案问题。我很愿意重点阅读这部分。此外,一些具体的测试策略也颇具可读性。

第Ⅲ部分看似对程序员的日常工作没什么太大帮助,但这部分值得好好阅读和思考。作者提出的程序员十条承诺(或谓“誓言”)浅白易懂,却不易遵守。能谨守这些承诺的程序员,一定是我特别愿意共事的好伙伴。

打开网易新闻 查看更多图片

程序员誓言

为捍卫和维护计算机程序员职业的荣誉,我承诺,尽我的能力和判断力:

  1. 我不写有害的代码。

  2. 我生产的代码将永远是我最好的作品。我不会故意让那些在行为或结构上有缺陷的代码累积起来。

  3. 我将在每次发布时提供快速、确定和可重复的证据,证明代码的每个元素都能正常工作。

  4. 我将经常进行小规模的发布,不妨碍其他人的进展。

  5. 我将无畏地、毫不留情地利用一切机会改进我的创作。我绝不让它变更差。

  6. 我将尽我所能尽可能地提高自己和他人的生产力。我不会做任何降低生产力的事。

  7. 我将一直确保其他人能够补上我的位置,我也能够为其他人补位。

  8. 我将给出在数量级和精准度上都靠谱的预估。我不会做出没有把握的承诺。

  9. 如果我的程序员同事拥有足够的操守、标准、纪律和技能,就能赢得我的尊重。任何其他的属性或特征都不会成为我尊重程序员同事的因素。

  10. 我永远不会停止学习和改进我的技艺。