软件设计的目的?

Design is there to enable you to keep changing the software easily in the long term。
设计是为了让软件在长期更容易适应变化。
—— Kent Beck

用程序员们更熟悉的排序算法为例,快速排序的平均复杂度是 O(nlogn),而插入排序是O(n^2)。所以,一般我们说快速排序比插入排序有优势。但是,这种优势只有在一定规模下才能体现出来。当数据规模很小的时候,二者差别并不明显,更有甚者,插入排序在某些情况下表现得会更好。但当数据规模很大时,快速排序的优势就非常明显了。对比两个算法的优劣,关键在于数据规模。所以你会发现,算法和软件设计其实是一样的,二者对抗的都是规模问题,只不过,算法对抗的是数据的规模,而软件设计对抗的是需求的规模。

如何学习软件设计?

对于软件设计,我们可以将其划分为两个维度:“了解现有的软件设计”“自己设计一个软件”。对于软件设计最核心的三个部分就是模型、接口和实现。软件设计的相关知识有很多,比如,设计模式、领域驱动设计等等。但是在学习这些知识时,总有一些令人困惑的地方。比方说,学了那么多设计模式能用上的却没有几个,领域驱动设计中的概念那么多,都不知道该从哪学起,因此软件设计学习的难度,不在于一招一式,而在于融会贯通

软件设计到底是什么?

我们先来思考这样一件事:软件的开发目的是什么?
一个直白的答案就是,软件开发是为了解决由需求带来的各种问题,而解决的结果是一个可以运行的交付物。比如,我们在线购物的需求,是通过电商平台这个方案解决的。那软件设计在这个过程中做的事情是什么呢?就是在需求和解决方案之间架设一个桥梁。区别于解决简单问题,软件的开发往往是一项长期的工作,会有许多人参与其中。在这种情况下,就需要建立起一个统一的结构,以便所有人都能有一个 共同的理解。而在软件的开发过程中,这种统一的结构就是模型,而软件设计就是要构建出一套模型