注意:虽然 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。这里的区别因素是存在一个相对“狭窄”的应用领域。在此类别中,我们还会放入诸如微软的“向导”(实际上只是由简单流程图连接的预定义对话序列)以及微波炉或核反应堆上的控件和拨盘之类的东西。

声明式语言的一个典型属性是,它们在其预期的应用领域中提供了出色的控制,并且在未预料到的领域中(几乎)没有自由度。例如,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 将执行以下工作

  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. ABC 程序员手册。 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. 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. 使用 Python 进行互联网编程。 MIS Press/Henry Holt, 1996.