不教 Python 也不教 Scratch:一位教師用 Forth 帶中學生理解電腦如何運作

不教 Python 也不教 Scratch:一位教師用 Forth 帶中學生理解電腦如何運作

2026/07/28

一位教師分享捨棄主流的 Python 與 Scratch,改以堆疊式語言 Forth 教中學生程式設計的實作經驗。這項選擇背後的問題意識是:入門語言的友善設計,是否反而遮蔽了學生對電腦運作本質的理解。

在中小學程式教育的主流路徑中,Scratch 負責啟蒙、Python 承接進階,幾乎已成為全球共識。然而一位教師近期分享的實作經驗提出了另一種選擇:以 Forth 這個誕生於 1970 年代、幾乎不曾出現在學校課表上的堆疊式語言,帶領國中與高中學生入門程式設計。

Forth 的特徵在於極度精簡。它以堆疊(stack)作為資料運算的核心機制,語法幾乎沒有裝飾,程式的建構方式是不斷定義新的「字(word)」,再用這些字組合出更高層的功能。整個語言的實作可以小到在極有限的硬體上運行,長期以來被用於嵌入式系統、儀器控制與早期太空任務的韌體開發。

選擇 Forth 而非主流語言,背後是一個明確的問題意識:現代入門語言為了降低門檻,把大量機制包裝起來——記憶體如何配置、資料如何在運算中流動、函式呼叫時堆疊發生什麼事,學生完全看不見。這樣的設計讓學生能很快寫出會動的程式,卻也讓他們對「電腦到底在做什麼」始終停留在模糊印象。而 Forth 幾乎不隱藏任何東西:學生必須在腦中同步追蹤堆疊狀態,每一個運算都直接對應資料的推入與彈出,抽象層被剝到最薄。

這種教法的代價相當明顯。Forth 的逆波蘭式寫法與堆疊思維,與學生從數學課帶來的中綴運算直覺相衝突,初期挫折感高於 Scratch 的拖拉積木;生態系也極小,沒有豐富的函式庫、教學影片與社群問答可依賴,學生遇到問題時能求助的資源遠少於主流語言。對追求短期成就感的課堂而言,這幾乎是逆向操作。

但相對的收穫也很具體。當學生必須自己維護堆疊、自己定義每一個基本操作,程式設計就不再是「查到正確咒語並貼上」,而是理解機器狀態如何被一步步改變。這種理解會遷移:後續學習任何語言時,函式呼叫、記憶體管理、遞迴的實際成本,對他們而言都不再是黑盒子。從 STEAM 教育強調的「理解系統而非操作工具」角度看,這正是核心目標。

這個案例對程式教育的啟示,不在於呼籲學校改教 Forth——對絕大多數課堂而言,主流語言仍是更務實的選擇。真正的提醒是:入門語言的選擇本身就是教學決策,而不是預設值。當一門課的目標是快速產出作品與維持動機,Scratch 與 Python 無疑合適;但若目標是建立對計算本質的直覺,刻意選擇一個「不友善」的語言,反而可能是最短的路徑。

在 AI 工具已能代寫大量程式碼的今日,這個問題顯得更加尖銳。當語法與樣板不再是稀缺能力,教育的價值就更集中在理解系統如何運作、以及判斷產出是否合理——而這些能力,恰恰是被過度包裝的入門環境最容易略過的部分。