日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何能出令自己满意的代码

發(fā)布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何能出令自己满意的代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 數(shù)據(jù)結(jié)構(gòu)和核心算法

  關(guān)于數(shù)據(jù)結(jié)構(gòu)的重要性,大神Linus Torvalds講過這樣的話,我覺得非常贊同:”Bad programmers worry about the code. Good programmers worry about data structures and their relationships.” (低水平程序員總在考慮代碼,高水平程序員總在考慮數(shù)據(jù)結(jié)構(gòu)及其之間的關(guān)系)

  數(shù)據(jù)結(jié)構(gòu)考慮清楚了,核心的算法自然就出來了,這就是關(guān)于每個類的每個方法如何實現(xiàn)的問題。比如需要實現(xiàn)一個中位數(shù)查詢方法,如果你前面確定了數(shù)據(jù)保存的格式是一個列表,那么你可以考慮采用插入排序法;如果數(shù)據(jù)格式是自平衡二叉排序樹(AVL),則只需直接返回根節(jié)點就可以了。

  數(shù)據(jù)結(jié)構(gòu)決定算法,所以你在考慮數(shù)據(jù)結(jié)構(gòu)的時候,一定要盡可能地使數(shù)據(jù)的結(jié)構(gòu)和它的自然屬性相匹配,不然后面的實現(xiàn)就會是一場噩夢。比如,你把一個多層級的結(jié)構(gòu)定義成二維數(shù)組,看上去也靠譜,相當于在一個表格里維護一個組織結(jié)構(gòu)圖,可是當你做到部門增減的時候,本層級的數(shù)組元素移動自不必說,下面各個層級的元素移動就很容易亂套,而且性能很差,可能你寫了2000行代碼還有很多邊界條件會出錯。相反,如果用一個孩子兄弟鏈表來表示這個樹型結(jié)構(gòu),操作起來就非常容易,可能100行都足夠了。

2. 功能實現(xiàn)

  思路確定后,實現(xiàn)過程也需要大量的構(gòu)思活動。碰到你比較熟悉有經(jīng)驗的領(lǐng)域,你自然可以輕車熟路,但難免會有一些你不太熟悉的技術(shù)需要嘗試。有的同學比較排斥這種領(lǐng)域,比如我好不容易才掌握了Struts 2,領(lǐng)導又讓我去學習Grails框架,我就會覺得很不爽,大概看了看就挑出它的一堆問題,然后能躲多遠就躲多遠。可是我要說,這樣的心態(tài)會阻礙自己不斷提高技術(shù)水平。作為一個程序員,最大的挑戰(zhàn)也是最大的樂趣所在,就是不斷學習新的技術(shù),沒有這樣的心態(tài),很快就會落后。

  好,那么遇到不熟悉的技術(shù)怎么辦?我的體會是,先不要急著實現(xiàn)項目中的代碼,自己另外維護一個測試項目,在里邊邊查文檔邊學習,邊做一個小功能,把所有需要在項目中實現(xiàn)的功能先在測試項目里跑通,然后再寫項目里的代碼。這樣做的好處是把單個技術(shù)問題和其他潛在的bug隔離開來,便于快速學習新技術(shù)。否則,你直接在項目里寫代碼出錯以后,要判斷問題的源頭都要多費好幾倍的精力。

3. 測試

  測試很重要,設計測試用例就像開發(fā)時設計數(shù)據(jù)結(jié)構(gòu)一樣,也是很關(guān)鍵的。在設計測試用例的時候,要把當時自己設計數(shù)據(jù)結(jié)構(gòu)的思路全部忘掉,或者找別人來設計測試用例,不然會不由自主地測試那些你已經(jīng)考慮到了的地方。這樣測試是跑通了,用戶一用起來可能各種邊界條件會到處出問題。

  有人會推崇TDD的方法,先設計好測試用例,然后在開發(fā)過程中確保所有測試通過。我個人不喜歡這種方法,雖然承認從開發(fā)質(zhì)量管理和長期維護的角度來說TDD是很有必要的,但我個人嘗試的結(jié)果是,設計完測試用例后,想到開發(fā)的目標不是實現(xiàn)功能,而是為了跑通測試,就感到毫無樂趣可言。這一點我自己也覺得很矛盾。

  寫到這里我又想到大神Linus說過的另一句話:”Regression testing” What’s that If it compiles, it is good; if it boots up, it is perfect. (“回歸測試”?這是什么東西?如果代碼能編譯就是好的,如果它啟動了,那就是完美的。)
  當然了,大神水平擺在那里,他有資本目空一切,咱確實沒資格仿效。但是我還是覺得TDD也有TDD的問題,測試是很重要,但把它擺到驅(qū)動開發(fā)的高度,就有點本末倒置了。這個是我自己的一點看法,本人對TDD了解得不深入,如果有謬誤之處,請多多指教。

4. 代碼可讀性

  要想自己滿意,代碼的可讀性一定要好。要做到一年后甚至幾年后你拿到自己寫的代碼,還能很容易看明白當時的思路和實現(xiàn)。這就涉及到命名和注釋的問題。

  命名就像超市里的商品標簽一樣,要讓看得人一目了然就知道這是個什么東西,比如你在員工類里定義了兩個屬性是到崗日期和離職日期,定義成date1和date2就沒有多少可讀性,定義成dateOnBoard和dateQuit就比較清晰一些。

  注釋也是很重要的,它可以用來說明一段代碼的作用,算法的設計思想,或者是方法調(diào)用的參數(shù)格式要求等。有人覺得命名就是注釋,代碼本身就為自己代言了。我覺得這種說法用來強調(diào)命名規(guī)范的重要性是很好的,但是因此說不需要注釋則有失偏頗。試想,如果Dijkstra首次發(fā)明最短路徑算法的時候,他給出的代碼里沒有一行注釋,即使所有的變量命名都定義得準確而嚴謹,又有幾個人能看懂他的算法呢?所以,在重要或者復雜的地方,都需要詳細地寫一些注釋,便于看代碼的人清晰地了解你的思路。

  最后總結(jié)一下:要想寫出自己滿意的代碼,首先不要急于動手,要先仔細想清楚思路性的東西,尤其是數(shù)據(jù)結(jié)構(gòu),然后在實現(xiàn)過程中大膽嘗試小心驗證,設計好測試用例,確保代碼的可讀性,就可以在代碼中表現(xiàn)出自己的最高水平。但畢竟各人水平是有差異的,自己滿意并不等于其他人欣賞。我對此的看法是,不求盡如人意,但求無愧我心,足矣。最后再


總結(jié)

以上是生活随笔為你收集整理的如何能出令自己满意的代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。