发布于 2026-01-06 5 阅读
0

我从教孩子们Python中学到的东西

我从教孩子们Python中学到的东西

这篇文章最初发表于几年前的AgileCoder.net网站,但随着暑期儿童夏令营的到来,我想重新发布一下。

几年前,我曾在犹他州极客活动公司 (Utah Geek Events)主办的 2015 年儿童编程大会 (Kids Code Conference 2015) 担任志愿者。UGE 每年都会举办多场免费或低价的编程和技术活动,包括犹他州编程训练营 (Utah Code Camp)大数据大会 (Big Mountain Data)。我不确定他们举办过多少次儿童活动,但这次规模非常大。活动由位于盐湖城市中心的纽蒙特大学 (Neumont University)承办,场地非常棒。

几周前我就自愿报名参加这次会议。我原本以为可以在HTML/JavaScript或Python的课程现场转转,帮帮那些遇到困难的孩子们。我之前教过自己的孩子和他们的一两个朋友一些Visual Basic、C#或Python,但我觉得自己还没准备好,也没能力去教一个长达3个小时的、专门讲解如何开发可玩游戏的研讨会。然而,就在会议开始前一周多一点,一位和我同属一家公司的组织者告诉我,有好几位讲师退出了,问我是否愿意去教一个Python课程。

让我澄清一下。我的工作中完全不用Python,在家也几乎不用。我不开发游戏。我下载Python并开始试用,是因为听说它是一种比较简单的语言,而且对数据分析的支持很强大。话说回来,我听说另一位经验丰富的讲师正在编写课程大纲和示例代码,而且这次研讨会的内容将大致基于《Hello, World! Computer Programming for Kids and Other Beginners》这本书。我正好有一本,所以就开始尽可能快地学习。

另一位讲师菲尔把课程大纲和示例文件发给了我,我立刻投入到准备工作中,准备教一群十来岁的孩子如何用Python和Pygame制作游戏。我原本以为要分别开设上午和下午的课程,但后来我们决定合并课程,一起合作。因为我之前没有教过Python,所以上午的课程由菲尔负责,下午的课程则由我负责。

好了,说了这么多,下面就是我学到的东西:

安装和设置至关重要

上午的课程大约来了30个孩子。我们准备了装有PythonPygameVisual Studio Code(它正迅速成为我最常用的跨平台代码编辑器)示例文件和安装文件的U盘。我们给孩子和家长发了邮件,里面有链接和设置说明,指导孩子们如何设置从家里带来的笔记本电脑。但即便如此,我估计只有两三个孩子带着准备好的电脑进了工作室。我们几乎花了整个第一小时来安装和配置孩子们的电脑。那些一开始就搞定或者我们帮他们配置好的孩子很快就觉得无聊了。

经验教训:化繁为简。《Hello, World!》这本书的网站提供了一个非常不错的集成安装程序,支持 Mac、Windows 和 Linux 系统。犹他州编程训练营的 Python 课程推荐使用 Anaconda 发行版,安装起来很方便(但它不包含 Pygame,所以我们没有使用它)。除了尝试使用集成安装程序之外,还应该提供更完善的会前指导,包括如何验证所有组件是否都已安装并配置正确。虽然我不太喜欢 Python 自带的 IDLE 编辑器,但它是自动安装的,而且每个平台都有,所以使用 IDLE 会更简单,避免 Visual Studio Code 的额外安装/配置步骤。

提防Mac,畏惧Linux

大多数苹果MacBook都预装了Python,大多数Linux发行版也默认包含Python。然而,教材和我们的课程都是基于Python 2.7.x版本的,而我们看到的大多数安装版本都是3.x,而且都没有安装Pygame。我和Phil都不是Mac或Linux专家,所以帮助孩子们解决这些安装问题尤其困难。当孩子们需要复制文件或访问终端时,也遇到了一些小挑战。我们对Windows快捷键了如指掌,右键单击查看上下文菜单也毫无压力。但帮助孩子们解决这些问题却很困难。我们知道至少会看到一些MacBook,但没想到每个班级里至少有三分之一的孩子都在使用MacBook。Linux则少得多。我想我们每节课都只有一个Linux用户。

经验教训:这里其实有两个经验教训。首先,Mac 用户(或者他们的父母)可能会认为,只要能运行 Python 就万事大吉了,却不会去考虑 Python 版本或者 Pygame 的问题。解决办法可能和第一点一样:提供更完善的安装和配置说明。第二点是针对我自己的。我可以使用 iMac 和 MacBook,应该好好利用它们来准备下次类似的研讨会。

四比一差不多是正确的

幸好我们能把课程合并在一起,这样上午的课就可以让菲尔教,我和另一位志愿者可以四处帮忙。但这还不够。如果只有我一个人,要教15、16个孩子,我肯定既要应付安装问题,又要应付教学,到时候肯定忙得不可开交。我们运气不错,两个班次都至少有一位家长可以帮忙照看自己的孩子,有时还能带上一两个孩子。

课程:下午的课程里,一位爸爸带着他的孩子和三个朋友(菲尔和我)一起上课。我们三个人仍然有点忙乱,要确保每个孩子都能得到他们需要的帮助,或者在他们遇到真正困难的时候能够得到指导。我认为大约1名指导老师/志愿者对4名学生的比例比较合适。如果家长在场,即使他们不是程序员,通常也能很快上手,但一般只能帮助一两个孩子,所以儿童编程营比成人编程工作坊更需要志愿者。

你只会完成大纲的一半。

我们制定了一个很棒的大纲,Phil 也整理了一套条理清晰的包含挑战题的源文件。例如,这是“列表”主题的部分源文件。我们会先介绍主题,展示一些示例和演示,然后让他们自由发挥几分钟,完成挑战题:

# This is a LIST (other languages call this an ARRAY)
my_numbers = [1, 2, 3, 4, 5]

print(my_numbers)

# ----  CHALLENGE 1 ----
# Display each number on its own line.

# ----  CHALLENGE 2 ----
# Prefix each number with "Number: " and display it.

# ----  CHALLENGE 3 ----
# Add the number 6 to the end of the list

# ----  CHALLENGE 4 ----
# Display the third item in the list (the value 3).

# ----  CHALLENGE 5 ----
# Replace the literal list with a call to the range() function.

我们讲授了大约16个主题,从“Hello World”入门、基本类型、循环、函数……到Pygame入门、精灵、动画,最后还讲解了一个类似Pong的单人游戏。菲尔上午的课和我下午的课都没能讲到Pygame的内容。好在函数和类部分我们做了一个猜数字游戏,所以我们可以肯定地说,孩子们确实学会了如何制作游戏。

课程安排:孩子们通常都是零基础,所以你需要准备好讲解一些非常基础的知识。我觉得他们玩得很开心,学到了很多东西,并且对学习编程充满热情。对于一群真正的编程新手来说,三个小时的课程最好能让他们掌握基本的语法、类型、条件语句、循环语句、函数和类。这些知识足以让他们制作一个基于文本的算命游戏或猜数字游戏。课后我和Phil聊过,我觉得最好的安排是上午进行两节入门课程,下午再重复一节入门课程(面向参加过Scratch或JavaScript课程的学生),以及一节中级课程(重点讲解Pygame并制作更高级的游戏)。这样做还有一个好处,就是可以简化入门课程的设置,因为需要安装和配置的东西会更少。

如果孩子们既不打字,也不走动,也不回答问题,你就失去他们了。

孩子的注意力很容易分散。上午的课,光是准备工作就让我们筋疲力尽,即使开始上课后,我们也很难让所有孩子都集中注意力,也很难判断哪些孩子可能遇到了困难或感到无聊。下午上课时,我发现我必须使出浑身解数,运用所有在各种教学环境中学到的技巧才能让孩子们集中注意力。我没有使用那些定义明确、有时甚至抽象的例子,而是努力使用孩子们能够理解的例子。我请他们帮忙构建例子。我故意犯一些简单的编程错误,并请他们帮我改正。在做挑战题时,我会让他们完成后举手,或者让他们站起来靠墙站着,或者让他们把笔记本电脑转过来让我能看到。这样我就能看出哪些孩子遇到了困难,并让那些容易上手的孩子去帮助那些有困难的孩子。

经验教训:孩子们毕竟不是大人,所以需要不同的例子。他们需要快速、易于理解的信息,并且在完成挑战时能够迅速获得成就感。他们需要感受到自己的成功和帮助他人的能力。尤其是在较长的研讨会中,最好能让他们经常站起来走动。例如,在教授列表/数组时,可以制作一个学生的“名单”。让两个孩子伸出手臂来表示括号,然后在这两个孩子之间添加、删除、排序和查找实际的学生。任何能让他们保持活跃和注意力的方法都有助于教学成功。

以上就是全部内容。在准备和教孩子们编程时:

  • 简化设置
  • 如果他们自带电脑,请做好应对不同环境的准备。
  • 尽量接近 1:1,最好不要超过 4:1。
  • 管理好预期并涵盖基本内容
  • 举一些以孩子为中心的例子;例子要简短有趣。

祝你好运!

文章来源:https://dev.to/geekcyclist/what-i-learned-teaching-python-to-kids-1l7l