LLM帶來了「編程末日」?哥本哈根大學CS教授:別做夢了!
LLM的發展會把編程淘汰嗎?
哥本哈根大學計算機教授Hans Hüttel表示:永遠不會。
文章地址:https://cacm.acm.org/opinion/on-program-synthesis-and-large-language-models/
盡管今天的人工智能已經發展到了一個新的高度,尤其是大語言模型在文本生成等方面的能力,令人印象深刻。
但計算社區中的一些人似乎走得有點遠了,他們聲稱「編程將成為過去」。
2023年1月的Communications專欄中,Matt Welsh提出了這樣的觀點:「編程將過時,——編寫程序的傳統想法正在走向滅絕,事實上,除了非常專業的應用程序之外,大多數軟件將被經過訓練的AI系統所取代」。
「在需要簡單程序的情況下(畢竟不是所有程序都需要在GPU集群上運行幾千億個參數的模型),這些程序本身將由AI生成,而不是手動編碼」。
在Hans Hüttel看來,這太過分了。
Welsh的觀點包含兩個說法。首先,未來大多數不「簡單」的軟件將采用AI系統的形式。其次,任何不屬于此形式的軟件都將自動生成。
這似乎是個相當籠統的主張,結果就是:既然不需要編程,就不需要研究編程或程序的屬性。計算機科學終于可以消失了!
客觀來講,Welsh提出的第一個主張不太好反駁。畢竟這個「簡單」的定義究竟是什么?(按照引文觀點,任何不采用AI系統形式的軟件都很簡單)
當前的操作系統、游戲引擎和SaaS平臺等系統軟件算是「簡單軟件」嗎?這些能不能被AI取代仍是存疑的。
Welsh提出的第二個主張涉及程序代碼的生成。在早期的一篇評論文章中,Daniel Yellin從軟件開發實踐的角度討論了使用LLM的情況。
而在本文中,Hans Hüttel教授重點關注計算理論中的定理所施加的基本限制,以及這個規范如何影響代碼的生成。最終結論是:距離編程的終結還遠得很。
最熱門的編程語言
還記得大神Andrej Karpathy在推特上的名言:「最熱門的新編程語言是英語」。
這個想法并不是誕生自當下LLM幾乎全能的現狀,「以自然語言編程」的想法至少可以追溯到2020年7月。當GPT-3出現時,Osama Qarem寫道:「Using GPT-3 will still be programming」,「它將使用以英語作為語法的語言進行編碼」。
考慮實際情況這也十分符合:人類口語不太簡潔、不太清晰,更容易產生誤解。人們在與GPT-3交談時需要練習正確的名詞、形容詞、動詞等,以獲得他們想要的結果。這代表你需要學會根據GPT-3的理解來「調試」你的英語句子。
消滅編程這件事如果再往前追溯,在1954年的FORTRAN報告中,作者聲稱「FORTRAN應該幾乎消除編碼和調試」,——正如我們所知,這并沒有發生。
之后,FORTRAN的主要作者John Backus繼續設計了一系列有影響力的編程語言,并贏得了1977年的圖靈獎。
在FORTRAN報告的十年后(1966年),Jean Sammet在Communications上寫道,英語應該是未來的編程語言,——這事也沒有發生,并且另一位圖靈獎得主Edsger W. Dijkstra認為這個想法是「愚蠢」的。
這件事情今天會發生嗎?看過了太多的ChatGPT等大模型帶來的驚艷示范,幾句話就能快速構建項目,生成看起來非常不錯的代碼。
人們可能會想,在這個時代,我們終于見證了編程的終結和英語(或者說一般的自然語言)作為創建程序的主要語言。
但是,從規范生成程序代碼并不是這么簡單的事情。如果我們關心生成代碼的正確性,考慮計算復雜性理論上非常精確的意義,那么即便是「簡單」的程序也會相當棘手。
生成正確的代碼很困難
從規范生成正確的程序代碼,在計算機科學中是是一個核心問題。這是程序綜合的問題,Gulwani曾表示:
「程序綜合是從底層編程語言中,自動查找滿足以某種形式約束表達的用戶意圖的程序。與使用語法導向的翻譯將高級代碼轉換為低級機器表示的典型編譯器不同,程序合成器通常在程序空間上執行某種形式的搜索,以生成與各種約束(例如,輸入輸出示例、自然語言、部分程序和斷言)一致的程序」。
關于各種形式的綜合問題已經有很多研究,我們知道這件事很難,這個「困難」是指計算復雜性理論意義上的計算困難。
1979年,Richard Statman證明了,在簡單類型的λ演算中是否存在具有給定類型τ項的問題是PSPACE完備(PSPACE-complete)的。
對于此類問題的決策算法,其確切資源需求是計算復雜性理論中的一個開放問題。
但是,普遍的共識是,PSPACE完備問題的決策算法在運行時間上將隨輸入大小呈指數級增長。
也就是說,對于大小為n的規范S,算法將需要2的n次冪個步驟來生成滿足S的程序。
因此,即使對于中等大小的輸入,PSPACE-complete問題的算法也可能非常慢。
可以使用一種稱為完全量化布爾公式(fully quantified Boolean formulae,QBF)的一階邏輯形式作為規范語言,并詢問給定的公式是否能夠建模。
如果對象是生成程序,那么就是對程序進行建模。然而,這個問題也是PSPACE完備的。所以結論是,對于具有一定復雜度的程序,其合成算法很可能需要不合理的資源。
「編程末日」尚未來臨
于是,計算機科學并沒有放棄程序合成的研究也就不足為奇了。Gulwani曾對現有的程序綜合方法進行了全面調查,而所有這些方法都有局限性。
一些程序綜合方法是近似的,無法構建滿足完整規范的程序,比如靜態程序分析工具,而且這些工具一般只考慮特定的程序屬性。
另一些方法則需要大量內存或大量時間才能構建程序,比如使用SMT求解器的方法和基于類型的開發形式(例如基于Hindley-Milner類型系統的方法)。
還有一些方法只能在合理的資源限制或狹窄的問題域中進行綜合,比如用于生成編譯器和解釋器的工具(正則表達式和屬性語法的使用允許、開發人員指定解釋器或編譯器的預期行為)。
所有這些方法從未被譽為「編程終結」的標志,更不用說計算機科學的終結了!
所以,期望ChatGPT等類似的力量超越這些限制是不合理的。
事實上,任何在編程環境中使用過此類AI軟件的人都會看到,有時AI可以生成看起來正確合理的代碼,而有時則會產出無意義的程序。
這種行為并非巧合,因為LLM是在現有代碼上訓練的(GitHub Copilot使用GitHub上的公共代碼進行訓練)。這意味著,無論生成什么代碼,都將反映聊天機器人在訓練階段所接觸的編碼風格。
所以,自然語言在軟件開發中的真正使用,在于軟件開發人員和軟件的最終用戶之間發生的探索性對話。LLM可能會促進這種對話,但取代編程還遙遙無期。