教育程式語言列表
此條目可能包含原創研究。 (2014年12月20日) |
此條目沒有列出任何參考或來源。 (2014年12月20日) |
教育程式語言是一個教育性質的程式設計語言,是一種主要設計於用來學習的工具,是與用於編寫真實環境下的應用程式程式語言不大相同的一種程式語言。
學習順序
許多教育性質的程式語言都提供建議的學習順序,即是學習一組程式語言的順序,每種語言都建立在其他語言的基礎上,使得學生能夠完成從簡單又易於理解的娛樂性編程環境到專業開發環境的轉變。
下面是一些著名的程式語言。
基於 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 編程。
按年齡和程度區分所授語言
年齡 | 程度 | 適宜語言 |
---|---|---|
學齡前–二年級 | 無/不適用 | 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 kidslike.info (頁面存檔備份,存於互聯網檔案館) 由Scratch、 Alice 和 Greenfoot 所做的評論和解釋。
- 關於用教給孩子哪種語言的爭論。各種觀點詳見 Don's Box。
- Coding 4 Fun 微軟旨在培養編程者的網站。
- BASIC vs. Logo 於 WikiVS 上