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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

老码农:如何写出让自己满意的代码

發(fā)布時(shí)間:2023/11/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 老码农:如何写出让自己满意的代码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天有位朋友在微博上問我這樣一個(gè)問題:

“@老碼農(nóng)的自留地 ,最近出于學(xué)習(xí)目的寫一個(gè)管理系統(tǒng),越到后邊,越覺得自己前邊的代碼寫得爛。前輩,我想讓代碼寫得更好一點(diǎn),能不能談?wù)勀愕慕?jīng)驗(yàn),給我指點(diǎn)一下!”

我在回復(fù)里剛寫了幾句,就意識到140個(gè)字很難把我的想法說清楚,本著知無不言言無不盡的好為人師精神,我決定把我的回答寫成一篇博文。

首先要說明的是,我寫這篇博客并不代表本人覺得自己的代碼寫得有多好。事實(shí)上我很清楚自己的水平,作為一個(gè)做應(yīng)用系統(tǒng)的程序員,和那些做框架做系統(tǒng)的大牛根本就不在一個(gè)層次。而且即使在應(yīng)用層次,我的水平大概也只能算二三流,只是因?yàn)闊釔劬幊趟砸恢痹谂Χ?#xff0c;但不管怎么說,能做自己喜歡的工作我已經(jīng)很滿足了。所以我稍微篡改了一下問題,針對“覺得自己前邊的代碼寫得爛”這個(gè)重點(diǎn),把這位朋友問的如何“讓代碼寫得更好一點(diǎn)”改成了“如何寫出讓自己滿意的代碼”

言歸正傳,我自己的體會是寫代碼很像寫作文,開始寫之前的構(gòu)思過程是最關(guān)鍵的。記得高中的時(shí)候,有位語文老師給我傳授的經(jīng)驗(yàn)是,至少花三分之一的時(shí)間來構(gòu)思,反復(fù)斟酌中心思想、各個(gè)段落的大意,文章的脈絡(luò),主要的修辭手法,等等。把這些要素都想清楚了,寫起來就可以一氣呵成。

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

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)于每個(gè)類的每個(gè)方法如何實(shí)現(xiàn)的問題。比如需要實(shí)現(xiàn)一個(gè)中位數(shù)查詢方法,如果你前面確定了數(shù)據(jù)保存的格式是一個(gè)列表,那么你可以考慮采用插入排序法;如果數(shù)據(jù)格式是自平衡二叉排序樹(AVL),則只需直接返回根節(jié)點(diǎn)就可以了。

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

2. 功能實(shí)現(xiàn)

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

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

3. 測試

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

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

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

4. 代碼可讀性

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

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

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

最后總結(jié)一下:要想寫出自己滿意的代碼,首先不要急于動手,要先仔細(xì)想清楚思路性的東西,尤其是數(shù)據(jù)結(jié)構(gòu),然后在實(shí)現(xiàn)過程中大膽嘗試小心驗(yàn)證,設(shè)計(jì)好測試用例,確保代碼的可讀性,就可以在代碼中表現(xiàn)出自己的最高水平。但畢竟各人水平是有差異的,自己滿意并不等于其他人欣賞。我對此的看法是,不求盡如人意,但求無愧我心,足矣。最后再啰嗦一句,技術(shù)水平是可以慢慢提高的,但是好的編程習(xí)慣需要從一開始就養(yǎng)成,它會讓你在前進(jìn)的道路上事半功倍,受益終生。

【更新】針對評論中提到的需求不確定導(dǎo)致設(shè)計(jì)和實(shí)現(xiàn)困難的問題,我又寫了一篇有關(guān)需求分析的文章:《關(guān)于需求分析的幾點(diǎn)體會》,歡迎批評指正。

本文作者: 伯樂在線 - 老碼農(nóng)
本文鏈接: http://blog.jobbole.com/47966/

轉(zhuǎn)載于:https://www.cnblogs.com/jjdiaries/p/3365875.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

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

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

主站蜘蛛池模板: 丰满岳妇伦在线播放 | 操碰视频在线 | 亚洲人人夜夜澡人人爽 | 91成人在线观看高潮 | 国产美女视频一区 | 午夜亚洲福利在线老司机 | 三级伦理片 | 天天天天天天操 | a在线v| 欧美日韩激情 | 免费观看日韩av | 熟女人妻一区二区三区免费看 | 男男啪啪网站 | 69视频网 | 不卡中文字幕在线 | 国产视频一区二区三 | wwwxxxx在线观看 | 日本乱码一区二区 | 精品视频一二 | 国产情侣一区二区三区 | 中文字幕日韩欧美在线 | 女人性高潮视频 | 91福利一区| 在线观看免费国产 | www.亚洲精品 | 日韩三级网 | 亚洲欧美999| 四虎精品欧美一区二区免费 | 午夜爱爱毛片xxxx视频免费看 | 极品销魂美女少妇尤物 | 国产精品一线天 | 青青青国产精品一区二区 | 国产精选网站 | 美女视频免费在线观看 | 国产人妖在线视频 | 武林美妇肉伦娇喘呻吟 | 18成人免费观看网站 | 不卡中文字幕 | 日韩高清久久 | 久久精品国产亚洲 | 天天操,夜夜操 | 国产乱子伦精品无码码专区 | 久久免费在线视频 | 美女少妇一区二区 | 久久国产乱子伦精品 | 久久免费精彩视频 | 免费啪视频在线观看 | 欧美色视频在线观看 | 强行挺进白丝老师里呻吟 | 第四色在线视频 | 欧美高清不卡 | 女女爱爱视频 | 欧美黄色小视频 | 在线无码va中文字幕无码 | 国产高清免费观看 | 国产伦精品一区二区三区在线观看 | 成人av影视在线 | 中文字幕网伦射乱中文 | 开心春色激情网 | 亚洲天堂导航 | 污视频免费在线 | 国产色一区二区 | 成人黄色一级视频 | 亚洲精品在线不卡 | 久久精品亚洲精品国产欧美 | 综合网在线视频 | 精品国产一区二区三区久久久 | 亚洲免费观看高清在线观看 | 国产激情一区二区三区四区 | 久久这里只有精品首页 | 瑟瑟视频在线免费观看 | 在线无 | 亚洲AV无码阿娇国产精品 | 国产精品久久久久久久久久久不卡 | h成人在线 | 久久福利一区 | 亚州一级 | 毛片在线免费 | 国产swag在线| 国产稀缺精品盗摄盗拍 | 天堂av2018| 夜夜嗨网站 | 国产精品久久伊人 | 国产精品麻豆视频 | 丰满人妻一区二区三区大胸 | 波多野结衣导航 | 久久精选| 一区二区天堂 | 成人在线免费观看视频 | 依人久久| 黑人精品一区二区三区 | 免费人成在线观看网站 | 国产三级全黄裸体 | 日韩特级片 | 一二三区免费 | 中文字幕日韩av | 神马午夜我不卡 | 狠狠干亚洲色图 | 67194av|