關於computer science的思考

來源:互聯網
上載者:User

         我和很多人一樣,是所謂computer science專業的在校大學生,幾年來都日以繼夜的鑽研各類程式設計語言和演算法。但是每當我在這個領域走得越深,回首再看computer science這個詞的時候,我就越發不能理解這個詞到底意味著什麼。無專屬偶的是,似乎不僅僅只有我這麼覺得,即使是在平日裡閑逛論壇時也常常能看見有人發出同樣的感歎(當然,純粹抱怨的就另當別論了)。或許這樣說還不能讓你意識到問題的嚴重性,那麼不如換句話講:computer
science專業真的能培養出程式員嗎?

 

不是science的computer science

          我們從computer science本身說起。不妨先耐著性子咬文嚼字一番,細數當代的各類科學:

         mathematics(數學),   physics(物理學),  chemistry(化學),  biology(生物學),  psychology(心理學),   medicine(醫學),
philosophy(哲學),   economics(經濟學)…… 

         看上去似乎所有被普遍承認的科學都沒有science尾碼,甚至是literature(文學)和我們的近親electronics(電子學)也同樣如此。相形之下,computer
science給人的感覺就像明明不是科學,硬要強調自己是一項科學一樣顯得站不住腳。更令人尷尬的是,縱覽所有科學目錄,似乎只有pseudoscience(偽科學)和我們是同類。我不禁對自己產生了懷疑:computer science真的是科學嗎?

         下面先用我的親身經曆作一個例子。在今年春天的時候,我曾經聽過一個關於機械手臂的講座。演講者首先介紹說機械手臂能夠類比人類的意識自動做出反應。因為演講者本人主要研究神經學,所以整場的講座都是關於怎樣擷取與分析神經訊號以及機械手臂實現的功能。而怎樣類比機械手臂的動作則是蜻蜓點水般不作詳細介紹。毫無疑問,對神經訊號的類比無異於類比人類的意識一樣具有難度。但是對於演講者本人而言,他似乎認為假若能夠分析出準確的神經訊號,那麼機械手臂也就接近完成了。而具體的實現者,程式員,則處於一個很低的地位,遠遠達不到核心地位。我不禁疑問,為什麼機械手臂這麼具有電子化的項目,作為領導者的是一位神經學學者,而非程式員呢?

         或許科學研究領域程式員的地位還不能說明問題。如果真的深究下去,我們會發現:與傳統的科學相比,computer science並不是那麼科學味十足。換句話說,有多人會認定這些以敲擊鍵盤為生的程式員是科學家呢?如果學校培養出來的程式員並不算是科學家,那麼computer science又怎麼能算是科學呢?

 

computer science的現狀

         因為曆史原因和電腦程式無所不容的性質,computer science就像是大雜燴一般,既有程式員又有數學家,甚至還有少數的心理學家。

        《駭客與畫家》的作者Paul Graham在書中寫道:


         也許有一天,“電腦科學”分裂成幾個獨立的部分。這可能是一件好事,如果我本人的領域——駭客——能夠獨立出來,那就更好了。

         把不同類型的工作捆綁在一起,可能是為了行政管理的方便,但是卻容易引起混淆。這是我不喜歡“電腦科學”這個詞的又一個原因。中間部分“電腦科學家”的工作,也許還可以被稱為電腦的實驗科學。但是,兩端的數學家和駭客,並不是在做電腦的科學研究。

         數學家看來並不在乎自己搞的是電腦還是數學。他們很高興來到這個新地方,然後就開始埋頭證明新的定理,與數學系的數學家乾的事情完全一樣。不一會兒,他們可能就忘了辦公樓外的牌子上寫的是“電腦科學系“。但是對於駭客,“電腦科學”這個標籤是一個麻煩。如果駭客的工作被稱為科學,這會讓他們感到自己應該做得像搞科學一樣。所以,大學和實驗室裡的駭客,就不去做那些真正想做的事情(設計優美的軟體),而是覺得自己應該寫一些研究性的論文。

 

          我十分同意《駭客與畫家》作者的觀點,建議將computer science分家。如果你也曾經是這個專業的學生,難道沒有發現過一個很荒謬的事實嗎?同一個電腦系裡面,既有埋頭鑽研演算法至深夜,頗有拔劍四顧心茫然感覺的ACM競賽者;也有深知系統底層,運籌帷幄準備著手開發應用程式的實踐者。他們之間的交集的確是程式無疑,但是倘若交換他們手頭上的工作,那麼結果肯定是一團糟。他們無疑都是computer
science專業優秀的學生,大牛也說不定,但為什麼會顯得如此不同呢?我覺得答案應該是“術業有專攻”。

         computer science所包含的內容實在不勝枚舉。在某些問題上,你可以將問題抽象,建立模型,使結果看上去很像數學;在另一些問題上,你需要分析問題的層次,逐步解決,這樣結果看上去就像一個工程項目。前者是理論,後者是實踐。每一門科學都會有這些內容,但是結構龐大者如computer science則是無人能出其右。就拿人工智慧的例子,這到底是程式員要解決的問題,還是心理學家?另一個例子則是,那些設計出高效演算法的程式員,也算是數學家嗎?

         也許我們應當適時的迴避這些不太好回答的問題,著眼於當代的學校。computer science這個奇怪的專業匯聚了不同的學生來接受相同的教育,理應給予劃分。我認為首先得給如今的數學系更改名字,以顯示數學家和程式員的區別。Pure mathematics是一個不錯的選擇,另外也算是向數學家Hardy致敬。computer science應當一分為二,給那些討厭電腦演算法的程式員解脫。具體為applied
mathematics and algorithms 和 software design 。前者似乎還未見蹤影,不過後者的確在有些學校裡給分出來了。當然我說的也只能過嘴癮,比如說這些研究演算法的程式員的未來如何,不會演算法的軟體開發人員又該如何,我給不出答案。


解決之道

     
   毫無疑問的是,我們對如今的computer science專業並不滿意。觀點很直接:既然是一個專業就不應該培養出兩個極端的學生。

        解決的方案很理想化,同時也意味著很難實施:對於軟體開發和電腦演算法,我們兩者都要學。前者的範圍很廣,包括程式設計語言,作業系統,開發流程(設計模式)等等底層知識和實際開發的經驗之談。後者的幅度很深,簡單而言就是各類應用數學以及衍生出來的演算法。之所以難以實施是因為每一方面都需要充足的時間才能理解透徹,這對於大學生而言要求付出的實在太多。特別是仍然還有不少人在爭執譬如應該選擇學習C++還是Java,是否一定要先學C再學Java之類的問題時,所有的解決方案都成了無稽之談。對於時間不是那麼充裕的大學生而言,平日裡兩者都要適當接觸,才能不失偏頗。至於那些未來的大牛們,我認為一個例子足以說明一切:Donald
Knuth既撰寫了TAOCP,也發明了TeXMETAFONT。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.