初次阅读本书令我十分意外。意外之处有两点:
第一,根据作者的介绍,这一系列书按计划至少写到卷6。倘若如此,本系列将成为编程领域的又一部鸿篇巨制。
第二,本书虽然以探讨软件工程、软件开发的一般方法作为主线,但是却以培养优秀的开发者、激发程序员的创造力为最终目标。讲软件工程方法的书有很多,但是意识到激发创造力之重要性的人不多,能够以此为目标去实践的作者更是罕见。
如何培养一位“卓越的程序员”,这个问题就像如何培养一位武林高手一样,是一件复杂而难以言说的庞大话题。以此为目标,总结出一般性的软件方法论相当困难。因为无论从哪个角度描述,总有一些实践中的反例,或者作者知识面触及不到的盲区。更多的技术作者(包括本人),宁可退一步,讲一些具体的经验、知识和技巧,也不敢去讲解一般性的思维方法,或者直接讲解大型软件工程的开发方法。
当然,软件行业始终有这方面的需求,我们需要让新一代开发者具备更广阔的视野,对实际的大型软件工程有更多的了解,以及更全面的技术素养。虽然传统的软件工程理论给了我们一部分答案,但由于软件行业依然是一个新兴的、蓬勃发展的行业,新的编程语言、新的技术方案以及新的硬件平台层出不穷,让传统软件工程理论越来越显得不合时宜。按本书作者的说法,软件工程经常“阻止程序员发挥他们的才能”。
要把这种庞大的问题讲解清楚,不仅需要深厚的技术储备和丰富的大型工程经验,还需要充分的自信与数以年计的耐心。通过本书我们看到,作者已经证明了他的勇气与耐心。
本系列图书本身就是一个“大型工程”,不仅篇幅庞大,而且涉及的知识点和理论十分庞杂。通过目录,可以看出本书内容翔实,重点面面俱到。但作为读者来说,由于自身的技术积累有限,且不同软件领域的侧重点有差异,只能有所侧重地去理解。
在我看来,本书第1部分——个人软件工程,适合细读。特别是作者对“生产力”的解释十分精彩。作者由软件生产力引申出一些讨论,以事实为基础,让读者快速了解现实软件开发中的各种问题。进一步,本书介绍了实践中正在应用的多种软件开发模型,以及它们的优缺点。这些内容对于读者建立软件工程的观念很有帮助。
本书第2部分——UML,贴近软件工程实践。由于本人从事游戏开发行业,UML的应用经验很少,能力有限,无法做出准确的评价。
本书第3部分——文档,在我个人看来,这是本书最有价值的一部分内容。文档并不是设计师和产品经理的专利,程序员其实更有必要掌握编写文档的技术。从一定程度上讲,文档就是不能运行的代码。文档的结构是否清晰、详略是否得当、描述是否准确,能在很大程度上表现出产品设计水平,进而决定了软件开发的成败。软件开发者可以遵循书中所讲的要点,参考书中的文档实例,去为自己的项目编写产品文档或技术文档,切身体会书中的精华。而且你会发现,一份思路清晰的文档,与优秀的代码距离非常近。
本书第3部分也适合所有置身于软件工程中的人员阅读,包括但不限于设计师、产品经理、测试人员或运营人员。阅读第3部分有助于建立良好的文档编写观念,而文档是软件工程中高效协作的最佳方式之一。
阅读本书之后,我们要做的就是在实践中应用和检验书中所讲的各种知识点。书中所讲未必绝对正确,实践才是检验真理的唯一标准。在实践中,我们还会有新的创造和突破。祝愿本书的读者最终都能成为卓越的软件开发者。
皮皮关 马遥
2022年8月2日于成都