首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我是如何成为一名少儿编程竞赛老师的

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

作者头像
海天一树
发布2018-10-23 09:49:33
1.3K0
发布2018-10-23 09:49:33
举报
文章被收录于专栏:海天一树海天一树

一、起缘

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的考题哈)。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 KidsCode少儿编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档