软件设计漫谈之一:什么是软件设计?
“哇,设计!”
每当说起这个词,你的脑海里是否很快闪出“天才”、“灵感”、“创意”。。。。。。等词汇,同时闪现出一些戴着又大又圆的黑边眼镜,一边踱来踱去,忽而又两眼一亮,大叫一声“I got it”的设计师形象?甚至想起了达芬奇、米开朗琪罗等艺术家?
如果是这样的话,有两个消息要告诉你:坏消息是你理解错了,好消息是本文对你有帮助:)
“什么是设计?”
在回答这个问题的时候,如果你想去翻开某本厚厚的XXX规范或者协议,那么请你打消这个念头,我们不需要去看XXX标准或者协议的!@#¥%定义,那些定义没人看得懂,看懂了也没有用。我们需要通俗的说法,但通俗的就可能存在瑕疵,我们需要从通俗的说法中提炼出正确的说法。
1 “设计就是找到解决问题的方法!”
这个说法是最直接、也最容易理解的,因为不管什么设计,当然是要最终能够解决问题,如果问题都没有解决,那设计本身就是错误的,这样的设计当然是不可取的。
但是,设计只是为了解决问题吗?
肯定不是,举个最简单的例子:如果你原意(不需要你很牛),你完全可以在main函数里面实现所有的功能,解决所有的问题,一个main函数写上几万甚至几十万都可以,功能上实现没有任何问题,但现实中你除了见到写“Hello, World”外,谁会这么做?
所以,“是否解决问题”是区分正确和错误的设计的标准,而不是区分好的设计和差的设计的标准。
2 “设计就是天才的创新!”
这个是最迷惑人的一个说法,也正是这个说法,让很多人对设计师都有一种崇拜的感觉。同时由于有这个想法,就想当然的认为自己不是天才,因此没法做设计!
现实中有这么多的问题需要天才才能解决么?其实你只要看看你周围就知道了:你的团队的设计师是天才么?你的做设计的朋友是天才么?如果你是设计师,你觉得你是天才么?
答案很简单,你我周围没有那么多的天才,但设计师却不少;你我周围绝大部分问题都不是需要达芬奇、米开朗琪罗、爱因斯坦才能解决的。设计不是艺术,也不是科学研究,只是一项普通的工作而已,因此,只要你努力,你也可以做设计!
当然,创新在设计中是必不可少的,没有灵感和创新,你就没法超越已有的设计;有了好的创新,才能够作出好设计!苹果公司做手机时间和诺基亚、魔头罗拉等相比要短得多,但苹果的Iphone却掀起了世界手机潮流,这就是创新的力量!
所以,“天才的创新”不是设计的必要条件,但却是优秀和伟大设计的必要条件!
3 “设计之道就是平衡之道”
这个说法比较玄乎,但以我的经验和理解来看,这个说法是最接近正确的说法,理解这个说法的关键在于这个“平衡”是什么。
其实说穿了也没有什么玄乎的,“平衡”其实就是满足需求的功能属性的前提下,如何平衡需求的质量属性(需求的功能属性和质量属性请参考我的上一篇博文《需求分析的故事——如何练就需求分析的火眼金晴?》)。
为什么要平衡质量属性呢?简单来说就是因为质量属性是互相约束的,当一个属性变化时,必然会有另外的属性跟着改变,设计师必须在这些属性间进行平衡。
举个简单的例子:性能和成本,要想提高性能,成本就会跟着上升,可能是硬件成本(购买更好更贵的CPU),也可能是软件成本(软件重构、重写)。这种情况下,设计的平衡之道就体现出来了,你不可能只要性能,不考虑成本;也不可能只考虑成本,不考虑性能;只能在两者之间取一个完美的平衡点。即使是好评如潮苹果的IPhone,在售价上相信也是超出了大部分人的承受能力。
但是,把设计完全等同于平衡也是不正确的,如果永远都是在已有的东西里面做加减乘除,那么也就不会有创新了,只有创新才有可能解决所有的质量约束。比如:如果人类永远只盯着如何提高马车的速度和运力,那么火车就不会出现。
4 再谈什么是设计
相信聪明的读者看到这里已经能够给出自己的答案了,我总结如下:
设计是一项创新和平衡的活动!要么创造一个新的东西来满足所有要求,要么就在已有的要求之间进行平衡。