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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

我为何爱读代码?你为何也应当爱?

發(fā)布時(shí)間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我为何爱读代码?你为何也应当爱? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我為何愛(ài)讀代碼?你為何也應(yīng)當(dāng)愛(ài)?

我恨讀代碼

我發(fā)現(xiàn),許多程序員都討厭讀代碼——拜托別掩飾了,承認(rèn)吧。差不多每個(gè)人都喜歡寫(xiě)代碼——寫(xiě)代碼樂(lè)在其中。可是,讀代碼真是不容易,而且還很煩人,又無(wú)可逃避,其他人寫(xiě)的代碼總是很垃圾(即便不說(shuō),我們心里也這么想的)。即使自己寫(xiě)的代碼,過(guò)幾個(gè)小時(shí)再看也有點(diǎn)垃圾,過(guò)的時(shí)間再久點(diǎn),就更垃圾了。那么,還有什么理由去看別人的蹩腳代碼,而是不自己寫(xiě)幾手漂亮的?能不能暫且忽略這個(gè)問(wèn)題,花上幾個(gè)小時(shí)看別人的代碼,再回頭來(lái)看自己的是不是還那么漂亮?即便有位大師坐在你面前,如果你不能從他身上學(xué)習(xí),你永遠(yuǎn)也成不了大師。辦法之一就是找到這么一位大師,讓他手把手地教會(huì)你全部知識(shí)。有這可能嗎?——當(dāng)然有,只是很難遇到這頂好的運(yùn)氣。不過(guò)你也不必奢求那么幸運(yùn),做程序員這行就很幸運(yùn),因?yàn)榇髱焸兊乃兴枷牒图妓嚩寄T在他們的代碼里,供我們學(xué)習(xí)。你要做的只是閱讀代碼——當(dāng)然,如果有人給你一點(diǎn)點(diǎn)地講肯定更節(jié)省時(shí)間,但這基本屬于癡人說(shuō)夢(mèng)。換句話(huà)說(shuō),要相當(dāng)個(gè)好木匠,得仔細(xì)研究大量的精美家具。

我熱愛(ài)讀代碼,我總是直觀地認(rèn)為讀代碼的收獲很大,沒(méi)錯(cuò),它可能有點(diǎn)討厭甚至煩人,但你的收益絕對(duì)大過(guò)這點(diǎn)麻煩。舉個(gè)例子,你要當(dāng)大作家,是不是只關(guān)心自己寫(xiě)東西就夠了?你可以試試看,但是估計(jì)不會(huì)折騰不出什么名堂。公認(rèn)的事實(shí)是,多數(shù)大作家都是會(huì)如饑似渴大量閱讀的。想寫(xiě)出好的作品,必須先閱讀其他大作家的作品,吸收不同的風(fēng)格,了解他人的嘗試,然后才可以培養(yǎng)自己的創(chuàng)造力。這樣,你的知識(shí)才能逐漸積累,最終你寫(xiě)的東西才有幾分成熟,你也才會(huì)找到“感覺(jué)”。寫(xiě)代碼也是這樣,如果你不去閱讀那些偉大的代碼,怎么可能把程序?qū)懙钠?/span>?閱讀偉大的代碼之于程序員,就如同閱讀偉大作品之于作家(我不敢掠美,這句話(huà)是Peter Norvig(譯注:Peter Norvig是著名的Lisp程序員,現(xiàn)任Google研發(fā)總監(jiān))說(shuō)的,他可不是個(gè)簡(jiǎn)單人物,所以好好記住這句話(huà)吧)。

即使上面說(shuō)的你都不信,但有個(gè)事實(shí)無(wú)可否認(rèn)。要想當(dāng)個(gè)稱(chēng)職的開(kāi)發(fā)人員,能熟練閱讀代碼是非常重要的。如今,只要不是鬧著玩的項(xiàng)目,都是團(tuán)隊(duì)協(xié)作的成果,所以總會(huì)有這樣的代碼:它不是你寫(xiě)的,但你必須跟它打交道,去修改,或者去擴(kuò)展。于是,閱讀代碼很可能就是你身上最重要最常用的能力了,咬緊牙關(guān)練好這門(mén)本事吧——而且,要快。

要像…會(huì)讀代碼的那些家伙一樣…閱讀代碼

我都說(shuō)不清有多少次見(jiàn)過(guò)這樣的事情了:程序員把一段不熟悉的代碼上下拖動(dòng),幾分鐘之后仍然一臉迷離。不久他們就宣布,這段代碼根本沒(méi)法看懂,更不必浪費(fèi)時(shí)間了,可以想辦法繞過(guò)這個(gè)問(wèn)題。我不知道他們真正要做的是什么,一點(diǎn)點(diǎn)弄明白這段代碼的意思,還是睜大眼睛等著開(kāi)竅?閱讀代碼不靠成年累月死盯著看,你要做的是弄懂它,把它變成自己的。下面說(shuō)的是我用的一些技巧,但不是全部,不過(guò)我覺(jué)得這些非常有用。

?

看代碼看到目光迷離

1.?嘗試親自構(gòu)建和運(yùn)行程序。通常這一步很容易做到,比如你看的是真正運(yùn)行的工作代碼時(shí)(而不是不知來(lái)源的古怪代碼)就是如此。不過(guò)也不是每次都很容易,如果不能很容易地構(gòu)建和運(yùn)行,你可以在完成構(gòu)建和運(yùn)行的過(guò)程中,認(rèn)識(shí)到代碼的高層結(jié)構(gòu)。而且,閱讀工作代碼,你會(huì)非常熟悉如何構(gòu)建項(xiàng)目。構(gòu)建通常是復(fù)雜的,但是了解構(gòu)建過(guò)程,知道代碼是如何變?yōu)榭蓤?zhí)行程序的,會(huì)大大加深你的理解。

2.?別死盯細(xì)節(jié)。讀代碼要做的第一件事,是找到對(duì)代碼的結(jié)構(gòu)和風(fēng)格的感覺(jué)。開(kāi)始應(yīng)當(dāng)瀏覽,并且努力找出各部分代碼都在干什么。這樣你能熟悉整套代碼的高層結(jié)構(gòu),也會(huì)明白你正在看的是什么樣的代碼(重構(gòu)良好的,還是亂成一團(tuán)的)。這時(shí)候你要做的就是找到入口(可能是main函數(shù),也可能是servlet,controller之類(lèi)),看看下面的分支是怎么展開(kāi)的。這一步不要花太多時(shí)間,你對(duì)全部代碼更熟悉之后,隨時(shí)可以退回來(lái)。

3.?確保理解所有構(gòu)造(construct)。除非你非常精通這門(mén)編程語(yǔ)言,否則多半還有些東西是你不知道的。在概略了解代碼的階段,要記下每一個(gè)不熟悉的構(gòu)造。如果這樣的構(gòu)造有很多,下一步就不言自明了。如果搞不懂代碼行為的意義,你什么也干不了。即便你不熟悉的只是少數(shù)構(gòu)造,仔細(xì)觀察推敲沒(méi)準(zhǔn)也是好事。你可能會(huì)找到一些以前不知道的關(guān)于這門(mén)編程語(yǔ)言的知識(shí),我就很樂(lè)意為此花上幾個(gè)小時(shí)。

4.?待熟悉了大多數(shù)構(gòu)造之后,就可以搞幾次隨機(jī)的深入探查了。做法類(lèi)似第2步,快速瀏覽代碼庫(kù),但是這次要隨機(jī)抽幾個(gè)函數(shù)或者類(lèi),一行行地看下去。真正的考驗(yàn)現(xiàn)在才開(kāi)始,但你的收益也是從這一步開(kāi)始顯現(xiàn)。主旨是:真正深入到你所閱讀的整套代碼的概念體系(組件結(jié)構(gòu))當(dāng)中。這又是一個(gè)速度快不起來(lái)的步驟,但是在這一步,一定要嘗試深入理解若干繁雜的細(xì)節(jié)。和第2步一樣,在這一步,每次你多了解了一些上下文再回頭看看,你的理解就更深入一些。

5.?前幾步中肯定還有你不明白的地方,現(xiàn)在最合適的就是跑幾個(gè)測(cè)試,看看已有的測(cè)試。測(cè)試很可能會(huì)大大打消你的疑惑,加深你對(duì)所測(cè)試代碼的理解。我時(shí)常不能理解,為什么有些開(kāi)發(fā)人員在閱讀和理解代碼時(shí),忽略嚴(yán)密而精巧的測(cè)試套件。當(dāng)然,也有時(shí)候是因?yàn)闆](méi)有測(cè)試程序。

6.?如果沒(méi)有測(cè)試程序,這時(shí)候就該寫(xiě)上幾個(gè)。這樣做有很多好處,它會(huì)加深自己的理解,它可以完善整個(gè)代碼庫(kù),在閱讀代碼的時(shí)候也在寫(xiě)代碼,這樣對(duì)已有代碼和你都有好處,你也可以真正動(dòng)手參與進(jìn)去。即便有現(xiàn)成的測(cè)試程序,為了加深自己的理解,你也可以再寫(xiě)一些。測(cè)試人家的代碼,一般要求換個(gè)角度思考,之前你感到迷惑的概念也會(huì)變得更清楚。

7.?把弄不懂的部分拿到單獨(dú)的程序中來(lái)。我發(fā)現(xiàn),讀代碼時(shí)這樣做,哪怕只是為了調(diào)節(jié)閱讀的節(jié)奏,也是非常有樂(lè)趣的。即使你不理解代碼的底層細(xì)節(jié),也可能會(huì)對(duì)代碼的功能有些高層面的想法。那為什么不把一些功能抽到單獨(dú)的程序中測(cè)試呢?如果只運(yùn)行一小段程序,debug就容易多了,而且這樣的過(guò)程反過(guò)來(lái)又會(huì)加深你的理解。

8.?代碼很亂(dirty)很糟糕(smelly)?那么重構(gòu)吧。我可不是建議你把整個(gè)代碼庫(kù)推倒重來(lái),但是重構(gòu)一些部分確實(shí)可以讓你的理解更上層樓。一開(kāi)始要做的是把你明白了的功能變?yōu)楠?dú)立的函數(shù)。在你真正理解之前,重構(gòu)之前的函數(shù)只是看起來(lái)沒(méi)問(wèn)題,而重構(gòu)可以把它們變成你想要的樣子。依靠重構(gòu),你可以把代碼變成自己的,而不要全部重寫(xiě)。好的測(cè)試程序可以幫上忙,不過(guò)如果你沒(méi)有,就一邊測(cè)試一邊重構(gòu)吧,而且只改動(dòng)那些你確認(rèn)弄懂了的功能。即便測(cè)試看起來(lái)太少太不完善,也要相信你自己的開(kāi)發(fā)水平,有時(shí)候你只管大膽嘗試就好(如果確實(shí)需要,總是可以回退(revert)的)。

9.?如果上面說(shuō)的都不管用,就找個(gè)同伴跟你一起讀代碼。能從讀代碼中受益的可能并不只有你一個(gè)人,所以不妨抓住其他人,一起閱讀。不過(guò)別找專(zhuān)家,他們給你的解釋都是高層面的,這樣看代碼時(shí)注意的那些細(xì)節(jié)就都被忽略了。如果找不到人一起閱讀,你又實(shí)在看不懂,有時(shí)最好的辦法就是問(wèn)別人。可以問(wèn)你的同事,如果你在讀的代碼是開(kāi)源的,也可以在網(wǎng)上問(wèn)問(wèn)其他人。記住,這只是最后的辦法,不要一開(kāi)始就這么做。

如果時(shí)間很緊張,短時(shí)間內(nèi)必須弄懂某些代碼,上面的步驟中只能選一步,我會(huì)選擇重構(gòu)(第8步)。你可能沒(méi)法明白太多東西,但你肯定可以理解真正動(dòng)過(guò)的部分。無(wú)論時(shí)間是不是緊張,你要記住的是:如果你第一次接觸重要的代碼庫(kù),肯定不能一下子就看懂,甚至不可能很快看懂。你可能需要耐心讀上幾天,幾周甚至幾個(gè)月——坦然面對(duì)就好。即便有專(zhuān)家坐在你身邊,也省不了太多時(shí)間(我寫(xiě)的關(guān)于教和學(xué)的系列文章最后一篇就會(huì)談這個(gè)問(wèn)題)。如果你讀(或者寫(xiě))代碼的耐心足夠,方法得當(dāng),你肯定能成為對(duì)項(xiàng)目所有方面都非常熟悉的人,也是大家對(duì)代碼庫(kù)有問(wèn)題時(shí)出面解答問(wèn)題的人。你也可以不閱讀代碼,選擇成為那個(gè)總想找人來(lái)解釋的家伙。我想要做哪樣的人,我自己很清楚。

抓住閱讀代碼的機(jī)會(huì),別錯(cuò)過(guò)

我們都喜歡新寫(xiě)代碼,它的誘惑力在于,我們能搞定問(wèn)題。起碼,這次搞不定,下次可以搞定。真相是:你在實(shí)踐中不斷提高,永遠(yuǎn)不可能一下就徹底搞定。這就是新寫(xiě)代碼的價(jià)值所在,你在練習(xí),你的水平在提高,但是閱讀和改動(dòng)其他人寫(xiě)的代碼也很有價(jià)值(至少不亞于自己重新寫(xiě)),從中你學(xué)習(xí)到的不光是有價(jià)值的技術(shù)知識(shí),還有關(guān)于整個(gè)工作領(lǐng)域的知識(shí)(畢竟,代碼才是文檔的最終形式),這種知識(shí)通常更有價(jià)值。

每一段不遵循傳統(tǒng)的,莫測(cè)難懂的代碼,都是有價(jià)值的。你知道我說(shuō)的是什么,雖然它看起來(lái)一團(tuán)糟,但本意并非如此(也可能因?yàn)樗荘erl代碼:))。每次我看到這樣的代碼,我都這么想。不妨把閱讀它當(dāng)作猜謎游戲,想想你能學(xué)到什么。是的,這很折磨人,但必須承認(rèn),你也希望能動(dòng)手就能寫(xiě)出這么糟糕的代碼。如果你花時(shí)間閱讀這樣的代碼,你肯定更可能寫(xiě)出這樣的代碼——這倒不是說(shuō),你一定會(huì)寫(xiě)這樣的代碼,但你肯定希望自己能夠。最后要說(shuō)的是,態(tài)度總是非常重要的。如果你把閱讀代碼看作閑雜事,那它就是閑雜事,而你肯定會(huì)逃避,但是如果你把它看成機(jī)會(huì),事情就不一樣了。

from:?http://home.ustc.edu.cn/~danewang/c/code_reading.htm

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的我为何爱读代码?你为何也应当爱?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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