程式設計師注定要被取代嗎?自從 OpenAI 的大規模語言模型 GPT-3 展示其基於簡單的書面指令創建 HTML 網站這一驚豔的能力以來,電腦程式設計社群便一直被該問題籠罩著。
自那之後的幾個月裡,更是出現了可以根據自然語言描述(口頭或書面人類語言)編寫簡單但完整的計算機程式以及加快程式設計師工作進程的自動編程助手。 AI 會在多大程度上取代或增強程式設計師的工作呢?
IEEE Spectrum 就此諮詢了一些專家,得到的壞消息是程式設計或許注定要被取代。但也有好消息,在可預見的未來,電腦程式設計和軟體開發似乎仍將是一項人類參與度極高的工作。同時,AI 賦能的自動程式碼產生透過允許在更短時間裡編寫更多程式碼,從而越來越加速軟體開發。
亞馬遜AI 服務副總裁Vasi Philomin 表示,「我不相信AI 會完全取代人類開發者。AI 工具可以將程式設計師從日常任務中解放出來,但電腦程式設計的創意工作仍將繼續存在。」
如果有人想要成為開發者,但10 年後,他們不一定需要學習程式語言。相反,他們需要理解創建電腦程式的語義、概念和邏輯序列,這會將軟體開發開放給更廣泛的人群。
當 1940 年代電子電腦程式設計開始時,程式設計師使用數位機器碼編寫。直到 1950 年代中葉,美國傑出女性電腦科學家 Grace Hopper 及其 Remington Rand 公司的團隊開發了 FLOW-MATIC,它允許程式設計師使用有限的英語詞彙來編寫程式。
從那時起,程式語言越來越高效,程式設計師的工作也更有效率。
AI 編寫的程式碼成為更廣泛改變的最前沿,它允許人們完全不用編碼也能編寫軟體。現在已經有了像 Akkio 這樣的無程式碼 AI 開發平台,人們可以透過簡單的拖放和點擊按鈕功能來建立機器學習模型。微軟的 Power Platform 平台包括了一系列低程式碼產品,使用者只需描述就可以產生簡單的應用程式。
今年6 月,亞馬遜推出了CodeWhisperer 預覽版,這是一個基於機器學習的程式設計助手,類似於GitHub 的Copilot。這兩個工具都是基於大型語言模型(LLMs),這些模型已經在海量程式碼庫中進行了訓練。當程式設計師編寫程式碼時,CodeWhisperer 和 Copilot 都會提供自動補全建議,並根據簡單的自然語言短語給出可執行指令建議。
前幾天,GitHub 對2000 名開發者展開了一項調查,結果發現,Copilot 將一些編碼任務的時間縮短了一半,並提升了開發者對自身工作的整體滿意度。
但如果想要超越自動補全,則問題在於將意圖(intent)教導給電腦。軟體需求通常是模糊的,自然語言的不準確也眾所周知。
英國人工智慧新創公司Diffblue 致力於使用AI 檢查和修正程式碼,其聯合創始人之一Peter Schrammel 對此表示,想要解決英文書寫規範中存在的歧義,則需要進行一些漸進式改進,在人與機器之間展開一些對話。
為了解決這些問題,微軟的研究人員最近提出像基於 LLM 的程式碼產生中添加一種回饋機制,以便電腦在生成程式碼之前要求程式設計師澄清任何歧義的地方。微軟的這款互動系統名為 TiCoder,透過產生所謂的「測試驅動用戶意圖形式化」(TDUIF)來細化和形式化使用者意圖。
TDUIF 試圖使用迭代回饋來判斷程式設計師的演算法意圖,然後產生與程式設計師所表達意圖一致的程式碼。下圖為 TDUIF 的工作流程。
#論文網址:https://arxiv.org/abs/2208.05950
根據相關論文,當在Mostly Basic Programming Problems(MBPP)基準上評估時,TiCoder 將自動產生程式碼的準確率從48% 提升到了85%。 MBPP 旨在評估機器產生的程式碼,它包含大約 1000 個眾包 Python 程式設計問題,由入門級程式設計師來解決。
一個程式碼單元可以長達幾百行,它是程式中可以獨立維護和執行的最小部分。一套單元測試通常由數十個單元測試組成,每個單元測試包含 10 到 20 行程式碼,用來檢查單元是否按預期執行,以便當你將單元堆疊一起時,程式按預期工作。
單元測試對於偵錯單一函數以及手動更改程式碼時檢測錯誤非常有用。此外,一個單元測試還可以用作程式碼單元的規範,並用來指導程式設計師編寫乾淨、無 bug 的程式碼。雖然沒有很多的程式設計師追求真正的測試驅動開發,其中首先要編寫單元測試,但單元測試與單元往往一起編寫。
#根據2019 Diffblue 開發者研究的結果,開發者將大約35% 的時間用來編寫品質控制測試,而不是編寫用於生產用途的程式碼,因此實現這部分工作的自動化就可以顯著地提高生產力。
同時,Copilot、CodeWhisperer 以及其他 AI 程式設計助理套件都可以用作編寫單元測試的互動式自動補全工具。程式設計師得到編碼建議,並選擇其中效果最好的。
今年 2 月份,DeepMind 進一步使用 AlphaCode 進行完全自動程式碼生產。 AlphaCode 是一種大型語言模型,可根據自然語言指令編寫簡單的電腦程式。它使用編碼器 - 解碼器 Transformer 架構,首先對問題的自然語言描述進行編碼,然後將產生的向量解碼成解決方案所需的程式碼。
#AlphaCode 概覽。圖源:https://arxiv.org/pdf/2203.07814.pdf
#該模型首先在GitHub 程式庫上進行訓練,直到它能夠產生觀看起來合理的程式碼。同時為了對此模型進行微調,DeepMind 使用了 15000 對自然語言問題描述和以往程式設計競賽中成功的程式碼解決方案,來創建一個關於輸入 - 輸出範例的專用資料集。
一旦 AlphaCode 經過了訓練和微調,它就能針對其以往未見過的問題進行測試。最後一步是產生大量解決方案,然後使用過濾演算法選出最佳的。 DeepMind 深度學習團隊負責人 Oriol Vinyals 認為,他們透過對該語言模型進行了近 100 萬次的採樣,創造了許多不同的程式。
為了最佳化樣本選擇過程,DeepMind 使用一種聚類演算法將解決方案分組。聚類過程傾向於將可運行的解決方案組合在一起,使得更容易找到一小部分可能像程式設計師編寫的一樣工作的候選方案。
為了對系統進行測試,DeepMind 在流行的 Codeforces 平台上向人類程式設計競賽提交了 10 個 AlphaCode 編寫的程序,其中解決方案排在前 54%。
在最近的一次採訪中,Oriol Vinyals 反問道,「為了產生一個程序,你是否只要用自然語言編寫它而不需要編碼,然後解決方案就會在另一端出現呢?」Vinyals 與其他人對此持審慎態度,認為實現這一目標需要時間,可能是數十年。
Landing AI 創始人兼 CEO、AI 知名學者吳恩達表示,我們距離一個人能夠告訴計算機編寫任意複雜的計算機程序的要求並自動完成編碼,仍然很遙遠。
但是,考慮到 AI 程式碼產生在短短幾年取得進展的速度,AI 系統最終能夠根據自然語言指令編寫程式碼似乎是不可避免的演化趨勢。而手動編程軟體程式將越來越像手工編織毛衣。
為了提供電腦自然語言指令,開發者仍然需要了解一些邏輯和功能的概念以及如何建構事物。即使開發者不學習特定的程式語言或編寫電腦程式碼,但仍需要學習基礎程式設計。反過來,這將使得更多的程式設計師創建越來越多樣化的軟體。
Vasi Philomin 表示自己不相信 AI 會取代人類開發者。 AI 可以消除開發者不得不做的瑣碎的、程式化的工作,使他們專注於更高價值的事情。
Peter Schrammel 也同意 AI 自動程式碼產生讓軟體開發者能夠專注於更困難和更具挑戰性的任務。不過他補充道,至少要確認機器所理解的內容是不是人類的意圖。
他也表示,軟體開發者不會因為自動化程式碼工具取代他們而失去工作,總有更多的軟體需要寫。
以上是是成就還是削弱? AI程式碼產生工具與程式設計師的糾葛的詳細內容。更多資訊請關注PHP中文網其他相關文章!