EDU-SIG:教育中的 Python
EDU-SIG:教育中的 Python
越来越多地,Python 在教育的各个层次 取得进展。Python 提供了一个交互式环境,可以在其中探索解决问题的过程式、函数式和面向对象的方法。其高层次的数据结构和清晰的语法使其成为理想的第一语言,而大量的现有库使其适合处理几乎任何编程任务。
Edu-sig 通过其 邮件列表,为比较笔记和讨论 Python 在教育中的未来可能性提供了一个非正式场所。它的起源可以追溯到 Guido van Rossum 开创性的 人人可编程 (CP4E),这是一项被 DARPA 接受的资助提案,并在 1999 年提供了一些资金。
成员包括但不限于在课程中使用 Python 的教育工作者、独立开发人员和教育材料的作者。讨论的重点是 Python 在各个级别的使用,从初级到高级应用程序。
Python 2 还是 Python 3?
几年前,引入了新版本的 Python (3)。这个新版本与之前的版本有一些小的但重要的变化。对于初学者来说,最明显的变化是 print,它曾经是 Python 的关键字
>>> print "Hello World!" # for Python 2
现在是一个函数
>>> print("Hello World!") # for Python 3
由于这些变化,为 Python 2 编写的程序很可能与 Python 3 不兼容(反之亦然)。你们中的一些人可能无法控制提供给学生的 Python 版本。如果情况如此,如果你们和你们的学生无法访问最好/最新的 Python 版本,你们不应该太绝望:Python 作为第一语言是一个绝佳的选择,并且版本之间的相对较小的变化并不会改变这一事实。
如果您对提供给学生的 Python 版本有一些控制权,那么您需要做出选择。在这种情况下,我们想提供以下内容
- 如果可以,请使用 Python 3,更具体地说是 3.4 版本,并利用为其提供的越来越多的第三方库。如果您计划将 Python 作为入门语言(例如在 CS-1 课程中)进行教学,尤其如此,因为 Python 3 是 Python 的未来。此外,如果您使用非英语的语言教授 Python,其中非 ASCII 字符可以在编写标识符时得到很好的利用,那么 Python 3 绝对应该是您的选择。
- 如果您需要尚未移植到 Python 3 的第三方模块,请使用 Python 2,更具体地说是 2.7 版本。
邮件列表等
如上所述,Edu-Sig 社区有自己的 邮件列表。另外两个邮件列表对教育工作者可能感兴趣:python tutor 和一般的 python-list。这三个列表都可以在 可搜索的存档 中找到,该存档位于 ActiveState 网站,该网站也托管着著名的 Python Cookbook。python tutor 邮件列表对于学习该语言并寻找编程问题答案的初学者很有用;欢迎教育工作者以志愿者的身份加入;edu-sig 邮件列表 更适合讨论 Python 在教育环境中的使用。
面向教育工作者的免费书籍和教程
有许多免费提供的 Python 教程。例如,Python wiki 上提供了 Python 初学者指南 的集合。此外,以下内容可能对教育工作者特别感兴趣
- Think Python,作者 Allen B. Downey,是 How to Think Like a Computer Scientist Learning with Python 的大幅修订版。它可以以各种格式免费获得;也可以购买印刷版。
- Python for Informatics: Exploring Information,作者 Charles Severance,是另一本从上面提到的免费提供的 How to Think Like a Computer Scientist Learning with Python 中衍生出来的书。截至 2010 年 1 月,这本书仅部分完成,各章节以 pdf 文件形式免费提供。
- Dave Kuhlman 的免费书籍 和其他教程集也是教育工作者的一个非常好的资源。
- Andrew Harrington 的实践教程 适合高中和大学级别的 CS-0 学生。 Harrington 博士 在芝加哥洛约拉大学任教。
教科书和其他非免费书籍
虽然有许多免费书籍和教程可用,但有些人喜欢拥有纸质的实际副本。如果您属于这一类,您可能会惊讶地发现,已经编写了近一百本关于 Python 编程的书籍。在这里,我们将仅关注对教授编程入门课程的教育工作者可能感兴趣的子集。更多书籍可以在 这里 和 这里 找到,或者通过互联网搜索找到。
为儿童、年轻人和老年人准备
- Python Programming for the Absolute Beginner,作者 Michael Dawson,是为这一受众编写的第一批书籍之一,并且仍然是最受欢迎的书籍之一。
- Hello World! Computer Programming for Kids and Other Beginners,作者 Warren Sande,正如标题所说。
- Computer Programming is Fun!,作者 David Handy,是在考虑幼儿的情况下编写的。
也提供大学级别的教科书
- Python Programming: An Introduction to Computer Science,作者 John Zelle,是一本专为 CS-1 课程设计的书籍。 Zelle 博士 在瓦特堡学院任教。
- Data Structures and Algorithms Using Python and C++,作者 David M. Reed 和 John Zelle,是一本专为 CS-2 课程设计的书籍。
- Object-Oriented Programming in Python,作者 Michael H. Goldwasser 和 David Letscher,是一本专为 CS-1 课程设计的书籍。Goldwasser 博士和 Letscher 博士在圣路易斯大学任教。他们编写了一个免费的 面向对象图形包,作为其教科书的配套材料。
- Practical Programming (2nd edition): An Introduction to Computer Science Using Python,作者 Paul Gries、Jennifer Campbell 和 Jason Montojo,是一本专为 CS-1 课程设计的教科书。所有三位作者都与多伦多大学有关。
- Python Programming in Context,作者 Bradley N. Miller 和 David L. Ranum,是一本专为 CS-1 课程设计的书籍。Miller 博士和 Ranum 博士在路德学院任教。
- 《使用Python进行计算实践》,作者 Bill Punch 和 Rich Enbody,是一本使用 Python 语言教授 CS1 概念的书籍。教学材料包括完整的 PowerPoint 幻灯片、实验室练习、Python 项目以及书中 600 多个练习的解答。Punch 和 Enbody 都是密歇根州立大学计算机科学与工程学院的教员。
- 《数字时代的数学与Python编程》,作者 Maria Litvin 和 Gary Litvin,则采用了非常不同的方法。根据网站上的描述,它独特地融合了数学和编程,旨在让计算机科学入门课程的学生了解与计算相关的严格数学,以及编写程序的实用技能。
- 《计算科学的Python脚本》,作者 Hans Petter Langtangen 博士,教授对于科学计算特别有用的工具和编程概念。该书的主页包含一套相关的相当完整的幻灯片。
- Hans Petter Langtangen 博士还写了第二本书,《Python科学编程入门》。本书使用了数学、统计学、物理学、生物学和金融学的例子。本书教授“Matlab 风格”和过程式编程,以及面向对象编程。它也可以在亚马逊上购买。
学习环境
由于 Python 是一种解释型语言,开始编程所需要的一切只是一个终端窗口。然而,对于你的学生来说,这并不是最友好的环境;相反,我们建议你使用类似 IDLE(代表集成开发环境)的东西,它包含在任何支持 Tcl 的平台(包括 Windows)的 Python 安装文件中。
至于你自己,如果你喜欢直接从终端窗口进行编程,那么比默认解释器更好的选择可能是 IPython。
除了 IDLE 之外,还有许多第三方工具,你可以通过参考Python 编辑器 Wiki 和 Python 集成开发环境 Wiki来了解它们。
学习资源
这些资源、交互式在线教程和其他教育资源要么帮助教授 Python,要么使用 Python 来教授编程。
- 在线 Python Tutor 是由 Philip Guo 创建的免费教育工具,它可以帮助学生克服学习编程的一个基本障碍:理解当计算机执行程序的每一行源代码时会发生什么。使用此工具,教师或学生可以在 Web 浏览器中编写 Python 程序,并可视化计算机在执行程序时逐步执行的操作。
- 交互式 Python 网站上有实时的 Python 书籍,让学习者能够在浏览器中运行 Python 代码,并查看他们正在运行的程序的可视化效果。
- Python for Fun 是一系列小型 Python 程序,旨在针对中级程序员,探索广泛的计算机科学概念,包括逻辑电路和人工智能。
- Pynguin 是一个统一的编辑器、交互式控制台和图形显示区域,使用 Python 和 PyQt 工具包编写。Pynguin 旨在为初学者程序员提供一个简单的环境来介绍编程概念。Pygnuin 程序生成可以保存为 SVG 或 PNG 文件的数字图像。
- Crunchy 是一个 Python 程序,可以将原本静态的 html 教程转换为浏览器中的交互式 Python 会话。Crunchy 早期版本的基本功能在 这个屏幕录像中进行了演示。
- 一个新的“类似 Mathematica”的 Python 环境是 Codenode。你可能想亲自尝试一下。
- PyKata 是一个新的在线环境,旨在作为 Python 的教学辅助工具。它包含少量但不断增长的编程练习,学生可以自行尝试并获得即时反馈。欢迎教育工作者贡献他们自己的练习。
- Pyro 是一个 Python 编程环境,用于轻松探索人工智能和机器人技术中的高级主题。
- GvR,或 Guido van Robot,致力于模仿 Richard Pattis 创建的原始 *Karel the Robot*。它使用基于缩进的类似 Python 的语言和大约 20 个旨在教授编程概念的课程。 有一个在线演示可用。
- RUR-PLE 是一个 Python 学习环境,包括一个编辑器、一个 Python shell,以及一个更重要的 Karel the Robot 克隆,可以使用 Python 语法进行编程,可以使用过程式命令[例如 move()] 或面向对象的方法 [例如 robot.move()]。它包括大约 40 个课程。一个新的基于 Web 的版本,Reeborg's World,比桌面版本提供的教程更多。
- Python 的 turtle 模块本身不是一个学习环境,但它已针对 Python 2.6 及更高版本进行了全面改进,值得一看。示例包含在源代码发行版中(以及一个 demoViewer 程序,它也作为如何将 turtle 图形嵌入到 Tkinter 应用程序中的示例。)对于那些安装了旧版本 Python(2.3、2.4 或 2.5)的用户,可以在这里找到 turtle 模块的适用版本,以及这里的示例。有一个Pycon 2009 演示 turtle 模块的视频可用。
视频
Python 社区的播客、屏幕录像和视频演示越来越多,其中许多可能对教育工作者感兴趣。有关更多详细信息,请参阅 Python 的音频/视频教学材料
专门的软件包
鉴于 Python 发行版中包含大量 模块,人们常说 Python 自带电池。如果标准发行版不包含你需要的模块,你可能需要参考Python 包索引,这是一个包含近 7000 个额外包的存储库。
以下只是可用资源的一小部分示例。
- NumPy 是使用 Python 进行科学计算所需的基本包。它包含
- 一个强大的 N 维数组对象
- 复杂的广播功能
- 基本的线性代数函数
- 基本的傅里叶变换
- 复杂的随机数生成能力
- 用于集成 Fortran 代码的工具。
- 用于集成 C/C++ 代码的工具。
- SciPy(发音为“Sigh Pie”)是用于数学、科学和工程的开源软件。SciPy 库依赖于 NumPy,它提供方便快捷的 N 维数组操作。SciPy 库旨在与 NumPy 数组一起使用,并提供许多用户友好且高效的数值例程,例如用于数值积分和优化的例程。它们共同在所有流行的操作系统上运行,安装速度快,并且免费。NumPy 和 SciPy 易于使用,但功能强大到足以让世界上一些顶尖的科学家和工程师依赖它们。如果你需要在计算机上操作数字并显示或发布结果,请尝试 SciPy!
- matplotlib 是一个 python 2D 绘图库,它可以生成各种硬拷贝格式和跨平台的交互式环境中的出版质量图形。matplotlib 可以在 python 脚本、python 和 ipython shell(类似于 matlab 或 mathematica)、Web 应用程序服务器和六个图形用户界面工具包中使用。matplotlib 试图使简单的事情变得简单,使困难的事情成为可能。你只需几行代码就可以生成绘图、直方图、功率谱、条形图、误差图、散点图等。
- PIL,Python 图像库,为你的 Python 解释器添加图像处理功能。此库支持多种文件格式,并提供强大的图像处理和图形功能。
- OpenOpt 是一个基于 Numpy 的免费优化框架。除了各种数值优化包之外,它还包括
- FuncDesigner - 一种用于快速构建变量/数组上的函数并通过自动微分获取其导数的工具。此外,可以通过 OpenOpt 在 FuncDesigner 中执行积分、插值、求解线性/非线性/ODE 方程组和数值优化问题。
- DerApproximator - 一种通过有限差分逼近来获取(或检查用户提供的)导数的工具。
- SpaceFuncs - 一种用于 2D、3D、N 维几何建模的工具,具有参数化计算、数值优化和求解几何方程组的可能性。
- VPython 使创建可导航的 3D 显示和动画变得容易,即使对于那些编程经验有限的人也是如此。它包括一个修改后的 IDLE 版本。
- ReportLab 使 Python 程序能够直接以 Adobe 的 PDF 格式输出。开源版本在 Python 程序员手中功能齐全。对于发布课程材料很有用。
- SymPy 是一个用于符号数学的 Python 库。它的目标是成为一个全功能的计算机代数系统 (CAS),同时保持代码尽可能简单,以便于理解和轻松扩展。SymPy 完全用 Python 编写,不需要任何外部库。
- Sage 不是一个 Python 包,但它提供了一个展示 Python 作为编程语言的环境。它是一个在 GPL 下许可的免费开源数学软件系统。它将许多现有开源软件包的功能组合到一个通用的基于 Python 的界面中。Sage 的使命是为 Magma、Maple、Mathematica 和 Matlab 创建一个可行的免费开源替代方案。
- Blender 是一个跨平台的 3D 建模套件,提供建模、动画、交互式创建和播放功能。Blender 不是一个 Python 包,但它使用 Python 来支持脚本。
- Michael H. Goldwasser 和 David Letscher 编写了一个 面向对象的图形包,与他们的教科书(如上所述)一起使用。
学术论文
许多学术论文都探讨了将 Python 作为编程语言的用途。其中包括以下内容:
- Fotis Georgatos 博士的硕士论文,从教师的角度来看,Python 作为大学预科教育环境中教授编程的第一门计算机语言有多适用?
- 在高中计算机科学课程中使用 Python 记录了 Jeff Elkner 在第九届国际 Python 会议上报告的在课堂上使用 Python 的经验。(另请参阅 Frank Willison 为 O'Reilly 采访 Jeff 的访谈。)
- Wartburg College 的 John Zelle 博士提倡使用 Python 作为第一门语言,并在他的 网站上发表了几篇关于该主题的论文。
- John Miller 的博士论文 通过编程 Python 提升计算机素养(1.37 MB)探讨了使用 Python 进行教学的相关问题,并探讨了 edu-sig 上讨论的一些主题。
- Atanas Radenski 博士撰写了一篇名为 “Python优先”:基于实验室的计算机科学数字入门 的论文,描述了在将 CS1 课程的语言从 Java 切换到 Python 时获得的积极体验。
- Michael H. Goldwasser 博士和 David Letscher 博士撰写了一篇名为 用 Python 教授面向对象的 CS1 的论文,该论文发表在 2008 年 6 月的第 13 届计算机科学创新与技术年度会议 (ITiCSE) 的会议论文集中。他们还撰写了 第一天及以后的图形包,该论文发表在 2009 年 5 月的第 40 届年度计算机科学教育 SIGCSE 技术研讨会的会议论文集中。(上面包含了免费图形包的链接。)
最后,虽然不是学术论文,但 Philip Guo 撰写的 为什么 Python 是初学者入门编程课程的绝佳语言 绝对值得一读。
游戏时间!
如果不是因为游戏,可能很少有人会对编程感兴趣,也不会有那么多免费软件被开发出来。Python 有两个知名的游戏开发框架:
其他
- Python for secretaries:一个旨在向商业用户展示如何使用少量 Python 的资源网站,完全专注于帮助他们处理日常工作职责。
- 免费可重复使用的数据:教师通常需要有意义的数据来构建编程练习。为了支持这种使用,教育界的许多人贡献了 免费可重复使用的数据,可以在其基础上构建练习。
- Greg Wilson 的 Software Carpentry 是一门针对科学家和工程师的软件开发技能课程。
- Kirby Urner 的 CP4E 资源 将 Python 编程与数学主题相结合。
- Phil Hugues 为 Linux Journal 撰写的 Guido van Rossum 的访谈 是与 Python 创建者关于向非计算机科学专业的学生教授 Python 的一次对话。
- Stephen Figgins 撰写的 黑客和追踪者:CP4E 和 用 Python 教授数学,都是关于人人参与计算机编程倡议的早期文章。
SIG 管理
- 订阅 edu-sig 邮件列表
- 浏览 edu-sig 邮件列表存档
- 向 edu-sig 列表发送更改建议。