论程序员的自我修炼
軟件開發(fā)是個(gè)挑戰(zhàn),尤其是對(duì)于那些完美主義的程序員。他們需要制定大量的決策以及許多問題的解決方案,這對(duì)于有些人來說會(huì)感到很難。當(dāng)然,你可以在線搜索到最佳實(shí)踐方案或在StackOverflow上提問。但即便你找到了想要的答案,也未必能讓你感到滿意。你懷疑這個(gè)設(shè)計(jì)是否完美,事實(shí)上,真正完美的設(shè)計(jì)幾乎為零。
設(shè)計(jì)難題接踵而來
想徹底解決設(shè)計(jì)難題是不可能的。這是因?yàn)槊總€(gè)需求都會(huì)浮現(xiàn)在你的腦海里,你會(huì)遇到設(shè)計(jì)領(lǐng)域里最大的挑戰(zhàn),比如選擇數(shù)據(jù)還是表示層。我是使用MVC還是MVVM?哪種OPM工具適合我?我該如何處理多個(gè)數(shù)據(jù)庫?等等。每個(gè)問題都會(huì)讓你不知所措,并且所遇到的設(shè)計(jì)問題也在日益增長。每走一步都會(huì)使你覺得像是有座大山擺在你的面前。不堪負(fù)重的感覺讓你想要逃避或者拖延解決問題的時(shí)間。但拖延并不能解決問題。
解決類似這樣的問題最好的辦法就是(Divide & Conquer)拆分 & 克服。你必須暫停思考腦海中的所有系統(tǒng)問題,試著將設(shè)計(jì)拆分成細(xì)小的模塊,并且一個(gè)一個(gè)的查看可以做哪些簡單的模塊。如果可能的話,選擇迭代開發(fā)方法。這樣你就可以將思維專注在設(shè)計(jì)障礙上 ,那么你就能看到多個(gè)小山丘而不是整座大山浮現(xiàn)在你的腦海中。
此外,不要花費(fèi)太多的時(shí)間來選擇工具或者API或者規(guī)則引擎。這些工具僅僅是為了讓我們工作起來更加輕松。相反地,把更多的 時(shí)間放在設(shè)計(jì)原理上,比如關(guān)注分離(Separation of Concerns)。SoC(系統(tǒng)芯片)會(huì)允許你改變?nèi)我廛浖踊蛘卟挥绊懫渌到y(tǒng)的軟件工具。
TDD(軟件測試驅(qū)動(dòng)開發(fā))會(huì)讓你鼓足勇氣,讓你在軟件行業(yè)發(fā)生質(zhì)的改變。不要忘了,在設(shè)計(jì)上花費(fèi)的時(shí)間是遠(yuǎn)遠(yuǎn)不夠的,正如Steve McConnell 在Code Complete這本書中所說:
“When areyou done [designing]? Since design is open-ended, the most common answer tothat question is “When you’re out of time.”
需求變更
為了生存,你的客戶或者公司必須適應(yīng)變化。而這就意味著需求將發(fā)生變化。你不可能只編寫一款軟件就能滿足未來所有的需求。總會(huì)有些新的需求時(shí)不時(shí)的跳出腦海中。所以,不要試圖掩蓋未來的需求,嘗試去編寫滿足目前需求的軟件。
不要過量設(shè)計(jì)
如果你花費(fèi)數(shù)天時(shí)間來開發(fā)某個(gè)特別的功能,而這個(gè)功能一年里為你的客戶只減少五分鐘,那么實(shí)際上你的工作是無用的。我能理解,有時(shí)我們無法阻止自己做出一些特別的改變,因?yàn)樗坪跏刮覀冇X得像是一個(gè)更好的程序員或者只是為了好玩而已,但是考慮到成本/效益,時(shí)間是寶貴的,把時(shí)間花費(fèi)在其他方面或許會(huì)更好。
簡潔原則
簡化,當(dāng)你需要存儲(chǔ)某個(gè)對(duì)象到系統(tǒng)文件時(shí),沒有密集型的工作或者特別需求,編寫一個(gè)自定義對(duì)象序列化是毫無意義的。我看到有些設(shè)計(jì)從工程學(xué)角度來看,它們像是杰作,但它們過于復(fù)雜。你不應(yīng)該讓你的設(shè)計(jì)過于復(fù)雜。有時(shí),最好的解決方法就是簡單。因此,請(qǐng)保持 KISS原則。
相信自己,鼓足勇氣
設(shè)計(jì)其實(shí)是為了檢驗(yàn)程序員成果的好壞。不同的程序員可拿出不同的設(shè)計(jì)思路。因?yàn)闆]有單一的解決方案,這可能會(huì)導(dǎo)致你為某個(gè)特性搜索所有的最佳方案,?但這并不意味著你應(yīng)該停止學(xué)習(xí)或聆聽他人的想法。在設(shè)計(jì)過程中,不是學(xué)習(xí)所有最佳實(shí)踐就能適合你的問題。相信自己,做最好的設(shè)計(jì),實(shí)施自己的設(shè)計(jì)思路。
重構(gòu)是個(gè)非常好的做法。當(dāng)出現(xiàn)壞代碼時(shí),試著用重構(gòu)的方式來解決。從錯(cuò)誤中學(xué)習(xí),它將有助于你未來設(shè)計(jì)。
沒有完美的設(shè)計(jì)
無論你做什么,最終都會(huì)以一款無法令你滿意的軟件而告終。正如 Hunt and Thomas在《The Pragmatic Programmer》中寫道的:
“完美的軟件是不存在的。在計(jì)算機(jī)歷史上,沒人設(shè)計(jì)出完美的軟件。這是不可能的,也許你是第一個(gè),除非你不接受這個(gè)事實(shí),而浪費(fèi)時(shí)間或者精力去追逐一個(gè)不可能實(shí)現(xiàn)的夢(mèng)想。”
我很抱歉,但他們是對(duì)的。不要去追逐一個(gè)不可能實(shí)現(xiàn)的夢(mèng)想,試著讓你的軟件“足夠好”就好!
英文出自: Thingstocode
總結(jié)
- 上一篇: 怎么查开户行支行名称 开户行支行名称如何
- 下一篇: 犹太人从未透露的12个秘密(图)