程序员要学会读源代码
在“溝通”這個復雜的領域里,寫出能讓人類領會并理解的連貫段落比敲出幾行讓解釋器或編譯器不致于“嘔吐”的軟件代碼要難得多。
這就是為什么——就軟件開發而言——所有的文檔大概都是很差勁的。而且,由于為人寫作比為機器寫作要困難得多,文檔恐怕在可預見的將來還會繼續差勁下去。對此,你基本上是無能為力的。
除了做一件事……
“盧克,學著去讀源代碼。”
譯者注:盧克(Luke Skywalker)是電影《星球大戰》中的一個角色,他來自塔圖因星球,在發現了莉雅公主輸入到機器人R2-D2中的求救信息后,他與絕地騎士歐比旺一起迎戰邪惡的銀河帝國,最終救出了公主。《星球大戰》系列電影是由盧卡斯電影公司出品的科幻電影。盧卡斯電影公司首先于1977年推出了《星球大戰》,之后又分別于1980年和1983年推出了《星球大戰2》和《星球大戰3》。之后又分別于1999年、2002年和2005年推出了3部《星球大戰前傳》系列。
JavaScript“始終帶有源代碼”是一股革命性的力量,這也是我提出“阿特伍德法則”的一個主要原因(我對這個法則至今仍然堅信不疑)。即使“查看源代碼”(View Source)這個功能沒有內嵌(但它完全應該有),你也應該要求查閱在你的軟件之下的基礎源代碼的權限。不管文檔上面怎么說,源代碼才是最終的事實,是你所能找到的最好的、最確定的、最新的“文檔”。這個事實永遠不會改變,所以你越早接受這個事實,你作為一名軟件開發者的境況就會越好。
譯者注:“阿特伍德定律”(Atwood’s Law)是作者自己提出的一個觀點,內容是:任何可以用JavaScript來寫的應用,最終都將用JavaScript來寫。
我本來想針對這個問題好好地寫一寫,但是后來在Hacker News網站上發現Brandon Bloom已經寫了一個很棒的帖子。我自愧不如。大家去認真讀一下吧,因為他解釋了閱讀源代碼的好處,以及在何種情況下你需要閱讀源代碼。
我大約在15歲的時候就開始在微軟的平臺上工作了,并且以此為業。我曾經作為一名軟件開發員為微軟在Visual Studio上面做集成工作。從我寫下第一行Visual Basic代碼后的十多年以來,我希望我可以再也不用和一個封閉的庫去鏈接了。
使用軟件和開發軟件是不一樣的。當你使用大多數軟件的基本功能時,一般不會出現什么問題,因為這條“老”路已經被人走過了很多遍。也許其他一些人碰到了問題,并且有足夠多的人把這些問題反映出來,這樣會促使核心開發人員修正這些問題。而當你在開發軟件的時候,你是在做一些“新”東西。而且,把東西做出來可以有很多條“路”,你會碰到之前從來沒有接觸過的部分、到達早已腐蝕的角落、走到那些尚未完成的試驗性質的代碼路徑。你會遇到一些邊緣情況,它們的問題是已知的,但從來沒有被真正地解決過(之前只是被繞開了)。
有些時候,文檔是不完整的。有些時候,它干脆就是錯誤的。源代碼是從來不會撒謊的。對于一名有經驗的程序員來說,閱讀源代碼通常會更快些(尤其在你已經熟悉了軟件包架構的情況下)……我現在和幾個創業公司在一個中等規模的共享辦公區域里一起工作。很多其他公司的首席技術官和工程師都時常跑到我們團隊來尋求指導和建議。當他們帶著有問題的軟件過來的時候,我問他們的第一個問題就是:“嘿,你看過源代碼了嗎?”
我鼓勵開發人員“Git?clone”他們依賴的所有源代碼。起初,他們都有些害怕。“那個項目太大了。我永遠也無法把問題找出來!”“我沒那么聰明,看不懂那些代碼。”“那些代碼太難看了!簡直慘不忍睹!”但是,你不必把那些代碼翻個底朝天,而只需要跟著線索走。況且,如果你不能理解你所依賴的平臺,你又怎么能駕馭你自己的軟件呢?在大多數情況下,菜鳥程序員認為漂亮的,往往止于膚淺;而他們認為丑陋的,往往是駭客大師們所寫的久經考驗的產品級代碼。現在,在經過了一兩年之后,有幾個開發人員專程過來找我,感謝我當初強迫他們在別人的代碼里“潛水”或者“暢游”。他們現在的技能都比以前大有長進,而且他們還感嘆:真不知道過去在沒有別人源代碼的時候是怎么把事情做好的……
譯者注:git是一個在開源社區里廣泛應用的源代碼管理工具。git clone是一條命令,能把遠程的源代碼復制到本機。
當你運營一個公司的時候,如果你的軟件出了故障,你的客戶不會在乎是你的失誤還是Linus的,或者是由Rails的開發人員造成的。他們只知道是你的軟件出了問題。所有其他人的軟件都成了你的軟件,因為他們的錯誤都算到了你的頭上。一旦有故障發生,你需要找出問題,并且把它修好。你需要在“應用鏈”的合適位置把它修復,以減少風險、維護成本以及周轉時間。有時候,一個快速的權變措施是最好的;而在其他時候,你得重新編譯你的代碼。很多時候,你可以讓其他人在上游把問題修復了;但是也有很多時候,你得自己動手解決。
譯者注:Linus Torvalds(李納斯·托瓦茲),是Linux核心的創作者,人稱“Linux之父”。美國《時代》周刊對他的評價極高:“有些人生來就具有統率百萬人的領袖風范;另一些人則是為寫出顛覆世界的軟件而生。唯一一個能同時做到這兩者的人,就是托瓦茲。”甚至,在《時代》周刊根據讀者投票評選出的20世紀100位最重要的人物中,李納斯居然排到了第15位,而比爾·蓋茨不過才是第17位。
譯者注:Rails即指Ruby on rails,是一個構建在Ruby語言之上的Web應用程序框架。
- 處理封閉軟件的問題有兩個選擇:乞求他們的慷慨救援,或者采用變通方案。
- 對于開源軟件,如果他們的開發者不給力,建議像處理封閉軟件的問題那樣處理。
- 老到一些的軟件商家傾向于慢慢培養他們維護分支、補丁以及處理其他瑣碎事務的能力。
真正的駭客世界里只有一個簡單的事實:如果一個軟件在我的機器上運行,那它就是我的軟件。我對它負責。我必須把它弄明白。從源代碼開始構建是一條必須遵循的原則,而且從不例外。我必須控制我的環境,我還要控制所有我依賴的東西。
沒有人是為了好玩才去讀別人的代碼的。見鬼了,我甚至都不愿意讀我自己的代碼。想著你舒服地坐在皮椅上,穿著便裝,端上一杯白蘭地,閱讀著別人的代碼來度過一個美妙的夜晚——這個念頭真是荒誕至極!
但是,我們需要能接觸到源代碼。我們必須閱讀別人的代碼,因為我們只有理解了那些代碼之后才能把我們自己的事情做好。所以,盧克,請你不要害怕閱讀源代碼——不管它看起來有多么可怕,也不管它會把你帶向何方,跟它去吧!
from:?http://blog.csdn.net/happydeer/article/details/18772735
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的程序员要学会读源代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 别为了学编程而学编程
- 下一篇: Jeff Atwood倾情推荐——程序员