我是如何成为一名少儿编程竞赛老师的

2018-10-23 09:49:33 浏览数 (1)

一、起缘

2017年9月,我以前一个同事问我能不能教他小孩Theo学习编程,因为以前在同一家公司时,我那同事经常带Theo去公司,我和Theo也认识,所以我答应了。

二、编程语言

那个时候Theo 8岁,英语很棒,口语和老外差不多;数学也还可以。我认为可以直接教他C语言。于是从C语言开始。

C语言学了两个月之后,基础就打下来了。Theo学得很好,多数知识都能很好地领会,当然我的教程也写得极为详细--对于8岁的小朋友,你不得不写得详细。

当时也碰到了不少困难,最困难的一次无疑是递归,递归是程序独有的思维,数学里面没有,跟日常生活的思维差别也很大。当时用的是汉诺塔的例子,我和Theo从晚9点开始学,一直学到12点多,学了三个多小时,Theo才搞懂递归的思维。后来Theo将递归掌握得炉火纯青后,数次感叹到:递归如此简单,当时我为何学了三个多小时,学到12点多才学明白呢?

C语言学完之后,自然是学C 。因为C 就是在C的基础上设计的,基本语法基本上是一样的,但是二者还是有根本的区别。把一些基本的知识点,比如继承、封装、多态、私有、保护、公有、构造函数、析构函数、this指针、内联函数、引用、模板、标准库讲完之后,就结束了。

考虑到Java长期霸占着全球编程语言排行榜的头把交椅。C 教完之后,就教Theo学习Java。

图(1) TIOBE 2018年9月编程语言排行榜.png

Java语言比C/C 简单。Theo有了C和C 的基础之后,学习Java自然就比较快。

关于主流编程语言的难度排行,我认为是这样的:

Assembly > C > C > Java ≈ Objective-C > PHP > Python

再接下来是学Python语言。计算机(信息学)会进入高考科目已是一个趋势,目前一些试点省份比如浙江、天津等,计算机课程使用的编程语言就是Python。Python语言比Java更简单,教完了Python语法之后,再教他编程实现计算器。计算器很简单,教Theo编写计算器主要是为了让他理解软件的开发过程。

图(2) 简易计算器.png

这四门编程语言学完之后,就不需要再学语言了。因为编程语言有成百上千种,没必要也没时间全部都学。把这四种最主流的语言学熟悉,以后即使碰见没见过的语言,两三个礼拜也可以学会。

按原本的计划,接下来想教他编写一些简单的游戏,比如扫雷、贪食蛇、俄罗斯方块,再教他做一个他的个人网站。

三、数据结构

后来我想数据结构更加重要。数据结构比较难,多少科班的大学生挂了数据结构。所以就决定暂时不教Theo编小游戏,先学数据结构。

起初我不确定能否教明白,毕竟一来数据结构较难,二来他才9岁(这个时候已经是2018年的春天了),只能是抱着尝试的心态。

之前的四门语言的教材,我都是自己编写的。数据结构我用的是比较适合入门的《大话数据结构》。考虑到《大话数据结构》虽然写的很清晰,但是小朋友不一定看得懂,我自己也写了一部分教程,主要是对《大话数据结构》进行进一步细化和补充。

让我惊喜的是,Theo能听得懂。

四、信息学奥赛

数据结构学了一小部分后,时间已经到了2018年4月底。我那同事提起是不是可以考虑让Theo走信息学奥林匹克竞赛的道路。

说来惭愧,我是那时才知道NOIP(全国青少年信息学奥林匹克联赛)和NOI(全国青少年信息学奥林匹克竞赛),具体请参考:https://www.jianshu.com/p/04bf0fa1b920

于是开始制定计划:

(1)数据结构一定要学好

(2)要做OJ题

(3)要做NOIP真题

当然,如果最初就规划好要走信息学奥赛的路,那么之前学的内容其实是过多了。Java可以先不用学,Python可以先不用学,计算器可以先不用做。这些可以等以后有时间了慢慢学。

但是没办法。人生,注定是一场不断走弯路的旅程。

到了这个国庆节,NOIP初赛已经迫在眉捷了。

数据结构学习的容包括了《大话数据结构》中的90%的内容:算法时间复杂度和空间复杂度、链表、栈、队列、字符串、二叉树、图、哈希表、8种排序方法、五种查找方法。暂时还没讲到的内容有:KMP、赫夫曼树、最短路径、拓补排序、平衡二叉树、多路查找树。这些内容NOIP不考,等NOIP竞赛结束后会继续教。

OJ题则做了181道,这个量其实太少了,至少要上千题的量才会有比较好的效果。

图(3) 做题记录.png

NOIP真题亦只能做几套,没把全部的真题做完也很遗憾。

五、辞职

我本人,大学毕业后一直做的是计算机方面的研发和管理工作,至今十余载。最初做iOS开发,后来做数据库,做Java后台,管理方面则当过技术经理、技术总监、副总裁和CTO。

今年主要是从事人工智能方面的研发。

信息学奥赛和人工智能都是算法方面的内容。但是两者既有很大的区别又有联系。信息学奥赛是考基础算法,而人工智能则是应用领域的算法。基础算法如果比较强,对人工智能算法或其他任何领域的算法都会有很大的帮助。

先前我一边上班一边带Theo小朋友学编程语言,感觉还是很轻松的。但是后来开始带小朋友学信息学奥赛的内容,加上上班研发人工智能,相当于是做了两份需要深度研究的工作,让我苦不堪言。

到了2018年9月初,我决定辞掉工作,暂停对人工智能的研究,先专心带小朋友学习信奥,。

以我目前的算法积累,教小朋友学习NOIP普及组的内容感觉绰绰有余。但是后面还有NOIP提高组、NOI、IOI(国际信息学奥林匹克竞赛),最终的目标是希望小朋友能拿到IOI金牌。所以我自己也要经常参加在线算法比赛以不断提升自己的算法水平

至于人工智能算法,也是一个有趣且有用的方向,但只能等我在NOI方面的能力提高了之后才能继续研究,这估计至少是一年之后的事情了。

六、最后

是的,你没有看错,我走上辅导小朋友参加信息学奥林匹克竞赛这条路,不是当初职业规划的结果,而是偶然的结果。

这跟因特网的产生一样,因特网当初也不是精心规划的结果,而是偶然的结果(这是某年NOIP的考题哈)。

0 人点赞