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