人人可學的計算機程式設計
人人可學的計算機程式設計
這是我們 1999 年 1 月傳送給 DARPA 的一份資助提案的主要文字。1999 年 8 月,我們提交了該提案的修訂版本。
請檢視EDU-SIG 主頁(Python 教育特別興趣小組)。這裡描述了當前的專案狀態和/或將在此處進行討論,您還可以在這裡找到更多資源的連結。
注意:我對提案的文字做了一處修改:應其他語言的一些支持者的要求,我撤回了一個語言比較圖表,其中包含對其他語言的高度個人化且有時毫無根據的觀點。該表格的使用脫離了上下文,這讓一些人感到反感。(並非所有表格內容都有爭議,但在沒有更多文件的情況下,似乎不宜進行直接的語言比較。)
創新主張
在 70 年代,施樂 PARC 問自己:“我們能否讓每張辦公桌都有一臺計算機?” 到 90 年代中期,這個問題得到了肯定的回答。但是所有這些計算機並不一定能讓使用者獲得權力。今天的計算機通常是僵化的:普通計算機使用者通常只能更改透過“嚮導”(一個用於預製對話方塊的崇高詞)配置的有限選項集,並且在其他所有事情上都依賴於專業的程式設計師。
我們現在問自己一個後續問題:“如果使用者可以自己程式設計計算機,世界將會是什麼樣子?” 我們期待著未來,每個計算機使用者都能夠“開啟”他們計算機的“引擎蓋”,並改進內部的應用程式。我們相信,這將最終從根本上改變軟體和軟體開發工具的性質。
我們將大規模編寫和修改軟體的能力與大規模識字能力進行比較,並期望隨之而來的是同樣深刻的社會變革。由於硬體現在足夠快速且便宜,可以進行大規模的計算機教育,我們認為,普通計算機使用者建立和修改軟體(而不僅僅是安裝和使用軟體)的能力將帶來下一個重大變革,並且我們認為這是我們下一個挑戰。
開源運動聲稱,數千人對軟體進行同行評審可以大大提高軟體質量。像 Linux 這樣的作業系統取得的成功表明這種說法是有價值的。我們認為,下一步,擁有數百萬的程式設計師,將會導致不同質量的變化——個性化軟體的豐富可用性。
這種看待程式設計的新方法所需的工具將不同於目前專業程式設計師可用的工具。我們打算大大改進可用的培訓材料和開發工具。例如,非專業程式設計師不應擔心小錯誤可能會破壞他們的工作或使他們的計算機無法使用。
以下因素將影響我們專案的成功
- 程式語言
- 開發工具
- 培訓材料
- 社群建設
出於實際原因,我們建議使用現有的程式語言。設計和實現一種新的語言可能需要數年時間,我們已經選擇了一種足夠好的語言來開始處理其他三點。我們的選擇是 Python,一種高階指令碼和原型語言。有足夠的(軼事)證據表明,Python 對於(幾乎)不識字的人來說很容易學習。目前沒有適合此類受眾的 Python 開發工具或培訓材料。我們將把這些開發作為我們任務的主要重點。我們希望培養一個專門關注我們的工具和材料的社群,以便我們可以收集必要的反饋;現有的 Python 社群(估計有 20,000 名程式設計師,並且正在迅速增長)已經對“新手”使用 Python 感興趣,因此我們預計這將是一個肥沃的部署基礎。
技術原理和方法
1. 引言
在黑暗時代,只有當權者或擁有鉅額財富的人(以及選定的專家)才擁有閱讀和寫作技能或獲得這些技能的能力。可以說,普通民眾的識字能力(雖然仍然不是 100%!),再加上印刷技術的發明,是近代歷史上最解放的力量之一。
我們現在正進入資訊時代,預計計算機技術將很快取代印刷技術成為資訊分發技術的主要形式。大約一半的美國人家庭已經擁有至少一臺個人計算機,而且這個數字還在增長。
然而,雖然現在很多人使用計算機,但很少有人是計算機程式設計師。非程式設計師在使用計算機時並非真正“獲得權力”:他們只能以程式設計師為他們確定的方式使用應用程式。一個人不需要有遠見就能看到這會造成很多痛苦。
一個更激進的變化是將計算和通訊嵌入家庭和辦公室。在未來幾年中,包含可程式設計元素的裝置的數量將急劇增加。我們必須學習如何以有意義的方式向用戶公開這種可程式設計性,並使非程式設計師可以輕鬆控制和程式設計這些裝置。使用者必須從一開始就獲得權力。
在這個“未來探險”中,我們想探索這樣一種觀念,即每個人都可以在學校獲得一定水平的計算機程式設計技能,就像每個人都可以學習閱讀和寫作一樣。
具體而言,我們對教育材料、程式語言和開發工具的開發感興趣。我們強調,這並不是對當前使用的材料和工具進行逐步改進的嘗試;我們認為有必要採取一種全新的方法。(但是,出於實際原因,我們將從使用現有語言開始。)
如果程式語言和環境被大眾使用,它們將面臨許多挑戰。考慮一個例子:如果每個人都是程式設計師,那麼壞程式設計師將大量湧現。這需要重新思考程式語言和開發工具的基本屬性。我們還認為,專業人士使用的工具與教育過程中使用的工具之間不應有明顯的區別——正如專業作家使用與讀者相同的語言和字母表一樣!
2. 願景
在關於此 BAA 的電話會議中,有人說:“據推測,這些探險將要[...]為該領域發明全新的未來,我們預計將有使用者參與,我們將產生一些影響,以便使用者可能扮演與今天非常不同的角色。” 我們有一個願景,它將確實賦予使用者非常不同的角色。
我們的願景是,在不遠的將來,計算機程式設計將在小學教授,就像今天教授閱讀、寫作和算術一樣。我們真正指的是計算機程式設計——而不僅僅是計算機使用(這已經是我們國家教育系統的一部分);並且我們指的是認真的程式設計,而不僅僅是玩弄海龜圖形(儘管這是低年級的一個很好的教學工具)。當然,大多數學生不會成為熟練的應用程式架構師,就像大多數學習寫作的人不會成為暢銷書作家一樣——但是閱讀和寫作技能對每個人都有用,因此(在我們的願景中)一般的程式設計技能也很有用。
我們已經看到一些跡象表明這是一個現實的目標。例如,Alice 專案 [Alice] 報告說,沒有程式設計經驗的大一新生甚至青少年會在幾天之內開始編寫程式來控制虛擬世界。也許並非偶然的是,Alice 使用了高階指令碼語言 Python 的一個版本 [Python] [Lutz] [Watters],該語言由當前提案的作者之一開發。
使用 Logo 程式語言 [Logo] 和類似語言(例如,Magic Square 的 LogoMation [LogoMation])的經驗是另一個跡象,表明年輕人可以學習如何程式設計。也許這些可以被視為 Alice 的先驅,它們透過使用 2D 而不是 3D 圖形來顯示它們的年代(儘管 Alice 比 Logo 和 LogoMation 更少強調學習如何程式設計)。
想象一下,使用者可以對嵌入在他們的 GPS 接收器或手持式管理器中的軟體進行自己的更改,而不是(或除了)從供應商處下載升級,或從第三方購買“預製”附加應用程式。這將大大增強使用者透過程式設計其個人工具來精確地完成他們需要完成的工作的能力,從而改善他們的生活。
最近流行的開源運動 [OpenSource] 有望透過成千上萬人的同行評審來提高關鍵軟體包的質量,並使程式設計師能夠“解決自己的癢點”。(即,以僅一個人關心的次要方式調整軟體。)我們預計,從數千人增加到數百萬,將再次改變軟體開發過程的性質。在這種規模下,解決自己的癢點將變得更加重要(和可行),而大規模同行評審將因回報遞減而變得不那麼重要(從數千個來源整合錯誤修復的後勤工作已經是一項艱鉅的任務)。但是,大多數當前的軟體,無論是開源的還是其他的,都過於複雜,以至於如果沒有首先花費大量精力和時間來理解他們正在使用的軟體,任何人都無法解決他們的癢點。我們對整個軟體開發過程的更改也感興趣,這些更改將解決此問題,尤其是開發工具。
為什麼要教授“通用”程式語言?人們普遍認識到,“過程式”程式語言和“宣告式”程式語言之間存在一些二分法。在此討論中,我們廣義地、寬鬆地使用“過程式”一詞,包括函數語言程式設計語言,甚至可能包括邏輯程式語言,只要它們可以用作通用的程式設計工具。圖靈完備性是這裡的關鍵概念。
“宣告式”類別則包含其他所有內容,從命令列引數語法到電子郵件標頭和 HTML。這裡的區別因素是存在一個相對“狹窄”的應用領域。在此類別中,我們還會放入諸如微軟的“嚮導”(實際上只是由簡單流程圖連線的預定義對話序列)以及微波爐或核反應堆上的控制元件和撥盤之類的東西。
宣告式語言的一個典型屬性是,它們在其預期的應用領域中提供了出色的控制,並且在未預料到的領域中(幾乎)沒有自由度。例如,HTML 本身沒有文字的條件包含或變數展開的能力。(這些功能已作為 HTML 的擴充套件新增這一事實證明了這一點。)
另一方面,過程式語言通常在任何特定領域都不如宣告式語言(例如,用過程式語言編寫一個格式化文字段落的程式比用 HTML 要費力得多)。然而,它們透過圖靈完備性彌補了這一點,這使得解決可能出現的任何問題成為可能(假設有足夠的資源)。因此,過程式語言非常適合與宣告式語言結合使用。
例如,如果我的手機是可程式設計的,我仍然會使用常規的宣告式介面(即鍵盤)來撥打特定的號碼,因為那是訪問該特定功能的最方便的方式。但是,如果沒有可程式設計性,我就無法讓它嘗試撥打某個朋友的幾個不同號碼,直到其中一個被接通,除非手機供應商預料到了這個特定的功能。
3. 挑戰
一些問題立即出現。學校教授的程式語言會是什麼樣子?它會與我們今天知道的任何程式語言有任何相似之處嗎?它甚至會被稱為程式語言嗎?我們將如何教授它?會只有一種語言嗎?教授和使用這種語言還需要哪些其他工具?
同樣有趣的問題還有:人們將如何以及為何使用他們的程式設計技能?近乎普遍的計算機程式讀寫能力將如何改變計算機軟體的結構?(尤其是在未來版本的網際網路的結合下,它承諾可以無處不在地訪問計算和儲存元素以及網路連線。)它將如何影響軟體市場?這在未來可能會在多大程度上成為現實?
一個明顯的潛在擔憂是,如果大多數人都是程式設計師,那麼他們中的許多人很可能都是糟糕的程式設計師。那些無法用母語寫出可以理解的句子或平衡他們的支票簿的人不太可能編寫結構良好的計算機程式!
因此,我們需要研究如何提高程式設計師和系統之間的互動質量,以幫助即使是糟糕的程式設計師也能充分利用他們的計算機。例如,您可能想編寫一個程式來定製您的 PDA 或烤麵包機,但是如果一個小錯誤可能會擦除您的地址簿或點燃您的房屋,您可能會感到沮喪。需要採取預防災難的措施,以及撤銷對整個系統的不必要更改的方法。(“撤消”雖然非常強大,但通常一次只適用於一個檔案。撤銷全域性系統更改通常需要重新啟動,甚至需要從備份介質中痛苦地恢復資料。)
指令碼語言已經變得非常流行,像 Python 這樣的高階指令碼語言是我們的探險的一個很好的起點。對指令碼語言的一個持續批評是,它們的效能對於某些任務來說是不夠的。諸如程式分析和高階編譯器技術等技術可能能夠消除這個問題的一部分,可能與某種形式的可選靜態型別結合使用。挑戰在於如何在不混淆程式語言或使開發週期(編輯-執行-除錯)更加繁瑣的情況下做到這一點。
指令碼語言非常擅長以新的方式粘合現有元件,而不是從頭開始。一個結論是,我們需要更好的軟體重用技術,這是面向物件程式設計領域中正在進行的爭論的一個問題。
指令碼語言也擅長於將以其他語言編寫的元件粘合在一起。然而,在語言之間的邊界上發生的事情通常非常醜陋。這裡有兩種可能的選擇。一種是嘗試減少對其他語言的需求,方法是在指令碼語言中新增使其可用作系統語言(即適合低階程式設計的語言,例如 C 或 Java)的設施。在這裡,我們再次主要著眼於提高效能。另一種可能性是簡單地提高系統和指令碼語言之間的同步性。一個很好的例子是 JPython,一種與 Java [JPython] 無縫整合的 Python 方言。
4. 它將如何改變世界?
正如大眾識字對西方社會產生了深遠的影響,可以說導致了現代西方民主一樣,大眾計算機素養對社會的長遠影響將是巨大的。在軟體設計和實現的層面上對計算機有一般的瞭解將導致生產力和創造力的巨大涌現,其影響範圍之廣,幾乎無法預料或想象。
在短期內,可用計算機軟體的數量和質量將大大提高,因為數百萬人的想象力和勞動將應用於解決這個問題。富有創造力的辦公室工作人員將能夠改進支援他們完成任務的軟體,並與他們的同事或透過網際網路與遠方面臨相同任務和問題的人分享他們的改進。
現在是開始研究這個願景的時候了。用於計算、儲存和連線的硬體發展是如此之快,以至於大眾第一次可以使用足夠強大的計算機來發揮作用,無論是作為獨立的桌上型電腦或筆記型電腦,還是嵌入在電器中。我們需要開始開發軟體,讓人們能夠控制他們的計算機,而不是被計算機控制。
5. 探險計劃
理想情況下,我們希望提出一種程式語言、一個開發環境和教學材料,適合在初中和高中向兒童以及沒有計算機經驗的成年人教授程式設計。圍繞這些材料,我們希望建立一個使用者社群,該社群將為我們提供反饋,並最終實現我們對軟體開發和個性化的不同方式的願景。
認識到我們的侷限性,我們建議首先使教授現有的指令碼語言 Python 成為可能,並專注於為其建立新的開發環境和教學材料。我們有傳聞證據表明,Python 是一種很好的入門程式語言。我們的工作將專注於為此目的建立工具和教育材料,並在這些材料周圍培養一個社群,以便我們能夠研究為什麼Python 是一種很好的教學語言,併為未來的教學語言開發提出建議。
為什麼要使用現有的語言?我們的經驗表明,新語言的設計和實現是以年來衡量的,並且必須(幾乎)在建立開發環境和教學材料之前完成。因此,我們必須透過使用現有的語言來啟動我們的專案。
為什麼要使用 Python?我們認為 Python 是一種適合向絕對初學者教授的語言。它從 ABC [ABC] [Geurts] 中獲得了許多關鍵特性,ABC 是一種專門為向非專家教授程式設計而設計的語言。Python 社群已經看到了許多個人的報告,他們使用 Python 教他們的孩子程式設計。這些報告的共識是,該語言本身非常適合此目的,不像 Java、Perl 或 Visual Basic 那樣,它們都過於雜亂無章。
下表是一個(主觀的)圖表,比較了 Python 與其他一些語言的幾個相關方面。從這張表中,我們得出結論,Python 是教學的良好首選,它也可以很好地用作嚴肅應用程式開發的語言。與為新手提出的其他教學語言(例如 Logo、LogoMation,甚至是 Python 的祖先 ABC)不同,Python 不僅僅是一種教學語言。它適合開發大型應用程式,正如 CNRI 和其他地方的專案所證明的那樣。此外,Python 可以透過用其他語言(例如 C、C++ 或 Java)編寫的模組來擴充套件,以調解對直接從 Python 難以訪問的高階功能的訪問(例如,高速 3D 計算機圖形包)。雖然我們不希望我們的學生編寫擴充套件模組,但此類模組的使用可以使他們的學習體驗煥然一新,並使教師有機會透過向他們提供對其他軟體包的受保護訪問許可權來根據學生的興趣定製課程。
Python 可以用於開發大型應用程式這一事實符合我們願景的另一個方面:開發開源應用程式軟體,這些軟體可以由非專業程式設計師但已經掌握了一些程式設計技能的使用者定製。儘管這不是我們偵察任務的重點,但我們希望看到至少有一些朝著這個目標邁出的舉措,並且我們將鼓勵希望朝這個方向邁進的公司和組織。我們期望 JPython(一種與 Java 無縫整合的 Python 實現)的存在將是一個重要的促成因素。
Python 的程式設計環境和可用的入門材料對於向新手教學來說並不理想。特別是,現有的 Python 開發環境和教程(每種都有幾種)都假設使用者是鐵桿開發人員,他們知道一套外部工具來編輯、執行和除錯程式,並且已經知道一種或多種其他程式語言及其開發環境。這目前阻礙了 Python 作為第一種程式語言的更廣泛的實驗。
透過向非程式設計師教授 Python,我們期望收集到有價值的資訊,這些資訊將指導我們設計出更好的程式語言。實際上,我們期望其他人將為我們完成大部分實際的教學工作,而我們將建立基於網路和電子郵件的反饋渠道,以最大限度地獲取(有用的)反饋。
我們最初的探索任務計劃包含四個主要組成部分:
- 建立一個適合初學者的 Python 開發環境;
- 建立培訓材料,以便使用此環境向初學者教授 Python;
- 為以上內容建立使用者社群並從中提取反饋;
- 評估反饋併為後續研究或開發提出指導方針。
一旦 Python 社群釋出了開發環境和培訓材料的初始版本,反饋渠道將開放,最初的反饋將主要用於改進環境和材料。
稍後,當收到更多反饋時,我們將評估 Python 在此專案中的使用情況。也許 Python 是完美的;很可能需要進行更改;也許最終需要一種完全不同的語言設計。我們在此感興趣的是發現 Python 的哪些方面在教學語言中效果良好。基於此評估,我們將提出或開展後續研究和開發活動。
我們將設計和構建一個專門用於向沒有程式設計經驗的成年人以及中學或初高中的兒童(也沒有程式設計經驗)教授 Python 程式設計的開發環境。
我們將開發與新開發環境配套的教育材料。為了激勵程式設計更有“趣”,我們打算將開發環境連線到現有的可程式設計 3D 遊戲引擎,例如流行的電腦遊戲中使用的引擎。其中一些引擎現在或將來很可能可用於 Python;我們將選擇一個,併為其建立一個適合我們受眾的介面庫。
為什麼選擇 3D 遊戲引擎?Logo 的經驗表明,圖形是吸引年輕觀眾的好方法,但與現在青少年熟悉的影片遊戲相比,其 2D 圖形看起來有些乏味。Alice 是另一個很好的 3D 圖形環境示例,它比海龜圖形更具吸引力。
本著“大眾計算機素養”和開源運動的精神,我們將建立和維護一個網站,以廣泛免費地提供軟體和教育材料,並在那裡設定反饋頁面。除了網站之外,我們還將建立和維護一個或多個帶有存檔的郵件列表,或許還會為使用者提供“聊天”服務。我們將積極參與郵件列表,以培養社群,並收集和分析社群透過這些(和其他)渠道向我們提供的反饋。
我們還打算自己參與小規模的教學工作,但我們預計不會進行太多的教學。如果我們對 Python 的受歡迎程度的經驗有任何指示意義的話,我們就不必這樣做了:其他人渴望參與這項實驗。
設施
我們將使用 CNRI 現有的計算基礎設施來開發和分發擬議的材料,並輔以專門為本專案購買的臺式工作站和 Web 伺服器。我們將使用 Internet 和全球資訊網來分發所有材料。
與其他正在進行的研究的比較
ABC。Python 的前身 ABC 在 80 年代初被設計為一種教學語言。它的座右銘是“消滅 Basic”——承認當時非專業人員使用的語言中的主要競爭對手。ABC 的設計人員在向初學者教授 Algol 等“經典”程式語言方面擁有豐富的經驗。他們發現,他們的學生經常被使用計算機語言的偶然細節(例如執行編譯器、處理不同的數字格式、神秘的 I/O 操作以及低階記憶體管理)所淹沒,以至於他們從未能夠專注於良好的程式和演算法設計的本質。
為了消除這種影響,ABC 的設計人員回到了基礎。他們著手設計一種語言和該語言的環境,以處理所有偶然事件,讓學生有更多時間學習與手頭程式語言無關的程式設計本質,例如清晰的控制流和強大的資料結構,並專注於優雅地表達程式。他們提出了一種新的語言設計和新術語,這些術語與計算機科學家和程式設計師中流行的術語(現在仍然如此)截然不同。事實上,ABC 沒有達到預期影響的最大的原因可能在於它們偏離了當前的做法太多。可以使用執行 ABC 所需硬體的人員(最初它僅在 Unix 系統上執行,儘管後來移植到 Mac 和 PC)通常是經驗豐富的計算機使用者,他們感到沮喪的是 ABC 沒有像其餘應用程式那樣“使用相同的語言”。
大約十年後,Python 從這種挫敗感中誕生。它與 ABC 一樣專注於優雅的表達、程式設計的基礎知識和消除偶然事件,但增加了面向物件、可擴充套件性以及一個強大的模組庫,該模組庫可以透過許多不同的機制與其它應用程式介面:共享檔案、程式嵌入、CORBA 或 COM 等 RPC 介面以及網路協議(支援 WWW 上常用的所有協議)。
Logo。Logo 實際上是一系列與 Lisp 相關的語言,主要在麻省理工學院開發,當然是教育領域最著名的程式語言。它擁有豐富的傳統,在學校中紮根深厚,並且有許多商業產品。麻省理工學院媒體實驗室的認識論和學習小組正在進行研究,例如“可程式設計磚塊”(與 LEGO 合作)。
Logo 與我們提議之間的主要區別在於,我們認為數百萬(業餘)程式設計師將共同開發開源軟體——Logo 似乎滿足於向年幼的兒童教授有限的程式設計技能,計算機程式設計對於他們來說主要是一種訓練抽象思維的方式。
LogoMation。一家名為 Magic Square 的公司銷售 LogoMation,這是一種與 Logo 類似的語言,同樣強調海龜圖形。它附帶一份優秀的教程,適合 8 歲以上的兒童。LogoMation 的語法與 Python 類似(比 Logo 的語法更類似);這表明我們在 Python 的道路上是正確的。
但是,與 Logo 一樣,LogoMation 在其提供的增長路徑方面受到限制。它沒有直接解決“接下來做什麼”的問題,而是希望其使用者轉而使用其他程式語言進行實際工作。
Alice。Alice 網站上的評價清楚地表明 Alice 在向兒童以及沒有經驗的成年人教授程式設計方面取得了成功。這也表明了“有趣”環境的重要性(並且 Alice 的 3D 圖形比 Logo 的海龜圖形更具吸引力)。由於 Alice 實際上使用(稍微修改過的版本)Python,這進一步表明了 Python 的適用性。Alice 還為我們提供了一些關於可以改進 Python 的哪些方面的提示:例如,他們的經驗表明,Python 的區分大小寫可能是一個問題。
然而,Alice 專案的重點是 3D 圖形——他們的教程實際上並沒有教授很多關於程式或資料結構技術的內容。雖然我們同意 3D 圖形是吸引和留住觀眾的好方法,但我們更感興趣的是教授程式設計,而不僅僅是圖形。因此,我們最初工作的重點是開發一個程式設計環境和教程,其中 3D 圖形只是計算機的可能應用之一。
DrScheme。萊斯大學的 TeachScheme!專案 [TeachScheme] 旨在開發一種基於 Scheme 程式語言的新的入門計算課程。萊斯大學工作的核心部分是開發 DrScheme [Findler],這是一種針對初學者的程式設計環境。TeachScheme 的重點是相對狹窄的受眾——具有紮實高中代數基礎並且對研究計算及其在科學問題中的應用感興趣的大學生。我們設想一個更廣泛的受眾,其中關於強大的數學背景和對科學問題的興趣的假設並不成立。我們還認為,Scheme 是一種擅長為教學目的展示計算基本構建模組的語言,對於大眾受眾來說是不合適的。
然而,有趣的是,TeachScheme 專案的關鍵部分之一是開發環境。雖然受眾和方法不同,但我們的專案和 TeachScheme 都有一個共同的認識,即開發環境是至關重要的組成部分。需要一個互動式的讀取-求值-列印迴圈、一個強大的偵錯程式以及用於理解程式如何工作的工具。
主要人員名單
Guido van Rossum 是 CNRI 的小組負責人,他於 1995 年加入 CNRI。他是 Python 的建立者,Python 是一種流行的解釋型面向物件程式語言,其功能與 Java 類似。他還是 Knowbot 移動代理系統的首席設計師。過去,他曾參與 ABC 的開發,ABC 是一種為教學目的開發的程式語言,以及 80 年代開發的著名分散式作業系統 Amoeba。他擁有阿姆斯特丹大學數學和計算機科學碩士學位。
預計在該專案上的工作量:50%。其他 DARPA 或 NSF 專案:40%。其他重要的支援來源:Python 聯盟 (10%)。
Jeremy Hylton 是技術人員的高階成員。他是 Knowbot 移動代理系統的設計者之一,並設計和實施了多個基於代理的資訊管理應用程式。他於 1996 年在麻省理工學院獲得電氣工程和計算機科學的工程碩士學位,以及計算機科學和工程的理學學士學位。同年加入 CNRI。
預計在該專案上的工作量:30%。其他 DARPA 或 NSF 專案:70%。
Barry Warsaw 自 1994 年以來一直是 CNRI 的系統工程師。他曾為包括應用網關係統和 Knowbot 作業系統在內的多個 CNRI 專案的設計做出貢獻。他為 Python 語言的開發和 Grail Internet Browser 做出過貢獻。他於 1984 年在馬里蘭大學獲得計算機科學學士學位。在加入 CNRI 之前,他從 1980 年到 1990 年在國家標準與技術研究院從事機器人系統操作員介面工作,並從 1990 年到 1994 年在國家醫學圖書館從事醫療資料庫資訊科技工作。
預計在該專案上的工作量:30%。其他 DARPA 或 NSF 專案:70%。
其他小組成員將為擬議的專案付出大量努力。當其他待定的 DARPA 提案獲得批准時,在該專案上的工作量可能會略有減少,其他小組成員將接管該專案。不使用分包商。
工作說明
CNRI 將執行以下工作
- 設計並實現一個互動式程式設計環境的原型,用 Python 編寫,適合向沒有程式設計經驗的計算機使用者教授 Python。
- 設計並實現一個 Python 模組原型庫,將 Python 連線到一個現有的 3D 遊戲引擎,目的是在引人入勝的環境中教授 Python。
- 編寫一個教程,使用上述軟體向沒有程式設計基礎的學生教授通用的程式設計技能和良好的程式設計習慣。
- 建立和維護一個網站和郵件列表,以促進一個專注於上述軟體和教程的社群。該網站將用於方便訪問為本專案生成的所有軟體和教學材料。
- 評估並報告從社群收集的有關上述軟體和教程的反饋。為後續研究提出建議。
為了最大限度地訪問所產生的材料,本專案產生的所有軟體、教學材料和報告都將在全球資訊網上以開源材料的形式免費提供。
進度安排
進度安排從資助獎勵開始分為四個半年期。
1. 第一個半年期
程式設計環境的初步設計。早期原型實現,以評估設計的可實施性。編寫教程第一部分“程式設計入門”的早期草稿版本。選擇一個 3D 遊戲引擎用於教程和程式設計環境。與其他對類似研究感興趣的團隊聯絡。
2. 第二個半年期
完善程式設計環境設計。開始實現 3D 遊戲庫模組。建立網站和郵件列表,開始社群建設。釋出實現的 alpha 版本。完善併發佈教程第一部分的 alpha 版本。開始收集反饋。編寫教程第二部分“建立更大的程式”的早期草稿版本。
3. 第三個半年期
使用反饋完善程式設計環境設計。釋出 3D 遊戲庫的 alpha 版本。釋出實現和教程第一部分的 beta 版本。釋出教程第二部分的 alpha 版本。編寫教程第三部分“程式設計與全球資訊網”的早期草稿版本。
4. 第四個半年期
釋出程式設計環境、3D 遊戲庫以及教程所有三個部分的最終版本。評估 Python 在教學方面的用途。評估程式設計環境和教程的有效性。撰寫最終報告。
可選任務
在當前的提案中沒有可選任務。
參考文獻
- [ABC]
- http://www.cwi.nl/~steven/abc/
- [Alice]
- http://www.alice.org/
- [Findler]
- Robert Bruce Findler, Cormac Flanagan, Matthew Flatt, Shriram Krishnamurthi, 和 Matthias Felleisen. DrScheme: 一個用於 Scheme 的教學程式設計環境。 1997 年程式語言研討會:實現、邏輯和程式,英國南安普頓,1997 年 9 月。(計算機科學講義,第 1292 卷。)
- [Geurts]
- Leo Geurts, Lambert Meertens, Steven Pemberton. ABC 程式設計師手冊。 Prentice-Hall, 1990
- [JPython]
- https://python.club.tw/jpython/
- [Logo]
- http://el.www.media.mit.edu/groups/logo-foundation/
- [LogoMation]
- http://www.magicsquare.com/LM2/
- [Lutz]
- Mark Lutz. Python 程式設計。 O'Reilly, 1996.
- [OpenSource]
- http://www.opensource.org/
- [Python]
- https://python.club.tw/
- [TeachScheme]
- http://www.cs.rice.edu/CS/PLT/Teaching/
- [Watters]
- Aaron Watters, Guido van Rossum, Jim Ahlstrom. 使用 Python 進行網際網路程式設計。 MIS Press/Henry Holt, 1996.