虽然普及人工智能已经成为国家战略,但依然有大量的家长并不知道编程要学什么,该怎么学。家长的心态很现实:学编程能带给孩子什么,特别是,能不能对升学有帮助?
在编程逐渐普及的过程中,出现了两种不同的声音。一种认为编程对数学基础要求很高,如果数学基础不好,编程也肯定学不好;另一种是无论谁都可以从编程学习中获益,编程并不需要太好的数学基础。
那么,到底哪一种是对的呢?下面的八个问题将为你释疑。
问题一:编程=信息学奥赛?
产生上面不同声音的一大原因是许多人在信息学奥赛和编程之间画上了等号。但这两者其实是不等的。信息学奥赛只是编程的一个小子集。这就跟我们所有人都要学数学,但只有极少数一部分人会去参加数学奥赛是一个道理。
在编程门槛日益降低的当下,一般的编程只需要一定的逻辑思维能力即可。大部分的核心算法和框架都是现成的,普通的编程人员只要按需将它们组装起来就能完成某个特定的需求。所以,千万不要把码农的职业想的有多高深,大部分的码农只是代码搬运工和组装者。但信息学奥赛则不同,需要非常强的数学能力、问题分析能力和问题解决能力。即便是一名拥有三年以上工作经验的老程序员,在面对信息学奥赛的问题时,拿零蛋也是正常的。
问题二:编程是什么?
信息学奥赛是不是编程?是!
孩子玩个机器人、搭个积木是不是编程?也是!
但这两者之间的关系,就好像是问:100以内的加减法是不是数学?费马大定理是不是数学?
所以,编程到底是什么?
编程的目的是让计算机帮助人类解决某个问题。为了使计算机能够理解人的意图,人类就必须将所需解决问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。
编程的难易主要取决于两个方面:一是程序设计语言的友好性;二是所要解决问题的难度。这两者,起决定性因素的是后者。从最早的机器语言到汇编语言到高级语言再到现在的图形化编程语言,程序设计的语法已经变得相当友好了。但无论用哪种编程语言,会写八皇后问题的程序员比例还真不高。
这就好比英国人觉得法语要比中文容易学。但不管怎样,只要肯学,学会说一门语言并能与人交流并不是难事,但要用任何一门语言创作一首诗歌或一篇小说都不是件容易的事。
问题三:为什么信息学奥赛如此受关注?
答案大概只有一个:信息学奥赛能与升学挂钩!
问题四:编程和数学到底是什么关系?
这取决于学编程的目的。
如果就是奔着信息学奥赛学编程,那编程与数学绝对是强相关。因为信息学奥赛本身承载了智商选拔的重任,而数学能力是最基础的。具体地,信息学奥赛涉及的是离散数学的内容,知识点主要包括计数、数论、集合论、图论、数理逻辑、离散概率、矩阵等。思维和方法方面,对递归和分治的要求比较高。当然,除了数学能力,信息学奥赛还需要阅读理解能力、问题分解能力、编码能力等一系列综合能力。
广告离散数学及其应用(英文版第7版)(离散课程采用率最高的经典教材,中文版也被国内大学广泛采用)作者:(美)罗森当当购买
那如果不搞信息学奥赛呢?编程和数学就没有那么强相关,有些时候甚至可以说是弱相关。现在编程的门槛是越来越低,有些编程工作其实只是简单地做了些功能的调用。懂一些基本的编程语法,会阅读接口的说明书,就能实现一些很有用的功能了。要求稍高一点的,需要自己实现一些代码,这时逻辑思维能力和抽象能力就不可少。再难一点儿,涉及到核心的算法,那数学能力就必不可少。整个程序员的群体本身也是个金字塔结构,涉及核心算法的属于金字塔塔尖,实属少数。大部分程序员其实并不需要懂复杂的数学知识。
问题五:什么时候开始学编程合适?
如今,市场上有些机构宣传幼儿园就可以开始学编程,搅得部分不明就里的家长无所适从。我个人认为,除了极少一部分天赋异禀的孩子,普通的孩子在5岁的时候连最基本的逻辑思维都不健全,学编程无从谈起。而且,即便是学普通的编程,最基本的四则运算和逻辑运算还是必备的基础,从课内的数学教学进度来看,至少得要二年级结束才行。
很多家长想借鉴孩子学英语的经验,希望学编程也能像学英语一样早早起跑。并不是说更小的孩子不能学编程,只是编程这玩意儿和英语真不一样。小孩子记忆能力强,英语从小开始多学个三年,效果扎扎实实能看得到,晚学的花两三个月时间根本追不上。但编程就不一样,同样智力的娃,从5岁开始先学三年编程,后学的最多半年就能追平。所以,思维没有到那个地步,早学纯属事倍功半,除非钱在口袋里跳得慌。
问题六:孩子学习编程的语言怎么选择?
如果想让孩子早点接触编程并对编程产生兴趣,那第一门语言可以选择图形化编程。待孩子理解了程序的工作方式,后面想让孩子走信息学竞赛的家长可以选择在五年级左右让孩子进入C++代码的学习。
如果孩子数学天赋一般,或者家长也不想让孩子通过信息学竞赛升学,而只是纯粹想体验编程的乐趣并建立计算思维,那么图形化编程可以一直学到五六年级。再往后,目前来看python是一个不错的选择,因为可以很快做出一些很酷的东西。
问题七:图形化编程能训练计算思维吗?
有些家长认为计算思维的训练一定需要学C++或Python这类代码语言才行,而图形化编程只能用来搭搭积木玩一玩。其实,这个认知是不正确的。
图形化编程目前之所以没有起到很好的训练计算思维的效果,问题不在于图形化编程本身,而在于市场把图形化编程的学习下放的太厉害。很多机构都把图形化编程下放到三年级以下。在小学一二年级甚至是幼儿园,逻辑与数学基础都不具备,怎么去熏陶计算思维?如果在更高的年级(比如小学的四五六年级)去学图形化编程,那完全可以作为计算思维训练的载体。
本质上来说,计算思维的训练与具体的编程语言无关。这就好比一个人的文学修养与他所使用的语言没有关系,文言文可以写出优秀的文学作品,现代白话文和英文同样可以。
问题八:编程会影响学科类课程吗?
有家长会有这样的顾虑:孩子学编程需要花费大量的时间,等到进入初中后会不会影响学科类的学习?也正因为此,进入初中后,很多家长就不再支持孩子学编程了。
有这个顾虑是很自然的,但如果学的确实是计算思维,培养的是编程素养,这样的担忧却是没有必要的。
我们不妨来看看编程能培养孩子的哪些能力。
编写程序是为了解决某个具体问题,但这个问题通常是通过某种情景表现的,不像数学题那样给我们抽象好了。因此,编程学习首先有助于提高孩子的问题理解、问题分析和问题抽象的能力。
一个稍微复杂一点儿的问题,往往由若干个子问题构成,其中有些是我们熟悉的,可以利用现有的程序,有些是我们需要去编写的。编程学习非常有助于提高孩子们的问题分解能力。
在编写程序的过程中,逻辑思维能力极为重要。程序里用的最多的就是逻辑判断和循环。满足什么条件执行哪个分支程序,满足什么条件退出循环,这些都需要较高的逻辑思维能力。当然,有没有良好的数学素养,写出的程序可能差别很大。拥有良好的数学思维往往可以做到降维打击,写出非常简洁和高效的程序。
写程序常常是一个不断优化的过程。一开始给一个能跑的程序,往往效率并不那么高,结构并不那么美。这时,我们可以不断去寻找更优化的方法,不断提升程序的效率和可读性。因此,编程能锻炼孩子不断优化、追求卓越的品质。
数学题错了,如果我们不验算,就很难看出来,更何况有些数学题也不好验算。但程序来不得一丝一毫的马虎,错了要么无法运行,要么执行结果不符合我们的预期。编程来不得半点粗心,一旦发现错了,还得像福尔摩斯一样去寻找问题所在。有可能一个不经意的小错误,得花上半天甚至更长时间才能找出症结。所以,编程非常有助于克服孩子的粗心,锻炼孩子的耐心,提升孩子的错误诊断能力。
对于一个大型的程序,我们常常需要几个人一起协作完成。这个时候,程序就不单单是写给自己看,还要让别人也能看得懂。因此,编程非常有助于锻炼我们的团队协作能力,以及结构化与模块化思维的能力。
没错,编程确实很花时间,但无论是在这个过程中直接或间接获得的能力,对学科类的学习都是有益的。话再说回来,学什么不花时间呢?