形式永远服从功能。
—Louis Henry Sullivan
“设计之城”软件项目表面上与“混乱大都市”非常相似。它也是用C++写的消费音频产品,运行在Linux操作系统上。但是,它的构建方式有很大不同,所以内部结构也非常不同。
我从一开始就参加了“设计之城”项目。我们用有能力的开发者组成了一个全新的团队,从头开始构建这个产品。团队很小(开始有4名程序员),像“大都市”项目一样,团队的结构是扁平的。幸运的是,没有出现“大都市”项目中的个人对抗,在团队中也没有出现任何争权夺利的事。在此之前,团队成员之间并不非常熟悉,不知道我们在一起可以配合得多好,但我们对这个项目都很热心,喜欢这项挑战。
这样很好。
Linux和C++是项目早期的决定,这项决定确定了团队成员的组成。从一开始,项目就有清晰定义的目标:具体的首个产品和将来功能的路线图,代码集必须能够支持这些功能。这将是一个通用目标的代码集,可以适用于多种产品配置。
开发过程采用了极限编程(XP)(Beck和Andres 2004),很多人相信这种开发过程避开了设计:直接开始编码,不要想太远。实际上,一些旁观者对我们的选择感到震惊,并预言项目将以泪收场,就像“大都市”一样。但这是一种常见的误解。XP没有贬低设计,它贬低的是不必要的工作(即YAGNI原则,You Aren’t Going To Need It)。但是,如果需要前端设计,XP就要求你进行设计。它也鼓励使用快速原型(所谓的“spike”),快速展现并验证设计的有效性。这些都非常有用,对最终的软件设计产生了极大的影响。



