怎么给小学生上编程课?

教些什么最重要?WHY?

问:小学生需要掌握一门编程语言吗?还是说培养计算思维更重要?

我觉得在小学阶段就开始学c++和python之类的正规编程语言是意义不大的。因为他们的形式思维逻辑发育还不健全,对文字代码难以产生真正的理解,很容易走到死记硬背的歪路上去。

毕竟大多数孩子未来不会靠编程吃饭,给他们上编程课的目的更偏重于培养编程思维,把编程中的概念(比如:循环、事件……)和解决问题的方法论(比如:分解、封装……)尽可能地应用到学习、生活中去。

问:应该教学生具体问题的解决方法?还是一套能解决所有问题的方法论?

如果把教学的重点放在“让学生记住解决这个问题的步骤”上,那么最终学生可能记住了一堆题目的解法,但是遇到一个变种就不知道该怎么办了,因为他不知道这个解法是怎么得出来的,每个步骤为什么要这么做,而不能那么做。

我认为更重要的是教给孩子们一套解决问题的方法论,也就是“解法”的解法,比如“自底而上”和“自顶向下”,可以用来解决任何领域的问题。

问:对初学者来说,是培养学习兴趣重要,还是要求标准动作重要?

兴趣绝对是第一位的。比如说小孩学吃饭,刚开始学你就要求他用标准姿势拿筷子,是不是搞笑呢?肯定都是先上手,再上勺子,最后再上筷子。在这个过程中,你肯定不会骂他“怎么筷子都不会拿?”,而是会不断地鼓励他“宝贝你太棒了,都能夹面条了!”不管这个孩子现在水平有多差,只要他还有学习兴趣,那么给他足够的时间,就一定能学上来。

标准重要吗?当然很重要。如果一位教练能在保证学生兴趣的前提下,教会学生规范的动作,那肯定更好了。但是如果你一上来就批评他这个做得不对,那个做得不标准,反反复复折腾他,很快学习兴趣就被打压下去了。他一旦不想学了,那么后面的可能性就统统没有了。

如何做课程的整体设计?

问:在设计课程时,有什么理论依据吗?

我比较推崇怀特海在《教育的目的》中提出的“浪漫、精确、综合”三阶段循环的理论。学习任何知识和技能都要经过这三个阶段:

浪漫:这一阶段要让学生对所学的事物进行整体感知、自由探索,重点在于让学生建立一个模糊的先验概念,然后和学生的已有认知发生联系。如果要让学生认识鹦鹉,那么就直接带一只鹦鹉放在他面前让他看。

精确:这一阶段要对概念进行建构、深入辨析,加以一些刻意练习。看过鹦鹉之后,可以教学生鹦鹉有哪些特点,哪些种类,和其他鸟有什么区别……

综合:这一阶段是让学生对已学过的知识和技能进行实际运用,解决问题或创作作品。比如让学生画鹦鹉的画、自己试着养一只鹦鹉……

在小学三年级之前,整体上都应以浪漫感知为主,旨在培养学生的兴趣,而不要过早地进入精确训练。四到六年级应该逐步向精确阶段转化,加深对各种概念和方法论的理解和运用,这样的话学生到了初中基础很扎实,就可以开始做项目了。

需要注意的一点是,“浪漫、精确、综合”是一个无限嵌套的循环,也就是说在浪漫的大阶段中,也要分为“浪漫、精确、综合”的小阶段,只是侧重点在于浪漫感知,而不是说就完全放弃精确练习、也不综合运用了。就是在单单一节课里面,也是存在浪漫精确综合这三个阶段的。

问:从实操层面,具体怎么做?

首先要做的第一件事就是学情分析,也就是充分地了解你要教的学生。你必须知道他们都具备了哪些基础,之前有没有学过编程,计算机水平如何……只有这样,你才能给学生设计出适合他们的课程。重点不是“你想教什么”和“你能教什么”,而是“学生能学什么”。

哪怕是同一堂课,给不同年级的学生上,都要使用不同的话术,必要时还要修改PPT。曾经有一次我给一年级的孩子上课教循环,我说完“大家要先找出这个迷宫的规律,再用循环来简化”,然后一个孩子就举手问“老师,规律是啥意思?”我当场就崩溃了。

充分了解了学生之后,我们就可以开始编排一学期的教学目标和计划,然后再进行排课。目前我的课程主要是基于code.org设计的,再加入打字课和一些拓展知识课。此外,尽量保证每个学期学生都能输出一个作品,这样才能让他保持成就感。

问:想让学生理解一个概念或方法,需要多少节课?

就算是一个很基本的概念,也往往包括很多的维度:什么是?什么不是?为什么要用它?不用会怎么样?什么情况下用?什么情况下不用?有多少种用法?分别适合什么情况?……

想要把所有这些点在一节课里全讲明白是不可能的,干货太多,学生只会消化不良,根本吸收不了。所以需要把这些点分解到不同的课里面去,先讲一点,然后让学生实践一段时间,再讲一点,再实践……

问:在学习的初期,允许学生动作不规范、甚至持有错误的理解吗?

学习永远是一个循序渐进的过程,而不是一步到位的转变。有谁第一次骑自行车就成功了?有谁第一次学步就会走路了?想要学生只听一堂课就对一个概念彻底领悟理解到位,那是不现实的。能对这个概念有一个模糊的认识就不错了,接下来在大量的练习和实践中,他会发现“噢,原来不是这么回事”,然后不断地修正和迭代他的认知。

如何设计一堂课?

问:在设计一堂课之前,应该想明白什么?

首先,要知道这节课的目的,也就是:这节课要给学生教什么?

然后,要明白这节课要达成的目标,也就是:这节课之后,期望学生拥有怎样的能力、发生怎样的变化?

只有在明确目的和目标之后,我们才能根据对学情的了解,设计出教学内容来。

问:一节课的设计应该遵循怎样的理论?

根据皮亚杰提出的认知发展理论,我们应该先根据学生的认知基础来构建认知冲突。也就是抛出一个现阶段学生很难解决的问题,让学生感受到挑战,并对本节课的内容产生好奇心。

冲突发生后,老师应通过课堂对话来帮助学生完成认知升级,这包括了讲解和课堂讨论。授课的过程不能是一言堂的讲述,而是要让学生参与进来。重要的是学生能通过这堂课学会什么,而不是老师想讲什么、有没有讲爽。

问:一节课的整体结构应该是怎样的?时间应该怎样分配?

我设计的编程课一般分为三个板块:

讲解(10-15分钟):复习旧概念、抛出新概念、介绍新方法、讨论典型关、提示注意事项……

活动(15-20分钟):不插电活动 / code.org线上闯关

总结(10分钟):回顾本节所学的内容,学生书写学习日志

不插电

问:为什么要上不插电的编程课?

小学生(特别是低段的小学生)还处于具象思维阶段,形式抽象思维还没有发育成熟。他们只有积累了足够的动手经验,才能理解对应的抽象概念。以数学为例,如果学生没有对事物进行分类、聚合的动手经验,是不可能理解加法的,就算背下了所有的加法口诀,还是没有学会加法,遇到脱离口诀的题目一样不会做。

因此,在教学生每一个编程概念时,我都会设计一堂不插电的活动课。先通过现实生活中的案例来类比,让他们对这个概念产生一个感性的认识,和已有的认知产生一些连接,不至于完全陌生。随后通过实际动手的课堂活动,让学生对这个概念进一步加深印象。

在接下来的上机课时,由于他们已经有了一定的先验认知,再进行引入和讲解就变得更加简单了。

问:不插电的编程课该怎么上呢?

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181119G1S20300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券