老碼農(nóng):如何寫出讓自己滿意的代碼

老碼農(nóng):如何寫出讓自己滿意的代碼

ID:34611401

大小:3.92 MB

頁數(shù):5頁

時間:2019-03-08

老碼農(nóng):如何寫出讓自己滿意的代碼_第1頁
老碼農(nóng):如何寫出讓自己滿意的代碼_第2頁
老碼農(nóng):如何寫出讓自己滿意的代碼_第3頁
老碼農(nóng):如何寫出讓自己滿意的代碼_第4頁
老碼農(nóng):如何寫出讓自己滿意的代碼_第5頁
資源描述:

《老碼農(nóng):如何寫出讓自己滿意的代碼》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫

1、老碼農(nóng):如何寫出讓自己滿意的代碼本文作者:老碼農(nóng)今天有位朋友在微博上問我這樣一個問題:“@老碼農(nóng)的自留地,最近出于學(xué)習(xí)目的寫一個管理系統(tǒng),越到后邊,越覺得自己前邊的代碼寫得爛。前輩,我想讓代碼寫得更好一點(diǎn),能不能談?wù)勀愕慕?jīng)驗,給我指點(diǎn)一下!”我在回復(fù)里剛寫了幾句,就意識到140個字很難把我的想法說清楚,本著知無不言言無不盡的好為人師精神,我決定把我的回答寫成一篇博文。首先要說明的是,我寫這篇博客并不代表本人覺得自己的代碼寫得有多好。事實(shí)上我很清楚自己的水平,作為一個做應(yīng)用系統(tǒng)的程序員,和那些做框架做系統(tǒng)的大牛根本就不在一個層

2、次。而且即使在應(yīng)用層次,我的水平大概也只能算二三流,只是因為熱愛編程所以一直在努力而已,但不管怎么說,能做自己喜歡的工作我已經(jīng)很滿足了。所以我稍微篡改了一下問題,針對“覺得自己前邊的代碼寫得爛”這個重點(diǎn),把這位朋友問的如何“讓代碼寫得更好一點(diǎn)”改成了“如何寫出讓自己滿意的代碼”。言歸正傳,我自己的體會是寫代碼很像寫作文,開始寫之前的構(gòu)思過程是最關(guān)鍵的。記得高中的時候,有位語文老師給我傳授的經(jīng)驗是,至少花三分之一的時間來構(gòu)思,反復(fù)斟酌中心思想、各個段落的大意,文章的脈絡(luò),主要的修辭手法,等等。把這些要素都想清楚了,寫起來就可以

3、一氣呵成。我覺得寫代碼也是一樣,思路是最關(guān)鍵的。假定采用的技術(shù)平臺、框架、工具等已經(jīng)確定了,那么在開始動手寫之前,花三分之一以上的開發(fā)時間去把所有的數(shù)據(jù)結(jié)構(gòu)及其相互關(guān)系考慮清楚。例如需要定義幾個類,類和類之間的關(guān)系是怎樣的,每個類里都有什么屬性,每個類提供一些什么樣的方法,等等,這些是最核心的。這些數(shù)據(jù)結(jié)構(gòu)要考慮得盡可能細(xì),比如功能實(shí)現(xiàn)可能沒問題,但是性能上不理想,這就說明你的數(shù)據(jù)結(jié)構(gòu)設(shè)計還需要改進(jìn)。這些細(xì)節(jié)要反復(fù)考慮,交叉檢驗,直到自己覺得很周到了為止。在此基礎(chǔ)上,再注意實(shí)現(xiàn)的細(xì)節(jié)、測試用例、代碼可讀性,就應(yīng)該可以寫出讓自

4、己滿意的代碼。具體說明如下:1.數(shù)據(jù)結(jié)構(gòu)和核心算法關(guān)于數(shù)據(jù)結(jié)構(gòu)的重要性,大神LinusTorvalds講過這樣的話,我覺得非常贊同:”Badprogrammersworryaboutthecode.Goodprogrammersworryaboutdatastructuresandtheirrelationships.”(低水平程序員總在考慮代碼,高水平程序員總在考慮數(shù)據(jù)結(jié)構(gòu)及其之間的關(guān)系)數(shù)據(jù)結(jié)構(gòu)考慮清楚了,核心的算法自然就出來了,這就是關(guān)于每個類的每個方法如何實(shí)現(xiàn)的問題。比如需要實(shí)現(xiàn)一個中位數(shù)查詢方法,如果你前面確定了數(shù)

5、據(jù)保存的格式是一個列表,那么你可以考慮采用插入排序法;如果數(shù)據(jù)格式是自平衡二叉排序樹(AVL),則只需直接返回根節(jié)點(diǎn)就可以了。數(shù)據(jù)結(jié)構(gòu)決定算法,所以你在考慮數(shù)據(jù)結(jié)構(gòu)的時候,一定要盡可能地使數(shù)據(jù)的結(jié)構(gòu)和它的自然屬性相匹配,不然后面的實(shí)現(xiàn)就會是一場噩夢。比如,你把一個多層級的結(jié)構(gòu)定義成二維數(shù)組,看上去也靠譜,相當(dāng)于在一個表格里維護(hù)一個組織結(jié)構(gòu)圖,可是當(dāng)你做到部門增減的時候,本層級的數(shù)組元素移動自不必說,下面各個層級的元素移動就很容易亂套,而且性能很差,可能你寫了2000行代碼還有很多邊界條件會出錯。相反,如果用一個孩子兄弟鏈表來

6、表示這個樹型結(jié)構(gòu),操作起來就非常容易,可能100行都足夠了。2.功能實(shí)現(xiàn)思路確定后,實(shí)現(xiàn)過程也需要大量的構(gòu)思活動。碰到你比較熟悉有經(jīng)驗的領(lǐng)域,你自然可以輕車熟路,但難免會有一些你不太熟悉的技術(shù)需要嘗試。有的同學(xué)比較排斥這種領(lǐng)域,比如我好不容易才掌握了Struts2,領(lǐng)導(dǎo)又讓我去學(xué)習(xí)Grails框架,我就會覺得很不爽,大概看了看就挑出它的一堆問題,然后能躲多遠(yuǎn)就躲多遠(yuǎn)??墒俏乙f,這樣的心態(tài)會阻礙自己不斷提高技術(shù)水平。作為一個程序員,最大的挑戰(zhàn)也是最大的樂趣所在,就是不斷學(xué)習(xí)新的技術(shù),沒有這樣的心態(tài),很快就會落后。好,那么遇到

7、不熟悉的技術(shù)怎么辦?我的體會是,先不要急著實(shí)現(xiàn)項目中的代碼,自己另外維護(hù)一個測試項目,在里邊邊查文檔邊學(xué)習(xí),邊做一個小功能,把所有需要在項目中實(shí)現(xiàn)的功能先在測試項目里跑通,然后再寫項目里的代碼。這樣做的好處是把單個技術(shù)問題和其他潛在的bug隔離開來,便于快速學(xué)習(xí)新技術(shù)。否則,你直接在項目里寫代碼出錯以后,要判斷問題的源頭都要多費(fèi)好幾倍的精力。3.測試測試很重要,設(shè)計測試用例就像開發(fā)時設(shè)計數(shù)據(jù)結(jié)構(gòu)一樣,也是很關(guān)鍵的。在設(shè)計測試用例的時候,要把當(dāng)時自己設(shè)計數(shù)據(jù)結(jié)構(gòu)的思路全部忘掉,或者找別人來設(shè)計測試用例,不然會不由自主地測試那些

8、你已經(jīng)考慮到了的地方。這樣測試是跑通了,用戶一用起來可能各種邊界條件會到處出問題。有人會推崇TDD的方法,先設(shè)計好測試用例,然后在開發(fā)過程中確保所有測試通過。我個人不喜歡這種方法,雖然承認(rèn)從開發(fā)質(zhì)量管理和長期維護(hù)的角度來說TDD是很有必要的,但我個人嘗試的結(jié)果是,設(shè)計完測試用例后,想到開發(fā)

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。