设计其实是一种病
軟件設(shè)計(jì)的學(xué)問很深,學(xué)一點(diǎn)可以開拓思路,學(xué)透了可以成為專家,而學(xué)得半透不透的時(shí)候,感覺就會(huì)像一種病,一種“設(shè)計(jì)病”。
得了“設(shè)計(jì)病”的程序員干活很慢。你看那些剛畢業(yè)的年輕同志,拿到任務(wù)后立刻打開開發(fā)工具,又是點(diǎn)又是敲的,一會(huì)兒就能看到界面,程序功能一個(gè)一個(gè)地不斷被實(shí)現(xiàn),速度快的很。得了“設(shè)計(jì)病”的程序員就不能這樣。拿到任務(wù)后左思右想,總覺得這樣也行,那樣也不錯(cuò),一個(gè)小程序他能想出幾百種方法來,光權(quán)衡就得半天。寫程序通常也不從界面開始做,悶著頭在鍵盤上狂按了好久,程序還是不能運(yùn)行,搞得項(xiàng)目經(jīng)理直冒汗。
“設(shè)計(jì)病”的程序員寫的程序,寫著費(fèi)勁,看起來勞神。通常別人寫一個(gè)函數(shù)的,“設(shè)計(jì)病”人非要寫成好幾個(gè)。使用面向?qū)ο箝_發(fā)語言的更是如此。“設(shè)計(jì)病”人寫的程序里,類特別多。人家用兩三個(gè)類就可以實(shí)現(xiàn)的功能,“設(shè)計(jì)病”人要用五六個(gè)類,甚至更多。還弄一些個(gè)類,一堆虛函數(shù),一個(gè)成員變量也沒有。稍大一點(diǎn)的程序就有幾十上百的類擠在一起,關(guān)系也很復(fù)雜,一般人還真看不懂。
和“設(shè)計(jì)病”人討論問題也不容易。通常大家都在談這是個(gè)什么功能,某個(gè)功能怎么樣才能實(shí)現(xiàn),而“設(shè)計(jì)病”人常常不討論這個(gè),嘴上總掛著什么“復(fù)用”、“耦合”、“模式”等一類莫名其妙的詞匯。就算“設(shè)計(jì)病”人在討論功能的時(shí)候,聽起來也和程序的實(shí)際功能相差很遠(yuǎn)。比如當(dāng)大家在討論使用多線程實(shí)現(xiàn)的時(shí)候,他就討論線程管理類的接口;當(dāng)大家討論發(fā)送數(shù)據(jù)要緩沖的時(shí)候,“設(shè)計(jì)病”人卻在研究如何實(shí)現(xiàn)一個(gè)快速的數(shù)據(jù)隊(duì)列。
事實(shí)上“設(shè)計(jì)病”人自己也很痛苦。他們對(duì)現(xiàn)有的方案總是不滿意,甚至昨天他自己寫的方案,今天再看時(shí)也覺得不滿。自己費(fèi)盡心機(jī)設(shè)計(jì)出來的可復(fù)用的類,卻從來都沒有被復(fù)用過。自己好不容易設(shè)計(jì)出的松耦合的模塊結(jié)構(gòu),在增加新功能時(shí),卻不得不在很多層次的類上做修改。
“設(shè)計(jì)病”也很難治好。“設(shè)計(jì)病”人總是不由自主地做設(shè)計(jì),不愿意用直接的方式實(shí)現(xiàn)程序,總想把程序一點(diǎn)點(diǎn)剝開、分解。怎么勸都不會(huì)有用。他們相信遲早有一天自己的設(shè)計(jì)會(huì)發(fā)揮作用。
“設(shè)計(jì)病”人寫出過很多爛程序。要么設(shè)計(jì)失敗,考慮不周,程序結(jié)構(gòu)有問題,要么過度設(shè)計(jì),簡單的功能,大堆的類,還不如不做設(shè)計(jì)。
不由自主地去設(shè)計(jì),努力去寫出爛程序,不是一種病又是什么?
如果您覺得也得了“設(shè)計(jì)病”了,也別太著急,辦法有一個(gè),就是繼續(xù)“病”下去,努力做設(shè)計(jì)。直到有一天,能平衡完美和實(shí)用了,這病也就好了。
總結(jié)
- 上一篇: 从实验室到山寨,技术发展的普遍道路
- 下一篇: 某指令引用的内存不能为