“软件的复杂性是会叠加的,而且不是简单的线性叠加。也就是说,下述假设是不成立的:之前有10项功能要开发,因此再加1项只会增添10%的工作量。因为新增的功能需要与已有的10项功能相协调,所以如果开发新功能需要10小时,可能还要花10小时才能保证已有的10项功能与新功能正常交互。原有功能越多,新增功能的成本就越高。优秀的设计可以尽量避免此类问题,但是每项新功能仍然会有单独的成本。

你正开发的任何系统,其基本用途应当相当简单。这样开发出来的系统,既满足实际需求,整体来说也是简单的。但是,如果你给系统添加新功能去满足其他目标,事情就立刻变复杂了。

举例来说,文字处理软件的基本功能就是帮助用户写作文档。如果突然要求它能够阅读邮件,最终就会得到的非常荒唐复杂的玩意。我们都知道,这不是文字处理软件本来的用途。这么做,甚至都不是在扩展软件的用途,而是增添与目的无关的功能。

有时候,营销人员或者经理会给软件设定一些目标,但是这些目标其实并不符合程序的基本用途,比如“要好玩一些”、“设计要更有冲击感”、“要受新媒体欢迎”,“要使用最新的技术”等等。这些人可能是公司里的重要人物,但他们不是那些决定程序应当做什么的人。身为软件设计师或是技术经理,你的职责是保证软件的基本用途,防止它偏离正轨,这个责任其他人谁也担不起。

最受用户喜欢的软件是专注而简洁的,并且始终执着于基本用途。

-- 来自《简约之美:软件设计之道》”


这段作者呼吁大家要尽量让软件变得专注而纯粹,不要通过试图增加多样化的功能来给软件带来更多复杂性,导致提升后面的维护成本。而且如果是作为软件设计师或者是技术经理,也要有义务保证软件不偏离原有的目标。
展开
评论