1.1 软件开发的关键

在《代码大全 2》一书中,作者麦克康奈尔认为,软件开发的关键是复杂度管理。笔者认同这个观点。如果是一个小项目,复杂度不会很高,当然也就不存在让人头疼的管理问题。但是一旦项目上了规模,复杂度将大幅度增加,程序员很可能就会被淹没在多如牛毛的细节里。在《面向对象分析与设计》(第3版)一书中作者指出,复杂性表现在两个方面:一个是软件开发本身就具有复杂性,再有就是开发人员的随心所欲的行为所造成的复杂性。前者所产生的复杂性是无法消除的,因此就只能消除后者所产生的复杂性了。

《C++编程规范》一书中引用了Alan Perlis的一句话:“复杂性啊,愚人对你视而不见。实干家为你所累。有些人避而远之。唯智者能够善加消除”。笔者虽不敢说自己是智者,但还是在不断地向业内的领军人物学习如何妥善降低复杂性。

那么该如何妥善降低复杂性呢?

笔者根据阅读学习、实践和理解,认为利用以下的工具就可以做到:

面向对象的编程思维;

模式;

原则;

重构;

消除对于程序运行必要,但是对程序员不必要的细节的工具。

当提到模式的时候,也许读者会想到设计模式。《面向模式的软件架构》(卷 1)一书把模式分为三类:架构模式、设计模式和成例。笔者认为这里的模式指的是这三类。

笔者之前学习过平面设计、交互设计,都涉及了设计原则和模式,也许这就是专业设计的特征,需要把原则和模式放进设计的工具箱,从而形成设计的依据。

本书随后的章节将会讲到本书项目中会运用到的原则和模式,但是这些也只是冰山一角,更多的知识,还需要读者花时间阅读更多的书籍。