教育程式語言是一個教育性質的程式設計語言，是一種主要設計於用來學習的工具，是與用於編寫真實環境下的應用程式程式語言不大相同的一種程式語言。 學習順序 許多教育性質的程式設計語言都提供建議的學習順序，即是學習一組程式語言的順序，每種語言都建立在其他語言的基礎上，使得學生能夠完成從簡單又易於理解的娛樂性程式設計環境到專業開發環境的轉變。 下面是一些著名的程式設計語言。 基於 Smalltalk／Squeak 作為 OLPC（One Laptop per Child，每個孩子都有一臺電腦） 專案的一部分，Smalltalk 提出一個建議的語言學習順序，其中的每種語言都被設計成下一種的入門和基礎。這個順序是：ScratchEtoysSqueak 任意 Smalltalk。在學習的過程中，每一種語言都提供了圖形化的程式設計環境，不僅是用於教會孩子們一些程式設計的概念，而且是包含物理和數學知識的模擬及講述故事的一些練習。Smalltalk 和 Squeak 作為全功能的應用程式開發語言，在過去的數十年中已經變得十分有名了，而 Scratch 是孩子們學習的工具。 Scratch 是一種基於 Squeak、並由 Squeak 實現的視覺化程式設計語言。透過讓孩子們建立遊戲，影片和音樂，達到教會孩子們一些程式設計概念的目的。在 Scratch 中，所有的互動物體，圖形和聲音都能夠很輕鬆的匯入到新的程式，透過新的方式將其組合，透過這種方法，初學者能夠很快的看到結果，並且有興趣深入學習下去。在 Scratch 社群中，已經開發和上傳了超過 100，000 個工程專案。Scratch 是由 MIT 多媒體實驗室開發的。 Etoys 的創意來源計算機螢幕上那些可程式設計的實體。Etoys 提供一個簡單高效的劇本物件模型，和一個使用者媒體豐富的創作環境，涵蓋了 2D 和 3D 圖形，圖片，文字，粒子，演示文件，網頁，影片，聲音和 MIDI 音樂，能夠與其他 Etoys 使用者即時共享桌面，透過網際網路進行身臨其境的指導。Etoys 是多語言的，已經在美國，歐洲，南美，日本，韓國，尼泊爾等地取得了成功。這個專案是針對 9 至 12 歲的兒童的。 Squeak 是一個現代的，開源的，功能齊全的 Smalltalk 程式設計語言和執行環境。Smalltalk 是一個面向物件，擁有動態型別和反射特性的程式設計語言，用來支援 人機共棲 這個 新的世界 的計算典範。像 Lisp 一樣，它有影像式永續性（imagebased persistence），所以透過語言本身能對所以任何事物進行修改（參見 Smalltalk＃反射）。Smalltalk 在面向物件程式設計和 JIT 及時編譯等方面給行業帶來了深遠的影響。Squeak 是在廣泛開發專案中使用的工具，包括多媒體應用，教育平臺和商業網路應用程式等。Squeak 被設計為高度可移植的，除錯，分析和維護亦是如此，這是因為 Squeak 的虛擬機器完全用 Smalltalk 編寫的，Squeak 的主頁維護著免費的教程列表，Stéphane Ducasse 則維持著大量 Smalltalk 和 Squeak 相關的線上書籍。現如今使用最廣泛的，採納了許多 Smalltalk 的設想的語言是 ObjectiveC。 基於 Java Sun 公司推薦的學習順序是：Greenfoot BlueJ NetbeansBlueJ NetbeansJava。 Greenfoot 是一個互動式 Java 開發環境，主要目的是用於教育。它可以很容易的開發 2D 圖形應用程式，例如一些模擬和互動遊戲。主要是針對於高中和大學早期階段的程式設計學習（Java 的面向物件程式設計）。 BlueJ 是一個完整的 Java 環境，是特別為課程匯入教學，一年級的大學生設計的。BlueJ 消除了一些複雜的 Java 語法，難以理解的輸入輸出（IO），並且視覺化的表示出了類 物件之間的關係。BlueJ 程式設計環境是關於教授初學者面向物件概念的大學研究專案（The Blue System）的一部分。BlueJ 目的是為一年級的大學生提供一個易於使用、便於教學的 Java 環境，特別強調了視覺化與互動技術，旨在創造出一個高度互動的環境，鼓勵試驗和探索。 NetBeansBlueJ 是一個整合開發環境，旨在幫助學生從 BlueJ 的 IDE 過渡到更專業的 NetBeans IDE。Sun 提供了針對高中教學和使用 JavaBlueJ 免費課程。 NetBeansJava 是一個專業的開發平臺。NetBeans 既是一個網路應用程式開發平臺，同時也是使用 NetBeans 平臺的 IDE 整合開發環境。NetBeans Platform 是能夠簡化桌面應用程式開發的可複用性框架，提供了開發桌面應用程式所需的共通服務，使得開發者能夠把重點放在實現應用程式的業務邏輯上。NetBeans IDE 是完全使用 Java 編寫，基於 NetBeans Platform 的整合開發環境。NetBeans IDE 與眾不同的支援所有型別的 Java 應用程式開發（Java SE，Web，EJB 和移動應用程式）。其他的特性還包括使用基於 Ant 的工程系統，版本控制和重構。 基於 Lisp Lisp 是現如今使用的計算機語言家族中第二古老的語言，因此擁有大量的方言以及廣泛的實現。Lisp 最初是作為計算機程式的實用數學記法而創立的，基於 λ 演算，這使得它特別適合於理論計算的教學。作為最早的程式設計語言之一，Lisp 開創了許多計算機科學概念的先河，包括樹形資料結構、自動儲存管理、動態型別、面向物件程式設計、自足執行的編譯器（selfhosting compiler）。這些概念對於學習計算機科學而言是十分有幫助的。 LISP 語言的名字來源於 LIST Processing language（列表處理語言）。連結串列是 Lisp 中最主要的資料結構之一，Lisp 本身程式碼就是由連結串列構成的。因此，Lisp 程式能夠將原始碼當作某種資料結構來進行操作，這就允許程式設計師建立新的語法，甚至是能夠把新的特定領域的語言嵌入到 Lisp。所以 Lisp 對於學習語言的設計，建立自定義語言是相當有用的。 合理的學習順序是：Logo SchemenewLISP 教育版變體 Common Lisp 職業版變體 Logo 是特別為孩子們設計的入門程式設計語言。學習 Logo 的第一步是認識 turtle graphics（龜狀圖形，最早可以追溯到 1969 年，protoLisp 中的 turtle robots）。在現代的 Lisp 實現中，有一個叫 turtle 的抽象繪圖裝置，專門用來繪製龜狀圖形，是為了吸引孩子們進行程式設計。Seymour Papert，Logo 語言的發明者，是構造論的支持者，構造論是多種構成主義的學習理論。Papert 認為像寫作之類的活動，會在早期接受計算文化過程中自然而然的學會。所以 Logo 設計的初衷不僅僅是為了教會孩子們程式設計和計算文化中的一些概念，而是為了增強孩子們對日益以科技為主導的文化的適應。比開始較早進行智力教育更為重要的是，這能夠使孩子們避免學習中形成的長期依賴，即學習的東西都是由所謂權威的人提出的 而這樣的小孩無法給自己準確的定位，或者讓社會覺得他們是在智力上是無助的。透過在 3 歲左右的孩子進行實驗，對他們 30 年的跟蹤記錄發現，大多數都取得了教育上的成功。Logo 實際上是一個 Lisp 的線性版本，對於高年級的學生而言，Logo 能夠用來解釋計算機甚至是人工智慧中的一些概念。Brian Harvey 寫過一系列的文章 Computer Science Logo Style，對那些透過 Logo 學習計算機科學的學生而言是很有幫助的。Logo 目前已廣泛應用於各種平臺，同時提供了免費版和商業版。 Scheme 最初是在 1975 年出於教學目的而設計的語言（參加 9 LISPs of the day used nonrecursivecontrol structures to implement lambda calculus 以非遞迴的控制結構實施 λ 演算），這主要是因為 Lisp 仍然在硬體實現具有高效率。Guy LSteeleJr 和 Gerald Jay Sussman 創造出了 Scheme，透過使用簡潔高效的 Lisp 過程呼叫，使得 Scheme 成為最快的解釋型語言之一。從語言教學上來講，可以透過以 domainspecific languages（DSL 特定領域語言）和 MetacircularEvaluator（元迴圈計算）的方式來進行。1984 年出版的《Structure and Interpretation of Computer Programs》（《計算機程式的構造和解釋》）將這種教育理念納入了經典的教學課本中，從而改變了 Pascal 在大學程式設計語言中的優勢地位。 Abelson 和 Sussman 在 1984 年出版的《Structure and Interpretation of Computer Programs》（SICP），給上世紀八十年代的計算機課程設計帶來了徹底性的改變。更為重要的是，SICP 打破了語法入門課程的壟斷，不再是將課程的組織僅僅圍繞某個當前流行的程式設計語言的語法，而是將學習計算科學的重點放在了：functional abstraction 函式抽象 data abstraction（資料抽象） streams（流） datadirected programming（資料導向程式設計） implementation of messagepassingobjects（訊息傳遞物件的實現） interpreters（直譯器） compilers（編譯器） and register machines（暫存器機器）。 短時間內，美國以及世界各地的很多大學把第一門計算機科學課程改成了 SICP 和 Scheme。而 SICP 也成了 MIT Press 最為暢銷的圖書之一。和 SCIP 一起，Scheme 也廣泛應用，不僅僅是印第安納大學，MIT，耶魯大學的開設的少數課程，而是成為世界性入門語言的選擇。 自那以後，Scheme 社群為低年級課程提供了一些定製的教育程式設計環境。其中有 PLT Scheme 和 DrScheme 環境，還提供了免費的教師培訓教材：How to Design Programs 和 Teach Scheme。 newLISP 旨在提供一個磁碟佔用和系統資源使用少的，快速的，強大的，跨平臺的，全功能指令碼版的 Lisp 程式設計語言。因為它的簡單，一致，線性的特點，特別適合於初學者。newLisp 能夠最大限度的減少學習的曲線並且帶給程式設計師更多的創造性和快樂。 Common Lisp 是通用的（專業的），多泛型程式設計語言。它支援過程式、函式式和麵向物件的程式設計正規化。作為一個動態程式設計語言，CommonLisp 促進了迭代編譯向高效執行時程式的快速發展。CommonLisp 和大部分其他程式設計語言不同，它使用 Sexpressions（S 表示式）來表示程式碼和資料結構，而函式和宏呼叫是用連結串列實現的。透過 Lisp 的標準化統一各種 Lisp 的變體已經提上了日程，這不是一個特定的實現而是一個語言規範。現在有幾種 CommonLisp 的標準實現，包括商業產品和開源軟體 。 BASIC Basic 是在 1964 年為那些非科學專業學生使用計算機而發明的程式語言。在 20 世紀 60 年代在小型機上非常流行，進而在 20 世紀 70 年代末，80 年代出成為微機的標準計算語言。Basic 目的是滿足簡單學習程式設計的需要：初學者很容易上手，是互動的，提供明確和友好的錯誤資訊，反應迅速，並不需要多少對計算機硬體或作業系統的瞭解。短小的程式使得 Basic 特別適合於教學用途，你可以透過不到十行的程式碼就能闡述清楚出一個概念。而且 Basic 並不需要對數學或者是計算機科學有多少精通的瞭解。Basic 作為一個延續到今日的語言，擁有許多很好的自學教程和實現。參見完整的 Basic 方言列表。Basic 提供的建議學習順序是：以 Basic 為基礎的，如微軟的 Small Basic，Basic256 和 SiMPLE 到全功能的 Basic，如 Visual Basic NET 或 Gambas。 Visual Basic NET 可以透過 Visual Basic Express 版本獲取，其中包括 K12 learning center （K12 學習中心）和 Beginner adult learning center（成人初學者中心）。 微軟 Small Basic 作為一個入門程式設計語言，是 Visual Basic 的簡化版本。旨在把樂趣帶回到程式設計中。Small Basic 實在是小，只有 15 個關鍵字，並且每個都自然好懂。Small Basic 提供特別的物件函式庫，包括使人普遍感興趣和孩子們感興趣的東西（例如 Flickr）。孩子們能夠線上或在本地建立有趣的互動程式。Small Basic 利用了微軟的 Visual Studio IDE 提供的自動完成和上下文相關的幫助。 Gambas 是一個免費提供、易於使用的 Linux 版本。 BASIC256 5 是易於使用的 Basic 版本，設計用於教會孩子們計算機程式設計的基礎知識。它使用了傳統的 Basic 控制結構（go sub for loopsgoto） 這便於孩子們理解程式流程的控制。Basic256 提供了一個內建的繪圖模式，允許在螢幕上繪畫。Basic256 還提供了教程，透過有趣的練習來介紹程式設計的概念。 SiMPLE 是一種程式設計開發系統，是為了提供給普通人簡單的程式設計能力，尤其是非專業人士。SiMPLE 依稀讓人想起了 AppleSoft 的 Basic。SiMPLE 是一個編譯式的語言。此外，SiMPLE 允許使用者將經常使用的功能建立為函式庫。SiMPLE 是三種略微不同語言的通稱：MicroSiMPLE（只有 4 個關鍵字）、ProSiMPLE、Ultra SiMPLE（23 個關鍵字）。 兒童 AgentSheet 是屢獲大獎的遊戲和模擬製作工具，它可以簡單到讓中學生透過製作影片遊戲來學習計算機知識，也可以複雜到讓 NASA 的科學家來模擬太空梭的有效負荷。AgentSheet 是由一個叫做 Scalable Game Design（可擴充套件的遊戲設計）的完整課程提供支援的，它從簡單的像青蛙一樣（Froggerlike）的遊戲一直到複雜的人工智慧模擬遊戲。AgentSheet 支援遊戲（動畫，互動，聲音，語音合成 識別（Mac）），科學應用程式（繪圖，輸出到電子表格，3D 繪圖（Mac））。AgentSheet 有英語，希臘語和日語版本。Lego Mindstorms 以 AgentSheets 為基礎，開發了 LegoSheets 程式設計語言，比 Brick Logo 的學習曲線要平緩的多。 Alice 是一個免費的程式設計軟體，旨在教會孩子們事件驅動的面向物件程式設計。程式設計者可以使用現代 IDE，以拖拽的方式建立互動式的故事程式。Alice 目標群體是大多數中學階段的有計算機使用經驗的女生，可謂寓教於樂。還有一個叫 Story Telling Alice 的 Alice 的變體，能夠提供更強的講故事能力。 Baltie 是圖形化的程式設計工具，適合兒童，青少年（成人）。Baltie 是軟體中一個主要的角色，一個巫師，用來執行各種命令、將出現在他視野的圖片變魔術。透過 Baltie 的幫助，孩子們能夠很快認識到什麼是計算機，如何對計算機進行操作和程式設計，這些都是在玩的過程中實現的。Baltie 同樣能夠幫助邏輯思維訓練，而且對孩子們的知識並沒有多少要求，只要求會玩和想象力。Baltie 已經在許多國家的小學中採用了。新版本的 Baltie 4 甚至完全支援 C，更多的資訊可以在 SGP Systems 中找到。 Guido van Robot 是一個機器人控制程式，有點類似於 Logo 和 Karel J Robot，使用了 Python 語法中的很少一部分。Guido van Robot 被設計成對任何高階語言都儘量簡化和通用。還有一個叫 RURPLE 的變體，它包括了完整的 Python 語法和一些經典的課程。 Karel，Karel，和 Karel JRobot 是為那些完全的初學者而準備的。用來在一個由長方形街道網格組成的城市中控制一個簡單機器人。Karel 是一個自主的程式設計語言，而 Karel 是 Karel 的 C 實現，Karel J Robot 則是 Karel 的 Java 實現。 Learn to Program BASIC 是一個透過互動課程教會中學生 Basic 的 Basic 解釋程式，在 Basic 語言中加入了一些的遊戲，包括對 2D sprite 支援。在 LTPB 中編寫的程式能夠脫離 LTPB 獨立執行，即是一個可以自由分發的 runner。 Lego Mindstorms（樂高機器人）是集合了可程式設計 Lego 磚塊、電動馬達、感測器、Lego 磚塊、Lego Technic 部分（齒輪、輪軸、橫樑）的統稱。Mindstorms 起源於益智玩具中可程式設計感測器模具（programmable sensor blocks）。第一個 Lego Mindstorms 的零售版本在 1998 年上市，當時叫做 Robotics Invention System RIS。最近的版本是 2006 年上市的 Lego Mindstorms NXT。許多語言都能對 Mindstorms 進行程式設計，包括 Logo、Basic、Java 的衍生版、Smalltalk 和 C 語言。Computer Clubhouses 是專注於 Mindstorms 程式設計的網站。 Phrogram（第二代的 KPL，MS Kids Programming Language）是 2006 年引入的一個商業的、易於學習的程式設計語言和整合開發環境。它強調圖形和聲音，使得它特別容易開發遊戲，寓教於樂的程式。Phrogram 是簡化的結構化語言，提供了基於元件開發的特性，例如類和方法。Phrogram 在現代 IDE 中進行建模，例如 Eclipse 和 Visual Studio NET，並可以幫助初學者為這些或者其他的專業開發環境做好準備。 RoboMind 是一個簡單的教育性質的程式設計環境，能讓初學者對機器人程式設計。RoboMind 介紹了流行的程式設計技術、一些機器人學和人工智慧的知識。人們能夠使用阿拉伯語、中文、荷蘭語、英語和瑞典語對機器人進行程式設計。 StagecastCreators 是基於示範程式設計的視覺化程式設計系統。使用者透過移動螢幕上的圖示，為物體（角色）制定規則來操作整個系統。使用者可以創造 2D 模型來模擬一個概念，多層次的遊戲，互動的故事等。 Tynker 是一種以拖放程式方塊方式進行的教育程式語言商業軟體，視覺設計及原理類似 Snap 及 Hopscotch 等，不過 Tynker 是以 HTML5 及 JavaScript 為基礎，也可以用在平版電腦及智慧型手機中。 歷史的 Pascal 是最知名的基於教育目的設計的程式語言。在 1970s 晚期至 1980s 晚期，它是美國和歐洲用於教授計算機入門課程的主要語言。Pascal 也用於實際開發。 大學 A 是最近一個旨在創造一種程式設計語言，提供一個高效程式設計訓練工具的嘗試 Curry 是一個教學語言，旨在合併最為重要的程式設計正規化，即函式程式設計（巢狀表示式、高階函式、延遲賦值）和邏輯程式設計（邏輯變數、區域性資料結構，內建搜尋）。在這一過程中，Curry 同樣整合了兩種最重要的操作原則：Residuation（殘差）和 Narrowing（縮小）。 Haskell 是大學中經常用來替代 LISP 或 Scheme 的函式語言。Haskell 主要目的是以同樣方式進行教學、研究、程式設計，是純粹的函式式、富於表達的惰性求值程式設計語言（extremely expressive lazy functional）。Haskell 示例可以線上獲取，同樣還有許多書籍和教程。還有一個叫 Helium 的教育版的編譯器和 IDE。Haskell 另一個優勢是在教學歸納法上，因為 Haskell 的語法在歸納證明中很有優勢，就像在紙上證明一樣簡單，而不像 LispScheme 還需要引入額外的語法。 Oz 是旨在於教育計算機理論的程式設計語言。Oz 在單一語言中支援大多數主要的程式設計正規化，因而學生學習正規化不需要掌握多種語法。Oz 透過簡單又良好分解的方式來闡述主要的程式設計正規化的概念，包括邏輯式、函式式（包括 lazy 和 eager）、命令式、面向物件、強型別、分散式及併發程式設計。《Concepts Techniques and Models of Computer Programming》是介紹 Oz 的經典圖書，還有一個免費的 Oz 標準實現的語言 Mozart Programming System。 Qi II 是一個函式程式設計語言。Qi 的核心是 Lisp 的簡化版，但是它包含最常見的現代函式式語言的特性，例如模式匹配、區域性套用函式、偏應用（partial applications）、靜態型別檢查。Qi II 還包括一個嵌入 Prolog 的發行版，叫 Qi Prolog。 所有這些特性與 Lisp 環境的結合，使得 Qi 在某種意義上可以稱為合理化和現代化的 Lisp。 Qi 在非商業用途上是免費的，一本經典的圖書《Functional Programming in Qi》專門介紹 Qi 程式設計。 按年齡和程度區分所授語言 年齡 程度 適宜語言 學齡前二年級 無 不適用 Logo style Logo Guido van Robot Karel Scratch Baltie 2 Stagecast Creator 二年級四年級 無 不適用 Kodu Logo Scratch or Etoys Stagecast Creator 五年級八年級 很少或沒有經驗 Kodu Lego Mindstorm Etoys AgentSheets Alice Baltie 3 learning oriented BASIC Mama Phrogram Stagecast Creator 五年級八年級 有一些經驗 Kodu Squeak full featured BASIC Greenfoot Pascal 高中 很少或沒有經驗 Kodu Squeak Greenfoot Pascal full featured BASIC 高中 有一些經驗 Squeak Greenfoot or BlueJ newLISP OZ Most other programming languages 大學 不是主要專業，假定沒有經驗 Squeak Greenfoot or BlueJ newLISP full featured BASIC 大學 開始計算機科學或程式設計課程 Haskell OZ Scheme Qi Squeak NetBeans BlueJ 參考連結 外部連結 A nontechnical encyclopedia article on educational programming languages hosted on kidslikeinfo 由 Scratch、 Alice 和 Greenfoot 所做的評論和解釋。 關於用教給孩子哪種語言的爭論。各種觀點詳見 Dons Box。 Coding 4 Fun 微軟旨在培養程式設計者的網站。 BASIC vs Logo 於 WikiVS 上 Category 程式語言分類 Category 程式語言列表