注意:虽然 JavaScript 不是本网站的必需品,但您与内容的互动将受到限制。请启用 JavaScript 以获得完整体验。

人人皆可编程

人人皆可编程

这是我们于 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。这里的区别因素是存在一个相对“狭窄”的应用领域。在这个类别中,我们还将放置诸如 Microsoft 的“向导”(实际上只是由简单流程图连接的预定义对话框序列)以及微波炉或核反应堆上的控制和旋钮。

声明式语言的一个典型属性是,它们在其预期的应用领域提供了出色的控制,并且在意外领域几乎没有自由度。例如,HTML 本身没有对文本进行条件包含或变量扩展的能力。(这些功能作为 HTML 扩展添加的事实证明了这一点。)

另一方面,过程式语言通常在任何特定领域都不那么好(例如,用过程式语言编写程序来格式化一段文本比用 HTML 编写程序要花费更多工作)。但是,它们通过图灵完备性弥补了这一点,这使得解决可能出现的任何问题成为可能(假设有足够的资源可用)。因此,过程式语言与声明式语言结合使用是理想的。

例如,如果我的手机是可编程的,我仍然会使用常规的声明式界面(即键盘)来拨打特定号码,因为这是访问该特定功能最方便的方式。但是,如果没有可编程性,我无法让它尝试几个不同的号码来联系某个朋友,直到其中一个号码接通,除非手机供应商预料到了这一特定功能。

3. 挑战

一些问题立即出现。在学校教授的编程语言会是什么样子?它会与我们今天知道的任何编程语言有任何相似之处吗?它甚至会被称为编程语言吗?我们该如何教授它?会只有一种语言吗?哪些其他工具对于教授和使用这种语言至关重要?

同样有趣的是以下问题:人们将如何以及为何使用他们的编程技能?几乎所有人都能读写计算机程序的能力将如何改变计算机软件的结构?(尤其是在与未来版本的互联网相结合的情况下,互联网承诺提供对计算和存储元素以及网络连接的无处不在的访问。)它将如何影响软件市场?这将在未来多久成为现实?

一个明显的潜在担忧是,如果大多数人都是程序员,他们中的许多人很可能都是糟糕的程序员。那些不能用母语写出通顺的句子或平衡支票簿的人不太可能写出结构良好的计算机程序!

因此,我们需要研究改进程序员与系统之间交互质量的方法,以帮助即使是糟糕的程序员也能充分利用他们的计算机。例如,您可能想编写一个程序来定制您的 PDA 或烤面包机,但如果您犯了一个小错误可能会删除您的地址簿或引发火灾,您可能会感到沮丧。需要防止灾难的安全措施,以及撤消对整个系统的不必要更改的方法。(“撤消”虽然功能强大,但通常只适用于一次一个文件。撤消全局系统更改通常需要重新启动,甚至需要从备份介质中进行痛苦的数据恢复。)

脚本语言已变得非常流行,而像 Python 这样的高级脚本语言是我们探险的良好起点。对脚本语言的一个持续批评是,它们的性能不足以完成某些任务。程序分析和高级编译器技术等技术可能能够消除部分问题,这可能与某种形式的可选静态类型相结合。挑战是在不混淆编程语言或使开发周期(编辑-运行-调试)更加繁琐的情况下做到这一点。

脚本语言非常擅长以一种新的方式将现有组件粘合在一起,而不是从头开始。一个结论是我们需要更好的软件重用技术——这是面向对象编程领域持续争论的一个问题。

脚本语言也擅长将用其他语言编写的组件粘合在一起。但是,语言之间的边界通常非常丑陋。这里有两个可能的解决办法。一个是尝试减少对其他语言的需求,方法是在脚本语言中添加一些功能,使其可用作系统语言(即适合低级编程的语言,如 C 或 Java)。在这里,我们再次着眼于提高性能。另一种可能性是简单地改进系统语言和脚本语言之间的同步。一个很好的例子是 JPython,一种与 Java 无缝集成的 Python 方言 [JPython].

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 服务器。我们将使用互联网和万维网来分发所有材料。

与其他正在进行的研究的比较

ABC。Python 的前身 ABC 是在 80 年代初设计的一种教学语言。它的座右铭是“消灭 Basic”——承认当时非专家语言的主要竞争对手。ABC 的设计者在教授“经典”编程语言(如 Algol)给新手方面拥有丰富的经验。他们发现,他们的学生经常被使用计算机语言的偶然细节(例如运行编译器、处理不同的数字格式、神秘的 I/O 操作和低级内存管理)所淹没,以至于他们从未设法专注于良好程序和算法设计的要点。

为了抵消这种影响,ABC 的设计者回到了基础。他们着手设计一种语言和一个用于该语言的环境,该环境将处理所有偶然事件,让学生有更多时间学习与编程语言无关的编程要点,例如清晰的控制流和强大的数据结构,并专注于程序的优雅表达。他们提出了新的语言设计和新的术语,这些术语与计算机科学家和程序员中当前(并且仍然是)的术语有很大不同。事实上,ABC 没有像预期那样产生很大影响的最大原因可能是他们偏离了当前实践太多。能够访问运行 ABC 所需硬件的人(最初它只在 Unix 系统上运行,尽管后来移植到 Mac 和 PC)通常是有经验的计算机用户,他们感到沮丧的是,ABC 没有“说与他们其他应用程序相同的语言”。

大约十年后,Python 从这种沮丧中成长起来。它与 ABC 在表达优雅、编程基础和消除偶然事件方面有着共同点,但它添加了面向对象、可扩展性和一个强大的模块库,这些模块通过多种不同的机制与其他应用程序进行交互:共享文件、程序嵌入、RPC 接口(如 CORBA 或 COM)和网络协议(支持 WWW 上通常使用的所有协议)。

Logo。实际上是与 Lisp 相关的语言家族,主要在 MIT 开发,Logo 当然是在教育领域最著名的编程语言。它有着丰富的传统、在学校扎根深厚,以及许多商业产品。麻省理工学院媒体实验室的认识论与学习小组正在进行持续的研究,例如“可编程积木”(与乐高合作)。

Logo 和我们提案的关键区别在于我们的愿景:数百万(业余)程序员将共同开发开源软件——Logo 似乎满足于向年幼儿童教授有限的编程技能,对他们来说,计算机编程主要是一种训练抽象思维的方式。

LogoMation。一家名为 Magic Square 的公司销售 LogoMation,这是一种与 Logo 类似的语言,同样强调海龟图形。它附带一个优秀的教程,适合 8 岁及以上的儿童。LogoMation 的语法类似于 Python(比 Logo 的语法更类似);这表明我们使用 Python 的方向是正确的。

但与 Logo 一样,LogoMation 在其提供的成长路径方面也存在局限性。它没有直接解决“下一步做什么”的问题,而是期望其用户转向其他编程语言来进行实际工作。

Alice。Alice 网站上的 testimonials 清楚地表明,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 是一种为教学目的而开发的编程语言,以及 Amoeba 的开发,Amoeba 是 80 年代开发的一种著名的分布式操作系统。他拥有阿姆斯特丹大学数学和计算机科学硕士学位。

预计项目投入: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, and Matthias Felleisen. DrScheme: a pedagogic programming environment for Scheme. In Proceedings of the 1997 Symposium on Programming Languages: Implementations, Logics, and Programs, Southampton, UK, Sept. 1997. (Lecture Notes in Computer Science, Vol. 1292.)
[Geurts]
Leo Geurts, Lambert Meertens, Steven Pemberton. The ABC Programmer's Handbook. Prentice-Hall, 1990
[JPython]
https://www.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]
http://www.opensource.org/
[Python]
https://www.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.