程式設計師要學會讀原始碼

edithfang發表於2014-09-04
在“溝通”這個複雜的領域裡,寫出能讓人類領會並理解的連貫段落比敲出幾行讓直譯器或編譯器不致於“嘔吐”的軟體程式碼要難得多。

這就是為什麼——就軟體開發而言——所有的文件大概都是很差勁的。而且,由於為人寫作比為機器寫作要困難得多,文件恐怕在可預見的將來還會繼續差勁下去。對此,你基本上是無能為力的。

除了做一件事……

“盧克,學著去讀原始碼。”

譯者注:盧克(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應用程式框架。

處理封閉軟體的問題有兩個選擇:乞求他們的慷慨救援,或者採用變通方案。

對於開源軟體,如果他們的開發者不給力,建議像處理封閉軟體的問題那樣處理。

老到一些的軟體商家傾向於慢慢培養他們維護分支、補丁以及處理其他瑣碎事務的能力。

真正的駭客世界裡只有一個簡單的事實:如果一個軟體在我的機器上執行,那它就是我的軟體。我對它負責。我必須把它弄明白。從原始碼開始構建是一條必須遵循的原則,而且從不例外。我必須控制我的環境,我還要控制所有我依賴的東西。

沒有人是為了好玩才去讀別人的程式碼的。見鬼了,我甚至都不願意讀我自己的程式碼。想著你舒服地坐在皮椅上,穿著便裝,端上一杯白蘭地,閱讀著別人的程式碼來度過一個美妙的夜晚——這個念頭真是荒誕至極!

但是,我們需要能接觸到原始碼。我們必須閱讀別人的程式碼,因為我們只有理解了那些程式碼之後才能把我們自己的事情做好。所以,盧克,請你不要害怕閱讀原始碼——不管它看起來有多麼可怕,也不管它會把你帶向何方,跟它去吧!
來自:IT江湖
相關閱讀
評論(4)

相關文章