AI 寫程式攻略:避免一出新手村就遇到大魔王

隨著 AI 技術的快速發展,越來越多人開始運用 AI 輔助程式開發。但是 AI 工具新手原本期待加速開發流程,但是實際使用時,常常會遇到一些挑戰,例如程式碼不完整、加上 A 功能,B 功能反而壞掉、框架選擇等等問題。本文分享運用 AI 工具寫程式常見問題的解決方案。

Made with Midjourney


AI 寫程式常見的問題狀況

1. AI 產生不完整的程式碼

問題描述:

對話互動過程中,有時候 AI 會只提供部份修改或省略的程式碼。

難易度:簡單

解決方法:

跟 AI 明確要求完整程式碼

🤖 請提供完整的 XXX 程式碼 

已複製到剪貼簿

🤖 請提供 XXX 檔案的完整內容 

已複製到剪貼簿

如果已經要過,但是 AI 還是堅持給部份的程式碼,則可以使用程式碼比對工具 (text diff tool),將新版本的差異部份,併入舊檔案。

2. 檔案結構的混沌森林

問題描述:

當專案隨著需求增加而有大量的不同檔案,很容易混淆檔案間的相依關係和修改位置。

難易度:簡單

解決方法:

除了使用支援指定哪個檔案的 Cursor - The AI Code EditorWindsurf Editor by CodeiumGitHub Copilot 的 AI 寫程式整合方案。對於其他有文字長度限制的 AI ,則可以使用 tree 指令 (Windows 版本macOS 版本),樹狀圖方式列出檔案與資料夾的結構,讓機器人可以知道整體的檔案結構。

輸入 tree 指令的範例結果

 % tree .

.

├── index.html

├── modules

│   └── session-manager.js

├── package.json

└── tests

    └── session-manager.test.js

已複製到剪貼簿

3. 技術框架的選擇迷宮

問題描述:

不同 AI 可能有各自偏好的技術框架 (程式語言),例如 Claude 會習慣提供 React 技術框架的網頁程式,測試時還需要額外找支援 React 的伺服器環境,才能看到結果。

難易度:中等

解決方法:

明確地指定技術框架環境需求。例如:我偏好只要使用瀏覽器就可以使用,可以跟 AI 提出:

🤖 請提供純 HTML、CSS 和原生 JavaScript 的網頁,幫我實作 OOOO 功能 ...

已複製到剪貼簿

挑選熟悉的環境與技術框架,快速實作並迭代核心功能,以便及早建立原型結果,驗證是否符合最初起心動念運用 AI 輔助程式開發的目標。

4. 協助 AI 了解你的需求

問題描述:

常用「用嘴巴寫程式」來描述使喚 AI 寫程式的過程,但是當需求講得太籠統、遇到的問題狀況講得太簡略,例如「壞掉了」,就會得到很一般性的原則回覆。

難易度:中等

解決方法:

想要達到的需求,可以試著拆解成功能說明與互動細節。而遇到錯誤,除了說「壞掉了」,還可以更具體地描述當時你在操作的頁面什麼?你期待發生什麼?但是實際卻遇到怎樣的問題?

使用 AI 協助寫程式也許可以減少寫程式碼的量,但無法避免需要面對錯誤訊息的除錯過程。在與 AI 互動過程中可以要求 AI 良好地設計捕抓錯誤的機制。

提供更具體的意圖說明、背景環境與錯誤訊息的資訊,才能讓 AI 協助你。

5. 改了 A 功能、卻壞了 B 功能的詛咒

問題描述:

使用 AI 協助寫程式,一開始很順利生成符合需求的程式碼。但是隨著功能的增加或者修改時,可能會意外影響舊有的功能,造成系統不穩定或發生錯誤。

難易度:困難

解決方法:

除了直接跟 AI 反應舊的功能壞掉了,提供新版程式碼。可以導入現代軟體工程的單元測試與版本管理。以提供互動的網頁檔案為例,可以跟 AI 提出:

🤖 請從網頁中拆出 JavaScript 核心功能,並提供單元測試

已複製到剪貼簿

如果是 Google 試算表常用的 Google Apps Script,則可以修改指令:

🤖 請將 Google Apps Script 函數加上單元測試

已複製到剪貼簿

將舊用程式朝向模組化設計,透過單元測試,就可以更放心地維護與改版程式!儘管還是可能會出錯,但是將單元測試的錯誤反應給 AI,可以縮小需要修改的程式碼範圍。結合 GIT 版本控制管理,則方便追蹤變更與回退到正確可運作的版本。

單元測試部份的設定對初學者較困難,進一步資訊可以詢問「JavaScript 專案的單元測試結構」、「Python 專案的單元測試結構」。

6. 程式碼品質的勇者之路

問題描述:

AI 可能專注在當下對話的功能需要,而忽略專案的程式碼風格或最佳實踐。

難易度:困難

解決方法:

跟 AI 提出:

🤖 請依照請依照以下規格建議修改的程式碼:加入適當的註解說明、使用有意義的變數命名、遵循 ESLint 規則 ...

已複製到剪貼簿

要求 AI 進行特定改進的建議外,同時執行第 5 部份提到的自動化測試,對程式碼品質也有幫助。

知識截止時間 (knowledge cutoff date) 停留在過往某一天的大型語言模型,也同樣有知識過期的問題。如果只是使用 AI 寫一般功能,資安風險較小。但如果功能涉及金錢與個資,風險會帶來更大的危害,則建議將資安這一部份委託其他專業同仁或外包給第三方資安廠商協助。

小結

使用 AI 輔助程式開發時,僅管可以不需要資訊背景,單純地要求 AI 依照需求修改,再複製貼上程式碼。但是藉助現代軟體開發流程的重要原則可以事半功倍:第一,提供明確需求與充分背景資訊,讓 AI 可以協助你;第二,培養良好的開發習慣,包括版本控制與單元測試的導入,從小功能為基礎,快速開發與測試等。我們能更有效地運用 AI 來提升開發效率,同時確保程式碼的品質與可維護性,協助在 AI 輔助開發的旅程中順利升級。

參考資料

  1. 什麼是單元測試?- 單元測試說明 - AWS  Copilot:「單元測試就像檢查每個積木是否完好無損,確保它們能穩固地放在一起。這樣可以快速找到並修正有問題的積木,確保整個城堡(程式碼)穩固可靠。自動化單元測試節省時間,讓開發人員專注於搭建城堡(程式碼)。」
  2. AI assistants in coding
  3. tree 命令,Linux tree 命令詳解:樹狀圖列出目錄的內容 - Linux 命令搜尋引擎
  4. [第三週]JavaScript — 測試框架 Jest. 學習目標:安裝 Jest 進行簡單的 Unit test 測試 | by MiaHsu | Medium
  5. How to turn an idea into a prototype with AI | by Xinran Ma | Bootcamp | Jan, 2025 | Medium
  6. AI 溝通要給建設性回饋?原來這樣跟 AI 對話才有效 - by Liang-Bin Hsueh


留言