教育编程语言列表

教育编程语言是一个教育性质的程序设计语言，是一种主要设计于用来学习的工具，是与用于编写真实环境下的应用程序编程语言不大相同的一种编程语言。

**学习顺序**
许多教育性质的程序设计语言都提供建议的学习顺序，即是学习一组编程语言的顺序，每种语言都建立在其他语言的基础上，使得学生能够完成从简单又易于理解的娱乐性编程环境到专业开发环境的转变。
下面是一些著名的程序设计语言。

**基于 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-2565 是易于使用的 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 date=20091126153446   由Scratch、 Alice 和 Greenfoot 所做的评论和解释。- 关于用教给孩子哪种语言的争论。各种观点详见  Don's Box。-  Coding 4 Fun 微软旨在培养编程者的网站。-  BASIC vs. Logo 于 WikiVS 上