2012年4月26日 星期四

程序員真的很懶

可能除了哲學家以外,筆者認為程序員是最懶的一群人。他們的職業看起來又似乎有一定的勞動強度。

想想看,生物學家要親自做所有的實驗…給數百隻小白鼠注射藥物不可能自動完成。醫生必須給病人進行身體檢查;教授每年都要教授同樣的課程;建築師從各個角度製定方案,並手工地將方案一筆一劃繪製出來。

讓我們再來看看更為辛苦的一些職業,情況更糟。營銷人員要不斷重複地進行同樣的產品宣傳;理髮師日復一日地做著同樣的事情;收營員每天都以相同的方式對貨物進行結算…工廠工人…

你面前呈現出了一幅圖片,世界上有很多這樣的人,他們每一小時,每一天,每一年,有些甚至一輩子都在重複做著幾乎相同的事情。 

來看看程序員

每當我們想連續兩次做同樣的事情時—我們會嘗試想一個方法來自動完成此過程。每當你寫的代碼是完成同樣的一件事時,你會開始尋找一個庫;每當你啟動一個類似的項目時,你會去尋找一個模板。

程序員的生活就是致力於消除重複的工作。

程序員真的很懶

將瑣碎地任務從我們的工作流程中剔除,這能讓每個人生活得更輕鬆。這裡有一個經典的笑話,說一個程序員情願用一周的時間來寫一個拷貝腳本,也不願意將相同的文件複製粘貼兩次,儘管複製粘貼可能只需要兩分鐘。

該死的,我們要遵循DRY(Don't Repeat Yourself不要重複自己)的原則。這個原則的基本內容是寧願創建一個令人費解的抽像類,也不要將不相同但非常相似的代碼寫兩次。

這當然會導致很多問題。

一般的軟件項目充滿了在頂層抽像類上構建的抽像類,你慢慢地會不清楚這些頂層抽像類將如何工作。甚至你完全不知道其代碼在做什麼。” Dizzying but invisible depth “,涉及到這個問題時,你真的應該讀讀這篇短文。

另一方面,懶惰本身已經證明了歷史上許多科學和工程發展所帶來的背後推動力。用有輪子的拖車運東西比人工搬運要輕鬆;用船在水中前行比游泳來得容易;甚至如果你他媽的想炸掉一座城市,你投擲一顆原子彈也比投擲幾千個小炸彈來的容易。

所以這也許並不是說程序員是懶惰的。也許真正懶惰地是工程師們。只是恰巧在這樣一個歷史時刻,程序員作為工程師中最鮮明的一類,總是將世界向更好更光明的未來推動。而其它大多數領域已經在某種程度上穩定下來,或者需要更長的時間去適應新的工具。

這裡有一個重要的問題要問:程序員天生就懶嗎?聰明懶惰的人容易被編程工作吸引嗎,或者這是一種社會效應?懶惰源於最好的編程實踐?還是最好的編程實踐源於懶惰呢?

 

一個比較

最近,我有機會將一個建築專業學生的一天與一個計算機科學專業的學生(就像我自己)的一天進行比較。

大多數的建築系學生的生活充滿了這樣或那樣勞動密集的任務,這些任務是她工作的一部分。在任何時候,她都有可能要對一些模型進行拼湊粘合,在AutoCAD中從50個不同的角度對同一個物體進行繪圖,或者在其它3D建模軟件中重複相同的事情…然後將這些圖片導入到Photoshop中成為真正好看的圖。

這種事會接連不斷的發生。我估計她花費在課程作業上的時間比她實際上課的時間多一倍還不止(事實上她說花了5倍還多)。更糟糕的是,更好的完成這些任務並不能真正加快完成任務的進程,這只是意味著你多知道了幾個鍵盤快捷鍵,意味著下次畫圖時你可能會少犯幾個錯誤。

熟練和精通完全無法優化關鍵的部分。

相比之下,當我不上課時,我通常都在做自己的項​​目。因為我可以,因為我有充足的時間。當有作業佈置下來時,一般情況下,我都可以在幾個小時內完成…即使是最關鍵最重要的項目,老師也很少給我們超過一周的時間來集中完成作業,最多兩週。

精通編碼並不意味著你打字更快(與建築專業中等同的能力不同)。它意味著想出的解決方案更容易實現,利用工具來達到事倍功半的效果​​,諸如此類。最終,通過互聯網進行測試評判,而實現過程是最無關緊要的部分,因為每個人都會。如果你有一天的時間,你可以實現某些東西。如果你有更多的時間,你可以使這些東西實現得更漂亮,模塊化更高,可重用性更強,等等。

基本上你能夠快速地實現眼前的任務,你工作中大部分時間都在致力於使你的任務完成得更加漂亮。但這對於你手頭的任務來說其實並不重要,你這樣做是因為你可以。

甚至於當程序員對自己的優化工作都產生厭倦時,他們會立馬轉而去創建工具來完成優化工作。

事情就這樣周而復始地重複著。

接下來的傢伙會使用他創建的新工具,使實現過程變得更快,接著優化它直到他最終厭倦,然後創建了一個新的更好的工具。

 所以…是辛苦的工作?

但回到我最初的觀點,辛苦工作對程序員的生產效率存在多大的影響?對於那些每天辛苦工作13小時以上,以取得競爭優勢的創業者來說,這又意味著什麼?這是值得考慮的一種優勢嗎?

 

辛苦的工作可能對程序員工作效率產生負面的影響。它掩蓋了背後所做的優化工作“哦,我可以手動把它完成,這將只需要10分鐘時間”(其實這需要20分鐘)。下一次,一個相似的任務到來時,你可能需要再次手動把它完成,長此以往…

最重要的是,辛勤地工作會使你變得很笨。許多研究表明,持續疲勞的狀態會使你做出錯誤的決策,甚至過多的決策也會讓你會出錯誤的決定(稱為決策疲勞)。事情上,這可能是我們喜歡創建抽像類並使用它們的原因—讓其它人做大多數的決策,這樣我就可以只專注於關鍵的部分。

但是,我仍然沒弄懂,到底是懶惰的人更喜歡編程,還是編程使他們變得懶惰… 

原文:Swizec Teller    

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...