超載的程序員
本文的作者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 深知理論和實現之間的不同之處——我們需要認真的理解這些關于理論和特定實現的忠告之間的區別。
如今,你已經不能因為一個人是程序員,你就可以隨意讓他開發任何東西。說一個程序員在開發軟件,就好像是說一個科學家在做科學研究。不同之處是,植物學科學家是不會去設計核反應堆的。本文轉載自: 外刊IT評論 http://www.aqee.net/