為什麼我還在程式設計

唐尤華發表於2012-07-10

英文原文:  Daniel Lemire   編譯:伯樂線上 – 唐尤華

人們通常認為,隨著你不斷成長你可能不再承擔像是編寫程式這樣的實際工作,而是轉而從事更高層次像是管理團隊和募集資金這樣的任務。在學術界尤其如此,“真正的教授”會把細節分配出去只負責“巨集觀的事物”。換句話說,組織會呈現縱向協作:在這樣的組織結構裡,位於頂層的人負責監督其他(廉價)的僱員。在研究領域,這意味著資深科學家把想法交給青年科學家去實現。世易時移,資深科學家可能無法完成青年科學家從事的工作,但是他們會轉變成募集科研資金的專家。這個模型會不斷放大:資深科學家領導中層科學家,而後者負責管理年輕的科學家,如此這般。Jorge Cham將這種模型稱為Profzi模式,因為只有資金充足且不斷增加的情況下這種模式才能運作得更好。

與之對應的是橫向協作。在橫向合作中,資深科學家會參與一切活動,從一個偉大的創意到最後的實現。他們會盡可能地避免繁雜的工作或者開動腦筋將其自動化。通常協作是為了獲得不同的觀點或者互補的知識。即使資金緊張這種模式依然有效,但當很多人員加入時會產生各種問題——橫向協作過於地緊密。

Daniel Lemire

(本文作者:加拿大新不倫瑞克大學副教授Daniel Lemire)

不同的模式分別適用於不同型別的工作。我認為縱向協作適用於長期且可預期結果的計劃,橫向協作適用於需要機遇和“瘋狂”創意的情況。

我傾向橫向協作,標誌之一就是儘管年紀很大但我還在程式設計。這是不同尋常的,以至於人們會為此皺起眉頭。有些程式設計工作需要很多時間投入,一年中我會花2到3個月編寫程式。也許我的時間是非常寶貴的,不應該浪費在類似程式設計這樣的底層工作。我完全可以花一些錢把它們交給別人完成。那麼為什麼我還需要程式設計?

也許Donald Knuth大師的這段話就是對此最好的註解:

那些致力於更高層次和抽象思維的人們通常會錯誤地認為低層次的具體想法相對而言沒有價值而且很可能被人遺忘。…… 恰恰相反,最好的電腦科學家需要透徹地瞭解計算機實際執行的基本概念,而且電腦科學的精髓就在於能夠同時理解眾多層次抽象的能力。

然而我也有自己的看法:

• 我希望自己的工作是重要且具有影響力的。即便是被廣泛引用的研究論文都少有人閱讀,很少有研究論文能夠產生重要的影響。然而,從事和軟體相關的工作會相對容易。比如,最近Facebook的一個小組整合了我釋出在Apache Hive上的一個壓縮點陣圖索引庫:基於Hadoop的資料倉儲框架。如果為Facebook是否有人讀過我為這個軟體撰寫的論文打賭,我肯定會賺到一大筆錢。

• 一次又一次的實踐,迫使對自己的想法有著更好地理解。通常的情況是,在論文裡看上去非常棒的想法實現起來卻非常棘手。我也經常在實施過程中發現文章中數學論證存在bug,怎麼可能把這項工作外包給其他人呢?也許我可以這麼做,但結果一定不會得到豐碩的成果。

• 隨著時間的推移,你的程式設計水平會變得更好。我花費幾十年時間鍛鍊自己的專長。當你花上幾天時間從頭開始並解掉一個難題之後,瞭解到別人可能要花上幾周甚至幾個月的時間,這種感覺是非常享受的。

假設我的論點合理,而且Donald Knuth也贊同我的觀點,那麼為什麼當我承認自己是一名程式設計師科學家時人們會對此驚訝不已呢?我想這是因為人們會拒絕程式設計這樣低層次的工作,這一點從《有閒階級論》中就可以看出。實際上,我們往往追求名望而不是實用。製作工具、烹飪或種田不會帶來聲望。為了最大限度地提升自己的聲望,你必須上升到有閒階級:你的工作一定不要產生實際的作用。因此,成為一名CEO或政客要比成為護士或者廚師帶來更大的聲望。那些離現實世界更遠的科學家們會更加有聲望。程式設計是一項類似製作工具的工作,因此來自有閒階級的人們不會喜歡。人們會把自己稱作工程師、分析師或是開發者,但很少稱自己為“程式設計師”,因為這會顯得太功利。

Theory of the leisure class 有閒階級論

 

注意:並非每個人都應該程式設計。這是一項非常耗時的活動。因為我花費了很多時間程式設計,因而無法去參與很多其他令人興奮的事情。

進一步的閱讀:《設計原本》,2010,Brooks

 

英文原文:  Daniel Lemire   編譯:伯樂線上 – 唐尤華

【如需轉載,請標註並保留原文連結、譯文連結和譯者等資訊,謝謝合作!】

 

相關文章