当前位置: 首页 >同业新闻 >一位程序员爸爸的“大白话”:几岁开始学编程比较好,怎么上手?

一位程序员爸爸的“大白话”:几岁开始学编程比较好,怎么上手?

2020-11-16 02:53:27

世界即将走向人工智能的时代,小朋友的学习,自然也要与时俱进;感谢这位程序员爸爸分享,让我们共同努力,走在时代前列!




学编程现在似乎挺热门的,特别是大家最近被WWDC(苹果开发者大会)的最小开发者刷了屏。


参加WWDC的最小开发者,9岁的澳洲小女孩Anvitha Vijay


还记得我小时候,,老师说大家都应该学会计算机,否则就是新时代的文盲。


说实话,这个说法现在应验了,因为不会用计算机真的没办法工作。


那么不会编程,会不会成为一个新时代的文盲呢?


这我不好说,我只能说编程的意义并不仅限于编程本身,而且作为一个热爱编程的,也在靠写代码混口饭吃的爸爸,我觉得让孩子学学编程挺有意义的。


我现在是一个准全职爸爸,在家带两个娃,在此之前从事软件开发、技术和管理咨询方面的工作,也翻译出版了不少计算机技术方面的书籍。


我自己很早就接触了编程,大概是6岁的时候,我表哥家里有一台“中华学习机”,那是一台国产的Apple II 兼容计算机。



它可以编写和运行BASIC程序,有趣的是,它的数据只能用声音信号存储在磁带上,每次保存程序就按录音机的录音键,读取程序就按录音机的播放键,那个仪式感特别神圣。


那时候我在学习机上写了很多小程序,比如跟计算机猜拳的程序、比大小的程序、算日期的程序等等。


上小学之后,表哥家里有了一台486的PC机,于是可以用更强大的QBASIC编写更复杂的程序。



上初中之后,自己家里也买了电脑,就开始用Visual Basic写Windows软件,还参加过NOI(国家信息学奥赛)。


这些经历在我的同龄人当中都算是比较稀有的,但也正因为如此,遇到问题我也找不到什么人去请教,上高中之后忙于学业,没有能深入钻研数据结构和算法,算是个不小的遗憾吧。


但是我还是走上了程序员的职业之路。因为热爱编程,又在当爸爸,所以一直在参与讨论“孩子学编程”这个话题,这方面,我陆陆续续做过一些分享,在这里我整理几个遇到的常见问题,用问答的形式写一写自己的体会,希望能有更多家长对儿童编程启蒙有个基本了解。


1、编程能培养孩子的哪些能力?


编程是一件很有趣的事情,我觉得主要能培养五个方面的能力:策划构思能力、逻辑分析能力、模式识别能力、问题分解能力、测试纠错能力。这些重要的思维能力,不光在编程上很重要,也适用于各行各业。



1
构思能力



编程是一种“先写剧本,后看结果”的活动,这要求孩子先在脑子里进行构思并模拟出结果,然后再实际验证结果是不是符合预期。


这是一个“异步”的过程,对于这种“都得事先想好”的方式,孩子一开始是不适应的,因为这违背他们的直觉。


我见过很多父母给孩子买“迷宫书”,其实走迷宫也包含这个要素,有的孩子会先在脑子里走一遍,然后一次性下笔把路线画出来,这就是一种构思和模拟能力的体现。




2
逻辑能力



编程需要考虑到各种情况,根据不同的情况作出不同的选择(分支),而且各个分支之间不能重复,也要避免遗漏某一种可能性造成程序的异常行为。


在逻辑思维中有个词叫做MECE(Mutually Exclusive and Collectively Exhaustive),意思就是“相互排斥且整体完备”,也就是“不重复,不遗漏”。这是逻辑思维中的一个重要原则。



举个例子,交通信号灯有红、黄、绿三种状态,如果你在写程序的时候只考虑了红灯和绿灯的情况,没考虑黄灯的情况,那就不“完备”了。


此外,条件还会涉及到“与”、“或”、“非”等逻辑操作,比如说,“当信号灯为红色或黄色时”和“当信号灯不是绿色时”这两个描述应该是等价的,这对于孩子来说都是非常好的逻辑训练。




3
模式识别能力



在编程中,我们经常需要发现一些“可以重复”的单元,然后让计算机去重复它。


举个简单的例子,计算(1+5)×4相当于(1+5)+(1+5)+(1+5)+(1+5),其中每一个(1+5)就是一个可重复的单元,或者说是一种模式(pattern)。


在解决实际问题时,模式并不都是显而易见的,有些模式是隐藏的,或者需要一定的变换才能出现的,这些都考验孩子观察力和识别力。



4
分解问题的能力



一些复杂的问题都可以分解中等的问题,中等的问题还可以进一步分解成小问题。在解决复杂问题时,问题的分解是非常重要的,编程中我们也经常需要使用这样的方法。


举个例子,比如要造一辆汽车,我们先要把汽车分解成很多小的部件,比如发动机、变速器等,这些部件还可以继续分解成更小的部件,我们需要先造好每一个小部件,再把他们组合起来变成一辆汽车。



5
调试纠错能力



任何工作都无法一蹴而就,是人总会犯错误,程序运行起来发现不对有问题,这时就需要孩子能够找到出错的地方在哪里,并且将它改正。这里面包含的能力很多,比如抗挫折力、观察力、专注力等等。


总之,通过学习编程所培养的能力并不只是适用于编程,而是可以在很多方面派上用场。


2、几岁开始学比较好?


按照我的经历,是6岁开始接触编程的,但现在我们有各种可视化的编程环境,还有各种编程游戏App、桌游和玩具,所以还可以往低龄推移。


我家哥哥是4岁开始接触简单的编程游戏的,接受度非常好(他的抽象思维能力是比较超前),4岁应该是一个可选的起点,再小的话思维能力还达不到,揠苗助长也没意思。


另外还是那句老话:兴趣第一。如果孩子没兴趣,跟逼他练钢琴也没什么两样。


3、学编程与数学的关系


编程和数学确实是相辅相成的,因为编程所需要的很多能力和数学所需要的能力是相通的,比如逻辑完备性、模式识别等等;编程中的一些概念也是来自数学,比如函数;而到了学算法的时候,就会用到更多的数学思想和工具;至于最近特别火的基于软件基础的硬件驱动学习,那更是纯数学模型。


总之,编程和数学应该是相互促进的关系,学编程有利于更好地学数学,而学好数学当然也能够帮助你更好地学编程。




4、有哪些编程方面的比赛?


最有名的当然是国际信息学奥赛(IOI,International Olympiad in Informatics),这是仅次于国际数学奥赛的规模第二大的国际青少年学科竞赛,也是编程领域最高级别的国际比赛。


今年第29届国际信息学奥林匹克竞赛(IOI2017)将在伊朗举办


在中国有相应的国家信息学奥赛(NOI),我在初中和高中的时候也参加过,成绩一般(算法没学好嘛)。这项比赛是偏重算法的,对数学的要求也比较高,但如果在NOI中拿奖,就会被很多一流大学mark。


机器人比赛考察的能力更宽泛,但对算法的要求就比较低——或者说,信息学比赛更偏重Science,机器人比赛更偏重Engineering。比赛不是学习的目的,如果有能力的话去挑战一下也不错。


5、学编程要花很多时间在屏幕前,会影响视力么?


这个问题很大程度上是个误会。


近视的最大影响因素在于基因,环境因素的影响相对较小。在环境因素中,目前认为相关性(并非因果性)最强的是户外活动时间,户外活动时间长有助于减少近视的发生率,这可能和阳光的刺激有关。


除此之外,无论是看书的距离、姿势和时间、光线的明暗,以及电子屏幕的使用,都没有证据表明这些和近视的发生率有关,网上的很多文章其实都是吓唬人的,或者是犯了因果倒置、选择偏见(cherry picking)之类的逻辑错误。


因此,只要不是户外活动,无论是看书、玩玩具还是使用电子设备,这些都是划等号的,如果说认为看书就是比用电子设备要“不伤眼”,那只能是自欺欺人。


我家不限制孩子使用电子设备的时间,基本管够,中间提醒休息,但会确保每天户外活动的时间。


Copyright © 2023 All Rights Reserved 版权所有 香港粤语音乐分享社