注意: 雖然 JavaScript 對於本網站不是必需的,但您與內容的互動將受到限制。請開啟 JavaScript 以獲得完整的體驗。

為大眾設計計算機程式設計

為大眾設計計算機程式設計

這是我們於1999年1月提交給DARPA的一份資助提案的主體文字。1999年8月,我們提交了該提案的修訂版

請檢視 EDU-SIG 主頁(Python教育特別興趣小組)。該頁面描述了當前專案狀態,並將進行討論,您還可以在那裡找到更多資源的連結。

注意:我已對提案文字進行了一項修改:應一些其他語言支持者的要求,我撤回了一份包含高度個人化且有時缺乏依據的關於其他語言的觀點的語言比較圖表。該表格被斷章取義地使用,導致一些人認為其令人反感。(並非表格中的所有內容都存在爭議,但似乎在沒有更多文件的情況下,不直接進行語言比較更為明智。)

創新主張

七十年代,施樂帕洛阿爾託研究中心(Xerox PARC)自問:“我們能否讓每張辦公桌上都有一臺電腦?”到九十年代中期,這個問題得到了肯定的回答。然而,所有這些電腦並未必然賦予其使用者權力。今天的電腦常常不夠靈活:普通電腦使用者通常只能透過“嚮導”(一個對預設對話方塊的崇高稱呼)來更改有限的選項,而其他一切都依賴於專業的程式設計師。

我們現在自問一個後續問題:“如果使用者能夠自己編寫電腦程式,世界會是什麼樣子?”我們期待未來每個電腦使用者都能“開啟電腦的引擎蓋”,並對內部應用程式進行改進。我們相信這將最終從根本上改變軟體和軟體開發工具的性質。

我們將大眾編寫和修改軟體的能力與大眾識字能力進行比較,並預計這將帶來同樣根本性的社會變革。由於現在的硬體已經足夠快和便宜,使得大眾計算機教育成為可能,我們相信普通計算機使用者建立和修改軟體的能力(而不僅僅是安裝和使用)將促成下一次重大變革——我們將其視為我們的下一個挑戰。

開源運動聲稱,成千上萬的人對軟體進行同行評審可以大大提高軟體質量。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。這裡的區別因素是存在一個相對“狹窄”的應用領域。在此類別中,我們還會放置像Microsoft的“嚮導”(實際上只是透過簡單流程圖連線的一系列預定義對話方塊)以及微波爐或核反應堆上的控制器和撥盤之類的東西。

宣告式語言的一個典型特性是,它們在預期的應用領域提供了出色的控制,而在意外的領域則(幾乎)沒有自由。例如,HTML沒有固有的條件包含文字或變數擴充套件能力。(事實上,這些功能作為HTML的擴充套件被新增,這證明了這一點。)

另一方面,過程式語言通常在任何特定領域都不那麼出色(例如,用過程式語言編寫程式來格式化一段文字比用HTML要費力得多)。然而,它們透過其圖靈完備性彌補了這一點,這使得解決可能出現的“任何”問題成為可能(假設有足夠的資源可用)。因此,過程式語言與宣告式語言“結合”使用是理想的。

例如,如果我的手機是可程式設計的,我仍然會使用常規的宣告式介面(即鍵盤)來撥打特定號碼,因為這是訪問該特定功能最方便的方式。然而,如果沒有可程式設計性,我就無法讓它為某個朋友嘗試幾個不同的號碼,直到有人接聽為止,除非手機供應商預料到了這個特定功能。

3. 挑戰

一些問題立刻浮現。學校教授的程式語言會是什麼樣子?它會與我們今天所知的任何程式語言有任何相似之處嗎?它甚至會被稱為程式語言嗎?我們將如何教授它?會只有一種語言嗎?還有哪些其他工具對這門語言的教學和使用至關重要?

同樣有趣的問題有:人們將如何以及為何使用他們的程式設計技能?近乎普及的閱讀和編寫計算機程式的能力將如何改變計算機軟體的結構?(特別是結合未來的網際網路版本,它有望提供對計算和儲存元素以及網路連線的無處不在的訪問。)這將如何影響軟體市場?這在多遠的未來才能成為現實?

一個明顯的潛在擔憂是,如果大多數人都是程式設計師,那麼他們中的許多人很可能都是“糟糕”的程式設計師。那些不能用母語寫出清晰句子或平衡賬本的人,也不太可能寫出結構良好的計算機程式!

因此,我們需要研究如何提高程式設計師與系統之間互動的質量,以幫助即使是糟糕的程式設計師也能最大限度地利用他們的電腦。例如,你可能想編寫一個程式來定製你的PDA或烤箱,但如果一個小錯誤可能清除你的地址簿或引燃你的房子,你可能會感到氣餒。需要有防災措施,以及撤銷對整個系統不需要的更改的方法。(“撤銷”功能雖然非常強大,但通常一次只適用於一個檔案。撤銷全域性系統更改通常需要重啟甚至從備份介質中痛苦地恢復資料。)

指令碼語言已經變得非常流行,像Python這樣的高階指令碼語言是我們的探索之旅的一個良好起點。對指令碼語言的一個持續批評是它們在某些任務上的效能不足。程式分析和高階編譯器技術等方法可能能夠消除這部分問題,可能與某種形式的可選靜態型別結合使用。挑戰在於在不混淆程式語言或使開發週期(編輯-執行-除錯)更加繁瑣的情況下實現這一點。

指令碼語言非常擅長以新的方式將現有元件粘合在一起,而不是從頭開始。一個結論是,我們需要更好的軟體重用技術——這是一個在面向物件程式設計圈中持續爭論的問題。

指令碼語言也擅長將用其他語言編寫的元件粘合在一起。然而,語言之間的邊界往往非常難看。這裡有兩種可能的解決辦法。一種是試圖減少對其他語言的需求,透過在指令碼語言中新增使其可用作系統語言的功能(即適合低階程式設計的語言,如C或Java)。在這裡,我們再次主要關注效能的改進。另一種可能性是簡單地改進系統語言和指令碼語言之間的同步性。一個很好的例子是JPython,一種與Java無縫整合的Python方言[JPython]

4. 它將如何改變世界?

正如大眾識字對西方社會產生了深遠影響,甚至可以說導致了現代西方民主的出現,大眾計算機素養對社會的長期影響也將是巨大的。在軟體設計和實現層面對計算機有普遍理解將導致生產力和創造力的巨大飛躍,其影響範圍之廣難以預料或想象。

在短期內,現有計算機軟體的數量和質量將大幅提升,因為數百萬人的想象力和勞動將應用於此問題。富有創意的辦公室工作人員將能夠改進支援他們工作的軟體,並與同事分享他們的改進成果,或透過網際網路與面臨相同任務和問題的遠方他人分享。

現在是時候開始實現這個願景了。計算、儲存和連線硬體的發展使得大眾首次能夠使用功能強大的計算機,無論它們是獨立的桌上型電腦、筆記型電腦還是嵌入式裝置。我們需要開始開發能夠賦予他們控制計算機權力而不是受其控制的軟體。

5. 考察計劃

理想情況下,我們希望提出一種程式語言、一個開發環境和教學材料,適合向中學和高中學生以及沒有計算機經驗的成年人教授程式設計。圍繞這些材料,我們期望建立一個使用者社群,他們將為我們提供反饋,並最終實現我們對不同軟體開發和個性化方式的願景。

鑑於我們的侷限性,我們建議首先使教授現有指令碼語言 Python 成為可能,並專注於為其建立新的開發環境和教學材料。我們有軼事證據表明 Python 是一種很好的初級程式語言。我們的工作將集中於為此目的建立工具和教育材料,並圍繞這些材料培養一個社群,以便我們能夠研究“為什麼”Python 是一種好的教學語言,併為未來的教學語言開發提出方向。

為什麼要使用現有語言?我們的經驗表明,新語言的設計和實現以年為單位——而且這項工作必須(幾乎)完成,開發環境和教學材料才能被建立。因此,我們必須透過使用現有語言來啟動我們的專案。

為什麼要使用Python?我們相信Python是一種適合絕對初學者學習的好語言。它的許多關鍵特性都來源於ABC [ABC] [Geurts],一種專門為非專家教授程式設計而設計的語言。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現有的計算基礎設施來開發和分發所提議的材料,並額外購置桌面工作站和一臺專門用於此專案的網路伺服器。我們將使用網際網路和全球資訊網進行所有材料的分發。

與其他正在進行的研究比較

ABC。Python的前身ABC在八十年代早期被設計為一種教學語言。它的座右銘是“消滅Basic”——承認當時非專家語言的主要競爭對手。ABC的設計者在向新手教授Algol等“經典”程式語言方面擁有豐富的經驗。他們發現學生常常被使用計算機語言的附帶細節(例如執行編譯器、處理不同的數字格式、神秘的I/O操作和低階記憶體管理)所困擾,以至於他們從未能專注於良好程式和演算法設計的本質。

為了抵消這種影響,ABC的設計者回歸了基礎。他們著手設計一種語言及其環境,該語言和環境將處理所有附帶細節,讓學生有更多時間學習程式設計中獨立於當前程式語言的本質內容,例如清晰的控制流和強大的資料結構,並專注於程式的優雅表達。他們提出了新的語言設計和新術語,這些都與計算機科學家和程式設計師中流行(並且仍然流行)的實踐截然不同。事實上,ABC未能產生預期影響的最大原因可能是他們偏離了當前實踐太多。能夠訪問執行ABC所需硬體的人(最初它只在Unix系統上執行,儘管後來移植到Mac和PC上)往往是經驗豐富的計算機使用者,他們感到沮喪的是ABC沒有“講與他們其他應用程式相同的語言”。

大約十年後,Python 從這種挫折中誕生。它繼承了 ABC 對錶達的優雅、程式設計基礎和消除附帶細節的關注,但增加了面向物件、可擴充套件性以及一個強大的模組庫,透過多種不同機制與其他應用程式進行介面:共享檔案、程式嵌入、CORBA 或 COM 等 RPC 介面以及網路協議(支援全球資訊網上通常使用的所有協議)。

Logo。Logo實際上是與Lisp相關的一系列語言,主要由麻省理工學院開發,當然是教育領域最著名的程式語言。它擁有豐富的傳統,在學校中根深蒂固,並有許多商業產品。麻省理工學院媒體實驗室的認知論和學習小組正在進行持續研究,例如“可程式設計積木”(與樂高合作)。

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(一種為教學目的開發的程式語言)和Amoeba(一種八十年代開發的著名分散式作業系統)的工作。他擁有阿姆斯特丹大學數學和計算機科學碩士學位。

專案預期投入:50%。其他DARPA或NSF專案:40%。其他重要支援來源:Python聯盟(10%)。

Jeremy Hylton 是技術人員的高階成員。他是 Knowbot 移動代理系統的設計者之一,並設計和實現了多個基於代理的資訊管理應用程式。他於 1996 年在麻省理工學院獲得了電氣工程和計算機科學的工程碩士學位以及計算機科學和工程的理學學士學位。同年他加入了 CNRI。

專案預期投入:30%。其他DARPA或NSF專案:70%。

Barry Warsaw 自 1994 年以來一直是 CNRI 的系統工程師。他曾為多個 CNRI 專案做出貢獻,包括應用網關係統和 Knowbot 作業系統環境。他為 Python 語言的開發和 Grail 網際網路瀏覽器做出了貢獻。他於 1984 年在馬里蘭大學獲得計算機科學學士學位。在加入 CNRI 之前,他於 1980 年至 1990 年在國家標準與技術研究院從事機器人系統操作員介面工作,並於 1990 年至 1994 年在國家醫學圖書館從事醫療資料庫資訊科技工作。

專案預期投入:30%。其他DARPA或NSF專案:70%。

其他團隊成員將對擬議專案投入大量精力。當其他待批的DARPA提案獲得批准時,本專案的工作投入可能會有所減少,其他團隊成員將接管。不使用分包商。

工作說明

CNRI將執行以下工作:

  1. 設計並實現一個原型互動式程式設計環境,用Python編寫,適合向沒有程式設計經驗的計算機使用者教授Python。

  2. 設計並實現一個Python模組原型庫,將Python連線到一個現有的3D遊戲引擎,目的是在一個引人入勝的環境中教授Python。

  3. 編寫一份教程,利用上述軟體向沒有程式設計技能的學生教授通用程式設計技能和良好的程式設計習慣。

  4. 建立並維護一個網站和郵件列表,以培養一個專注於上述軟體和教程的社群。該網站將用於方便地訪問為本專案生成的所有軟體和教學材料。

  5. 評估並報告從社群收集到的與上述軟體和教程相關的反饋。為後續研究提出建議。

為了最大限度地獲取所產生的材料,本專案產生的所有軟體、教學材料和報告將作為開源材料在全球資訊網上免費提供。

日程安排

日程表從資助授予開始分為四個半年期。

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. The ABC Programmer's Handbook. 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. Programming 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. Internet Programming with Python. MIS Press/Henry Holt, 1996.