教育编程语言

**教育程式語言**是一個教育性質的程序設計語言，是一種主要設計於用來學習的工具，是與用於編寫真實環境下的應用程式程式語言不大相同的一種程式語言。

## 學習順序

許多教育性質的程序設計語言都提供建議的學習順序，即是學習一組程式語言的順序，每種語言都建立在其他語言的基礎上，使得學生能夠完成從簡單又易於理解的娛樂性編程環境到專業開發環境的轉變。

下面是一些著名的程序設計語言。

### 基於 Smalltalk／Squeak

作為「OLPC（One Laptop per Child，每個孩子都有一台電腦）」項目的一部分，Smalltalk 提出一個建議的語言學習順序，其中的每種語言都被設計成下一種的入門和基礎。這個順序是：Scratch->Etoys->Squeak-> 任意 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 一樣，它有影像式持久性（image-based persistence），所以通過語言本身能對所以任何事物進行修改（參見 Smalltalk＃反射）。Smalltalk 在物件導向編程和 JIT 及時編譯等方面給行業帶來了深遠的影響。Squeak 是在廣泛開發項目中使用的工具，包括多媒體應用，教育平台和商業網絡應用程式等。Squeak 被設計為高度可移植的，調試，分析和維護亦是如此，這是因為 Squeak 的虛擬機完全用 Smalltalk 編寫的，Squeak 的主頁維護著免費的教程列表，Stéphane Ducasse 則維持著大量 Smalltalk 和 Squeak 相關的在線書籍。現如今使用最廣泛的，採納了許多 Smalltalk 的設想的語言是 Objective-C。

### 基於 Java

Sun 公司推薦的學習順序是：Greenfoot -> BlueJ -> Netbeans/BlueJ -> Netbeans/Java。

Greenfoot 是一個交互式 Java 開發環境，主要目的是用於教育。它可以很容易的開發 2D 圖形應用程式，例如一些模擬和互動遊戲。主要是針對於高中和大學早期階段的編程學習（Java 的物件導向編程）。

BlueJ 是一個完整的 Java 環境，是特別為課程導入教學，一年級的大學生設計的。BlueJ 消除了一些複雜的 Java 語法，難以理解的輸入輸出（I/O），並且可視化的表示出了類 / 對象之間的關係。BlueJ 編程環境是關於教授初學者物件導向概念的大學研究項目（The Blue System）的一部分。BlueJ 目的是為一年級的大學生提供一個易於使用、便於教學的 Java 環境，特別強調了可視化與互動技術，旨在創造出一個高度互動的環境，鼓勵試驗和探索。

NetBeans/BlueJ 是一個集成開發環境，旨在幫助學生從 BlueJ 的 IDE 過渡到更專業的 NetBeans IDE。Sun 提供了針對高中教學和使用 Java/BlueJ 免費課程。

NetBeans/Java 是一個專業的開發平台。NetBeans 既是一個網絡應用程式開發平台，同時也是使用 NetBeans 平台的 IDE (集成開發環境)。NetBeans Platform 是能夠簡化桌面應用程式開發的可復用性框架，提供了開發桌面應用程式所需的共通服務，使得開發者能夠把重點放在實現應用程式的業務邏輯上。NetBeans IDE 是完全使用 Java 編寫，基於 NetBeans Platform 的集成開發環境。NetBeans IDE 與眾不同的支持所有類型的 Java 應用程式開發（Java SE，Web，EJB 和行動應用程式）。其他的特性還包括使用基於 Ant 的工程系統，版本控制和重構。

### 基於 Lisp

Lisp 是現如今使用的計算機語言家族中第二古老的語言，因此擁有大量的方言以及廣泛的實現。Lisp 最初是作為電腦程式的實用數學記法而創立的，基於 λ 演算，這使得它特別適合於理論計算的教學。作為最早的程序設計語言之一，Lisp 開創了許多計算機科學概念的先河，包括樹形資料結構、自動存儲管理、動態類型、物件導向編程、自足執行的編譯器（self-hosting compiler）。這些概念對於學習計算機科學而言是十分有幫助的。

LISP 語言的名字來源於「LIST Processing language（列表處理語言）」。鍊表是 Lisp 中最主要的資料結構之一，Lisp 本身代碼就是由鍊表構成的。因此，Lisp 程序能夠將原始碼當作某種資料結構來進行操作，這就允許程式設計師創建新的語法，甚至是能夠把新的特定領域的語言嵌入到 Lisp。所以 Lisp 對於學習語言的設計，創建自定義語言是相當有用的。

合理的學習順序是：Logo -> Scheme/newLISP (教育版變體) -> Common Lisp (職業版變體)

Logo 是特別為孩子們設計的入門程序設計語言。學習 Logo 的第一步是認識「turtle graphics」（龜狀圖形，最早可以追溯到 1969 年，proto-Lisp 中的「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 non-recursivecontrol structures to implement lambda calculus 以非遞歸的控制結構實施 λ 演算），這主要是因為 Lisp 仍然在硬體實現具有高效率。Guy L.Steele,Jr 和 Gerald Jay Sussman 創造出了 Scheme，通過使用簡潔高效的 Lisp 過程調用，使得 Scheme 成為最快的解釋型語言之一。從語言教學上來講，可以通過以 domain-specific 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（流）, data-directed programming（數據導向編程）, implementation of message-passingobjects（消息傳遞對象的實現）, 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 和大部分其他程序設計語言不同，它使用 S-expressions（S 表達式）來表示代碼和資料結構，而函數和宏調用是用鍊表實現的。通過 Lisp 的標準化統一各種 Lisp 的變體已經提上了日程，這不是一個特定的實現而是一個語言規範。現在有幾種 CommonLisp 的標準實現，包括商業產品和開源軟體 。

### BASIC

* Basic 是在 1964 年為那些非科學專業學生使用計算機而發明的程序語言。在 20 世紀 60 年代在小型機上非常流行，進而在 20 世紀 70 年代末，80 年代出成為微機的標準計算語言。Basic 目的是滿足簡單學習編程的需要：初學者很容易上手，是交互的，提供明確和友好的錯誤信息，反應迅速，並不需要多少對計算機硬體或作業系統的了解。短小的程序使得 Basic 特別適合於教學用途，你可以通過不到十行的代碼就能闡述清楚出一個概念。而且 Basic 並不需要對數學或者是計算機科學有多少精通的了解。Basic 作為一個延續到今日的語言，擁有許多很好的自學教程和實現。參見完整的 Basic 方言列表。Basic 提供的建議學習順序是：以 Basic 為基礎的，如微軟的 Small Basic，Basic-256 和 SiMPLE 到全功能的 Basic，如 Visual Basic .NET 或 Gambas。
* Visual Basic .NET 可以通過 Visual Basic Express 版本獲取，其中包括 K-12 learning center （K-12 學習中心）和 Beginner adult learning center（成人初學者中心）。
* 微軟 Small Basic 作為一個入門程序設計語言，是 Visual Basic 的簡化版本。「旨在把『樂趣』帶回到編程中」。Small Basic 實在是小，只有 15 個關鍵字，並且每個都自然好懂。Small Basic 提供特別的對象函數庫，包括使人普遍感興趣和孩子們感興趣的東西（例如 Flickr）。孩子們能夠在線或在本地創建有趣的交互程序。Small Basic 利用了微軟的 Visual Studio IDE 提供的自動完成和上下文相關的幫助。
* Gambas 是一個免費提供、易於使用的 Linux 版本。
* BASIC-256 [5] 是易於使用的 Basic 版本，設計用於教會孩子們計算機編程的基礎知識。它使用了傳統的 Basic 控制結構（go sub, for loops,goto）, 這便於孩子們理解程序流程的控制。Basic-256 提供了一個內置的繪圖模式，允許在屏幕上繪畫。Basic-256 還提供了教程，通過有趣的練習來介紹編程的概念。
* SiMPLE 是一種編程開發系統，是為了提供給普通人簡單的編程能力，尤其是非專業人士。SiMPLE 依稀讓人想起了 AppleSoft 的 Basic。SiMPLE 是一個編譯式的語言。此外，SiMPLE 允許用戶將經常使用的功能創建為函數庫。SiMPLE 是三種略微不同語言的通稱：Micro-SiMPLE（只有 4 個關鍵字）、Pro-SiMPLE、Ultra- SiMPLE（23 個關鍵字）。

## 兒童

* AgentSheet 是屢獲大獎的遊戲和仿真製作工具，它可以簡單到讓中學生通過製作視頻遊戲來學習計算機知識，也可以複雜到讓 NASA 的科學家來模擬太空梭的有效負荷。AgentSheet 是由一個叫做 Scalable Game Design（可擴展的遊戲設計）的完整課程提供支持的，它從簡單的像青蛙一樣（Frogger-like）的遊戲一直到複雜的人工智慧仿真遊戲。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 被設計成對任何高級語言都儘量簡化和通用。還有一個叫 RUR-PLE 的變體，它包括了完整的 Python 語法和一些經典的課程。
* Karel，Karel++，和 Karel J.Robot 是為那些完全的初學者而準備的。用來在一個由長方形街道網格組成的城市中控制一個簡單機器人。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 Kid's 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 的語法在歸納證明中很有優勢，就像在紙上證明一樣簡單，而不像 Lisp/Scheme 還需要引入額外的語法。
* 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 編程。

## 按年齡和程度區分所授語言

## 參考連結

## 外部連結

* A nontechnical encyclopedia article on educational programming languages, hosted on kidslike.info （頁面存檔備份，存於網際網路檔案館） 由 Scratch、 Alice 和 Greenfoot 所做的評論和解釋。
* 關於用教給孩子哪種語言的爭論。各種觀點詳見 Don's Box。
* Coding 4 Fun 微軟旨在培養編程者的網站。
* BASIC vs. Logo 於 WikiVS 上