驚人觀點:無視電腦科學專業的10個理由

banq發表於2018-08-02
本文並不是否定電腦科學這個學位以及CS畢業生,而是指出了企業軟體關心的方向性問題,更應該關注解決實際工程問題的能力,原文大意:

許多公司企業正在考慮無視CS學位來僱用能夠提供真正成績結果的程式設計師。這裡解釋一下為什麼他們可能是對的。

想想這兩個詞語:計算機和科學。前者給世界的禮物是巨大的,從無所不在的拯救生命的電子醫療記錄,到在一天中任何時候都有機會在Twitter上打嘴架。第二個詞'科學'所代表的是一場智力運動,它帶來了巨大的進步,比如小兒麻痺症疫苗,幾次登月之旅,還有要列的太多其他事情。那麼為什麼可以如此快速地把這兩個片語合成電腦科學,特別是當我們正在尋找我們程式設計團隊的工作人員的時候?

因為這裡有一份精美文件,裡面充滿了各種精彩的想法,比如新的程式語言、聰明的搜尋演算法、機器視覺演算法以及處於中間的無數個概念,其中很多確實很棒。

問題是,我們中很少有人真正需要其中任何一個,一位朋友承認,他親眼地看著一個開發團隊的蓬勃發展,他之前把計算機專業的畢業生們都介紹過去了,他們卻只僱傭了物理學家、會計師或其他精通數學的人。這些新員工更務實,專注於讓機器交付,這幾乎是所有企業都想做的事情。

這並不是因為CS學位不好,而是因為他們不會關心我們大多數人需要解決的問題。因此,這裡列出一個相當不完整的清單,闡述為什麼我們最好無視CS。

1.理論使人分心和困惑
許多電腦科學家在本質上都是數學家,對定理著迷的思維方式滲透到了這門學科中。一位理論家告訴我,所有的數學證明都只是程式,反之亦然,至少在他的腦子裡是這樣。他對交付的程式碼並不感興趣,因為它不能證明自己的程式碼是有多正確。

如果沒有在NP完全性和圖靈機獲得一定成績,是很難從CS專業畢業的。NP完全性和圖靈機是兩個美麗的理論領域,如果他們沒有一些糟糕事情,那將是令人愉快的。一位生物學家要求我解決DNA序列匹配方面的問題,我回答他這是NP完全性,這類問題需要很長時間才能解決。他不在乎,他無論如何都得解決這個問題。事實證明,大多數NP完全性問題在大多數情況下都是很容易解決的,只有幾個病理性的例子破壞了我們的演算法,儘管在日常生活中很少被觀察到,但理論家們仍痴迷於把簡單演算法搞複雜了。

圖靈機也會出現同樣的問題,忠實的CS學生學習萊斯定理這樣的虛無主義理論的結果是,我們就根本無法分析計算機演算法,但是,雖然圖靈機器對於我們的日常機器的執行方式來說是一個非常糟糕的模型,我們日常仍可很容易地建立可以進行智慧操作的軟體,任何一位CS專業的學生如果教條地來接受這些理論結果,就會在即將達到一個完全可用的解答之前一點點的時候放棄了。

2.學術語言很少有用
我們不應該感到驚訝的是,學院培養了勢利感和對神秘解決方案的熱愛。在每一個領域都是如此。當我問一位麻省理工學院畢業生他最喜歡的語言時,他自豪地告訴我,而且他確信我不知道它這是什麼,他告訴我這是CLU語言,嗯,他贏了。

那些痴迷於語言的人有很多偉大的想法,但有時這些想法最終會造成混淆和混亂,如果一個團隊成員喜歡一些奇怪的特性,並開始將其包含在程式碼庫中,那麼其他人都必須學習它,如果每個人都這樣做,那麼提高效率的挑戰將是殘酷的。

這就是為什麼谷歌在建造Go時選擇了低端路線的原因,Go發明者堅持認為,語言應該有很少的結構,並且能在儘可能短的時間內簡單地學習,這種簡單性對每個人都有幫助,因為每個人都非常瞭解這個核心。

3.許多cs教授都是數學家,而不是程式設計師。
大多數電腦科學系的一個骯髒秘密是,大多數教授不會指導計算機程式設計,他們真正的工作就是講課和爭論助學金,他們理解電子表格和提案,而不是真正做研究,這就是為什麼上帝會給他們研究生,他們中的許多人上一次真正程式設計是在他們自己讀研究生的時候。從那時起,腐爛伴隨蜘蛛網開始了,他們機器上的編譯器可能從來沒有啟動過。

4.許多必修課卻很少有用
資料結構通常是電腦科學重要課程主題。遺憾的是,我們中很少有人會有再使用許多資料結構的機會了。我們要麼把東西放到物件雜湊表中,要麼把它們推入一個為我們思考的資料庫中。對於每個人來說,考慮演算法的複雜性仍然是非常有用的,但是很少有人需要擔心B樹甚至連結列表。不僅如此,我們中的許多人已經意識到,我們最好相信一個標準庫,而不是自己擺弄資料結構,因為犯錯誤太容易了。許多公司已經明確禁止提交你自己的資料結構,這是有理由的。

在經典課程中有很多其他的例子不再那麼重要了。編譯器是複雜和必要的,但唯一的人寫他們的是哪個學生在某個學期的課程裡被迫搞一個玩具版本應付或自娛自樂,甚至蘋果在為SWIFT建立編譯器時也使用了現有的開源工具。

5.數學模型讓我們走錯了路
任何學過資料庫理論的人都會發現Boyce-codd正規化,我們將複雜的資料結構分解為小表的方式,這一切都非常優雅和高效,直到你永遠在那裡等待SQL查詢的響應,因為該查詢中充滿了聯接命令。

大多數開發團隊很快就學會了對資料庫進行“非規範化”以提高效能,換句話說,他們去掉了所有的聰明,把資料放在一個巨大表裡,這是醜陋和浪費的,但往往卻是驚人的快。至於浮腫冗餘問題,其實磁碟空間很便宜。

如果CS畢業生執著於自己的聰明,並將他們受過BS教育洗腦的知識付諸於實踐時,許多開發人員需要花上幾年的時間忘記從CS課程中學到的所有的計算聰明(banq注:算計)。

6. 體制滋生傲慢
我們都認為自己是對的,但取得學位目的本是為了讓畢業生有能力與權威爭辯自己的優勢。有時這可能是真的,但即使在最好的日子裡,也很難知道什麼才是真正正確的,特別是在快速發展的領域。

一個和我一起工作的人喜歡他給部門帶來的“編碼標準”,並且喜歡在程式碼評審期間每一個機會引用這些標準。這些標準內容類似對在哪裡放置空白對會提出挑剔意見,一旦他開始以學術上的精確性談論它們時,他就開始在程式碼評審中像揮舞棍棒一樣任意使用它們,他會用不同的空格編寫程式碼,並宣稱某塊程式碼不符合標準,所以我們都被困在需要準確計數空間裡,所以一切都必須符合某種學術標準。

7.許多現代技能被忽視了
許多現代技能沒有涵蓋在計算機教育領域,如果你想了解Node.js,React,遊戲設計或雲端計算,你很難在一般課程中發現它們。這個普通學校課程清單專注於基礎教育-也就是說,在Node.js或Reaction這樣的單詞被遺忘後,諸如競賽條件之類的深層次概念將成為計算的一部分,競爭得獎確實是一個崇高的目標,但這樣做使得大多數程式設計師與當前流行技術脫節。

對於電腦科學部門來說,培養深刻的思考者是很常見的,他們能理解一些基本的挑戰,而對日常員工的日常生活中的細節卻知之甚少,這就是為什麼公司發現僱傭一個物理實驗室的人也同樣值得,他只是用Python來實現儀器上的一些資料流,他們可以像CS天才一樣容易地瞭解所謂淺薄的細節。

8.學術前沿即將到來
機器學習和人工智慧都很流行,許多人都在爭先恐後地嘗試,但是這些課題其實已經在CS部門研究了幾十年了,調查過今天學校提出的所有想法有意義嗎?還是耐心地等待它們最終被普遍使用?

9.天才會滋生自滿情緒
天才背後有許多奇妙的股市,大多數享有終身教職保護的教授,在很久以前就應該享受到他們的貢獻所帶來的所有好處,問題是,在快速發展的領域,今天的學生幾乎不需要10年前的知識了。但是如果這些教授有偉大的戰略知識突破時,確實會讓這些教授的影響持續幾十年。

10.知性主義很少產生結果
當我告訴一位終身教職員工,我的一個學生得到了一份工作,這要歸功於一些關於Angular和React的講座,他笑著說:“我最不想做的事就是把它變成一所職業學校。”

說得很好,但沒有那麼多人能花近幾十萬美元思考證明"P=NP?",雖然確實我們需要研究一些深刻的、永恆的真理,但是,當你的公司下個星期必須在截止日期前發貨的時候,沒有人會有時間對永恆的真理進行研究並深信不疑了。

10 reasons to ignore computer science degrees | CI

[該貼被banq於2018-08-02 18:54修改過]

相關文章