序 一

Anique Hommels 在其精彩著作 Unbuilding Cities: Obduracy in Urban Sociotechnical Change中,讨论了城市改造中的技术、社会、经济和政治问题。在城市不断扩张和发展的过程中,有些部分会消失,有些部分会繁荣兴旺;为了满足市民的需求,每座城市都需要改造。有时候,需要有意地改造城市(第二次世界大战后,欧洲的很多城市满目疮痍,必须重建);大多数时候,城市是在逐步地改造(如伦敦金丝雀码头的改造),但有时有形和无形的债务非常巨大,会让曾经盛极一时的城市陷入绝望的境地(如当今的底特律)。

软件密集型系统亦是如此。它们不断地发展、演变,时而凋谢,时而繁荣。要理解系统承受的作用力,关键是明白技术债务的概念,因为它常常能够解释系统承压的位置、方式和原因。在城市中,基础设施的修缮工作常常被推迟,改造通常是循序渐进而非大刀阔斧地进行。软件密集型系统亦是如此。系统的复杂性变幻莫测,改进工作被推迟,循序渐进的修改不充分,这些都让用户深受困扰;而负责改善系统的开发人员深受无法编写高品质代码之苦,因为他们始终在追赶用户需求变化的步伐。

令人欣慰的是,本书重点介绍了技术债务和一种切实可行的技术债务管理方式——重构。在城市的街区,只要有一丝丝煤气泄漏,就可循着气味找到泄漏的根源。软件密集型系统亦是如此,但其中的坏味更加稀薄,任何感官都感觉不到,除非有敏锐的洞察力。我认为在阅读本书的过程中,你会遇到从未发现过的有趣而复杂的软件坏味。实际上,你手捧的是一部名副其实的坏味实战指南,犹如非常真切的 Birds of the West Indies,只是它探讨的是软件而非麻雀。

抽象、封装、模块化和层次结构都是软件工程最佳实践的基本要素,本书对它们也做了阐述。总之,你将发现这是一部实用的著作,读起来令人愉快、引人入胜。

Grady Booch

IBM 研究院院士兼软件工程首席科学家

目录