當我在2023年開始編寫《Head First C#》的新版本時,像是ChatGPT和Copilot這樣的人工智慧工具已經在改變開發者編寫和學習程式碼的方式。很明顯,我需要涵蓋這些工具。但這也帶來了一個有趣的挑戰:如何有效地教導新手和中級開發者使用人工智慧呢?
我找到的幾乎所有資料都是針對資深開發者的——這些人能夠識別程式碼中的模式,發現人工智慧生成的程式碼中常見的細微錯誤,並且能夠改進和重構人工智慧的輸出。但這本書的讀者——那些將C#作為第一、第二或第三種語言學習的開發者——尚未具備這些技能。越來越明顯的是,他們需要一個新的學習策略。
設計一條有效的人工智慧學習路徑,並與《Head First》方法相結合——這種方法通過主動學習和互動謎題、練習等元素來吸引讀者——花了我幾個月的時間進行深入研究和實驗。最終的結果是Sens-AI,這是一系列我設計的實踐元素,旨在教導開發者如何與人工智慧一起學習,而不僅僅是生成程式碼。這個名字是對“師傅”(sensei)的玩笑,反映了人工智慧作為教師或指導者的角色,而不僅僅是一個工具。
關鍵的認識是,將人工智慧用作程式碼生成工具和用作學習工具之間有很大的區別。這一區別是學習路徑的重要組成部分,並且需要時間來充分理解。Sens-AI引導學習者通過一系列逐步的學習元素,讓他們立即開始使用人工智慧,從一開始就創造出令人滿意的體驗,同時逐步學習他們在發展技能過程中需要依賴的提示技巧。
建立有效的人工智慧學習路徑的挑戰
我為《Head First C#》的第五版開發了Sens-AI。在O’Reilly工作了二十多年後,我學到了很多關於新手和中級開發者如何學習的知識——同樣重要的是,知道他們會遇到什麼困難。在某些方面,人工智慧輔助編程只是一項新的技能,但它帶來的挑戰使得新手和中級學習者更難掌握。我的目標是找到一種方法,將人工智慧整合進學習路徑中,而不讓它干擾學習過程。
第一步:讓學習者明白為什麼不能只信任人工智慧
對於新手和中級開發者來說,將人工智慧融入學習的最大挑戰之一是,過度依賴人工智慧生成的程式碼實際上可能會阻礙他們的學習。編程是一項技能,像所有技能一樣需要練習,這就是為什麼《Head First C#》有數十個實踐編程練習,旨在教授特定的概念和技術。使用人工智慧來完成練習的學習者將難以建立這些技能。
安全使用人工智慧的關鍵是“信任但要驗證”——人工智慧生成的解釋和程式碼可能看起來正確,但它們通常包含細微的錯誤。學會發現這些錯誤對於有效使用人工智慧至關重要,而發展這項技能是成為資深開發者的重要基石。Sens-AI的第一步是立即讓這一課程變得清晰。我設計了一個早期的Sens-AI練習,展示了人工智慧如何自信地錯誤。
這是怎麼運作的:
在書的早期,學習者完成一個紙筆練習,分析一個簡單的循環,並確定它執行的次數。大多數讀者都能得到正確答案,但當他們將相同的問題輸入人工智慧聊天機器人時,人工智慧幾乎總是錯誤的。人工智慧通常能很好地解釋循環的邏輯——但它的最終答案幾乎總是錯誤的,因為基於大型語言模型的人工智慧不執行程式碼。這強調了一個重要的教訓:人工智慧可能是錯的——有時候,你在解決問題上比人工智慧更好。通過看到人工智慧在他們已經正確解決的問題上犯錯,學習者立即明白他們不能僅僅假設人工智慧是正確的。
第二步:讓學習者明白人工智慧仍然需要努力
下一個挑戰是教導學習者將人工智慧視為工具,而不是拐杖。人工智慧可以解決書中幾乎所有的練習,但讓人工智慧完成這些練習的讀者實際上不會學到他們來這本書學習的技能。
這導致了一個重要的認識:為一個人編寫編程練習與為人工智慧編寫提示是完全一樣的。
事實上,我意識到我可以通過將我的練習逐字粘貼到人工智慧中來測試它們。如果人工智慧能夠生成正確的解決方案,那就意味著我的練習包含了人類學習者解決它所需的所有信息。
這變成了另一個關鍵的Sens-AI練習:
學習者按照逐步指示完成一個完整的編程練習。在自己解決後,他們將整個練習粘貼到人工智慧聊天機器人中,看看它如何解決相同的問題。人工智慧幾乎總是生成正確的答案,並且經常生成與他們所寫的完全相同的解決方案。
這強調了另一個關鍵的教訓:告訴人工智慧該做什麼和告訴一個人該做什麼一樣困難。許多新開發者認為提示工程只是寫一個快速的指令——但Sens-AI展示了一個好的人工智慧提示是多麼詳細和結構化,就像編程練習一樣。這讓學習者立即獲得了與人工智慧的實踐經驗,同時教導他們撰寫有效提示需要真正的努力。
通過首先讓學習者看到人工智慧可能會犯錯,然後讓他們生成一個他們已經解決的問題的程式碼,並將其與自己的解決方案進行比較——甚至利用人工智慧的程式碼作為重構的靈感——他們對如何批判性地與人工智慧互動有了更深入的理解。這兩個開場的Sens-AI元素為成功的人工智慧學習路徑奠定了基礎。
Sens-AI方法——讓人工智慧成為學習工具
開發Sens-AI方法的最後一個挑戰是找到一種方法,幫助學習者養成以積極的方式與人工智慧互動的習慣。解決這個問題需要我開發一系列實用的練習,每個練習都給學習者一個具體的工具,他們可以立即使用,同時也強調如何有效使用人工智慧的正面教訓。
人工智慧對開發者最強大的功能之一是它解釋程式碼的能力。我圍繞這一點構建了下一個Sens-AI元素,讓學習者請求人工智慧為他們剛寫的程式碼添加註解。由於他們已經理解自己的程式碼,他們可以評估人工智慧的註解——檢查人工智慧是否理解他們的邏輯,發現其錯誤的地方,以及識別其解釋中的空白。這提供了對人工智慧進行提示的實踐訓練,同時強調了一個關鍵的教訓:人工智慧並不總是正確的,批判性地審查其輸出是必不可少的。
Sens-AI學習路徑的下一步專注於將人工智慧用作研究工具,幫助學習者通過提示工程技術有效探索C#主題。學習者實驗不同的人工智慧角色和回應風格——隨意的解釋與精確的解釋、要點與長答案——以了解什麼對他們最有效。他們還被鼓勵提出後續問題,請求重新表述的解釋,並要求具體的例子,以幫助他們完善理解。為了實踐這一點,學習者研究一本書中未涵蓋的新C#主題。這強調了人工智慧是一個有用的研究工具,但只有在你有效引導它的情況下。
Sens-AI專注於首先理解程式碼,其次生成程式碼。這就是為什麼學習路徑在強化良好的人工智慧習慣後才會返回到人工智慧生成的程式碼。即使如此,我也必須仔細設計練習,以確保人工智慧是學習的輔助,而不是替代品。在嘗試不同的方法後,我發現生成單元測試是一個有效的下一步。
單元測試效果很好,因為它們的邏輯簡單且易於驗證,這使它們成為練習人工智慧輔助編程的安全方式。更重要的是,為單元測試撰寫良好的提示迫使學習者描述他們正在測試的程式碼——包括其行為、參數和返回類型。這自然培養了強大的提示技巧和良好的人工智慧習慣,鼓勵開發者在請求人工智慧生成任何內容之前仔細思考他們的設計。
與人工智慧一起學習,而不僅僅是使用它
人工智慧是開發者的一個強大工具,但有效使用它需要的不僅僅是知道如何生成程式碼。新開發者對人工智慧的最大錯誤是將其用作生成程式碼的拐杖,因為這會阻礙他們學習批判性評估人工智慧生成的所有程式碼所需的編程技能。通過給學習者提供一個逐步的方法,加強安全使用人工智慧和良好的人工智慧習慣,並通過示例和實踐進行強化,Sens-AI為新手和中級學習者提供了一條有效的人工智慧學習路徑。
人工智慧輔助編程並不是關於捷徑,而是關於學會批判性思考,以及將人工智慧作為一個積極的工具來幫助我們建設和學習。那些批判性地與人工智慧互動、改進他們的提示、質疑人工智慧生成的輸出並發展有效的人工智慧學習習慣的開發者,將是最能受益的人。通過幫助開發者從一開始就將人工智慧納入他們的技能組合,Sens-AI確保他們不僅僅是使用人工智慧來生成程式碼——他們學會如何思考、解決問題,並在過程中提升自己作為開發者的能力。
在4月24日,O’Reilly Media將舉辦《與人工智慧編程:我們所知的軟體開發的結束》——一場現場虛擬技術會議,重點介紹人工智慧如何已經在提升開發者的生產力,並為他們的組織提供真正的價值。如果你正在建立明天的開發實踐,並有興趣在活動中發言,我們希望在3月5日前聽到你的消息。你可以在這裡找到更多信息和我們的演講徵集。
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!