聊聊少儿编程之如何准备NOC编程赛

如何辅导小孩子参加 NOC 编程比赛?

话说5月18号皮皮参加 NOC AI 创新编程赛复赛,大约半个月后我们开始留意复赛结果。我们每天会在微信上查一次结果,一连查了一周也没见任何动静,原本的兴奋与期待一天天没了,到后来也懒得查。本周二晚上,学校老师给我们发来好消息:皮皮复赛拿了一等奖,晋级全国决赛!

NOC AI 创新编程赛决赛大概会在7月份,所以皮皮又要开始准备了。

我是家里的兼职编程老师。在上一篇聊聊少儿编程——在家学,行不行?我讨论了少儿编程如何启蒙以及启蒙过程中父母可以做些什么。

在这一篇中,我主要聊聊如何准备 NOC 编程赛,内容包括比赛规则以及槽点、如何辅导小孩比赛以及一些赛后感想。

了解 NOC 比赛

一开始,我们并没有想过皮皮在这次编程比赛中能走得很远。我们只知他是参加一个图形化编程比赛,至于更多的细节,了解并不多。考虑到还要继续复赛,所以最近我在了解赛事规则上做了一些功课。对于有意让小孩参赛的家长,了解比赛规则非常重要,可以避免不必要的失误。当然,在网上查资料过程中也了解到对 NOC 的一些吐槽和负面反馈。

简介及比赛规则

NOC 全称是全国中小学信息技术创新与实践大赛。NOC 是Novelty, Originality, Creativity (创新、创意、创造)的缩写。NOC 大赛是44项教育部白名单比赛之一。从这一点来讲,NOC 是比较权威的比赛。

NOC 大赛分四个不同的赛道,包括机器人赛道、设计赛道、人工智能赛道和编程赛道。每个赛道下面又细分成不同的赛项。以编程赛道为例,包括 AI 创新编程、编程马拉松、Coding 创意编程等10个不同的赛项。皮皮参加的是编程赛道的 AI 创新编程赛。

AI 创新编程赛初赛是客观题,复赛是编程操作题,决赛是主题作品创作。

AI 创新编程赛使用图形化编程语言或 Python 编程语言比赛。

几个重要的链接汇总如下,关键的官方信息可以从这些地方找到:

关于比赛的吐槽

这里的吐槽或来自网上,或来自我自己的感受。

首先是太多编程赛项的问题。如果说不同的赛道好理解的话,10个各不相同但名字又有些像的编程赛项叫人有些傻傻分不清。

其实,换种说法会更容易理解:NOC 大赛编程赛道中的10个不同的编程赛项分别是由10家不同的少儿编程机构来支持,见下表。

所以赛项名字只不过是个代号,不必特别纠结其含义。一开始听说皮皮要参加 AI 创新编程赛时,我对为什么叫 AI 赛很是疑惑。后来才明白原来 AI 在这里只是个名头,有点唬人的嫌疑。

第二个问题是公平性问题。所有编程赛项的支持单位都是商业公司,有自己的少儿编程培训班,有自己的编程平台和比赛平台,那没报编程班的选手还有得玩吗?所以比赛的公平性是个容易被置疑也容易引起争议的地方。白名单赛事noc又被举报了!第二年了? 提到有人举报某个赛项比赛中用到支持单位修改过的第三方 Python 库的问题,这就明显对没报班的选手有失公平。

皮皮这次参加的 AI 创新编程赛,我倒没发现明显的公平性问题。支持单位在赛前宣传时有介绍他们收费的赛前辅导,家长可自愿报名参加。赛前收费辅导这个情况,我表示能理解,毕竟卖教育类的服务和卖教育类的商品本质上没什么不同。AI 创新编程赛练习平台对所有人免费开放,可以随时练习。而且考试中的比赛平台和练习平台是完全一致,所以不存在对没报编程班的选手的比赛歧视。

(更正:6月17号 “Steam编程大赛” 公众号有推送比赛结果) 最后要吐槽的是参赛体验问题,这个是我的主观感受。NOC 好歹是个全国性的比赛,居然没有比赛结果推送,实在有点说不过去。NOC 赛程非常长,从比赛到出结果超过20天。家长们要记得经常去网上查成绩,不能说有多辛苦,但体验非常糟糕。

说个另外一个哭笑不得的事情。我们一直没有查到复赛成绩,也就懒得查,结果学校老师通知我们皮皮获奖了。最近我们才发现复赛这底下不知什么时候挂上了一个小小的链接,我们可以很辛苦地从这份 PDF 文件里长长的获奖名单中找到皮皮。

然而,至今我们依然没法从网站”证书”入口找到对应的晋级信息。拿高考打个比方,那就是大学的录取名单上有你,但他们忘了给你发录取通知书。

准备 NOC 比赛

注意,以下说的 NOC 比赛特指 NOC 大赛 AI 创新编程赛。

提前熟悉源码编辑器(Kitten)是非常必要的。这一点上,编程猫的学员会比较有优势,非学员则要花一些时间。最好的练习方式是让孩子参照着书本或资料中的例子,自己动手在 Kitten 实现一遍。这个动手实践过程基本能覆盖到全部基础模块/积木。网上能找到的最好的免费的 Kitten 资料是源码编辑器中的”源码公开课”、”示例程序”和”源码图鉴”,耐心地过一遍收获会很大,记得要边看边动手操作。

图书馆很难找到 Kitten 编程书,但能借到很多 Scratch 编程书。所以另一种练习方式是:在 Scratch 中照着编程书多抄几个例子,熟悉各个基础模块/积木。考虑到 Scratch 和 Kitten 两者是相通的,熟悉 Scratch 之后上手 Kitten 会非常快。

第二个重要事项是真题和模拟题练习。从 “NOC大赛”和”Steam编程大赛”等公众号可以找到往年的真题以及模拟题。皮皮很认真地把NOC大赛-软件创意编程复赛—小学低年级组里面找到的真题以及老师提供的题目都做了一遍,

复赛题目包括图形绘制、角色交互、数字计算等几大类,典型的例如:

  • 图形绘制类。画出数字 8,颜色随机、大小不限,要求看到绘制过程
  • 角色交互类。小猫用球打掉飘动的气球,当一个气球被打中 3 次,从舞台上消失
  • 数字计算类。输入一个数字,判断是否是回文数

这些题目难易程度不一,但对选手的基本要求就是:掌握了基本的编程概念,语文阅读理解过关、能正确读懂题意,熟悉 Kitten 模块用法。

第三件事是关于动手实践的一些指导。对小孩子而言,如何找出自己程序的 bug 并修复是一个非常大的挑战。皮皮在练习过程中,常因为粗心而出错。如果是数学作业或语文作业因粗心而出错,自己很可能没法发现,所以错了就错了,犯错之时绝不会有很大困扰。但编程时因粗心而出错,Kitten 会很不客气地指出来”你错了!”,你不能装作你没错。比如做上面的回文数那道题目时,皮皮的代码有 bug,无论输入什么数字,可恶的小猫都说是回文数。皮皮怎么也想不明白哪里错了。

小孩子需要了解并多多练习以下几个简单的技巧来提升动手实践能力。

首先,要有意识地降低代码的复杂性。具体来说包括:变量的名字要见名知义,一定不能取有误导性的名字;一个变量只有一个用处,不要同时拿来干两件事情;合理地使用函数,把复杂的任务拆解成更简单的任务。

其次,是需要有初步的调试意识。在 Kitten 这个调试能力很弱的环境下,一个简单但有效的办法是将重要的变量展示出来,如下图所示。有了变量展示,皮皮很快就能找到有用的错误线索,排查 bug 也就轻松很多。

还要有初步的测试意识。小孩子好不容易完成一道编程题,偶尔因为太激动,只记得用正常数据测试,而忘记用异常数据测试。忘记用异常数据测试有时产生严重后果。比如,皮皮判断回文数的代码有 bug,它认为所有的数都是回文数。如果只用 12321 这样的数来测试的话,他会误以为自己的代码是正常的。

练习过程中,我反复跟皮皮强调用异常数据测试的重要性。皮皮完成复赛后跟我讲,每道题都用对的/正常的数据和错的/异常的数据验证过。这让我对他的比赛相当有信心。

编程比赛也是一种考试。既然是考试,常规的应试技巧也得用上,比如:

  • 做不出的选择题可以蒙。不过这个技巧初赛才用得上,复赛全是操作题
  • 不要被难题一直卡住,可以先跳过做不出来的题
  • 全部题目做完并且检查后要尽快交卷,不要拖延。因为比赛规则是同等成绩时,用时少的选手获胜

这个比赛是线上赛,所以另外两个必要的注意事项是:

  • 比赛前一天做设备调试,确保设备正常
  • 比赛当天一定记得支开家中可能会吵闹的小朋友。皮皮妈妈在比赛前半小时就把调皮的妹妹带出门了,免得妹妹在皮皮比赛中途去找他玩

赛后感想

对小孩子来说编程很有趣,但有时也有困难。练习比赛真题和模拟题过程中,皮皮也有被难哭的时候。好在他不轻易放弃,第二天自己又开开心心主动地练习。

除了需要坚持和执着,准备比赛过程也是一个非常考验思维能力和动手能力的过程。如何将问题由文字描述抽象成对应的代码逻辑,又如何保证代码逻辑能良好运行,怎样去运用调试技能和测试技能,都是对小孩子心智上的极大考验与锻炼。

皮皮这次小小的成功还有另一个小小的收获:他可以在学校国旗台下领奖。为此他开心了很久,小小的虚荣心很是满足。

我自己当然成就感满满。我从来没想过当老师,但目前看来,我是个相当不错的家庭辅导老师,辅导少儿编程是把好手。

当然,我也思考了自己的心态变化。初赛时,我是佛系且淡定。我知趣地认为我们是免费玩家,不过来陪跑一下而已。但等待复赛结果过程中,我是充满期待和在意输赢的,这完全不同于初赛时的淡定。或许我变得有些功利心。

今天我翻自己的朋友圈,2022年2月开始我就带着皮皮在 code.org 上玩编程游戏。那时,没人会跟我们比赛,也没人会给我们发奖,只有简单的代码和简单的快乐。

接下皮皮还会继续学习编程,我也还会继续辅导。我会提醒自己不忘初心避免功利。比赛是一次能力检测,取得好的成绩是对我们的肯定。但反过来不成立。不能认为拿不到成绩是对我们的否定,也不意味着我们就此要停止努力。毕竟,努力不一定有回报,但机会永远是留给有准备的人,这道理在小孩子身上同样成立。