超載的程式設計師

發表於2012-03-13

英文原文:“Programmer” is an Overgeneralization,編譯:外刊IT評論

本文的作者 Erik McClure 是一個正在華盛頓大學攻讀應用數學的學生。

本文中幾次提到了 Donald Knuth——高德納(Donald Ervin Knuth,1938年 1 月 10 日-),出生於密爾沃基,美國著名電腦科學家,史丹佛大學計算機系榮譽退休教授。高德納教授被譽為現代電腦科學的鼻祖,在電腦科學及數學領域發表了 多部具廣泛影響的論文和著作。

高德納最為人知的事蹟是,他是《計算機程式設計藝術》(The Art of Computer Programming)的作者。此書是電腦科學界最受高度敬重的參考書籍之一。他創造了演算法分析的領域,在數個理論電腦科學的分支做出初步貢獻,此外還是排版軟體 TeX 和字型設計系統 Metafont 的發明人。

高德納 Donald Ervin Knuth

“注意上面這段程式碼;我只是感覺它沒問題,但沒有試過。” – Donald Knuth

今天早上,在 Google 上搜尋的時候,我偶然看到了一個帖子,作者聲稱:所有人都不該使用 C++ 標準庫裡的 make_heap 函式,因為,幾乎沒有人是在正確的使用它。我立即在心裡大罵這是多麼荒謬的斷言,因為任何人只要上過基本的演算法課程,都會知道如何正確的使用make_heap。然而,這讓我開始思考,如何看待那些不知道堆(heap)為何物的程式設計師,更甚者,那些並不需要知道它為何物的程式設計師。

最終,我認定,這兩種人,我們仍然應把他們稱作程式設計師。

當我還是個毛頭小夥的時候,很多我聽到的關於如何正確的程式設計的建議其實都是非常錯誤的。經過這些年,我發現,大多數這樣的這建議,其本身並沒有 問題,只是缺少相應的上下文環境。當今的這波創業浪潮給人們造成了一個有趣的印象,導致很多的程式設計師都開始相信“效能不是問題”,這個就是一種充滿風險和牽涉微妙的上下文環境的建議,尤其是當面對會出現意想不到的相互影響的複雜架構時更是要警惕。這種缺乏上下文的耳耳相傳的隻言片語的流行是一個很普遍的問題,而事實上,它是一個更深層問題的簡單表象。

程式設計師這個詞涵蓋了一個異常寬泛的技術譜系和層次。從縱座標上講,一個程式設計師,從能僅僅會用 vbscript,到能為因特爾 CPU 寫編譯器、為航空公司開發系統運算軟體。從橫座標上講,他可能是專長於資料庫,或能從 CPU 指令級別調整效能,或能開發並行處理庫,或製造物理過程引擎,或做圖片處理,或創作 3D 模型,或寫印表機驅動,或使用 coffeescript,HTML5,和 AJAX 來開發網站應用,或使用 nginx 和 PHP 開發 LAMP 架構 web 應用,或他能編寫網路應用庫或能做人工智慧科研。他們都是程式設計師。

這太荒唐了。

我們的世界正在被軟體吞噬。在將來,程式設計將會和數學和語文一樣成為基礎課程。我們將會有四個R——Reading (閱讀), ‘Riting, ‘Rithematic (數學), 和 Recursion (遞迴演算法)。到時,如果再說某某人是一個程式設計師將會是一句廢話,因為超過 10% 的人口將會具有一定水平的程式設計能力。“程式設計師”這個詞涵蓋了如此多的內容,如果你稱自己為程式設計師,就好象稱自己為“科學家”而不是“物理科學家”。我們能 有其他稱呼嗎?有人試圖做了這方面的嘗試,指出一個程式設計師和一個電腦科學家直接的不同之處,但說的毫無價值,根本無法區分我和一個從大學畢業的人工智慧 博士生之間的區別。他懂得多維數學分析,用函式式語言計算,這些是我不通過數年的研究是無法理解的。而我能夠寫出速度超快的,靈巧的 C++ 或 HLSL 彙編程式,能變戲法似的處理和變換矩陣,在螢幕上繪出漂亮的影象。我說的這兩種情況都是出於完全不同的原因下的極其複雜的工作,他不能完成我的,我不能完 成他的。一種操作對一個人很熟練,對另外一個人卻是困難的。但我們都是程式設計師。只是在我們各自的領域裡的程式設計師,我們是影象計算程式設計師或人工智慧程式設計師或[xxx]程式設計師。

你知道我們為什麼會有這樣毫無目標的語言論戰和毫無意義的關於哪一種語言更好用的爭論嗎?你知道為什麼人們——除非在自己的小圈子裡當“XX 方法”對所有人表示同一個意思的時候——永遠不能在這些問題是達成共識的原因嗎?因為我們賦予了自己過多的內容。我們把自己看成了由數個程式設計師組成——每 個都專長於某項東西,我們錯誤的認為我們的觀點能夠適用於我們的專長之外的領域。我們是工業工程師卻試圖想告訴化學家如何進行他們的試驗。我們是建築師卻 試圖想告訴英語專業的學生如何創作一篇論文——只是因為我們都用了大量的紙張。

這種態度深深的根植於計算機科技界的核心深處。電腦科學的主要目的是用一些基本資料結構來幫人們完成以前需要人做的所有事情。如果你認為這完 全是程式設計的事,那你就錯了,這是不可能的。我們忘了,這些資料結構只是我們在神奇的資料計算領域需要的,我們忽略了,對於不同的實現,需要對完全不同領域 的程式設計,針對的是完全不同的使用者。Donald Knuth 深知理論和實現之間的不同之處——我們需要認真的理解這些關於理論特定實現的忠告之間的區別。

如今,你已經不能因為一個人是程式設計師,你就可以隨意讓他開發任何東西。說一個程式設計師在開發軟體,就好像是說一個科學家在做科學研究。不同之處是,植物學科學家是不會去設計核反應堆的。

 

相關文章