图:儿子在学习的用 Python 进行人工智能编程的微型学位课程中使用 Jupyter notebook
2016 年 12 月,我写了一篇关于教 10 岁的儿子编程经历的文章[1]。 一年半之后,他的编程之旅仍在继续,且伴随着许多起伏和曲折的剧情。
“爸爸……我很无聊!”
身为家长或老师,我们可能经常听孩子这样抱怨。 与大多数人一样,儿童的注意力很短暂,所以往往对新玩具、游戏或活动高度感兴趣一段时间后,就会失去兴趣。 一旦新奇劲儿消失,他们便会感到无聊,继而寻找新的东西。这实际上听起来与前端 Web 开发人员很类似?。
我的儿子也不例外。
2016 年底,在我发布了第一篇文章以后,我儿子对编程的热情便很快消退了。到 2017 年初时,他进入了学习 Web 开发的艰难期。
如果你不了解 Web 开发对于初学者有多吓人的话,请打开 freeCodeCamp 的课程(CSDN 编者注:国外在线学习编程网站),然后看下预计完成时间(300 个小时),而且这仅仅是前端 Web 开发哦!这就像你爬到山顶却发现自己站在另一座山的山脚下。
对一个 11 岁的孩子来说,面对这种情况并不是很有动力。
你可能在想……“我为什么让他从 Web 开发开始学呢?”
在简单介绍了 Scratch(CSDN 编者注:MIT 设计开发的少儿编程工具)和 Python 之后,我最终选择了 JavaScript 和 HTML,因为我是一名 Web 开发者,这是我所擅长的领域。当时我就想,“还有什么比 24 小时贴身老师更好的呢?”事实证明,还是有很多的。
1 Web 开发对孩子来说并不是很好
事后看来,我认为 Web 开发对于孩子过渡到基于文本的编程不是一个很理想的起点。孩子天生在逆向工程方面很出色,但是现代的 Web 开发中,看到一个你喜欢的网站,然后照样建一个比看起来困难得多。从头开始复制现代网站需要很多 JavaScript 和 HTML 之外的技能,包括 CSS、JS 框架、开发工具、数据库、服务器端语言等等。
现代 Web 开发的复杂性对初学者来说太难了,更不用说对一个年仅 11 岁且时间有限的孩子了。总有一些东西需要不断学习,很难跟得上。
2 那么,我是如何参与的
“学习编程”不应该感觉像一份工作。我从不强迫孩子编程。我是一名有工作的家长,没兴趣管理一家编程学校。对于尽情玩耍、读书、学校的作业,或有时什么也不做(孩子嘛,偶尔什么也不做也是可以的)来说,学习编程永远是次要的。
学习编程需要一种内在的动力,否则就无法坚持下去。这个过程中,我的角色已经发展成了管理、教导和鼓励。
3 一个新的机会
到 2017 年 1 月的时候,我儿子的学习编程之路止步了。在学习了大量的 HTML 并学习了 JavaScript 之旅第三部分之后,似乎前途茫茫永无止境。他放弃了编程,跑去读小说了——特别是 Rick Riordan 系列丛书。对我来说,这也不错。
直到 2017 年 7 月,在一次偶然的关于棒球统计的讨论中,事情又出现了转机……
“击打率是多少?”他问道。
“命中次数数除以击打次数。”
“什么意思?”
我的儿子不玩也不看棒球,但他喜欢篮球。所以我开始用篮球做例子解释……
“这与篮球投篮命中率相似,总命中次数除以总投篮次数。这是对球员投篮能力的简单衡量。”
我看到事情出现了转机,我想,“也许我们可以干点什么。”
接下来几个星期里,但凡遇到统计数据的例子我就会指出来,同时观察我儿子是否感兴趣。电视广告、YouTube 广告、广告牌、图书等等,统计无处不在!我扮演着鼓励儿子的角色,并最终买下了《漫画解读统计学》(Cartoon Introduction to Statistics,作者:Grady Klein / Alan Dabney),也因此激发了我儿子的学习兴趣。
2017 年 8 月左右,我儿子读完了这本书,我开始寻找下一个学习资源。
作为孩子自发学习的倡导者,我需要谨慎地管理学习内容。无论学什么网上都有海量的学习资源。我们需要做的是找到适合自己的孩子学习风格的优质资源。我建议你首先自己试试看这些材料(观看一些视频课程,阅读几章书),从而避免选择的东西过于枯燥、过快、过慢或制作不佳。不良的学习材料可能会对孩子对整个主题的看法产生负面影响。所以一定要明智地选择。
4 回到 Python
2016 年 12 月,数据科学是科技媒体中的热门话题,而且作为 Web 开发我想扩展一下自己的知识,于是加入了一个专门学习数据科学、R、Python 的网站。我浏览了一些课程,和我的儿子聊起了这点。
“还记得 Python 吗?”我问他。
“记得一点,”他脸上带着多疑的表情回答道。
“你知道世界各地的统计学家,甚至 Google(我不得不提到 Google)的数据和统计科学家都在用 Python 吗?而且你不需要再敲括号和分号。你想试试看吗?”我问道。
“不学 JavaScript 了?”他问道。
“暂时不学了。”我回答说。
“好的。”他答应了。
于是,我儿子从 2017 年 8 月开始参加了 Python 数据科学入门的课程,并取得了很大进展(主要是在周末学习几个小时)。
一个月后,他完成了第一门课程。在课程结束时,我儿子已经掌握了 Python 的语法、列表、函数、包和 NumPy。
5 再攀高峰
随后,儿子继续开始学习中级 Python 数据科学,但是在 10 月的时候中断了,他很少登录学习,并最终放弃了。
我只好介入了……
“课程怎么样了?你遇到什么困难了吗?“我问道。
“我很喜欢,但我真的不知道如何使用。”
儿子如是说。
6 编程的上下文环境
我们俩进行了很长一段谈话,但是主要内容是“怎样(How)”。我经常注意到孩子学编程的一个问题是:缺乏上下文环境。
学习编程结构和算法没问题,但是孩子无法领会抽象概念,除非与他们现实世界的某些东西相关联。
Scratch 之所以在孩子中间这么流行,不仅是因为它用“连接块”形象地比喻了编程语句,而是因为它的设计仅仅围绕创建和共享故事、游戏以及动画。这很有趣,而且目的明确:即为孩子们带来双赢。
从 Scratch 过渡到基于文本的编程时,最难的障碍之一就是丧失了这种背景。你无法再为社区创建有趣的东西,你在纯文本、代码编辑器和“Hello World!”世界里写自己的代码。
这是一个很大的转变。
所以,我儿子真正的问题是:“这对我有什么用?Python 怎样才能赋予我超级力量?”
7 寻找新的机遇
我需要一些可以激起儿子好奇心的东西。 一种可以让他回到编程之旅的方法。
人工智能和机器学习在 2017 年主导了科技媒体,我跟儿子分享了许多那一年的有趣的新闻。他对大部分并不感兴趣(孩子们似乎不喜欢读邮件?),但是根据与学校的来回讨论,以下是一些他觉得有意思的故事:
人工智能通过观看别人玩游戏,学会了重建超级玛丽兄弟[2]
人工智能演讲生成器可以假冒任何人的声音[3]
新型人工智能可以写出跟人类作曲家一样好的音乐[4]
日本的人工智能写了一部短篇小说,差一点获得了文学大奖[5]
发现问题了吗?
所有上述故事都是机器学习代码完成人类工作的例子。它们赋予了我们超级力量!
“如果你能写一个程序来帮助你做作业,所有那些阅读摘要和日记,怎么样?”我说。
“真的吗?怎么做?”儿子的脸上闪着亮光。
“你可以用 Python 学习人工智能和机器学习。”
8 孩子真的可以理解机器学习吗?
坦白来说,很少有为孩子设计的机器学习。孩子喜欢钻研事物,但是真正了解机器学习需要很多数学和统计学方面的前提知识。
作为一名 Web 开发者,我的线性代数和统计学知识都有点生疏了,这让我很难规划内容并提出有趣的代码来做比喻。所以我潜心研究了几周,尽可能地学习机器学习方面的基础知识。
机器学习方面的资源量非常庞大:视频、博客、数据、研讨会、课程等等。经过一些测试后,基于结构化的学习和好的实践环境(在开始像机器学习这样大型的主题的时候,这尤为重要)的考虑。在对主流在线学习网站的课程进行了最后的审查之后,我选择了其中具有高度针对性的微型学位,并明确定义了前提条件,而且还未深度学习微型学位设定了长期目标的一个,因为知道儿子在开始这门课程之前可能需要几年的准备时间。
9 重中之重……回到统计
深度学习的微型学位的课程甚至超过了我的水平(更别说我儿子了),所以我利用前提条件和要求建立了一个课程地图。这是第一个周期:
图:机器学习课程地图的第一个周期
因为儿子完成了 Python 数据科学的入门课程,所以达成了对 Python 的要求。他立即开始了统计课程。
10 一个重要的里程碑
我儿子真的很喜欢统计。 2017 年 9 月他完成了网站提供的描述性统计课程,并开始了推理统计学课程。
这是一个重要的时刻。这是第一次,他独自闯入了一个超出我的水平的学科领域。我在大学里只上过一门统计学的课程,而且那都是很多年前的事儿了。我无法再立即回答他的问题,它必须自己寻求答案。这一刻,我这个编程老师的角色彻底淡出了。
正如我所料,儿子与这些课程爱得痴缠,他很努力的学习,比我预期的还要努力。2018 年 1 月,他完成了推理统计课大约三分之二的课程。然后,他心满意足地暂停休息了一下,一直到 2018 年 4 月。
11 一个新的机会
2018 年 4 月,我看到了新一期的用 Python 进行人工智能编程的微型学位课程。此时距离我儿子编程已经有几个月了,这个课程对他来说是一个很好的回顾 Python(NumPy、Pandas、Matplotlib)概念的方式,课程还需要一些额外的机器学习的知识的条件(线性代数和神经网络)。而且想到可以拿到结业证书的时候,我儿子也非常积极,于是我们那天就注册学习该课程了。
图:2018 年 6 月重写编写的课程地图,并更新了进度
12 接受现实
但是,因为课程和实验非常严格,儿子很快就落后于推荐的完成期限了。因为原则上每周需要花费 10 小时才能按时完成课程,所以我并不感到惊讶,但我不想遏制儿子的热情。由于学习量非常大,儿子一整学年每周都需要花费 2-4 小时学习。
13 现实的期望
对于那些刚开始向孩子介绍编程的父母,请将其视为附加的课外活动。编程不应优先于其他活动,如学校作业、自由玩耍或安安静静做小朋友。编程有点抽象,而且并不总是那么有趣,但从长远看来非常有益。
就个人而言,我儿子愿意学习编程让我感觉很自豪。我并没有期望他会很快就会成为超级明星程序员。我希望他能够建立新的心理模型,帮助他从不同角度来处理将来的问题。
我们这代人大多是在命令式编程的世界里长大的,解决问题时需要按顺序定义每个步骤。孩子的世界是不同的。无处不在的人工智能和机器学习能够让计算机根据适当的数据和算法定义这些步骤。希望我儿子能为此做好准备。
14 前方的路
对于那些感兴趣的人,我计划在大约六个月内再发表一篇文章,总结我儿子的最新进展和问题。谁知道呢,也许届时他已经转战其他新东西了……如今的孩子们啊。
我还计划写一写教我的小女儿写代码(6 岁和 9 岁)的经历。我的大女儿目前在玩 Scratch,是 Scratch 年轻一代中最小的一个。
参考资源:
[1] https://hackernoon.com/how-my-10-year-old-learned-javascript-d8782b586db7
[2] https://www.theverge.com/2017/9/10/16276528/ai-video-games-game-engine
[3] https://gizmodo.com/this-artificially-intelligent-speech-generator-can-fake-1794839913
[4] https://futurism.com/a-new-ai-can-write-music-as-well-as-a-human-composer/
[5] https://www.digitaltrends.com/cool-tech/japanese-ai-writes-novel-passes-first-round-nationanl-literary-prize/
本文转自微信公众号“CSDN”,英文:Why My 11-Year Old Stopped Coding . . . Then Switched to Python;作者:Rich Klein,Web 开发,作家,兴趣包括全栈 Web 开发、Laravel、JavaScript、Vue.js 和机器学习;译者:弯月,审校:沭七。原文链接。
文章为作者独立观点,不代表芥末堆立场。
2、芥末堆不接受通过公关费、车马费等任何形式发布失实文章,只呈现有价值的内容给读者;
3、如果你也从事教育,并希望被芥末堆报道,请您 填写信息告诉我们。