今天下午,我在Meadowbrook学校这是波士顿郊外的一所私立中学小时的代码倡议。的组织者“编程一小时”项目的负责人想让这个国家的每个K-12年级的学生在这周尝试一小时的编程,这是一年一度的计算机科学教育周.这篇文章总结了我一天中与CS教育相关的一些观察。
上周,中学的学生们填写了一份关于他们之前编程经验的在线调查,并被分为三组——初级、中级和高级。今天我们给每组在电脑室的一小时里做不同的活动:
这些活动大多是自我引导的,像我这样的六个志愿者在房间里走来走去,根据需要提供帮助。因此,我们的教学不是传统意义上的“在教室前面讲课”。
Margo苏打水(志愿者团队的一个头目)建议学生们在一台电脑前结对,这个想法非常成功!CS教育研究人员我知道这个事实很多年了,但它的效果非常好,所以值得一提。
以下是我注意到的主要好处:
还有一些潜在的缺点:
自愿配对当前位置学生们选择自己的伴侣,这似乎是最佳选择,因为他们和对方在一起立刻感到舒服。我看到了很多玩笑,轻松的玩笑,和坦诚的来来回回,像“啊!你错过了这里的引用!看!!”,我认为,如果学生被随机分配搭档,这句话就不会存在了。
有时学生(尤其是女孩)想要三个亲密的朋友聚在一起,所以我们允许他们。有些孩子没有同伴,所以他们独自编程。我一定要多检查几个独来独往的孩子,以确保他们没有被困住;在大多数情况下,他们看起来都是内向的人,能够自己进步。(有人研究过对内向者进行结对编程的好处吗?)
戳屏幕另一个有趣的现象是,学生们经常戳屏幕,向他们的同伴暗示什么。有时他们使劲戳屏幕,屏幕就会倾斜。如果他们有一个可以记录戳痕的触摸屏显示器呢?那么,我们能否基于这种普遍观察到的行为为教育创建更好的结对编程UI呢?
Codecademy's提供的基于web的实时编程环境JavaScript练习将IDE与图形输出的实时预览结合起来,学生每次更改代码时,图形输出都会更新。在下面的练习中,drawName()函数以颜色打印myName字符串变量的内容。学生们尽情地输入各种各样的昵称,调整颜色和形状。
这种环境非常吸引人,因为:
Codecademy Python界面没有图形或实时编程(例如,有一个单独的“运行”按钮),但它仍然有无需安装和语法高亮显示的好处。总的来说,它感觉没有JavaScript界面那么精致,有很多小问题。(例如,它总是在执行结束时打印出额外的“None”,大概是因为隐式用户定义函数返回None。)
任何教过编程的人都知道,系统生成的错误和警告消息对初学者来说几乎毫无用处。一般来说,针对运行时错误的消息要比针对编译时错误的消息好一些,因为它们更具体。语法错误是最糟糕的,这是由于解析器行为的变化无常。警告可能看起来有帮助,但通常是神秘的,与初学者需要知道的无关。例如,Codecademy的一个JavaScript练习以以下代码开始:
文档。写(“yourName”);
学生应该把“你的名字”换成自己的名字。然而,IDE可能与一些类似lint的静态分析挂钩,生成警告,因为在那一行立即弹出一个警告,说“文档”。写作可以是一种评价的形式。”哇,这不仅完全没用,而且如果这是我第一次接触JavaScript的话,我会感到非常困惑。我甚至还没有写任何代码,就已经看到一个警告!
我建议不要直接将底层编译器/解释器的错误和警告传输到教育IDE中。至少,开发人员应该过滤掉像上面这样无用的警告,并尝试将其他警告翻译成人类可读的英语。
讽刺的是,我注意到的对学生有帮助的唯一警告——在JavaScript中使用未定义的变量——并没有提供。当学生拼错了变量名(这通常导致使用了未定义的变量),Codecademy IDE就会让代码执行,然后悄无声息地失败,而不做任何解释。学生们都被弄糊涂了,直到我帮助他们查找拼写错误(有时涉及到大小写敏感——例如,Name vs. Name)。
好在学生们很快就学会了忽略所有警告和错误消息.所以我想如果你留下无用的信息也没有那么糟糕;学生们只是忽略他们。这让我有点吃惊,因为当我观察的时候成人初学者学习编程这是第一次,他们更多地是在试图理解那些神秘的信息。也许孩子们对垃圾短信更“免疫”,没有那么大的欲望去理解他们在屏幕上看到的一切。开展一项研究,对比儿童和成人对这类电脑生成信息的看法,这将是一件很有趣的事情。
一般来说,为初学者创建更好的错误和警告消息是一个非常困难的问题,因为您需要一个健壮的模型来描述初学者常见的错误概念。例如,有一次我看到一个学生需要把两个变量相加,a和b,然后乘以2。那么他写了什么?
2 (a + b)
这就是数学上的写法。但是Python给出了什么错误呢?不,不是语法错误。代码实际运行,它尝试对2字面量进行函数调用,所以它给出"TypeError: 'int'对象不可调用" WTF?!?(Codecademy JavaScript显示“糟糕的调用”,这听起来像一个很酷的朋克专辑名,但不是一个有用的错误消息。)当然,正确答案是:
2 * (a + b)
但是一个刚上完数学课的学生怎么可能知道这些呢?2(a+b)在数学语法中看起来完全正确。
学生唯一注意的错误消息是针对每个问题定制的错误消息。学生们似乎理解并注意到这些错误,并迅速纠正他们的代码以消除它们。
我不知道问题创建者用于生成这些消息的确切接口,但我假设存在一些基于正则表达式或运行时值跟踪的模板。ast匹配的模板语言会更强大,但也更难设计和使用;另外,处理有语法错误的代码也很棘手。
不过,这些错误中更多的细微差别会有所帮助。例如,一个问题要求学生创建一个my_int变量并将其设置为7。正确答案是:
Var my_int = 7;
这名学生写道:
Var my_int = 3;
因为他喜欢3号胜过7号。然而,IDE用红色大字对他大喊,说他错了,错了,错了,错了,错了,他需要将my_int设置为7。他问我:“为什么我要把它设置为7?”他说得很有道理;7只是一个任意的数字,没有任何意义。他的代码是完全正确的;这并不是说他有语法错误或将my_int设置为字符串。出于所有的意图和目的,他理解了将变量设置为整数字面量的概念,但却受到了一条错误消息的惩罚,就像那些写垃圾的学生一样严重:
var my_int hl2n3laf89uao3nl2n3sd9f34l
毕竟,两个字符串都匹配"var my_int",所以系统大概会触发问题创建者指定的错误消息“如果学生声明了my_int但没有将其设置为7,那么打印'你需要将my_int设置为7'”。
我们如何为问题创建者提供更健壮的方法来指定自定义错误消息?
当学生们把注意力从问题陈述转移到现场编程环境时,他们似乎能学到最多的东西。例如,一些问题打印出明亮的颜色的文本使用变量,如:
Var orange = [40, 100, 60];
一些好奇的学生开始摆弄这些数字,看看它们会如何改变结果的颜色。其他学生想通过复制和粘贴现有的颜色变量并修改它来创建自己的颜色(粉色是常见的要求),比如:
Var粉色= [40,100,60];
学生们首先假设这些值是RGB(红、绿、蓝),因为它们是原色。但他们试图调整数字,发现它的行为不像RGB。事实上,这是另一种奇怪的编码方案。一名志愿者经过时喊道:“酷,这些值是RGB”,试图提供帮助,但他错了。学生们知道得更多,因为他们实际上玩过代码!
最后,学生们算出最后一个数字的范围是0到100,0代表黑,100代表白。然而,他们不知道如何正确地调整前两个数字,并感到沮丧。事实上,数据已经出来了HSV格式,这一点都不直观。但对于学生来说,尝试失败总比直接从老师那里得到答案要好(老师的假设很可能是错误的)。此外,实时编码环境在促进这种探索方面帮助很大。
让我印象深刻的是,学生们在修改代码时是多么无畏——毫不犹豫地调整、调优、添加和删除代码行。相比之下,成人初学者我8月份在一个类似的环境中教过的学生(如下图所示)在摆弄他们的代码时要犹豫得多,并且尽可能严格地按照指导去做。
造成这些差异的原因有以下几种:
我们如何将这种无畏的精神注入到来自更多不同人口结构的学习者中?
另一个显著的观察结果是,高级班的女生(以及其他人数不足的少数民族)是如此之少。中级班有相当数量的女孩和(非亚裔)少数民族学生;虽然我没有观察初级班,但那里肯定有更多的女生,因为学校的性别应该是平衡的,所有的学生都必须参加。
好吧,这个事实本身并不令人惊讶,因为有大量的研究是关于这个国家的男孩(尤其是白人和亚洲男孩)如何更积极和鼓励儿童早期接触电脑,所以很可能他们会有更多的编程经验。
但更有趣的是:我不认为高级班的许多男孩都有那么高的水平。一种假设是,男孩们夸大了他们之前的编程经验(例如,在一个显示他们用X语言编程的方框上打钩,尽管他们只短暂地看到过一次)。当然,也有一些异常值,他们是真正的高级,但在大多数情况下,中级和高级学生之间没有明显的区别。
我没有做过正式的研究,但女孩(和少数族裔学生)可能会下意识地自我选择自己的中级水平,而男孩(主要是白人和亚洲人)对调查中一些更高级的问题毫无顾虑地回答“是”。(一个半相关的趣闻:我认识的一些技术女性不会在她们的简历上声称她们会编程语言X,除非她们真的而男人只会说他们知道X,即使他们只是简单地用了一下。)社会科学家和教育研究人员都知道这种少数民族自我选择向下的现象,但亲眼看到它仍然令人震惊。
此外,请注意,这是一所排名靠前的私立学校,所以这里的学生在自我效能方面的得分应该比这个国家的大多数没有机会进入这样一所优秀学校的孩子要高得多。如果这里的女孩和代表性不足的少数民族可能低估了自己的能力,我无法想象这个国家的其他地方(更不用说世界上了)这个问题有多糟糕。在每个有潜力并热爱编程的人都有机会做到这一点之前,我们还有很长的路要走。
以下是一些有趣的观察:
对我来说,衡量成功的关键指标是,大多数学生在上课时间到了,不得不离开电脑的时候,仍在痴迷地编程。很少有学生在上课时间走神。大家的参与度都很高,这在很大程度上要归功于志愿者团队,他们帮助学生们在关键时刻摆脱困境。
愤世嫉俗的人可能会说,学生们并不是真正的“学习编程”——他们只是走过场,敲击键盘,遵循指示,让屏幕上出现颜色。当然,没有人能指望学生在一个小时的编程中深入学习或记住任何东西!但这个活动的目的只是让学生们对编程有一个初步的了解,并希望激励他们中的一些人继续前进。考虑到这些目标,我认为这是一个令人振奋的成功!
没有发现记录