編者按:原文作者Alan Skorkin是一名軟件開(kāi)發(fā)人員,他在博客中分享對(duì)軟件開(kāi)發(fā)相關(guān)的心得,其中有很多優(yōu)秀的文章,本文是其中的另一篇。Alan認(rèn)為:閱讀優(yōu)秀代碼是提高開(kāi)發(fā)人員修為的一種捷徑。以下是全文。
我突然想起來(lái),很多程序員都討厭閱讀代碼。來(lái)吧,承認(rèn)吧! 每個(gè)人都喜歡編寫代碼,編代碼是件趣事。
另一方面,閱讀代碼也不容易。 不僅不容易,而且還非??菰?,咱們要面對(duì)這一事實(shí)。任何不是你的代碼都不怎樣。(雖然我們沒(méi)有說(shuō)出來(lái),但我們都是這樣想的。) 即便是你自己幾個(gè)小時(shí)之前寫的代碼,也會(huì)看起來(lái)很爛。時(shí)間越久,看起來(lái)越爛。 所以,為什么你要浪費(fèi)時(shí)間去看其他人的糟糕代碼,而你完全可以利用這段時(shí)間編寫你自己的優(yōu)秀代碼。
其實(shí)我們可以一試,幾個(gè)小時(shí)之后回頭再看,看看你的代碼是否還依舊優(yōu)秀。 如果你不能吸收前輩大師的經(jīng)驗(yàn)知識(shí),那你永遠(yuǎn)都無(wú)法成為一位大師。 成為大師的方法之一是,找到一位大師,讓其傾囊傳授其所知。 有這種可能么?當(dāng)然了,有這可能,雖然機(jī)會(huì)不大,但你必須極其走運(yùn)。 不過(guò)你不必十分走運(yùn),因?yàn)槲覀冃疫\(yùn)地處于這樣一個(gè)職業(yè),一個(gè)充滿著大師知識(shí)和技能的職業(yè),等待我們?nèi)ゼ橙∥?,這些東西就在他們所編寫的代碼中。 你要做的就是去閱讀代碼,當(dāng)然了,這或許耗時(shí)不少,畢竟沒(méi)有人坐在那里給你講解,但這種方法的成效還很高。 打個(gè)比方,要想成為一名卓越的木匠,得觀察大量結(jié)構(gòu)優(yōu)良的家具。
我喜愛(ài)閱讀代碼,我的直覺(jué)告訴我,你也會(huì)從中獲益頗豐。雖然閱讀過(guò)程惱人并煩人,但其回報(bào)是非常值得你為之努力的。 說(shuō)到這個(gè),如果你想成為一名卓越的作家,你會(huì)專注于寫作么? 你或許已經(jīng)嘗試,但你并沒(méi)有走得很遠(yuǎn)。 大多數(shù)的偉大作家也是如饑似渴的讀者,這是一個(gè)普遍事實(shí)。 在你能寫出任何拿得出手的東西之前,你需要品讀其他偉大作家,吸收不同的風(fēng)格,看看前輩已嘗試過(guò)的東西,從中吸取精華。 你的知識(shí)會(huì)慢慢增長(zhǎng),你自己的作品最終會(huì)透露出些許成熟,你也會(huì)找到一種“感覺(jué)”。 編寫代碼和寫作沒(méi)什么不同,如果你都沒(méi)有閱讀過(guò)任何卓越的代碼,你為什么期望自己能寫出像樣的代碼呢? 你顯然不應(yīng)該那樣。對(duì)于程序員來(lái)說(shuō),閱讀卓越代碼就如同作家閱讀優(yōu)秀書(shū)籍一樣重要。
即便所有這些都無(wú)法讓你信服,那這里有一個(gè)不可置否的事實(shí)。 對(duì)你作為一名專業(yè)開(kāi)發(fā)人員的生存來(lái)說(shuō),善于閱讀代碼至關(guān)重要。 如今,任何有一定規(guī)模的項(xiàng)目,都是團(tuán)隊(duì)的成果。所以,你通常要處理、修改和擴(kuò)展大量不是你寫的代碼。 因此,閱讀代碼可能是你能掌握的最常用并最有用的技能。挺過(guò)這個(gè)難關(guān),好好掌握。
如何閱讀代碼?像某些人一樣……
我已經(jīng)記不清有多少次看到程序員(用鼠標(biāo))滾上滾下地看著不熟悉的代碼,幾分鐘過(guò)后,他們的臉上浮現(xiàn)出不悅的表情。 他們不久后會(huì)宣告說(shuō),那代碼不值一讀,為什么要浪費(fèi)時(shí)間呢?我們只能用其他方法解決問(wèn)題。 我不確定(他們)在期待什么,是通過(guò)潛移默化來(lái)吸收代碼的含義,還是集中精神盯著代碼來(lái)得到啟發(fā)? 你不能只靠長(zhǎng)時(shí)間盯著代碼來(lái)閱讀代碼,你要理解它并化為己用。 這里有一些我喜歡用的技巧,雖然這不是一份詳盡的列表,但我發(fā)現(xiàn)其中有些特別有用。
如果我時(shí)間緊迫,需要快速合理地理解某些代碼,并且我只能挑選上述步驟的其中一個(gè),那我會(huì)選擇“重構(gòu)”(即:第8個(gè)步驟)。 雖然你能理解的東西不會(huì)很多,但那些你領(lǐng)會(huì)的東西,你會(huì)牢牢記住的。 總之,有件事你需要記在心里。 如果你新接觸一個(gè)重要的代碼庫(kù),你不可能立即能理解它。 這需要數(shù)天、數(shù)周和數(shù)月的潛心努力,接受這個(gè)事實(shí)。 即便有一位專家和你在一起,也不能明顯地縮短時(shí)間(。 然而,當(dāng)涉及到代碼庫(kù)時(shí),如果你能耐心并有條不紊地閱讀(和編寫)代碼,你最終能熟悉項(xiàng)目的方方面面,你能成為大牛。 你或者是逃避閱讀代碼,經(jīng)常尋求某人幫你講解某事。 我知道我會(huì)成為哪一種人。
尋找閱讀代碼的機(jī)遇 – 不要錯(cuò)失
我們喜歡編寫新代碼,是因?yàn)槲覀冞@次能正確處理問(wèn)題。 好吧,也許不是這次,但一定是下次。 事實(shí)上是,你經(jīng)常改進(jìn)你的技術(shù),但你從沒(méi)有恰當(dāng)?shù)靥幚韱?wèn)題。 這就是編寫新代碼的價(jià)值所在,你可以歷練并磨練你的技能,但閱讀和把玩其他人編寫的代碼,(如果沒(méi)有更多的價(jià)值,)也是有同樣多的價(jià)值。 你不僅能從中獲得一些有價(jià)值的技術(shù)知識(shí),也能收獲領(lǐng)域知識(shí),領(lǐng)域知識(shí)通常仍具更多價(jià)值(畢竟,代碼是文檔的最終形式)。
即便代碼寫得很神秘,無(wú)任何慣例可言,但還是有價(jià)值。 你知道我在說(shuō)的代碼,它幾乎看起來(lái)晦澀難懂,但不是有意而為之(因某些原因,Perl語(yǔ)言代碼通常是這樣的)。 不管什么時(shí)候我看到那樣的代碼,我都會(huì)這樣想: 把它想象成只有你破譯它后才能學(xué)到的東西。 是的,這是主要的痛楚之處,但要接受它,有時(shí)候你自己也會(huì)因瑣碎的原因而寫出那種使人困惑的代碼(否認(rèn)沒(méi)有用,你知道這是真的)。 好了,如果你花些時(shí)間來(lái)閱讀那樣的代碼,你更有可能最終寫出同樣的代碼。并不說(shuō)你將會(huì)寫出那樣的代碼,但你有能力寫出那樣的代碼。 最后,態(tài)度通常是最重要的(編注:態(tài)度決定一切)。 如果你視閱讀代碼為日常繁瑣的工作,那它就是(繁瑣的工作),并且你會(huì)逃避,但如果你視其為一個(gè)機(jī)遇,那好事終將到來(lái)。
Copyright@ 2011-2016 版權(quán)所有:大連千億科技有限公司 遼ICP備11013762-3號(hào) google網(wǎng)站地圖 百度網(wǎng)站地圖 網(wǎng)站地圖
公司地址:大連市沙河口區(qū)中山路692號(hào)辰熙星海國(guó)際2317 客服電話:0411-39943997 QQ:2088827823 37482752
法律聲明:未經(jīng)許可,任何模仿本站模板、轉(zhuǎn)載本站內(nèi)容等行為者,本站保留追究其法律責(zé)任的權(quán)利! 隱私權(quán)政策聲明