注意: 虽然 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://pythonlang.cn/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]
https://open-source.org.cn/
[Python]
https://pythonlang.cn/
[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.