软件设计漫谈之一:什么是软件设计?

简介:

              软件设计漫谈之一:什么是软件设计?

“哇,设计!”

每当说起这个词,你的脑海里是否很快闪出“天才”、“灵感”、“创意”。。。。。。等词汇,同时闪现出一些戴着又大又圆的黑边眼镜,一边踱来踱去,忽而又两眼一亮,大叫一声“I got it”的设计师形象?甚至想起了达芬奇、米开朗琪罗等艺术家?

如果是这样的话,有两个消息要告诉你:坏消息是你理解错了,好消息是本文对你有帮助:)

 

“什么是设计?”

在回答这个问题的时候,如果你想去翻开某本厚厚的XXX规范或者协议,那么请你打消这个念头,我们不需要去看XXX标准或者协议的!@#%定义,那些定义没人看得懂,看懂了也没有用。我们需要通俗的说法,但通俗的就可能存在瑕疵,我们需要从通俗的说法中提炼出正确的说法。

1                 “设计就是找到解决问题的方法!”

这个说法是最直接、也最容易理解的,因为不管什么设计,当然是要最终能够解决问题,如果问题都没有解决,那设计本身就是错误的,这样的设计当然是不可取的。

但是,设计只是为了解决问题吗?

肯定不是,举个最简单的例子:如果你原意(不需要你很牛),你完全可以在main函数里面实现所有的功能,解决所有的问题,一个main函数写上几万甚至几十万都可以,功能上实现没有任何问题,但现实中你除了见到写“Hello, World”外,谁会这么做?

所以,“是否解决问题”是区分正确和错误的设计的标准,而不是区分好的设计和差的设计的标准

2                 “设计就是天才的创新!”

这个是最迷惑人的一个说法,也正是这个说法,让很多人对设计师都有一种崇拜的感觉。同时由于有这个想法,就想当然的认为自己不是天才,因此没法做设计!

现实中有这么多的问题需要天才才能解决么?其实你只要看看你周围就知道了:你的团队的设计师是天才么?你的做设计的朋友是天才么?如果你是设计师,你觉得你是天才么?

答案很简单,你我周围没有那么多的天才,但设计师却不少;你我周围绝大部分问题都不是需要达芬奇、米开朗琪罗、爱因斯坦才能解决的。设计不是艺术,也不是科学研究,只是一项普通的工作而已,因此,只要你努力,你也可以做设计!

当然,创新在设计中是必不可少的,没有灵感和创新,你就没法超越已有的设计;有了好的创新,才能够作出好设计!苹果公司做手机时间和诺基亚、魔头罗拉等相比要短得多,但苹果的Iphone却掀起了世界手机潮流,这就是创新的力量!

所以,“天才的创新”不是设计的必要条件,但却是优秀和伟大设计的必要条件!

3                 “设计之道就是平衡之道”

这个说法比较玄乎,但以我的经验和理解来看,这个说法是最接近正确的说法,理解这个说法的关键在于这个“平衡”是什么。

其实说穿了也没有什么玄乎的,“平衡”其实就是满足需求的功能属性的前提下,如何平衡需求的质量属性(需求的功能属性和质量属性请参考我的上一篇博文《需求分析的故事——如何练就需求分析的火眼金晴?》)。

为什么要平衡质量属性呢?简单来说就是因为质量属性是互相约束的,当一个属性变化时,必然会有另外的属性跟着改变,设计师必须在这些属性间进行平衡。

举个简单的例子:性能和成本,要想提高性能,成本就会跟着上升,可能是硬件成本(购买更好更贵的CPU),也可能是软件成本(软件重构、重写)。这种情况下,设计的平衡之道就体现出来了,你不可能只要性能,不考虑成本;也不可能只考虑成本,不考虑性能;只能在两者之间取一个完美的平衡点。即使是好评如潮苹果的IPhone,在售价上相信也是超出了大部分人的承受能力。

但是,把设计完全等同于平衡也是不正确的,如果永远都是在已有的东西里面做加减乘除,那么也就不会有创新了,只有创新才有可能解决所有的质量约束。比如:如果人类永远只盯着如何提高马车的速度和运力,那么火车就不会出现。

 

4                 再谈什么是设计

相信聪明的读者看到这里已经能够给出自己的答案了,我总结如下:

设计是一项创新和平衡的活动!要么创造一个新的东西来满足所有要求,要么就在已有的要求之间进行平衡。

 

相关文章
|
设计模式 算法 uml
软件设计
软件设计是软件工程中的一个重要阶段,它是在需求分析的基础上,根据用户需求和系统架构,制定软件的具体设计方案,包括软件的模块划分、接口设计、数据结构设计、算法设计、界面设计等。
81 0
|
4月前
|
算法 安全 测试技术
|
数据可视化
52【软件设计】软件设计方法归纳总结
软件设计方法有:**结构化设计**(数据流图为依据)、**面向对象设计**(面向对象概念为依据);
188 0
|
6月前
|
敏捷开发
软件设计中常用的开发模型
软件设计中常用的开发模型
119 1
|
编解码 NoSQL 网络协议
4. 软件设计中的可维护性
4. 软件设计中的可维护性
162 0
|
设计模式 算法
软件设计的原则
软件设计的原则
88 0
|
数据库
软件设计原则
软件设计原则
|
设计模式 安全 Java
软件设计原则有哪些(上)
软件设计原则有哪些(上)
127 0
|
设计模式
软件设计原则有哪些(下)
软件设计原则有哪些(下)
82 0
|
设计模式 消息中间件 JSON
软件设计到底是什么?
软件设计是什么: 就是讨论要用什么技术实现功能? 就是要考虑选择哪些框架和中间件? 设计就是设计模式?
203 0