[isTMS]課程 - GitHub Copilot實戰
 

實戰演練:Lab 01

現在,是時候親自體驗 Copilot 魔力的時候了!

Lab 01-A: 初探程式碼自動生成

目標: 體驗 Copilot 的程式碼自動生成能力

步驟:

  1. 下載範例專案

    git clone https://github.com/isdaviddong/HOL_Copilot_First.git
    cd HOL_Copilot_First
    code .
    
  2. 輸入計算蘋果價格的片段

    //計算蘋果
    double applePrice = 35; // 蘋果的價格
    double appleDiscount = 0.1; // 蘋果的折扣
    Console.WriteLine("蘋果折扣後價格是:" + applePrice * (1 - appleDiscount));
    
  3. 自動產生其他水果的計算程式碼片段

    • 嘗試按下 Tab 接受建議
    • 使用 ESC 拒絕建議
    • Alt + \ 觸發新建議
    • 使用 Ctrl + Enter 查看多個選項

挑戰:

  • 能否讓 Copilot 生成至少 3 種不同水果的計算邏輯?
  • 觀察 Copilot 是否保持命名慣例和計算模式的一致性
  • 嘗試刪除第三行的折扣計算,接的回到第二行最後,按下 Enter ,看看 Copilot 建議出的程式碼,是否符合你的期待?

Lab 01-B: 初探程式碼重構

目標: 使用 Copilot 進行物件導向重構

步驟:

  1. 撰寫重構咒語 在程式碼中加入註解:

    //建立一個計算折扣後價格的類別,具有水果名稱、單價、折扣這三個屬性,以及一個計算折扣後價格的方法
    
  2. 檢視生成的類別

    • 觀察類別的命名是否合理
    • 檢查屬性的資料型別是否正確
    • 確認方法的實作邏輯是否正確
  3. 重構主程式

    • 使用 Inline Coding (CTRL+I) 修改原始主程式碼
    • 將重複計算水果折扣的程式碼改為使用新建立的類別
    • 觀察 Copilot 如何自動建議物件初始化語法

挑戰:

  • 嘗試在註解中加入「並實作 IDisposable 介面」,看看 Copilot 如何回應
  • 試著讓 Copilot 加入資料驗證(例如價格不能為負數)
  • 能否讓 Copilot 將類別改為使用建構函數(Constructor)而非屬性初始化?

預期成果: 完成這個 Lab 後,你應該能夠:

  • ✅ 理解 Copilot 如何從模式中學習
  • ✅ 掌握基本的快捷鍵操作
  • ✅ 會使用註解引導 Copilot 生成程式碼
  • ✅ 能夠進行簡單的程式碼重構

進階思考:Copilot 的局限性

雖然 Copilot 強大,但它不是萬能的。了解它的局限性,能幫助你更有效地使用它。

1. 無法理解業務邏輯

Copilot 可以生成計算折扣的程式碼,但它不知道:

  • 你的公司是否有特殊的折扣規則
  • 是否需要考慮會員等級
  • 是否有最低消費限制

解決方案: 在註解中明確描述業務規則:

//計算折扣價格,但如果折扣後價格低於成本(20元),則不給予折扣
public double CalculateDiscountedPrice()
{
    double discountedPrice = Price * (1 - Discount);
    const double cost = 20;
    return discountedPrice < cost ? Price : discountedPrice;
}

2. 可能生成過時或不安全的程式碼

Copilot 的訓練資料來自開源程式碼,其中可能包含過時的做法或安全漏洞。

解決方案:

  • ==總是==檢視生成的程式碼
  • 使用程式碼分析工具(如 SonarQube)進行安全掃描
  • 參考官方文件確認最佳實踐

3. 缺乏全局視野

Copilot 主要關注當前檔案和少數開啟的檔案,可能無法理解整個專案架構。

解決方案:

  • 對於複雜的跨檔案重構,使用 @workspace 命令(在後續章節會介紹)
  • 保持檔案結構清晰,讓 Copilot 更容易理解上下文

4. 需要人類的判斷

Copilot 提供建議,但最終決定權在你。它可能會:

  • 過度工程化(Over-engineering)簡單問題
  • 使用你不熟悉的設計模式
  • 忽略專案的現有慣例

解決方案:

  • 批判性思考每個建議
  • 理解程式碼再接受,而非盲目複製
  • 當不確定時,使用 Copilot Chat 詢問「為什麼這樣設計?」

小結:AI 時代的開發者新技能

GitHub Copilot 的出現,標誌著軟體開發進入新時代。但這不代表程式設計師會被取代,反而意味著我們需要學習新的技能:

傳統技能 vs. 新時代技能

傳統技能 新時代技能
記憶語法 描述意圖
手寫樣板程式碼 審查 AI 生成的程式碼
Google 搜尋解決方案 引導 AI 生成解決方案
複製貼上 Stack Overflow 與 AI 協作開發

開發者的價值在哪裡?

即使 AI 能生成程式碼,開發者仍然扮演關鍵角色:

  1. 問題定義 : AI 只能解決你描述清楚的問題
  2. 架構設計 : 整體系統設計仍需要人類的洞察力
  3. 品質把關 : 審查程式碼的正確性、安全性、效能
  4. 業務理解 : 將商業需求轉化為技術實作
  5. 創新思考 : AI 基於現有模式,創新突破仍需人類

下一步

在這一章中,我們學會了 Copilot 的基本使用——程式碼生成和重構。但這只是冰山一角。在接下來的章節中,我們將探索:

  • 如何在雲端環境(CodeSpaces)使用 Copilot
  • 進階的 Agent 模式和命令系統
  • 如何建立完整的前端應用程式
  • 與 Azure DevOps 的整合
  • 自訂 Copilot 行為的進階技巧

記住:Copilot 是你的助手,不是主人。學會善用它,你會發現編程不再是無止盡的重複勞動,而是更專注於創造價值的創意工作。

準備好了嗎?讓我們開始 Lab 01 的實作,親身體驗 AI 配對程式設計師的魔力吧!


相關資源: