選自 IEEE
作者 Craig S. Smith
機(jī)器之心編譯
編輯:杜偉
當(dāng) AI 代碼生成工具越來越深入地參與到編程工作中,一些人擔(dān)心長(zhǎng)此以往它會(huì)不會(huì)取代人類程序員呢?IEEE 的一篇文章探討了這類 AI 輔助工具的發(fā)展歷程、對(duì)程序員的影響以及未來走向。
程序員注定要被取代嗎?自從 OpenAI 的大規(guī)模語(yǔ)言模型 GPT-3 展示其基于簡(jiǎn)單的書面指令創(chuàng)建 HTML 網(wǎng)站這一驚艷的能力以來,計(jì)算機(jī)編程社區(qū)便一直被該問題籠罩著。
自那之后的幾個(gè)月里,更是出現(xiàn)了可以根據(jù)自然語(yǔ)言描述(口頭或書面人類語(yǔ)言)編寫簡(jiǎn)單但完整的計(jì)算機(jī)程序以及加快程序員工作進(jìn)程的自動(dòng)編程助手。AI 會(huì)在多大程度上取代或增強(qiáng)程序員的工作呢?

IEEE Spectrum 就此咨詢了一些專家,得到的壞消息是編程或許注定要被取代。但也有好消息,即在可預(yù)見的未來,計(jì)算機(jī)編程和軟件開發(fā)似乎仍將是一項(xiàng)人類參與度極高的工作。與此同時(shí),AI 賦能的自動(dòng)代碼生成通過允許在更短時(shí)間里編寫更多代碼,從而越來越加速軟件開發(fā)。
亞馬遜 AI 服務(wù)副總裁 Vasi Philomin 表示,「我不相信 AI 會(huì)完全取代人類開發(fā)者。AI 工具可以將程序員從日常任務(wù)中解放出來,但計(jì)算機(jī)編程的創(chuàng)造性工作仍將繼續(xù)存在。」
如果有人想要成為一名開發(fā)者,但 10 年后,他們并不一定需要學(xué)習(xí)一種編程語(yǔ)言。相反,他們需要理解創(chuàng)建計(jì)算機(jī)程序的語(yǔ)義、概念和邏輯序列,這會(huì)將軟件開發(fā)開放給更廣泛的人群。
計(jì)算機(jī)編程的智能化、自動(dòng)化程度越來越高
當(dāng) 1940 年代電子計(jì)算機(jī)編程開始時(shí),程序員使用數(shù)字機(jī)器碼編寫。直到 1950 年代中葉,美國(guó)杰出女性計(jì)算機(jī)科學(xué)家 Grace Hopper 及其 Remington Rand 公司的團(tuán)隊(duì)開發(fā)了 FLOW-MATIC,它允許程序員使用有限的英語(yǔ)詞匯來編寫程序。
從那時(shí)起,編程語(yǔ)言越來越高效,程序員的工作也更加高效。
AI 編寫的代碼成為更廣泛改變的最前沿,它允許人們完全不用編碼也能編寫軟件。現(xiàn)在已經(jīng)有了像 Akkio 這樣的無(wú)代碼 AI 開發(fā)平臺(tái),人們可以通過簡(jiǎn)單的拖放和單擊按鈕功能構(gòu)建機(jī)器學(xué)習(xí)模型。微軟的 Power Platform 平臺(tái)包括了一系列低代碼產(chǎn)品,用戶只需描述就可以生成簡(jiǎn)單的應(yīng)用程序。

今年 6 月,亞馬遜推出了 CodeWhisperer 預(yù)覽版,這是一個(gè)基于機(jī)器學(xué)習(xí)的編程助手,類似于 GitHub 的 Copilot。這兩個(gè)工具都是基于大型語(yǔ)言模型(LLMs),這些模型已經(jīng)在海量代碼庫(kù)中進(jìn)行了訓(xùn)練。當(dāng)程序員編寫代碼時(shí),CodeWhisperer 和 Copilot 都會(huì)提供自動(dòng)補(bǔ)全建議,并根據(jù)簡(jiǎn)單的自然語(yǔ)言短語(yǔ)給出可執(zhí)行指令建議。

前幾天,GitHub 對(duì) 2000 名開發(fā)者展開了一項(xiàng)調(diào)研,結(jié)果發(fā)現(xiàn),Copilot 將一些編碼任務(wù)的時(shí)間縮短了一半,并提升了開發(fā)者對(duì)自身工作的整體滿意度。
超越代碼自動(dòng)補(bǔ)全并不容易
但如果想要超越自動(dòng)補(bǔ)全,則問題在于將意圖(intent)教授給計(jì)算機(jī)。軟件需求通常是模糊的,自然語(yǔ)言的不準(zhǔn)確也眾所周知。
英國(guó)人工智能初創(chuàng)公司 Diffblue 致力于使用 AI 檢查和糾正代碼,其聯(lián)合創(chuàng)始人之一 Peter Schrammel 對(duì)此表示,想要解決英文書寫規(guī)范中存在的歧義,則需要進(jìn)行一些增量改進(jìn),在人與機(jī)器之間展開一些對(duì)話。
為了解決這些問題,微軟的研究人員最近提出像基于 LLM 的代碼生成中添加一種反饋機(jī)制,以便計(jì)算機(jī)在生成代碼之前要求程序員澄清任何歧義的地方。微軟的這一交互式系統(tǒng)名為 TiCoder,通過生成所謂的「測(cè)試驅(qū)動(dòng)用戶意圖形式化」(TDUIF)來細(xì)化和形式化用戶意圖。
TDUIF 試圖使用迭代反饋來判斷程序員的算法意圖,然后生成與程序員所表達(dá)意圖一致的代碼。下圖為 TDUIF 的工作流。

論文地址:https://arxiv.org/abs/2208.05950
根據(jù)相關(guān)論文,當(dāng)在 Mostly Basic Programming Problems(MBPP)基準(zhǔn)上評(píng)估時(shí),TiCoder 將自動(dòng)生成代碼的準(zhǔn)確率從 48% 提升到了 85%。MBPP 旨在評(píng)估機(jī)器生成的代碼,它包含大約 1000 個(gè)眾包 Python 編程問題,由入門級(jí)程序員來解決。
一個(gè)代碼單元可以長(zhǎng)達(dá)幾百行,它是程序中可以獨(dú)立維護(hù)和執(zhí)行的最小部分。一套單元測(cè)試通常由數(shù)十個(gè)單元測(cè)試組成,每個(gè)單元測(cè)試包含 10 到 20 行代碼,用來檢查單元是否按預(yù)期執(zhí)行,以便當(dāng)你將單元堆疊一起時(shí),程序按預(yù)期工作。
單元測(cè)試對(duì)于調(diào)試單個(gè)函數(shù)以及手動(dòng)更改代碼時(shí)檢測(cè)錯(cuò)誤非常有用。此外,一個(gè)單元測(cè)試還可以用作代碼單元的規(guī)范,并用來指導(dǎo)程序員編寫干凈、無(wú) bug 的代碼。雖然并沒有很多的程序員追求真正的測(cè)試驅(qū)動(dòng)開發(fā),其中首先要編寫單元測(cè)試,但單元測(cè)試與單元往往一起編寫。
專家認(rèn)為:人類程序員不會(huì)因 AI 代碼生成失去工作
根據(jù) 2019 Diffblue 開發(fā)者調(diào)研的結(jié)果,開發(fā)者將大約 35% 的時(shí)間用來編寫質(zhì)量控制測(cè)試,而不是編寫用于生產(chǎn)用途的代碼,因此實(shí)現(xiàn)這部分工作的自動(dòng)化就可以顯著地提高生產(chǎn)力。
同時(shí),Copilot、CodeWhisperer 以及其他 AI 編程助手包都可以用作編寫單元測(cè)試的交互式自動(dòng)補(bǔ)全工具。程序員得到編碼建議,并選擇其中效果最好的。
今年 2 月份,DeepMind 進(jìn)一步使用 AlphaCode 進(jìn)行完全自動(dòng)代碼生產(chǎn)。AlphaCode 是一種大型語(yǔ)言模型,可以根據(jù)自然語(yǔ)言指令編寫簡(jiǎn)單的計(jì)算機(jī)程序。它使用編碼器 - 解碼器 Transformer 架構(gòu),首先對(duì)問題的自然語(yǔ)言描述進(jìn)行編碼,然后將生成的向量解碼成解決方案所需的代碼。

AlphaCode 概覽。圖源:https://arxiv.org/pdf/2203.07814.pdf
該模型首先在 GitHub 代碼庫(kù)上進(jìn)行訓(xùn)練,直至它能夠生成看起來合理的代碼。同時(shí)為了對(duì)該模型進(jìn)行微調(diào),DeepMind 使用了 15000 對(duì)自然語(yǔ)言問題描述和以往編程競(jìng)賽中成功的代碼解決方案,來創(chuàng)建一個(gè)關(guān)于輸入 - 輸出示例的專用數(shù)據(jù)集。
一旦 AlphaCode 經(jīng)過了訓(xùn)練和微調(diào),它就能針對(duì)其以往未見過的問題進(jìn)行測(cè)試。最后一步是生成大量解決方案,然后使用過濾算法選出最佳的。DeepMind 深度學(xué)習(xí)團(tuán)隊(duì)負(fù)責(zé)人 Oriol Vinyals 認(rèn)為,他們通過對(duì)該語(yǔ)言模型進(jìn)行了近 100 萬(wàn)次的采樣,創(chuàng)造了很多不同的程序。
為了優(yōu)化樣本選擇過程,DeepMind 使用一種聚類算法將解決方案分組。聚類過程傾向于將可運(yùn)行的解決方案組合在一起,使得更容易找到一小部分可能像程序員編寫的一樣工作的候選方案。
為了對(duì)系統(tǒng)進(jìn)行測(cè)試,DeepMind 在流行的 Codeforces 平臺(tái)上向人類編程競(jìng)賽提交了 10 個(gè) AlphaCode 編寫的程序,其中解決方案排在前 54%。
在最近的一次采訪中,Oriol Vinyals 反問道,「為了生成一個(gè)程序,你是不是只要用自然語(yǔ)言編寫它而不需要編碼,然后解決方案就會(huì)在另一端出現(xiàn)呢?」Vinyals 與其他人對(duì)此持審慎態(tài)度,認(rèn)為實(shí)現(xiàn)這一目標(biāo)需要時(shí)間,可能是數(shù)十年。
Landing AI 創(chuàng)始人兼 CEO、AI 知名學(xué)者吳恩達(dá)表示,我們距離一個(gè)人能夠告訴計(jì)算機(jī)編寫任意復(fù)雜的計(jì)算機(jī)程序的要求并自動(dòng)完成編碼,仍然很遙遠(yuǎn)。
但是,考慮到 AI 代碼生成在短短幾年取得進(jìn)展的速度,AI 系統(tǒng)最終能夠根據(jù)自然語(yǔ)言指令編寫代碼似乎是不可避免的演化趨勢(shì)。而手動(dòng)編程軟件程序?qū)⒃絹碓较袷止ぞ幙椕隆?/p>
為了給計(jì)算機(jī)提供自然語(yǔ)言指令,開發(fā)者仍然需要了解一些邏輯和功能的概念以及如何構(gòu)造事物。即使開發(fā)者不學(xué)習(xí)特定的編程語(yǔ)言或者編寫計(jì)算機(jī)代碼,但仍需要學(xué)習(xí)基礎(chǔ)編程。反過來,這將使得更多的程序員創(chuàng)建越來越多樣化的軟件。
Vasi Philomin 表示自己不相信 AI 會(huì)取代人類開發(fā)者。AI 可以消除開發(fā)者不得不做的瑣碎的、程式化的工作,使他們專注于更高價(jià)值的事情。
Peter Schrammel 也同意 AI 自動(dòng)代碼生成允許軟件開發(fā)者能夠?qū)W⒂诟щy和更具挑戰(zhàn)性的任務(wù)。不過他補(bǔ)充道,至少需要確認(rèn)機(jī)器所理解的內(nèi)容是不是人類的意圖。
他還表示,軟件開發(fā)者不會(huì)因自動(dòng)化代碼工具取代他們而失去工作,總有更多的軟件需要編寫。
原文地址:http://www.myzaker.com/article/6337de948e9f095d127f4fe5
轉(zhuǎn)載請(qǐng)注明:是成就還是削弱?AI代碼生成工具與程序員的「相愛相殺」 | 快導(dǎo)航網(wǎng)






川公網(wǎng)安備51012402001058號(hào)