為什么我還在編程
英文原文:Why I still program
人們通常認為,隨著你不斷成長你可能不再承擔像是編寫程序這樣的實際工作,而是轉而從事更高層次像是管理團隊和募集資金這樣的任務。在學術界尤其如此,“真正的教授”會把細節分配出去只負責“宏觀的事物”。換句話說,組織會呈現縱向協作: 在這樣的組織結構里,位于頂層的人負責監督其他(廉價)的雇員。在研究領域,這意味著資深科學家把想法交給青年科學家去實現。世易時移,資深科學家可能無 法完成青年科學家從事的工作,但是他們會轉變成募集科研資金的專家。這個模型會不斷放大:資深科學家領導中層科學家,而后者負責管理年輕的科學家,如此這 般。Jorge Cham 將這種模型稱為 Profzi 模式,因為只有資金充足且不斷增加的情況下這種模式才能運作得更好。
與之對應的是橫向協作。在橫向合作中,資深科學家會參與一切活動,從一個偉大的創意到最后的實現。他們會盡可能地避免繁雜的工作或者開動腦筋將 其自動化。通常協作是為了獲得不同的觀點或者互補的知識。即使資金緊張這種模式依然有效,但當很多人員加入時會產生各種問題——橫向協作過于地緊密。
(本文作者:加拿大新不倫瑞克大學副教授 Daniel Lemire)
不同的模式分別適用于不同類型的工作。我認為縱向協作適用于長期且可預期結果的計劃,橫向協作適用于需要機遇和“瘋狂”創意的情況。
我傾向橫向協作,標志之一就是盡管年紀很大但我還在編程。這是不同尋常的,以至于人們會為此皺起眉頭。有些編程工作需要很多時間投入,一年中我 會花 2 到 3 個月編寫程序。也許我的時間是非常寶貴的,不應該浪費在類似編程這樣的底層工作。我完全可以花一些錢把它們交給別人完成。那么為什么我還需要編程?
也許 Donald Knuth 大師的這段話就是對此最好的注解:
那些致力于更高層次和抽象思維的人們通常會錯誤地認為低層次的具體想法相對而言沒有價值而且很可能被人遺忘。…… 恰恰相反,最好的計算機科學家需要透徹地了解計算機實際運行的基本概念,而且計算機科學的精髓就在于能夠同時理解眾多層次抽象的能力。
然而我也有自己的看法:
我希望自己的工作是重要且具有影響力的。即便是被廣泛引用的研究論文都少有人閱讀,很少有研究論文能夠產生重要的影響。然而,從事和軟件相關的工作會相對容易。比如,最近 非死book 的一個小組集成了我發布在 Apache Hive 上的一個壓縮位圖索引庫:基于 Hadoop 的數據倉庫框架。如果為 非死book 是否有人讀過我為這個軟件撰寫的論文打賭,我肯定會賺到一大筆錢。
一次又一次的實踐,迫使對自己的想法有著更好地理解。通常的情況是,在論文里看上去非常棒的想法實現起來卻非常棘手。我也經常在實施過程中發現文章中數學論證存在 bug,怎么可能把這項工作外包給其他人呢?也許我可以這么做,但結果一定不會得到豐碩的成果。
隨著時間的推移,你的編程水平會變得更好。我花費幾十年時間鍛煉自己的專長。當你花上幾天時間從頭開始并解掉一個難題之后,了解到別人可能要花上幾周甚至幾個月的時間,這種感覺是非常享受的。
假設我的論點合理,而且 Donald Knuth 也贊同我的觀點,那么為什么當我承認自己是一名程序員科學家時人們會對此驚訝不已呢?我想這是因為人們會拒絕編程這樣低層次的工作,這一點從《有閑階級論》 中就可以看出。實際上,我們往往追求名望而不是實用。制作工具、烹飪或種田不會帶來聲望。為了最大限度地提升自己的聲望,你必須上升到有閑階級:你的工作 一定不要產生實際的作用。因此,成為一名 CEO 或政客要比成為護士或者廚師帶來更大的聲望。那些離現實世界更遠的科學家們會更加有聲望。編程是一項類似制作工具的工作,因此來自有閑階級的人們不會喜 歡。人們會把自己稱作工程師、分析師或是開發者,但很少稱自己為“程序員”,因為這會顯得太功利。
注意:并非每個人都應該編程。這是一項非常耗時的活動。因為我花費了很多時間編程,因而無法去參與很多其他令人興奮的事情。
進一步的閱讀:《設計原本》,2010,Brooks
英文原文: Daniel Lemire 編譯:伯樂在線 – 唐尤華