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