美文网首页程序员
关于孩子学编程,你一定要知道的真相

关于孩子学编程,你一定要知道的真相

作者: Zoey2016 | 来源:发表于2017-07-31 01:06 被阅读1393次

    随着计算机就业市场持续火爆,和STEAM相关的教育产品越发炙手可热,我经常遇到朋友询问孩子该学什么编程语言,并让推荐靠谱编程兴趣班。

    我计算机科班出身,97年毕业后在IT行业里打拼,2004年起一直在加拿大高中教计算机编程和机器人设计,教过成百上千计的学生,所以也勉强算得上是行内人士。我不反对孩子从小学编程,只是对孩子从小学编程的效果持保留看法。

    本文从一线编程老师的视角,基于儿童认知发展心理学理论,结合教学实践中的观察和思考,陈述了一些关于孩子学编程的客观事实,希望能对想让孩子学编程的家长有所启示。

    1. 从小学过编程的孩子,长大系统学编程时,跟同龄人比,没有明显优势


    在从小学编程的孩子中有两类,一类是强烈的兴趣驱使,自发的深入钻研下去;还有一类是受父母影响,从小开始在兴趣班学习编程。

    比尔盖茨和伊隆马斯克属于前者, 两人都是不可世出的天才,普通人不具有可比性。

    我所接触的从小学编程的孩子,大都属于后者。 在教学实践中,我发现这些孩子因为学过所以一开始入门要比其他孩子快,但是随着内容深入,尤其当学到条件循环,一维数组,他们的表现和其他第一次接触编程的孩子基本没有区分度。 而且这类孩子当中,有些还会存在这样一个问题:先入为主靠机械模仿形成的思维定势,很难纠正。

    比如说,教过一个从三年级开始就用乐高编程的孩子,写条件循环的时候总是不假思索的上来就先写一个无限循环 while(1==1),然后在循环体里再用if语句判断循环终止条件,通过break终止循环执行。而对于课堂上反复强调的通过设置变量初始条件,然后合理选择条件来控制循环的模式,置若罔闻。

    超前学习的孩子,如果学的时候深入钻研,彻底学透的话倒还好;最怕的当时学的一知半解,似懂非懂。而当按照正常进度在学校系统学习同样的知识的时候,很难沉下心再去学,总是觉得自己已经会了,直接去做题。而做练习的时候,因为当初并没有完全理解,不可避免的出现用编程定势去生搬硬套的现象。

    年复一年,这样的现象每年都在教室里重演。

    万物生长皆有时,人的认知也是一个循序渐进的过程,不遵守自然规律的拔苗助长,非但培养不出孩子在学科(比如数学,编程)上的优势,还扼杀了孩子自发的探索未知的兴趣和好奇心。

    2. 编程不是童子功,并非越早学越好


    有些技能比如乐器,靠的是肌肉记忆和听觉记忆,从小开始学比长大之后再学能培养出更好的手指运动机能、手指独立性、柔韧性以及控制能力;同时听力音感也是需要从小训练,大了之后,很多音耳朵就再也区别不出来了。

    但是编程不是,表面上看,编程是学习一门编程语言,内里培养的是其实是孩子认识问题和解决问题的思维方式,而这种思维方式可以跨界应用到其他领域的学习和实践中, 这种思维方式即为编程思维。

    编程思维简单来说,就是能够把现实生活中的复杂问题,逐步拆分成可理解的小问题,(Decomposition拆分),接着根据已有的知识和经验,找出新问题和以前解决过的问题的相似性,举一反三琢磨出规律(Pattern Recognition模式识别),然后将问题里涉及的数据抽象(Abstraction)到数据结构(变量,数组,链表等等),把数据处理过程可重复执行部分抽象(Abstraction)成函数模块,通过循环执行,最后根据前三步的分析成果,设计步骤,写出算法(Algorithms),从而解决问题。(如果有兴趣了解编程思维,可以参考我去年写过一篇关于编程思维的文章)

    由此不难看出,培养编程思维的前提条件是有扎实的数学知识,尤其是代数基础和抽象思维能力。根据儿童认知心理学鼻祖Jean Piaget的理论,孩子的抽象思维能力的形成是在11岁到16岁之间,而代数学习按正常的教学进度也是在初中以后。所以如果孩子数学基础没打牢,抽象思维还没有建立起来,谈编程思维无疑是空中楼阁。

    在安大略省正式编程课到10年级才开设,即便对于15,6岁的孩子来说,编程这门课学的也绝不轻松。 

    而在大学录取这块儿,包括滑铁卢在内的计算机专业都不要求学生在高中任何编程经验。我曾经专门跟滑铁卢大学计算机系本科教学老师Sandy Graham专门请教过,Sandy在多年教学实践也发现,在滑铁卢本科生中,中学上过编程课和以前从没有接触过编程的孩子相比,并没有明显优势。相形之下,倒是数学好的孩子后劲更足。

    Geoffrey Hinton,当今机器学习领域当之无愧的教父级人物,也是持同样的观点。十年前,人工智能远没有今天的热度,Hinton因为女儿在我班上,他主动联系过来给学生们讲讲机器学习研究和进展,希望能够激励更多孩子投身于机器学习领域。感谢他热心之余,我连忙跟他确认来参加讲座的学生是否需要有计算机方面的背景知识,是不是该至少学过AP计算机。得到的回复是:不需要,只需要数学,最好能了解微积分就可以了。

    综上所述,编程不是童子功,什么时候学都可以。如果想将来在计算机领域有长足发展,学好数学是王道。

    3. 即便如此,还是想让孩子学编程,那该怎么办?


    未来十年,几乎没有领域离得开编程,深入掌握编程这门技术,确实能让孩子将来面临升学或就业时有更多选择。

    我的一个学生菲,申请今年暑假在哈佛医学院实习的职位,跟她同时竞争这个职位的有哈佛本科和研究生,但是最后她脱颖而出。原因除了她11年级暑假给西雅图的一个机构做过类似的医学统计工作之外,面试官看重就是她的编程背景,从9年级开始学编程直到修完AP计算机课,其间还参加过不少编程竞赛。

    菲上高中前,根本没有想过要学编程。 9年级学校把计算机作为必修课,她才第一次接触编程,编程环境是卡耐基梅隆大学的设计Alice(www.alice.org), 有别于传统的文本编译器的一款3D图形界面的免费编程教学软件。Alice编程体验是,首先建立自己个性化虚拟世界,然后往里添加和摆放各种人物或动物以及物品3D模型,学生可以写的程序既可以控制这些模型生成动画,也可以是让用户通过鼠标和键盘来和这些模型互动的3D游戏。因为Alice, 菲喜欢上了编程,从此一发不可收拾,一路修到AP计算机。 

    跟学习其他任何技能一样,教编程与其说是教技能,还不如说是激发起孩子对编程的内在兴趣,然后不畏艰难,一路深入钻研下去。

    菲对编程第一次触电是9年级,无论是抽象思维还是数学基础,都已经具备了。而对于低龄孩子来说,无论是Alice,Scratch,还是乐高或是VEX,从培养兴趣来说都是好的工具,但是不要对从中学到的东西能够有效的转化为实用的编程技巧抱太大期望,因为这个年龄段的孩子大多还理解不了编程的实质

    等到孩子认知水平能够系统学编程的时候,如果所在学校不提供编程课,想送孩子学编程的话,一定找到好的老师,不然还不如不学。

    我前两年教过一个学生,父母都是计算机领域里著名专家,父亲当时还担任大学计算机系的系主任。他们为孩子选课的事情,先先后后找过我两次。因为他们之前没有让孩子接触过编程,所以对于入门课这块儿非常慎重。他们详细询问了课程的内容和我的教学方法,跟我探讨了编程思维和以及在教学实践如何培养编程思维。父亲尤其关注每一个单元结束后的project,因为学习编程关键不在于老师在课堂上讲多少,而是在于学生在做Project的过程中理解,消化,整合知识点。而好的project需要难度适当能够巧妙的融会贯通所有知识点,而且会让孩子做完之后非常有成就感,从而更加激发学习兴趣。

    教了这么多年学生,这样认真的父母,我还是第一次遇到。我不认为这种做法是挑剔,因为懂行,所以谨慎。

    最后,由衷希望每个学编程的孩子,收获技能之外,能培养出有效解决问题的编程思维,最重要的是从中发掘出自己的兴趣,深入钻研下去。正如伽利略所说:

    You cannot teach a man anything; you can only help him discover it in himself.” ~Galileo Galilei

    相关文章

      网友评论

        本文标题:关于孩子学编程,你一定要知道的真相

        本文链接:https://www.haomeiwen.com/subject/zjdjpttx.html