AI 生成代碼技術的興起,讓許多人看到了提高編程效率、加速軟件開發進程的希望。然而,本文作者認為必須正視一個潛在的風險:過度依賴 AI 生成的代碼,可能會讓程序員在不知不覺中走向技能退化的深淵,進而成為一個糟糕的程序員。 參考鏈接:https:///posts/bad-programmer/ 作者 | Rudis Muiznieks 翻譯 | 鄭麗媛
除非你不在乎自我提升或對自己的工作不以為意,否則,用 AI 寫代碼可不是什么好事。 事先聲明一下,我在本文中提到的“使用 AI 生成代碼”,是指完全讓 AI 代勞編寫代碼的過程——而不是將 AI 作為一種輔助工具,用以深入理解編程語言和庫,從而提升自己編寫的代碼品質。然而,如果你曾嘗試過僅通過編寫一些描述性的函數名或評論,便讓 AI 完成剩余代碼的工作,或是依賴 AI 來代替你理解和學習代碼庫,那么這篇文章正是為了提醒你注意這種情況。 

不要使用 AI 生成的代碼的理由 (1)剝奪了你寶貴的學習機會 在互聯網早期,“腳本小子”(script kiddie)這個貶義詞被用來形容那些不懂技術原理、僅憑現成工具進行所謂“黑客攻擊”的人。這些人往往借助他人編寫的工具或腳本,試圖執行諸如破解密碼、入侵他人電腦、篡改網頁等惡意行為,并因此自詡為真正的黑客。 你或許會覺得,把使用 AI 生成代碼的開發者比作“腳本小子”有些過于牽強,但我認為這種類比有一定道理。 那些渴望成為頂尖黑客的“腳本小子”們,若只是一味地運行現有腳本,永遠無法實現他們的夢想。真正的高手是那些親自編寫腳本的人,他們在探索和研究中積累了深厚的知識,真正理解了所利用的安全漏洞。同理,如果開發者想成為大牛,但若總是依賴 AI 來完成代碼編寫,那么實際上是在阻礙自己前進的腳步。至少就目前來說,真正的大牛開發者依然是那些編寫代碼并能為這些 AI 系統提供訓練數據的人。 毋庸置疑,任何技能的提升都離不開實踐。就如同不下棋就不可能提高棋藝,不練琴就無法掌握鋼琴演奏,不上場打球就無法成為一名更出色的曲棍球員一樣,如果不親手編寫代碼,你的開發技能永遠也不會進步。 (2)你的現有技能可能會退化 但如果你對自己作為程序員的技能已經感到得心應手,只想讓 AI 處理那些枯燥無味的任務呢?比如創建新項目框架、編寫簡單的階乘或歸并排序函數,或是生成模板代碼——那些日常瑣碎的工作。 也許你覺得這沒問題。畢竟早在大型語言模型出現之前,經驗豐富的開發者就已經習慣將瑣事的任務交給初級開發者了——然而,使用 AI 來代替自己完成這些工作真的沒有區別嗎? 首先, 初級程序員不僅需要更多的指導,還可能會向你求教。在這一過程中,幫助他們不僅能強化你自己的技能,還能培養新的能力(如輔導技巧、溝通能力,如何在不斷增加的煩躁和不耐煩中仍能面帶微笑)。 其次,在軟件開發中(以及一般生活里),如果不經常練習某項技能,這項技能就會逐漸退化。如果你已經在這個行業待了一段時間,不妨回想一下你學的第一個編程語言,對于我來說是 Pascal。我現在甚至都寫不出一行語法正確的 Pascal 代碼,更別說實現任何有意義的功能了。再舉個例子:試著一天不使用語法高亮和自動補全,看看沒有這些工具你會感覺多么無助。你會發現,這些工具通過減少記憶簡單任務的需求,實際上削弱了你的實際編碼能力。想象一下,如果 AI 完全接手了你編寫代碼的工作,你會變得多么依賴它。如果你不再親自編寫代碼,哪怕是那些無聊的部分,你的技能也會變得生疏,遺忘一些重要的細節。這會導致你在處理復雜問題時遇到更大的困難,因為你失去了那些構建高級技能所需的基礎。 設想一種情況,如果一家健身器材制造商推出了一款“人工力量”產品,聲稱可以借助智能助手提升你的訓練效果,即這個機器人會為你舉重來幫你“征服下一次訓練”。如果你開始依賴這種產品,你的最大臥推重量會發生怎樣的變化?同樣地,編碼助手隨著時間的推移會對你的編程能力和邏輯思考產生什么樣的影響? (3)你可能會依賴上你最終的替代者 目前市場上的許多 AI 編碼助手(截至我寫這篇文章時)都為學生提供免費服務。你可能認為這是他們的好意——他們愿意減輕那些經濟壓力大的學生的負擔。錯了!如果說開發者的學習過程中有哪個階段絕對不能走捷徑,那就是剛開始學習編程的階段。 這簡直是掠奪性行為。AI 公司深知,只要在開發者第一次接觸文本編輯器之前就吸引他們,就能確保長期的訂閱收入。他們預見到了未來的開發者群體,那將是一支完全依賴 AI 的隊伍,甚至不能獨立完成“Hello World”的輸出,除非是在與 AI 助手長時間對話后得到指引。 在本文前面提到,我們許多人已經依賴上了高級開發環境,如語法高亮、自動完成、代碼分析和自動重構。你可能會問,AI 與這些工具有什么不同?答案很簡單:前者旨在幫助你更高效地工作,寫出更高質量的代碼;而后者則有著最終取代你的目標。企業高層之所以熱衷于 AI 工具,并非因為相信這些工具能將員工培養成高薪的高級開發者,而是因為他們看到了一個未來——在這個未來中,高薪的高級開發者將被成本更低、依賴 AI 的初級開發者所取代,甚至被 AI 本身徹底替代。一旦我們有足夠多的人支付了這種訂閱費,就可以訓練出不再需要我們參與的 AI。 (4)一個小插曲:你真正擁有 AI 生成的代碼嗎? 雖然我不是律師,也不打算在電視上扮演律師角色,但我確實訂閱了 Nebula 上的《Hello Future Me》,并且深刻地感覺到關于 AI 生成作品的所有權問題,至少可以說是存在一些法律模糊地帶。這種不確定性不僅限于藝術作品,同樣適用于代碼領域。(而且,如果你像我一樣,把編程視作一種藝術表達形式,可能會更能理解這一點。) 假設你使用 AI 生成了一個函數,而這個 AI 的訓練數據中包含了 LGPL 許可證的代碼,那么這個生成的函數是否也必須遵循 LGPL?也許你不在乎 LGPL,因為它的約束力有限,但如果訓練數據中包含了某個財力雄厚且具有強大訴訟能力的公司的非自由倉庫呢?如果他們能夠證明你在構建一個有些過于成功的競爭產品時使用了這個 AI,又該怎么辦? 坦率地講,對于上述問題我沒有確切答案,我也不想在未來法院審理此類案件時成為支付這些法律賬單的人,那你呢? (5)你的代碼將得不到應有的尊重 我們不能斷言 AI 生成的代碼一定會質量低下。盡管當前的技術水平可能存在一定的局限性,但顯然這項技術將持續進步并變得更加完善。 我可以肯定的是,如果你依賴這些 AI 工具,那么除了一些同樣依賴 AI 的開發者外,外界大多數人都不會對你的編程技能產生深刻印象。軟件開發不僅僅是一種技術,它更像是一門藝術——構建一個連貫緊湊的代碼庫、為復雜問題提供精妙的解決方案,并贏得同行的尊重,這些應該是每個程序員引以為豪的事情。你是希望別人贊美自己親手創造的成果,還是機器生成代碼的成果?或許我的想法有些傳統,但這正是我個人拒絕將 AI 生成代碼融入開發環境的主要原因——即使這可能導致我失去工作。 我不想委托他人創作然后聲稱那是我的作品,我希望成為真正的創作者。追求高標準有錯嗎?為自己的工作感到自豪不會讓它更加有趣嗎?如果你都沒有親自編寫代碼,怎么可能尊重自己的代碼,或者期望別人尊重它呢? 
使用 AI 生成代碼的理由 (1)你是一個受虐狂,喜歡代碼審查勝過編寫代碼 我之前提到的觀點并非完全準確。實際上,這只是我個人堅決不將 AI 工具融入我開發環境的主要原因。我熱愛編寫代碼,但非常不喜歡閱讀、審查以及對他人的代碼提供建議。雖然我知道這是一種寶貴的技能,可以幫助指導新手成長,成為更有生產力的團隊成員,但我仍然不喜歡做這件事。 隨著你越來越多地依賴 AI 生成代碼,你的角色也將逐漸從編碼者轉向代碼審查者。或許有人享受這種轉變,但這并不是我的選擇。 (2)你其實并不想做程序員 如果你對學習編程毫無興趣,而是把 AI 當作一種自由職業者工具,通過簡單指示如“創建一個卡丁車競速游戲”或“這不行,改進它”來完成任務,那么以上討論的顧慮可能與你無關。 我真心認為,這就是大型科技公司正熱切盼望的未來:一個由他們封閉生態系統的應用分發,和一個他們掌控應用生產方式的世界。有一個新應用的創意?只需告訴應用商店的 AI,它就能直接將應用部署到你的設備上,使企業能獲得 100% 的訂閱收入——比以往需要與開發者分成 30% 收益的情況更為有利可圖。 這也引出了我最后一個關于使用 AI 生成代碼的理由。 (3)你相信我們已經進入了一個后工作時代,并信任企業將引領我們走向這個未來 如果你已經深陷于這種觀念之中,甚至在閱讀本文的前幾段后仍未離開,那么我實在沒什么可說的了。我建議你去讀《一九八四》、《華氏451度》或《雪崩》等書籍,這些作品中對未來社會的想象或許會讓你感到興奮,并有所期待。 對于其他人,感謝閱讀。未來我將繼續分享關于 AI 的個人觀點,不過目前沒有固定的更新計劃,因此不必過于期待——當然,你也可以請 AI 代勞保持期待。 
|