是成就還是削弱? AI程式碼產生工具與程式設計師的糾葛
程式設計師注定要被取代嗎?自從 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 的程式碼。雖然沒有很多的程式設計師追求真正的測試驅動開發,其中首先要編寫單元測試,但單元測試與單元往往一起編寫。
專家認為:人類程式設計師不會因為AI 程式碼產生而失去工作
#根據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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

配置Debian郵件服務器的防火牆是確保服務器安全性的重要步驟。以下是幾種常用的防火牆配置方法,包括iptables和firewalld的使用。使用iptables配置防火牆安裝iptables(如果尚未安裝):sudoapt-getupdatesudoapt-getinstalliptables查看當前iptables規則:sudoiptables-L配置

Debian系統中的readdir函數是用於讀取目錄內容的系統調用,常用於C語言編程。本文將介紹如何將readdir與其他工具集成,以增強其功能。方法一:C語言程序與管道結合首先,編寫一個C程序調用readdir函數並輸出結果:#include#include#includeintmain(intargc,char*argv[]){DIR*dir;structdirent*entry;if(argc!=2){

在Debian系統中,readdir函數用於讀取目錄內容,但其返回的順序並非預先定義的。要對目錄中的文件進行排序,需要先讀取所有文件,再利用qsort函數進行排序。以下代碼演示瞭如何在Debian系統中使用readdir和qsort對目錄文件進行排序:#include#include#include#include//自定義比較函數,用於qsortintcompare(constvoid*a,constvoid*b){returnstrcmp(*(

在Debian系統上使用OpenSSL進行數字簽名驗證,可以按照以下步驟操作:準備工作安裝OpenSSL:確保你的Debian系統已經安裝了OpenSSL。如果沒有安裝,可以使用以下命令進行安裝:sudoaptupdatesudoaptinstallopenssl獲取公鑰:數字簽名驗證需要使用簽名者的公鑰。通常,公鑰會以文件的形式提供,例如public_key.pe

在Debian郵件服務器上安裝SSL證書的步驟如下:1.安裝OpenSSL工具包首先,確保你的系統上已經安裝了OpenSSL工具包。如果沒有安裝,可以使用以下命令進行安裝:sudoapt-getupdatesudoapt-getinstallopenssl2.生成私鑰和證書請求接下來,使用OpenSSL生成一個2048位的RSA私鑰和一個證書請求(CSR):openss

CentOS 關機命令為 shutdown,語法為 shutdown [選項] 時間 [信息]。選項包括:-h 立即停止系統;-P 關機後關電源;-r 重新啟動;-t 等待時間。時間可指定為立即 (now)、分鐘數 ( minutes) 或特定時間 (hh:mm)。可添加信息在系統消息中顯示。

在Debian系統中,OpenSSL是一個重要的庫,用於加密、解密和證書管理。為了防止中間人攻擊(MITM),可以採取以下措施:使用HTTPS:確保所有網絡請求使用HTTPS協議,而不是HTTP。 HTTPS使用TLS(傳輸層安全協議)加密通信數據,確保數據在傳輸過程中不會被竊取或篡改。驗證服務器證書:在客戶端手動驗證服務器證書,確保其可信。可以通過URLSession的委託方法來手動驗證服務器

在Debian上管理Hadoop日誌,可以遵循以下步驟和最佳實踐:日誌聚合啟用日誌聚合:在yarn-site.xml文件中設置yarn.log-aggregation-enable為true,以啟用日誌聚合功能。配置日誌保留策略:設置yarn.log-aggregation.retain-seconds來定義日誌的保留時間,例如保留172800秒(2天)。指定日誌存儲路徑:通過yarn.n
