ScratchJr 為何讓 5 歲小孩也能寫程式?拆解積木式編程的設計底層
以技術視角分析 ScratchJr 的無文字積木編程如何降低認知門檻、六色積木分類如何對應計算思維,以及這套設計的取捨與適用邊界。
scratchjr 是什麼:一款給 5–7 歲孩子的零文字積木編程工具
scratchjr 由 Scratch 基金會開發,是一款專門面向 5 到 7 歲兒童的編程入門軟體。它的核心思路很簡單:不用打字、不用記代碼、不用理解語法規則——所有編程操作都轉換成了帶圖標的彩色積木,孩子只需要用手指把積木從下方拖到中間的編程區,從左到右拼起來,就能讓角色跑、跳、唱歌、畫畫。
這聽起來像是在玩一個變形積木遊戲,但本質上它已經是一套完整的編程系統。scratchjr 包含了觸發、運動、外觀、聲音、控制、結束六類積木,每一類對應傳統編程裡的一個概念域——只是把複雜的語法糖全部換成了圖標。scratchjr文檔 裡有完整的編輯器界面巡覽,應用裡自帶角色庫和繪圖編輯器,孩子畫出自己的角色、錄自己的聲音當背景音,拼好積木後點綠旗就能看到效果。
scratchjr 解決了一個長期存在的問題:如何讓不識字或剛認字的孩子接觸計算思維?傳統編程語言哪怕是圖形化的 Scratch,也需要基本的閱讀能力和鍵盤操作。scratchjr 把這兩個門檻一次性拿掉了——全部是圖標,全部是觸控。據官方公佈的數據,ScratchJr 在全球一百九十四個國家和地區被使用,支援超過二十種語言,下載量超過七千萬次。
安裝
scratchjr 以 Android APK 形式發佈,當前最新版本為 1.5.11,安裝包大小 26.62MB,包名為 org.scratchjr.android。scratchjr下載 完成後的安裝流程與一般 Android 應用類似,但有幾點值得留意。
首先,安裝包並不大——26MB 的體量在兒童類應用裡屬於輕量級,這是因為它不需要下載額外的資源包或模型檔案,所有角色圖庫和積木資源都已內建在 APK 內。下載完成後直接點擊安裝,系統會提示是否允許安裝來自未知來源的應用,這一步需要在系統設定裡開啟對應權限。
安裝完成後首次啟動會進入引導頁,帶領孩子認識基本的觸控操作。建議首次使用前先進入右上角齒輪圖標的設定界面,把語言切換成繁體中文——scratchjr 內建二十多種語言,切換是即時生效的,不需要重啟應用。

問題為什麼要把編程做成積木——設計者到底在解決什麼
作為一個技術人,我第一次接觸 scratchjr 時問的問題不是「它好不好用」,而是「為什麼要這麼做」。把代碼變成積木這個想法當然不是 scratchjr 首創——Scratch 本身就是圖形化編程,更早還有 Logo、Turtle Graphics。但 scratchjr 和 Scratch 之間有一條明顯的分界線:Scratch 仍然需要閱讀能力,scratchjr 則連文字都不需要。
這背後是一個認知心理學的問題。5 歲到 7 歲的孩子,正處於皮亞傑認知發展理論裡的前運算階段末期到具體運算階段初期。這個年齡的孩子剛剛掌握符號思維(能理解圖畫代表實物),但還在掙扎於抽象概念——他們能數具體的積木塊,但很難理解一個變量可以代表任意數值;他們能按順序做動作,但很難預測條件分支的結果。
傳統編程教學的門檻不在語法,而在「用一種陌生的抽象語言描述一個具體的動作」這個認知跳躍。scratchjr 的設計者面臨的問題是:能不能完全繞過這個跳躍,讓孩子在「玩圖標積木」的過程中自然建立計算思維?
拆解六色積木的資訊架構
scratchjr 的六色積木不是隨便塗的顏色,scratchjr官網 上有對應的設計說明,它對應的是計算機科學裡經典的編程概念分類。讓我把每一類積木翻譯成傳統代碼裡的等價物:
黃色——觸發積木。這是腳本的入口點,相當於代碼裡的事件監聽器。五塊黃色積木(綠旗開始、點擊開始、被撞開始、收到消息、發出消息)覆蓋了最基本的觸發場景:手動啟動、用戶交互、物理碰撞、消息傳遞。設計者把所有腳本的開頭都強制要求一塊黃色積木——這是一個硬約束,腳本最左邊不是黃色就永遠不會運行。這個約束對孩子來說是個顯式的視覺提示,對編程思維來說是在強調「每個程序都有一個入口」。
藍色——運動積木。控制角色的移動、旋轉、跳躍。這裡的設計決策很有意思:積木上直接顯示數字參數(比如「向前走 5 步」),而不是留出空白讓孩子填。這是因為 5 歲孩子還不會熟練鍵盤輸入,但他們能看懂數字並且知道 5 和 10 的區別。數字顯示在積木上本身就是一種「參數可視化」。
紫色——外觀積木。改變角色的造型、大小、顏色、說出一段文字。這類積木的核心是「狀態修改」——相當於代碼裡給對象的屬性賦值。
綠色——聲音積木。播放預設音效或錄製的聲音。這類積木的設計亮點是孩子可以錄自己的聲音當資源——把外部物理世界的聲音直接引入程序,這個設計把「代碼」和「孩子自己的生活」連接了起來。
橙色——控制積木。目前 scratchjr 只有兩塊:等待 N 秒和重複執行 N 次。這是刻意的極簡設計——Scratch 裡的 if-then、forever、wait until 在 scratchjr 裡全部砍掉了。為什麼?因為條件分支和無限循環對 5 歲孩子來說太抽象了。重複執行固定次數這個概念,孩子可以直觀理解(「跳三下」),但「如果碰到什麼才做什麼」在 scratchjr 裡被轉化成了一個黃色觸發積木(被撞開始)。
紅色——結束積木。讓角色消失或讓頁面切換。這是程序的終點,設計成紅色讓視覺上一眼可辨。
把六色積木加起來,scratchjr 覆蓋了一個最小可用的事件驅動編程模型:事件觸發 → 執行動作序列 → 狀態修改 → (可選)發送消息給其他腳本。這個模型和早期的 HyperCard、Director 等事件驅動腳本語言本質相同,只是把所有語法元素替換成了圖標。
取捨scratchjr 為什麼刻意「不完整」
我上面已經提到了一個取捨:Scratch 裡的條件分支、無限循環、變量、函數,scratchjr 全部砍掉了。這不是技術能力不夠——scratchjr 的運行時完全可以支持這些結構——而是設計上的刻意選擇。
讓我用一個餐廳的類比來說明這個取捨。假設你帶一個 5 歲孩子去吃飯,給他一份自助餐(Scratch),他會滿桌亂抓,什麼都想試,最後吃了一肚子甜點沒碰主菜。給他一份固定套餐(ScratchJr),他雖然選項少了,但每道菜都是搭配好的,吃完能獲得完整的一餐。
scratchjr 就是這份固定套餐。它砍掉的那些功能(變量、函數、條件判斷),是為了保證孩子在有限的認知負荷下能完成一個「完整的」編程項目。如果加進去,孩子很可能卡住一個問題(「變量在哪裡設?」)就放棄了,反而學不到任何東西。
這個取捨的代價是顯而易見的:scratchjr 能做的事情非常有限。你用它做不了複雜的遊戲邏輯、做不了數據處理、做不了任何需要抽象思維的程序。孩子長大到 7 歲左右,scratchjr 的功能就開始不夠用了——這時候他們應該轉去 Scratch 而不是繼續在 scratchjr 裡繞圈。
另一個取捨是「無文字」。scratchjr 做到了積木零文字,但這意味著所有概念都必須靠圖標傳達。有些圖標的含義非常直觀(綠旗開始=點綠旗),但有些就比較隱晦(「被撞開始」的碰撞圖標,孩子需要試幾次才明白什麼樣的動作才算「撞到」)。設計者在「零文字」和「圖標是否一目了然」之間做了選擇,前者優先。
判斷這套原理意味著什麼
scratchjr 的設計哲學可以總結成一句話:用認知心理學的方法降低編程的門檻,而不是用技術的方法增加編程的功能。
這套設計適合什麼場景?當然是 5 到 7 歲孩子的編程啟蒙。更具體地說,適合那些還在建立符號思維、剛剛開始理解「動作序列」概念的孩子。scratchjr 不教代碼語法,它教的是「指令可以組合起來達成一個目標」這個元概念——這個概念一旦建立,未來不管學什麼編程語言都會容易很多。
不適合什麼場景?8 歲以上的孩子用它會覺得無聊,功能太少;有編程基礎的大人用它會覺得愚蠢,因為它砍掉了所有「真正的」編程特性;想用它做實際項目(哪怕是給孩子做的互動書)也不現實,因為積木的表達能力太有限。
我作為一個技術人對 scratchjr 的判斷是:它不是一個「簡化版的編程語言」,它是一個「編程概念的認知訓練工具」。它的價值不在於能做什麼,而在於能不能讓一個從沒接觸過編程的小孩,在第一次使用時就感受到「我在控制電腦」——那種因果關係的確認感,是後續所有學習的基礎。
scratchjr 還有一個很少被注意到的設計巧思:複製角色的操作方式。它不是長按彈出菜單選「複製」,而是把角色從左側列表拖到舞台右上角的頁面縮略圖上。這個操作對孩子來說是直觀的(「把這個角色送給那一頁」),但它暗合了程序裡的「副本語義」——複製出來的角色是獨立的,改一個不影響另一個。設計者在很多地方都藏了這種「暗合編程概念但不顯式教」的設計,這才是 scratchjr 最有意思的地方。
本文为个人基于网络公开资料整理编写,非官方内容,仅供学习交流参考;软件版权归原作者所有,请支持正版;使用过程中遇到问题请查阅官方渠道,本文不承担任何责任。

