軟件開發者們有很多讓他們焦慮的事情。他們最擔心的不再是如何用他們最喜歡的編程語言(C、C++、Erlang、Java等)表達最新的算法。相反,這種擔憂正逐漸被人工智能(AI)所取代。
在這里,我們將探討AI編寫代碼的過程,并回答這個問題:AI會取代程序員嗎?
什么是AI代碼生成?
近年來由于生成式AI使用的激增,在很大程度上是因為現在有足夠的計算能力來運行深度學習算法,以及用于訓練機器學習模型所需的大量數據的增加。
AI代碼的生成是使用生成式人工智能和機器學習編寫計算機代碼的過程。
生成式AI編碼工具正在改變軟件開發的過程。但這樣的進步帶來了不確定性。隨著AI編寫代碼,這對軟件開發者意味著什么呢?
AI編寫代碼的未來
生成式AI的潛力已經在逐漸成形。AI正在改變行業,并準備加速創新。OpenAI進行的一項研究估計,生成式AI工具可能占據影響所有任務的47%,大大加快軟件開發過程。
在Evans Data Corp進行的一項調查中,550名軟件開發者被問及他們職業生涯中最令人擔憂的問題。29%的人表示“我和我的開發成果已被人工智能取代”。
美國能源部橡樹嶺國家實驗室的一個研究小組同意這一點。到2040年,機器學習和自然語言處理技術將先進到能夠編寫比最佳人類開發人員更好的軟件代碼,而且它們會做得更快。
牛津大學的研究“就業未來”警告說,隨著機器學習的進步,軟件工程師可能會變得計算機化,而軟件設計選擇將由算法優化。
軟件開發,特別是在安全關鍵行業中,需要確保高代碼質量,以滿足功能要求。
所以,如果AI正在開發代碼,那么代碼應該是無錯誤和問題的。這也包括AI在軟件測試中,因為它應該能夠以人類不太可能配備的可靠性去檢測出編碼錯誤。
如果您確實有AI編寫代碼,請確保通過使用靜態代碼分析器來驗證它是安全、安全和可靠的。
AI編寫代碼是否可能?
AI可以編寫代碼。
早在2015年,Andrej Karpathy就運行了一個使用循環神經網絡生成代碼的項目。他用GitHub的Linux存儲庫(所有源文件和頭文件),將它們合并成一個巨大的文檔(超過400MB的C代碼),并用這個代碼訓練了RNN。
這是它產生的:
/*
* If this error is set, we will need anything right after that BSD.
*/
static void action_new_function(struct s_stat_info *wb)
{
unsigned long flags;
int lel_idx_bit = e->edd, *sys & ~((unsigned long) *FIRST_COMPAT);
buf[0] = 0xFFFFFFFF & (bit << 4);
min(inc, slist->bytes);
printk(KERN_WARNING "Memory allocated %02x/%02x, "
"original MLL instead\n"),
min(min(multi_run - s->len, max) * num_data_in),
frame_pos, sz + first_seg);
div_u64_w(val, inb_p);
spin_unlock(&disk->queue_lock);
mutex_unlock(&s->sock->mutex);
mutex_unlock(&func->mutex);
return disassemble(info->pending_bh);
}
static void num_serial_settings(struct tty_struct *tty)
{
if (tty == tty)
disable_single_st_p(dev);
pci_disable_spool(port);
return 0;
}
static void do_command(struct seq_file *m, void *v)
{
int column = 32 << (cmd[2] & 0x80);
if (state)
cmd = (int)(int_state ^ (in_8(&ch->ch_flags) & Cmd) ? 2 : 1);
else
seq = 1;
for (i = 0; i < 16; i++) {
if (k & (1 << 1))
pipe = (in_use & UMXTHREAD_UNCCA) +
((count & 0x00000000fffffff8) & 0x000000f) << 8;
if (count == 0)
sub(pid, ppc_md.kexec_handle, 0x20000000);
pipe_set_bytes(i, 0);
}
/* Free our user pages pointer to place camera if all dash */
subsystem_info = &of_changes[PAGE_SIZE];
rek_controls(offset, idx, &soffset);
/* Now we want to deliberately put it to device */
control_check_polarity(&context, val, 0);
for (i = 0; i < COUNTER; i++)
seq_puts(s, "policy ");
}
AI生成的代碼——包括函數和函數聲明——一夜之間。它有參數、變量、循環和正確的縮進。括號被打開,后來又被關閉。它甚至有注釋。
然而,AI產生的代碼有語法錯誤。它沒有跟蹤變量名,有時變量被聲明但從未使用,其他時候變量被使用但沒有定義。代碼示例中的第二個函數比較了tty == tty。
該項目可在GitHub上獲取。它使用Torch7深度學習庫。這是Karpathy練習產生的整個輸出文件。
生成式AI會取代軟件工程師嗎?
AI不會取代程序員,但AI已經在幫助開發人員編寫代碼。像ChatGPT、Github、CoPilot和OpenAI Codex這樣的AI驅動編碼助手是可訪問的工具,它們幫助嵌入式開發人員更快地編寫更好的代碼。AI代碼生成器現在可以快速生成高質量的代碼片段,識別問題和缺陷,并建議對代碼片段進行改進。
當然,AI能夠創建實際的、可生產的代碼,這些代碼跨越了幾行以上,還需要一段時間。
以下是AI將如何在不久的將來影響軟件開發的方式:
AI將改進
它將變得擅長自動化任務,并幫助開發人員了解他們的選擇。然后,它將讓人類決定如何優化AI無法理解的情況。
AI將成為編碼伙伴
軟件開發人員將使用AI作為編碼伙伴來編寫更好的軟件。如今已經在發生,并將隨著AI學會一次編寫多于幾行代碼而繼續流行。開發人員將把AI配對編程工具包含在他們的IDE中,類似于人類配對編程,AI工具將根據提示執行編碼任務,然后開發人員會審查代碼。以往這個過程更加勞動密集,但AI工具可以比人類開發人員更快地執行他們SDLC的某些部分,使開發人員能夠專注于更復雜的任務。
但程序員仍然很重要
程序員的真正價值不在于知道如何構建它,而是知道要構建什么。待AI學會如何解釋每個功能和建議優先開發的商業價值還需要更長的時間,因此人類程序員的角色將始終存在。
如果AI寫出可靠的代碼會怎樣?
這是一個很大的假設。大多數人類無法編寫可靠的代碼,而且AI只是一個分析大量人類編寫的代碼的應用程序。因此AI寫出可靠代碼的可能性很小。
大多數程序員都同意這一點。在CodeSignal最近的一項調查中,全球1,000名開發人員被問及他們對AI編碼助手工具的使用情況。雖然81%的開發人員表示他們使用AI驅動的編碼助手,但55%的受訪軟件工程師表示他們對AI生成的代碼質量有顧慮。
所以,AI并不是提高代碼質量的答案。
如何在今天提高代碼質量
當前,我們可以通過靜態代碼分析可以提高代碼質量,而不是通過用AI取代程序員來實現。
程序員編寫代碼,靜態代碼分析器確保代碼符合編碼規則;掃描代碼以識別潛在的錯誤和安全漏洞;發現在代碼審查和軟件測試中通常被忽略的錯誤從而提高整體的代碼和軟件質量。
-
軟件
+關注
關注
69文章
5009瀏覽量
88067 -
AI
+關注
關注
87文章
31513瀏覽量
270328 -
嵌入式代碼
+關注
關注
0文章
5瀏覽量
5912
發布評論請先 登錄
相關推薦
評論