過去我曾帶著我們的孩子嘗試Vibe Coding。孩子會很興奮的展示他的作品說:「老師你來玩玩看,我用ChatGPT做的貪吃蛇遊戲」但是當蛇吃到東西時,分數卻還是0。孩子修改了好幾次卻找不出問題來,最後只能重新生成一個新的貪吃蛇。但卻有小學生可以跟AI協作寫出一個上架Apple Store的App。
因為AI的出現,讓寫程式變的更簡單更容易上手,但從小遊戲到App這中間的孩子要補足的是哪些東西?
我們先從「程式設計(Programming)」開始說起,到底什麼叫做程式設計?以前的我會覺得就程式設計是學程式語言,所以學程式就是要先學程式語法跟邏輯,然後學了半年不知道要幹嘛就放棄了。
但程式設計不僅是撰寫程式碼告訴機械應該如何運行,更像是運用程式碼解決特定問題的具體方式,不僅要撰寫程式碼。更像是要理解問題根據問題設計解決方案後,運用程式碼解決這個問題。
就像手機興起之後,攝影不再是專業攝影師所獨有的能力,甚至連小學生都可以是攝影師,透過手機記錄生活的點滴甚至據此賺錢。
就如同攝影工具的進步讓拍照變的更普及化,但現在程式設計的工具因LLM而有了劇烈的變化。我們可以想見的所謂「程式工程師」這個概念將會比目前坐在電腦前的程式工程師更為不一樣,或許將從開發最新LLM的AI工程師到透過自然語言跟AI對話的普通人,都將會是AI世代的程式工程師。
而在這樣的未來來說,所謂好的程式工程師特質跟所需的能力到底是什麼?哪些能力是是與AI協作的程式工程師依然重要的能力?
Maggie Johnson(google.org)提出了一個概念Code Sense(以下稱做程式感),她覺得這是學生在未來軟體工程領域所需的新技能,將其比喻為數學中的「數感(Numeracy)」。就像因為計算機的發明,讓學生覺得學習抽象的公式跟複雜的運算沒有用,所以開始推動數感。數感通常指的是對數字跟其關係有良好的理解,並可以將這這種理解應用於解決現實生活的問題。
舉例來說一個數感不好的人就算用計算機算半天結果搞錯單位或少按一個0卻沒有感覺。而一個沒有程式感的人可能沒有注意到安全漏洞、程式錯誤卻不知道怎麼修改或者直接把個資暴露在外等。就像小朋友寫了一個可以讓同學投票的網站,結果才發現每個人都可以重複投票,甚至根本沒有紀錄票數的機制。
而CSTA(美國電腦科學教師協會)跟TeachAI也在《2025年AI時代電腦科學教育指引(Guidance on the Future of Computer Science Education in an Age of AI (2025))》將Code Sense(程式感)定義為對計算機程式底層設計、過程及系統關聯性的概念性理解,以及分析、模擬和預測程式行為的心智能力(聽起來很饒口,不知道在說什麼),我自己的解釋是比較像是你要對程式運作有把握,大概知道這段程式碼在做什麼,各部分的函式是如何連在一起,當執行程式的時候,會依序執行哪些步驟,其中的變數怎麼變化,最後會輸出怎麼樣的結果。當要修改某個模組或函式會對程式造成什麼影響,當錯誤發生的時候,可以知道怎麼解決問題及提升程式效率表現等。甚至可以從更高階的角度來看到程式在系統中是如何解決問題考量其適切性。
在這個指引當中也強調就算AI已經可以撰寫程式碼,孩子還是要建立對程式的理解。只是在撰寫程式的過程,不再是從頭到尾親自撰寫,是將思考偏重於如何評估程式碼。所以學習Programming依然重要,因為唯有孩子透過親自撰寫和Debug才有辦法建立對程式碼如何運作的理解。
而這種理解就是所謂的Code Sense,指的是孩子在AI輔助的程式開發中依然以人為主,能夠判斷AI的程式碼是否合理且安全,並具備修改跟編輯程式碼的能力。對於在資訊課程該如何整合AI進行教學,這本指引也給出以下幾個建議:
AI提供回饋:學生輸入他們程式碼及程式碼的說明,並從AI獲得程式設計與寫作的回饋
與AI一起寫程式:用 ChatGPT 或 Copilot,讓他們體驗類似Pair programming程式設計的過程,同時促使他們提升自己的思考能力。
從數學教育學習:
建立多樣的表徵:用AI生成程式碼之後,請AI以小學生也能懂得方式解釋程式碼或利用流程圖說明程式執行過程,並比較不同表徵(representations)及其優缺點。
探索不同的方式:學生可以使用AI創建不同的程式,以解決相同的問題,然後將它們彼此及人類產生的解決方案進行比較。
解釋AI的程式碼:學生可以分析、描述跟解釋AI生成的程式碼
但指引中也提到電腦科學教師對於在教室中使用AI有以下的擔憂:AI將代替學生思考、學生將過度仰賴AI工具跟學生將失去基本技能。這些擔憂可以透過教授基礎的程式設計技能跟對AI的批判性使用來減輕。這樣可以讓學生將AI作為輔助,維持學生問題解決的能力並理解其背後的邏輯。
所以在課堂實踐中,我們應該創造機會讓學生閱讀跟用自己的話解釋程式碼、預測程式的流程、發現並改正錯誤、運用不同的方式讓學生理解程式的概念以幫助學生有效運用AI輔助撰寫程式的方式。
舉例來說可以讓學生體驗類似終極密碼的任務,程式會隨機生成一個數字,學生可以輸入一個數字,程式會判斷學生輸入的數字是否比隨機數字大或小,以此縮小範圍直到猜中為止。首先老師可以帶著學生體驗遊戲進行玩個幾輪之後,當學生已經建立對於遊戲進行的理解之後。可以讓學生試著用中文寫偽代碼(pseudocode)寫下遊戲的大概想法,再用流程圖表達大概的流程。
答案 = 隨機(1..100)
輸出 = "請輸入你想猜測的密碼"
如果 使用者輸入 > 答案:
輸出 = "比答案大"
否則: 輸出 ="比答案小"
老師再以AI生成程式碼,讓學生閱讀程式碼找出可能的錯誤或是可以改進的地方。我還會問孩子「為什麼這裡要用迴圈」「如果我輸入的不是數字是國字的三十六」會怎樣透過這樣的活動讓學生知道AI可以生成程式碼但是還是需要具備Code Sense的人來檢核。也透過這樣的活動讓學生理解他們要具備排序的基本原理跟程式如何進行才能判斷程式的正確性,才能跟AI溝通如何改進。
而Code Sense只是基本,隨著孩子年齡的增長跟能力的進步他們還要發展出Code Taste,不是只是能動,而是更適切解決當下問題的程式。就像會拍照的人很多,攝影大師卻很少。我們不是只要培育出比AI更會寫程式的孩子,而是培養出下一代的AI原住民更能與AI協作,運用AI解決問題的孩子。
沒有留言:
張貼留言