因为专业的原因,经常有人问我“孩子几岁适合学习编程?” “在线学习编程和线下学习编程哪种方式更好?” “开始学习图形编程和 C++ 哪个更好?”像这样的问题。通常我会顺便问:“你是怎么想到让孩子学习编程的想法的?”或者“您让孩子学习编程的初衷是什么?”答案出奇的一致:“学习编程可以锻炼孩子的思维。”
作为一名资深的专业信息技术教师和少儿计算机科学启蒙的践行者,我仔细浏览了一些案例,也查阅了相关书籍和资料,写下这篇文章来回答“学习编程能否提高孩子的思维?” “如何?诸如“编程学习可以促进孩子思维的发展”、“每个学习编程的孩子都会从思维中受益吗?”等问题。
为什么孩子们学习编程这么受欢迎?
目前,少儿节目的热度持续上升。原因大致有两个:一是编程改变命运的成功案例被广泛传播,让越来越多的家庭知道这是通向名校的“捷径”。 ”;其次,“学习编程可以培养孩子思维”的说法深入人心,让越来越多的家长期待着通过学习编程让孩子“更聪明”。
我们先分析第一种情况,一般是指通过信息学奥赛进入名校。这些个案之所以引人注目,是因为它们太罕见了。从每年各省报名CSP-JS的人数来看,最终考上清北试的人大致相当于古代科举状元;能够得到某些名校青睐的人,大概就相当于解元了。因此,持有这种想法的家长需要认真考虑一下自己的孩子是否具备“天赋+吊梁”的先天资质和学习素质,否则可能会落得“竹篮打水却徒劳无功”的悲惨结局。 。
第二种情况更符合大众的思维,也是各线上线下机构招生促销的一致措辞。有的会具体为“学习编程可以提高孩子的N思维能力”并一一列出,这样看起来更有说服力。和吸引力。但在日常教学中,根据我的调查和观察,我发现班上大部分在课外学习编程的孩子和不学习编程的孩子在思维上并没有明显的区别。对于非专业的家长来说,往往很难发现自己的孩子是否有所收获,是编程能力还是思维能力。
为什么要学习编程?我更喜欢著名计算机科学家、算法和编程技术先驱 (E.) 的一些观点:“计算机科学既壮观又美丽……”“为数字计算机编写程序的过程特别令人愉快,因为我们不仅能获得经济和科学效益,还能享受到像写诗、作曲一样的艺术体验。“只有基于这样纯粹的初衷来学习编程,才能真正享受到代码世界的乐趣。”
编程是一门艺术
编程需要哪些科学的思维方法?
广义的编程是指人与计算机系统之间的通信,不仅仅是为计算机设计程序,还包括其他具有计算能力的设备。我们常说的少儿编程,通常是指使用某种编程语言在计算机上进行编程。
无论什么门类的编程,都是涉及数学、计算机、特定问题领域、思维科学等的技术,是一项高强度的智力密集型活动。在编程过程中,必须合理组织智力,科学思考。常用的思维方法有以下几种:
(1)抽象。编程涉及客观世界、认知世界和计算机世界。三者之间的关系如下图所示。在设计程序时,首先要把客观世界的具体问题抽象成理解世界的模型,然后将模型表达为计算机世界中的程序。
问题-模型-程序
抽象建模的过程尤为重要。抽象强调问题的内在本质特征,抽象过程中暂时不需要考虑细节。这是人们认识、理解、处理复杂现象最有力的思维方法。
无论是大人的世界还是孩子的世界,我们总是面临着一些复杂的问题,而我们的思维能力有限,往往很难直接触及细节并做出精确细致的思考。这时,更有效的方法就是提取事物最本质的特征形成概念,并利用概念进行推理和判断。例如,如果一个孩子想要用积木搭建一个小房子,他首先要根据他已经了解的关于房子的概念来决定要搭建的小房子的大小和总体风格,然后决定搭建的小房子的形状或颜色。积木的使用、门窗的数量和位置等等细节,这也是一个从具体到抽象,再从抽象到具体的过程。
各种高级编程语言都包含了一些抽象机制,比如数据类型、函数等,使得用户在编程时不需要关心实现细节,提高性能效率。
(2)归纳演绎法。归纳法是从个体中发现普遍概念并消除异同、求同的思维方法;演绎法是从一般概念和原理中理解个别概念的思维方法。这两种方法既不同又相互对立,又相互联系、相辅相成。它们之间的辩证关系是:归纳是演绎的基础,演绎是归纳的先导。
例如,科学领域中的定义、定律、公理等概念,大多是从一系列个人实践和经验中得出的结论。然后将这些结论用于演绎推理,以解释一些新的个体事物。在这个过程中,往往会得出新的结论……在这个循环中,从个体到一般,从一般到个体,归纳与演绎相互制约、相互渗透、相互转化。
兔子序列问题
以迷人的斐波那契数列为例。序列“0, 1, 1, 2, 3, 5, 8, 13, 21, 34,...”可以概括如下:第0项是0,第一项是第1项;从第二项开始,每一项都等于前两项之和。递归定义为:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(其中n≥2,n∈N)。由这个通用方法,我们可以推导出n为任意正整数时的计算方法。
编程时,算法设计离不开归纳演绎的思维方法。
(3)分析合成法。世界是复杂的,但世界是构建的、可分离的。分析综合法是建立在客观世界可建构性、可分离性基础上的科学思维方法。
分析是一种将整体分解为部分,将一个大的复杂问题分解为一系列简单的小问题,将一个过程分成若干串行步骤进行研究的思维方法。综合是分析的发展。它是结合客观世界的各方面、各部分、各因素进行整体性、动态性研究和思考的方法。分析是综合的基础,但综合并不是简单地还原或积累分解的结果,而是运用一定的概念,从自上而下的整体、全局的角度去发现不同事物的本质和各部分之间的联系。或规则。
在设计程序时,需要使用分析方法,不仅将复杂的问题分解为简单的问题集,而且将解决问题的过程分解为一系列的步骤序列,最后通过对程序的整体测试和评估来识别问题。程序。得到改进和完善。
目前,在编程教学领域,人们经常用生活中的做饭过程来讲解算法设计过程。他们认为,两者都是将大问题分解,并将过程分成步骤。分析方法常常转化为“算法思维”的概念。形成了“实施编程教学培养学生算法思维”的观点。但很明显,算法思维和编程思维中过分强调“分析”有些片面。
分析-综合
(4)比较分类法。比较法在我们的生活和工作中无处不在,也是分析事物时常用的方法。通过比较,我们可以很快地理解和掌握一个新事物;分类是分析的主要方法或特例。自然界存在从无序到有序转变的规律。分类是人们认识、掌握和改造事物的常用方法之一。
在编程学习中,我们经常发现有些学生举一反三、迁移应用的能力很强。那么他们一定特别善于运用比较方法。掌握了一些经典算法后,可以在比较中发现新旧问题。它们之间的联系,从而借助老问题的解决方案来解决新问题;生活中,最常见的存储和组织体现了分类方法的应用。高效的分类方法离不开清洁有序的工作和生活环境。 。
每个学习编程的孩子都能提高思维吗?
答案是,不一定。
首先,编程老师的“怎么教”决定了“怎么学”和“学什么”。
如果教师认为编程是一种技能,他们就会以技能训练的形式进行教学,而不是刻意关注和引导学习者思维的发展。
如果教师只是想吸引学习者的兴趣,他们会以或多或少的活泼和包容的方式组织学习。这样的教学方式可能会让孩子和家长满意,但不一定符合孩子的思维发展。规律性甚至知识技能目标也很难实现。
如果教师囿于自身能力所限,不充分研究儿童的认知规律和思维发展特点,不了解儿童的学习方式与思维发展的关系,学习者就很难受益。
因此,如果可能的话,尤其是在启蒙阶段,低年级的学习者需要的可能不是一个熟练的教练,而是一个了解教育教学规律、了解儿童认知发展特点、对编程有洞察力的教练。学习和计算机科学启蒙。教育者之间的逻辑关系。
孩子学习编程,首先要摆脱功利主义,以“热爱计算机科学和编程”为首要目标。
其次,孩子原有的学习质量和思维方式将在很大程度上决定编程学习的效果。
无论是图形编程还是代码编程,大多数孩子在刚接触的时候就已经进入了教学阶段。至少七八岁,受生活环境、家庭教养等影响,已经养成的思维方式和学习品质对编程学习的影响远远大于先天智力的影响。
如果家长对孩子参与编程学习抱有较高期望,不妨在学习前从这两个角度观察孩子是否有以下表现:
学习品质视角——经常有兴趣追溯新事物的本源,遇到暂时无法解决的问题时表现出毅力和耐心,当周围有干扰时继续专注于未完成的事情,能够从内心感受学习本身的快乐,而不是为从成人那里得到的回报而欣喜。
思维习惯视角——一般按合理的顺序做事,能有意识地将日常物品整理得井然有序,喜欢比较不同的事物并发现它们之间的联系,遇到困难时愿意尝试不同的方法。
教学实践发现,具有良好学习素质和思维习惯的孩子更能从编程学习中受益。他们的思维水平不仅会得到显着提升,而且更有可能从编程学习中获得更多的成长机会。
爱会导致专注