導讀:這是一篇來自譯言網的文章,作者認為,計算機是否正在走向消亡是一個假命題,之所以有人這么認為是因為人們對計算機科學存有某種誤解。當這種誤解消除之后,計算機科學將走上平穩的發展之路。 |
計算機科學正在消亡嗎?
既然蘋果正在盈利,專家們需要一個即將發生厄運的對象作為預測目標。有人似乎盯上了計算機科學,正是這激發David Chisnall懷疑這個學科是否真的正在走向消亡。
在20世紀90年代末,第一次商業網站泡沫期間,有這樣一種觀念,計算機科學學位是一種快速賺錢的方式。商業網站的繁榮使風險投資者將資本投到最為瘋狂的方案中。他們這樣做只是因為他們恰巧卷入互聯網。這種趨勢雖然并非全部基于某種事實,卻導致人們認為,任何一個從大學走出的擁有計算機科學學位的人都會立即獲得大量的風險投資資金。
隨之而來的是不可避免的沖擊,和突如其來的IT行業從業者過剩。進入這個行業的大多數人只是為了快速的獲取錢財而沒有真正的才能所以他們失業了,但只有很少的一部分人是有才能的人失業。但這種形勢并沒有對把計算機科學作為一個具有吸引力的學位方案的觀念產生太大影響。
自從第一次商業網站泡沫結束后,我們發現申請計算機科學學位的人員數量在逐漸下降。在英國,很多部門會支持降低當地申請者數量,吸引更多的海外學員,尤其來自東南亞的學生,而且給予他們這些渴望在海外學習的學生比他們在美國學習更多的優惠。這僅僅緩和了下滑。然而,有人開始問計算機科學是否正在走向消亡。
計算機科學和望遠鏡
問題部分來自于人們對計算機科學確切是什么缺乏認識。甚至計算機科學專業的本科生通常也只是從最廣義上了解該學科。所以,人們懷疑這個學科是否正在消亡,并不奇怪。
甚至計算相關領域的人們普遍認為,計算機科學基本上就是講授編程的職業課程。2007年1月,De Montfort大學Neil McBride在英國計算機社會上發表了一篇題為“計算的死亡”文章。盡管文章內容相當低質量,和使我確信我不愿成為英國計算機社會的一員,但是這篇文章仍然獲得廣泛傳播。文章包含例如這樣的選項:“改變了的是對于理解低級編程或是任何編程的需求。當Ruby語言在Rails上使用時,誰還會需要C語言呢?”
誰需要C語言?當然,至少是那些企圖理解當Ruby在Rail程序中運行時發生了什么事情的人需要C語言。一種匯編語言還是兩種其實都一樣。一個學術學位,不同于一種職業資格,關鍵在于讓人理解而不是技術——不幸的是Dr.McBride在寫這篇文章的時候沒有注意到這一點。
在試圖描述計算機科學時,Edsger Dijkstra認為,“計算機科學就是關于計算機,就像天文學就是關于望遠鏡一樣。”我喜歡這樣的引用,但是它常會被那些不是很了解天文學的人錯誤引用。在我小的時候,我對天文學相當感興趣,并且花費了大量的時間徘徊于天文臺和閱讀關于這門科學(也通過望遠鏡觀察)。在那期間,我學到了比在物理課上學到的更多的光學知識。盡管我從未造出一個我自己的望遠鏡,但是很多真正的天文學家卻做到了,同時很多這個專業的成員為我們理解光學作出了重要的貢獻。
當然,望遠鏡的制造者和天文學家是有所不同的。一個望遠鏡的制造者可能會知道更多關于望遠鏡結構的東西,但很少會關注恒星體的運動。但是兩者都需要真正理解光線在透過鏡頭和從鏡子里反射時發生了什么。沒有理解這些,天文學是相當困難的。
這樣的道理同樣適用于計算機科學。一個計算機科學家可能不會編制他自己的集成電路,也可能不會寫自己的編譯器和操作系統。在現代,這些東西對于個人來說通常是太復雜而且不可能完成一個可與現有產品競爭的標準。但是計算機科學家明確知道,當一個程序在編譯和運行時,在編譯器、操作系統、CPU中發生著什么。
望遠鏡對于天文學家來說是一個重要的工具,同樣計算機對于計算機科學家來說是一個重要工具——但是它僅僅只是一個工具,并不是研究的重點。天文學家用望遠鏡研究天上的星體;計算機科學家研究算法來使用計算機。
軟件和硬件通常被認為是相互分離的概念。這是一個方便的區分,但是并不是一直是事實。第一臺計算機自身并沒有軟件,和需要重新換線以運行不同的程序。現代硬件經常集成固件——軟件可以與硬件緊密結合在通用目的的硅片中以完成專門目的的功能。從科學的視角來看,一個任務是通過硬件還是軟件完成都是不重要的。(在工程學看來,這是成本、維護和速度的交換。)無論如何,硬件與軟件的結合是一種算法的實例,應當讓它得到研究。
正如和其他的學科一樣,計算機科學中涉及多個學科領域。我傾向于將這個學科視為三個學科領域的交集。
數學
工程學
心理學
研究沒有計算機輔助、純抽象算法的計算機科學家正處于數學的邊緣。建立大型硬件和軟件系統的計算機科學家更接近于工程學。那些使用常規驗證工具建立這些系統的人們處于這兩者之間。
沒有人的指令,電腦基本上沒用,所以這正是心理學在計算機科學中重要的原因。電腦需要和人之間進行很多交互,沒有任何群體是真正適應這樣的任務的。計算機如此廣泛應用的原因是計算機在人類不能適應的地方表現出更多的優勢。試圖找到一種讓人和機器都能理解的描述機制是計算機科學的子學科“人/計算機交互”(HCI)的使命。因此,這一學科一般被認為接近心理學。
人機交互并不是計算機科學中唯一與心理學相關的領域。回到1950年,阿蘭 圖靈推薦將圖靈測試作為一種判定實體是否是智能的實體的方法。
我們完全可以理解,那些沒有直接學習計算機科學的人搞不清這個學科的范圍,錯誤的將它歸結于其它更為熟悉的學科。因此,有人推薦將這一學科改名為“信息科學”。從原則來講,這是一個好辦法,但是缺點在于很難以一種直觀的方式將某人描述為一個信息專家。
計算機科學家不能編程!
在和業內人士聊天的時候,我通常被告知計算機科學家不會編程。這個問題部分源自那些雇傭計算機科學家的人,他們認為計算機科學家僅僅是做了3至4年編程工作的人。(另外一部分源自帶有同樣觀念的申請學習計算機科學的學生。)
一些計算機科學家,甚至教授,確實不會編程。教授們讓博士生們為他們解決編程問題,但是現在畢業生們并不那么認為。編程更接近于計算機科學的工程學部分,那些通過更關注于數學或心理學方面的計算機學科學位的學生當然可能在工程學方面處于劣勢。
很多的對于計算機科學的不滿來自錯誤的期望,即認為一個計算機科學畢業生就是一個好的程序員。其實,這個專業的畢業生應當在學校至少要學習六種以上的語言,但是她不必做任何事情尤其綜合這些語言。她當然幾乎不會深入了解一個給予的平臺上可獲得的標準庫,而要全面的理解這些需要經驗。這些經驗她可能從其他工作中或開源工作中學會,但是絕不是從她的學位課程中。
計算機科學和軟件工程是截然不同的課程,但很多人將兩者混淆看待。就工具和流程來講,軟件工程教授的是開發軟件的過程。計算機科學課程只是簡單的涉及了這些問題,就像材料物理學家可能了解機械工程一樣。當然,這并不能使計算機科學家成為一個軟件工程師,它至多使物理學家成為建橋的最佳的候選人。
它有什么好處呢?
如果他們不能編程,那么擁有一個計算機科學家的目的又是什么呢?要想證明一個學術科目的存在,它必須讓學習者對它有實用的理解。計算機科學首先是應用數學的一個分支,因此計算機科學家需要理解數據推理的原理。但有兩個方面又讓計算機科學和數學有所不同:
關注效率。除理論之外,這種專注表現在本身復雜性的理論,它根據它們運行的時間和空間需求來組織算法。當接近于工程學時,這變成了最小化運行在現實架構上的指令數量,或者減少別的瓶頸。很多的計算機科學是一種折中的選擇,和包含找到一種解決現實需求的有效(不是最理想的)方法。當然,這些原理也適用于計算之外。例如,工作流的優化。
同時,專注于不同層次的抽象概念。算法接近于計算機科學的應用的邊緣,人們期望它運行在真實的系統。在程序運行時執行的指令,用于創建這些指令的高級算法,和用于與用戶交互的接口都是很重要的。一位計算機科學家需要將這些在思考問題時一次一并考慮。
對于大多數人來說,計算機已經成為我們日常生活中的一部分。甚至打折終端機,很多人每天都與大量的計算機設備交互。這種趨勢使處理多線程的算法更有前景,然而計算機科學卻是創立這一切的核心。
在一個時期內,計算機科學的申請者數量可能還會降低。也許計算機科學不再是與“快速富裕”相關的熱詞,但人們(英國計算機社會之外)正開始認識到,計算機科學不是職位軟件開發學位課程。從長遠來看,這種認識有利于這一科目發展,因為這可以第一時間排除那些不需要選擇這一學科的學生。近年來,物理學的申請者也在降低,但沒有人聲稱物理學正在消亡和需要更多的迎合現實需要,讓人們成為二流的工程師,而不是成為一流的科學家。
原文鏈接:http://article.yeeyan.org/view/154383/146061/