中国开发网: 论坛: 程序员情感CBD: 贴子 607456
haitao
设计其实是一种病
http://blog.csdn.net/slin000/archive/2008/02/25/2119287.aspx
设计其实是一种病
苏林

软件设计的学问很深,学一点可以开拓思路,学透了可以成为专家,而学得半透不透的时候,感觉就会像一种病,一种“设计病”。

得了“设计病”的程序员干活很慢。你看那些刚毕业的年轻同志,拿到任务后立刻打开开发工具,又是点又是敲的,一会儿就能看到界面,程序功能一个一个地不断被实现,速度快的很。得了“设计病”的程序员就不能这样。拿到任务后左思右想,总觉得这样也行,那样也不错,一个小程序他能想出几百种方法来,光权衡就得半天。写程序通常也不从界面开始做,闷着头在键盘上狂按了好久,程序还是不能运行,搞得项目经理直冒汗。

“设计病”的程序员写的程序,写着费劲,看起来劳神。通常别人写一个函数的,“设计病”人非要写成好几个。使用面向对象开发语言的更是如此。“设计病”人写的程序里,类特别多。人家用两三个类就可以实现的功能,“设计病”人要用五六个类,甚至更多。还弄一些个类,一堆虚函数,一个成员变量也没有。稍大一点的程序就有几十上百的类挤在一起,关系也很复杂,一般人还真看不懂。

和“设计病”人讨论问题也不容易。通常大家都在谈这是个什么功能,某个功能怎么样才能实现,而“设计病”人常常不讨论这个,嘴上总挂着什么“复用”、“耦合”、“模式”等一类莫名其妙的词汇。就算“设计病”人在讨论功能的时候,听起来也和程序的实际功能相差很远。比如当大家在讨论使用多线程实现的时候,他就讨论线程管理类的接口;当大家讨论发送数据要缓冲的时候,“设计病”人却在研究如何实现一个快速的数据队列。

事实上“设计病”人自己也很痛苦。他们对现有的方案总是不满意,甚至昨天他自己写的方案,今天再看时也觉得不满。自己费尽心机设计出来的可复用的类,却从来都没有被复用过。自己好不容易设计出的松耦合的模块结构,在增加新功能时,却不得不在很多层次的类上做修改。

“设计病”也很难治好。“设计病”人总是不由自主地做设计,不愿意用直接的方式实现程序,总想把程序一点点剥开、分解。怎么劝都不会有用。他们相信迟早有一天自己的设计会发挥作用。

“设计病”人写出过很多烂程序。要么设计失败,考虑不周,程序结构有问题,要么过度设计,简单的功能,大堆的类,还不如不做设计。

不由自主地去设计,努力去写出烂程序,不是一种病又是什么?

如果您觉得也得了“设计病”了,也别太着急,办法有一个,就是继续“病”下去,努力做设计。直到有一天,能平衡完美和实用了,这病也就好了。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2119287



[收藏到我的网摘] [发送Trackback] 苏林发表于 2008年02月25日 15:49:00




评论
# linuxpgy 发表于2008-02-25 17:11:22 IP: 218.108.8.*
最终成败还是看产品的实际效果怎么样



# keel 发表于2008-02-26 10:59:02 IP: 202.102.127.*
这种感触深入骨髓~~原来就是设计病……
非常有同感!



# jhonguy 发表于2008-02-26 12:31:08 IP: 125.119.10.*
nod!



# noOnlyCode 发表于2008-02-26 12:51:40 IP: 220.160.159.*
呵呵,所谓远看成岭侧成峰,远近高低各不同。

“跳出来”,再跳进去。不至于病得慌……



# updatedb 发表于2008-02-26 14:42:36 IP: 219.232.61.*
最后一段有意思



# bitpolar 发表于2008-02-26 15:59:44 IP: 124.207.144.*
如果系统整体要求并不是很高的话,用非常复杂的接口,N多的类实现一个简单功能,我是觉得得不偿失



# wantal 发表于2008-02-26 17:06:59 IP: 203.187.191.*
符合实际最重要。
如果只是个人写一个无关紧要的小程序,可以不去“病”。
如果参与一个团队要做一个中长期的项目,你若不先“病”,以后就可以直接等死了。
如果一个人能到看到一个项目,就可以把握到一种合适的“病情”,这个人就是“病”出境界了。我们现在去“病病”,就是为了追求这种境界呀。



# cabbagewar 发表于2008-02-26 17:25:59 IP: 219.146.254.*
这不就是在说我嘛!!!



# vividboy 发表于2008-02-26 17:26:58 IP: 219.142.42.*
正在痛苦中...

估计最后还是要回归 be simple is good。



# allen1981813 发表于2008-02-26 18:33:42 IP: 77.25.179.*
LZ说的一点没有错!
我已经想开了。



# linkerlin 发表于2008-02-26 18:53:44 IP: 61.172.241.*
同感啊.
尤其是OO设计.
其实,静态OO不过做了一个虚表消息分派机制.
本身对并发的世界就不是很适配.
在这样的基础上,怎么设计都是不可能完美的.
软件设计并不是优先考虑适应变化,而应该首先考虑适应需求.
简单就是美.




# hacker47 发表于2008-02-26 18:57:27 IP: 60.172.253.*
看你关注的是什么样的程序了,如果是一些ERP什么的,
简单的设计就可以了,但是如果是一个生命周期非常长的商业软件,架构设计的稳固一点也没有什么害处。



# gbb21 发表于2008-02-26 19:10:29 IP: 222.205.42.*
强烈Re
看来我病得不轻啊~



# ThinkX 发表于2008-02-26 20:22:25 IP: 221.219.240.*
很赞同,有同感,也经历过。
任何东西适当就好。



# shuiyinyuan 发表于2008-02-26 22:02:58 IP: 123.117.168.*
同感.



# fangz 发表于2008-02-26 22:34:30 IP: 61.149.156.*
没有设计的软件 只是在敲一大堆API
数据结构,算法,设计 才是软件的精髓

自己不懂模式 不要说别人有病

我以前一直不理解TDD, 现在用起来真叫一个爽



# xuanyuanhaobo 发表于2008-02-27 10:17:49 IP: 61.172.247.*
hahaha

太棒了......说得太好了......

是啊.....看见那些新手写东西那么快....有时候都总在怀疑自己是不是该回到以前那种只管应用...不管复用....不管可扩展的简单思想去.....



# LifeForCode 发表于2008-02-27 12:31:50 IP: 58.240.178.*
正努力病着呢
确实,大病过才能免疫,才能找到平衡点




# vividboy 发表于2008-02-27 12:35:18 IP: 219.142.42.*
久病成良医,呵呵



# fancylea 发表于2008-02-27 12:41:21 IP: 207.46.92.*
同感阿!
继续病下去!
希望有一天找到平衡点.
我的blog:http://szhaitao.blog.hexun.com & http://www.hoolee.com/user/haitao
--以上均为泛泛之谈--
不尽牛人滚滚来,无边硬伤纷纷现 人在江湖(出来的),哪能不挨刀(总归是要的)
网络对话,歧义纷生;你以为明白了对方的话,其实呢?

您所在的IP暂时不能使用低版本的QQ,请到:http://im.qq.com/下载安装最新版的QQ,感谢您对QQ的支持和使用

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录