我是名为“计算思维导论”的课程的助教,在该课程中,我们使用BlockPy,这是一个基于Web的Python编程环境,允许学生使用块以及文本(单独或一起使用)。 本课程的重点是通过涉及广泛的“现实世界”数据集的问题陈述,帮助非CS学生思考与环境相关的抽象,算法和社会影响。
作为课堂作业的一部分,学生们在迭代与一系列与布莱克斯堡(大学所在地)的天气有关的量度。 在这些作业的一半中,学生需要遍历列表,做出决定,计算度量(例如,总和或计数),并在列表之外打印度量。 在一项作业中,学生需要计算温度超过或等于80天的天数(炎热的日子)。
很少有学生在努力解决问题。 其中三个学生的解决方案如下所示:

在示例中,学生已经初始化了一个变量(max_temp),并正在检查max_temp是否大于或等于80。代码将执行(由于已初始化变量),无论那里有多少个炎热的日子,其输出都为0曾经(而且已经有很多!)。
从学生的角度来看,他们做的一切正确。 他们正在检查温度是否大于或等于80,正在进行迭代和计数,并正在打印正确的变量。
首先要进行迭代然后再比较每个温度的需求并不容易掌握,尤其是在出现诸如编程块之类的抽象元素时。 在以前的学期中,我曾经和学生坐在一起,与他们讨论代码。 我通常会要求他们在一张纸上用英语写伪代码,然后与他们在BlockPy上创建的块进行比较。 伪代码与块之间的表面相似性有助于澄清混淆。 虽然它较早起作用,但我知道我可以使其更易于使用。
为了使学生对计算产生兴趣,我选择了总体目标,以表明计算构造类似于一些日常活动。 我假设,如果我能证明使用块的方法和我们在日常生活中的处事方式中存在结构相似的元素,那么这可能有助于澄清编程的困惑并有助于长期保留。

我从一个几乎每天都遇到的问题的例子开始:从一个大集合中找到一双匹配(或外观相似)的袜子。 它与编程问题在结构上相似:它们都需要从容器中取出一个项目,并在取出后对其进行评估。 我问学生如何找到匹配的一对。 在第一个学生的陪同下,我按照他们的解释画了画。 后来,我请学生按照他们的解释画画。 然后,我将图形放在他们的屏幕前面,并要求他们比较这些步骤。 尽管一个人立即了解了问题并进行了更改,但其他人则需要进一步解释。 在这种情况下,我也试图促使学生解决问题,并查看这些步骤在结构上与部分模块的相似之处。 他们抓住了这个问题,可以告诉我需要进行哪些更改。

但是,学生通常会“爱上他们的代码”,即不愿进行更改,尤其是在需要进行较大更改并且他们认为自己“非常接近”答案时。 两个学生都有类似的抵制,所以我试图借鉴他们刚遇到的结构类比。 我拿起它们的块并将它们分开(如旁边的图片所示)。 这不仅对学生有帮助,而且他们也能够进行更改。
在计算机科学教育(和计算思维)中,有许多精彩而令人振奋的工作,以各种方式教授入门编程。 例如,媒体计算试图通过创造性表达来做到这一点,几种方法将计算概念与科学和数学融合在一起。 我敢肯定,他们所有人都将需要教师与学生坐在一起,并提供个性化的护理和支持。 在那个时候以及其他时候,显示学生的日常经验和编程问题之间的结构相似性可能会有所帮助。 和谈论袜子永远不会伤害!
附言:请注意,正确答案要求学生从顶部移除“ set max_temp = 0”块。 这是一个单独的问题,因此这里不再讨论。