這個是 Quora 上提出的一個問題。隨著 AI 在近年來成為熱門話題,並且在 AlphaGo 自學圍棋擊敗了人類近 10 年最好的圍棋選手之後,有人開始提出這個問題。具體來說這個問題有三層意思:
到 2025 年工程師還有沒有用,到那個時候所謂的“工程師” 是指什麼?
代碼本身還有沒有用,到那時候代碼會變成什麼樣子?
機器智慧會不會取代(目前意義的)代碼或工程師兩者的其中一個或者全部?
大家基本上傾向於認為,到 2025 年時寫程式仍然有意義,但有人說 2025 年以後情況可能就不是這樣了。而那些認為編碼將死、工程師將失業的人的理由是機器智慧會像今天的工程師一樣具備自學寫程式的能力。比如說 AlphaGo 擊敗李世石就是一個機器學習能力的證據。
我們摘編了一些人的回答,也希望聽聽你們的看法。
- 觀點一:程式語言會像英文一樣,變成國際通用語言
Code.org CEO Hadi Partovi:
絕對的。寫程式不僅在 10 年內還有意義,而且還會比今天更重要。不過寫程式語言的語法會變得越來越簡單。剛開始的時候,寫程式是在紙板上面打孔(可寫程式打孔機)。然後形式變成了這個樣子:00101010101。而現在看起來更像英語。隨著程式語言變得越來越像英語,這種東西學習起來會越來越容易,越來越不神秘,所以也會越來越流行。同時,隨著計算機滲透到我們的日常生活裡面,告訴這些設備我們想做什麼,發明新的用例也會變得越來越流行。
但是在可以用自然語言跟機器進行對話,並且讓它們完美理解並執行從未訓練過的複雜任務,這些事情上我們還有很長的路要走(好幾十年)。當然,一些簡單的、預寫程式好的任務是沒問題的,比如「告訴我去加油站最近的方向。」
但是要想教計算機做從來沒做過的事情,還是需要對如何跟這種特殊的計算機工程師進行溝通有特殊的理解,以及要有描述算法的計算思維。如何設計循環或條件供計算機執行任務或進行決策的語法也許會變,但底層的基礎概念估計很久都不會消失。
- 觀點二:軟體工程會經得起時代考驗
自 1999 年開始就一直開發 web 門戶的 Christoph Richter:
Fred Brooks 1975 年的一篇文章說軟體開發永遠都是複雜的。雖然有一些東西可能會變容易,但核心的東西永遠都不會容易。《人月神話》這本書說的就是軟體工程這項核心挑戰一直都難以克服—沒有銀彈,40 年過去了,至今情況依然如此。
Fred Brooks 1975 年的一篇文章說軟體開發永遠都是複雜的。雖然有一些東西可能會變容易,但核心的東西永遠都是很難的。《人月神話》這本書被譽為「軟體工程的聖經」,40 年過去了,那部書裡面的觀點仍然經得起考驗。
- 觀點三:10 年之後寫程式還有意義,30 年後就說不定囉
有 30 年技術從業經驗,曾當過工程師、產品主管、CTO、CEO 的 Greg Kostello 認為:
10 年內寫程式還是有意義的,但是 20 年內還有可能性,但 30 年內可能性也許沒有了。
在機器學習的推動下我們現在進入了軟體開發的新時代。IBM 的 Watson 和 Google 的 AlphaGo 已經證明數據> 算法。或者更精確地說,數據就是算法。但是現在你需要非常特殊的技能才能開發出機器學習解決方案。工程師和數據科學家仍然需要對機器學習算法進行寫程式,但最終同樣的系統會教它們學會如何通過分析自己的代碼來改進自己。
未來 10 年對軟體工程師的需求還會更強勁,因為初創企業和大公司都把精力聚焦在把算法驅動應用轉為數據驅動應用上。通過固定算法來處理信息安全已經太複雜了,需要機器學習即時學習並挫敗新的攻擊。當然,像無人車這樣的計劃已經在嘗試這方面的努力。Google 無人車到處轉悠是因為它們需要收集數據來幫助系統學習。但這需要軟體工程師和數據科學家一起協作來設計收集數據的系統。他們是這種新辦法的先驅。
所以在近期對懂機器學習、知道利用大數據、傳感器數據以及視覺和語音的軟體工程師的需求會非常旺盛。如果你能夠及時調整自己的技能的話,你的職業生涯並無近憂。
中期的情況略為模糊一點。從彙編語言、編譯語言到腳本語言,軟體每階段的重新調整都會導致對工程師需求的增加。有點腦子懂基本寫程式技能的人都能找到工作。但新的工作需要不同的技能集。如果你在設計 AI 系統,高等數學是必要條件之一。如果你用 AI 系統,理解如何有效利用數據就很重要。
像 IBM、微軟和 Google 這樣的公司都在設法讓這些系統,對並不掌握那些技能的工程師來說更容易使用,這就導致了近期內變成工作崗位的爆發。而且由於現在產品設計師可以從更高的層次解決問題,制定智慧解決方案,可以完成的事情的範圍將會擴大。但是,那些技能不是入門級的。如果你對抽象思維和跟數據打交道不熟,那你的工作就跟無人車變得無所不在之後的 Uber 司機崗位一樣岌岌可危。
從長期來看,應用會自己寫自己。問題是,應用設計是由可最大發揮 AI 系統效能(因為理解問題解決機制)的工程師來做還是由不寫程式但擅長描述待解決問題的產品設計師來做,還是會涉及到其他技能?這個我還看不清楚。
- 觀點四:軟體開發會成為地球上最後一項「有用」的工作
John Brothers,有 20 年以上經驗的軟體開發者和架構師:
到 2025 年我們不僅還需要軟體開發者,而且我覺得到時候軟體開發可能還會成為地球上面最後一項“有用” 的工作。當然,“開發驅動機器人的軟體” 是未來這種工作的一部分。
隨著時間的推移,我們發現可以有越來越多的方式來用軟體替代過去的腦力勞動。認為這種現象未來會停止出現是沒有理由的。
反對者可能會說:你怎麼能設計一個程序來替代腦外科醫生呢? 我的回答是:“不知道。但你知道什麼事情比腦外科手術更難嗎?創建一套可捕捉腦科手術涉及的所有關鍵決策、啟發試探法以及算法的邏輯模型。” 換句話說,很多任務 double 很難,但是在軟體中捕捉那些任務更難。只要想想你就會發現只要有難度的任務要進行自動化,就會有軟體開發者去進行嘗試。比方說,地球上最後一項工作的自動化(注:這可真是工程師的自殺式工作啊)。
- 以為寫程式很簡單的人,想的就太淺了!
有人可能會說:「未來只要有合適的工具,寫程式應該是很容易的事情。」 知道我怎麼想嗎?我想為你祈禱。
以為寫程式可以做得很簡單的看法實際上非常目光短淺。他們的依據大概是這樣的:“X 類問題很容易建模。因為,任何人只要有合適的指導,都能利用軟體對該問題建模。”
對於特定類型的問題來說也許是可以的。但是軟體開發有趣的地方在於我們在不斷製造新的問題類型,我們製造問題的速度跟找到老問題的自動化解決方案的速度一樣快(如果說不是更快的話)。
深度學習和量子計算機都是我們推進軟體潛力的例子,這些東西在 20 年前我們還只能想像。而那隻是其中兩個而已—我們今天教計算機做的各種事情在過去都只能靠想像。沒有理由認為這種情況會很快停止出現。我們在擴大用軟體可以做的事情的領域,這種擴張的速度要比我們自動化現有流程的速度要快。這種情況還將持續幾十年。
- 觀點五:2025 年 JavaScript 稱王
自 1978 年就開始寫程式的 Steve Traugott:
2025 年寫程式當然還有用,而且作用可能還更大。
我的觀點可能會孤立無援,這裡我補充一些事情希望能有助於說明觀點。至少有一門語言到 2025 年會發揮更大作用,到了 2050 年這門語言可能還會被重度使用,甚至到 2100 年還會存在。鑑於其部署方式,Javascript 本身幾乎已經成為了互聯網協議,web 瀏覽器對它的支持不但是必須而且看起來是沒有限期的。只要它還有瀏覽器支持,web 網站就會繼續使用它,導致了對兼容性期望無休止的循環。唯一有可能打破這一循環的是 web 不用了。這樣的事情是不大可能會發生的。
不管你喜不喜歡,事實上 Javascript 已經成為了 web 的彙編語言。
剩下的唯一問題是開發者什麼時候從編寫原生 Javascript 轉到寫其他可編譯為 javascript 的語言?怎麼轉?(類似於過去幾十年從機器語言轉為彙編語言最後再轉為 C 的趨勢)
從 JavaScript 轉到其他編譯語言的運動實際上已經在進行當中,但是更高級的代碼還是要靠手工編寫(注:所謂由 AI 編寫代碼所以不需要人寫其實是個偽命題,其實人向 AI 引擎描述問題還是通過編碼來完成的,比方說類似 prolog、lisp 或別的特定領域語言),仍然需要編譯為 JavaScript 才能在瀏覽器執行。同時鑑於 JavaScript 引擎還需要保留,所以我認為在幾十年內我們還會看到可怕的、嵌套的、手工編碼的匿名 JavaScript 函數一直存在。JavaScript 已經變成了另一個 COBOL,只是可讀性更差但部署範圍更廣。
我們可以拿 B-52 轟炸機來對比一下。這款 90 年前設計的轟炸機預計還將服役到 2040 年。C 語言的歷史也有 45 年了。
絕對如此!我只能想像寫程式會變得越來越重要。關於寫程式的本質 Edsgar Dijkstra 有一條名言:
(軟體危機的)主要原因在於機器已經強大了好幾個量級!坦率地說,只要沒有機器,寫程式根本不成問題;當我們只有比較弱的計算機時,寫程式的問題不大,現在我們有了龐大的計算機,寫程式的問題也變得一樣大了。從這個意義上來說電子業一個問題都沒有解決,反而是製造瞭如何使用其產品的問題。
- 現代人類文明基本上是建構在軟體上面了
對此我的思考是人類文明對代碼的依賴程度有多大。我們的世界已經有那麼多的東西是由寫程式驅動的(軟體蠶食世界)。從這個意義上來說,我們已經製造了維護軟體的問題,這意味著我們永遠都需要更多的工程師。但隨著計算變得越來越強大,我們寫的軟體也會變得越來越強大,從而形成一個需求的良性循環。只要我們需要軟體,我們就會需要工程師。
所以 2025 年是編碼不僅還有用,而且還會更加重要。我認為所有對未來 10 年工程師的需求數量的估算都是小了。軟體蠶食世界,所有能生存的公司都將是技術公司。我們還看到工程師類型的多樣化,從數據科學到虛擬現實,全新的寫程式領域正在不斷湧現,這種趨勢為什麼會停止呢?
此外,我還認為代碼是一種媒介而不僅僅是一項工作,它是人類這個物種的一種溝通的新方式。我們對這個世界的問題和現像用代碼來建模。從這個意義來說,編碼跟表達關係更大。而我們永遠都不會停止用這種方式表達自己。所以我認為我們使用代碼的方式會越來越豐富—會超出軟體這個行當進入到學習的每一個領域。我想在 25 年內我們教數學、化學、生物、物理、幾何以及大部分的 STEM 課程都將通過代碼來完成。那時候我們學寫程式未必是為了寫應用,而是為了在軟體領域以外表達想法。代碼是信息時代的通用語,我看這一點近期內不會有任何改變。
- 觀點六:2025 年我們還是需要程式,只是程式樣貌、人類需求都會大不同
研發軟體工程師 Lakshmi Narasimhan Ramakrishnan:
簡答:是的!但不是今天的樣子。
從機器語言、到面向對象語言,寫程式的演進歷史就是不斷地抽象。這一路上我們還在操作系統的作用下得以開發出更好的基礎設施。大家很快意識到自己可以在這些基礎設施之上編寫出更複雜的程序,然後繼續開發出更複雜的軟體架構。
然後有了互聯網(也是基於軟體協議開發的),這個東西使得對地球另一端的計算機進行寫程式 / 溝通成為了可能。互聯網起到了一個強大的基礎設施的作用,圍繞著它開發出了許多的軟體,在今天,我們把雲視為一台龐大的計算機(接入互聯網運行分佈式操作系統的計算機子集)。
過去幾年機器學習和人工智慧成為了一個熱門話題。其中的出現的一個誤解是 AI 會發展到不需要人來寫程式的地步。這是不對的。我的觀點是 AI 能發展到做出比人更好的決策(尤其在問題搜索空間龐大的情況下)。比如 Google 的 AlphaGo 就是證據之一。我會吧 AI 看做建設更複雜基礎設施的工具。而這反過來又會幫助我們開發出更好的軟體。
我的意思是說,這是一個惡性循環。軟體演進然偶幫助我們創建出更強大的基礎設施進而引領我們走向更高層次的抽象,反過來又讓我們做出比今天更複雜的軟體,如此周而復始。所以寫程式始終都是有重要意義的,但是抽象和你試圖用代碼解決的問題會不斷發生快速演變。(注:這個觀點跟英國量子物理學家戴維·多伊奇的《無窮的開始:世界進步的本源》有些類似,儘管現象亙古不變,但我們始終都在尋找好的解釋)
(本文獲36 氪授權刊載,未經授權請勿轉載)
- 延伸閱讀
資深工程師的血淚教訓:當了 35 年工程師,讓我後悔一輩子
想看書自學軟體工程?就從這 6 本輕鬆書打造入門款概念
Google AlphaGo 主要開發者黃士傑:台灣人才技術不弱,就是缺乏信心