前 .言 现在有一种流行的说法:Python语言最接近自然语言,语法简洁、清晰、易懂,拥有众多的第三方库,非常适合编程初学者学习使用。 如果初学者是成年人,这种说法完全正确。如果初学者是小学生,这种说法就值得商榷了。 Python语言最接近自然语言,这个“自然语言”是指汉语吗?不是,而是英语。对于我国的小学生来说,英语是一门外语,不是母语,按照教育部公布的《义务教育课程方案(2022年版)》的课程设置,小学中高年级才开始开设英语课。如果按照正常的教学进度,小学五、六年级的孩子英语刚入门,他们可以把学会的简单的英文单词、语法迁移到Python语言中,但想以“最接近自然语言”为突破口来学习Python语言,是不现实的。 Python语言的语法是简洁、清晰的,但对小学生来说是不是易懂的呢?简洁的语法,有时是会增加学习难度的。例如,赋值语句tot+=2中使用了由“+”“=”构成的增强赋值运算符“+=”,这样的语句很简洁、清晰,但孩子们在学习时,需要“转个弯”,先转换成烦琐一点的普通赋值语句tot=tot+2,才能更容易消化、理解。同时,计算机高级语言的语法结构和汉语的语法结构是不一致的,编程时,要从母语的表述方式转换成用计算机语言来描述,这涉及思维方式的转换,对初学者而言特别不容易。 拥有众多的第三方库,对于项目应用的开发者来说,可以提高工作效率,但也容易让人迷失在库的海洋里。对于一个人来说,时间是一个常量,更何况是小学生,各门学科都有各自的学习任务,可支配的时间有限,以“众多的第三方库”作为学习内容,也是值得探讨的。 因此,我们要树立一个观点:对于小学生来说,想要学会Python语言是不容易的。 一方面,这种“不容易”提醒所有的教育者要正确面对现实,认识到存在的困难,只有基于现实进行思考,才能找到正确的解决方法;另一方面,这种“不容易”也激励着教育者,只要方法正确,路径有效,对于一般的小学生来说,学习Python语言也并非一件难事。 如何才能让“不容易”变得“容易”呢?编写一本基于小学生认知规律和学习发展规律的教材是重要的一环。 首先,编写小学生Python教材时,要明白成人与小学生学习Python语言的目的是不同的。成人往往是为工作而学,为开发某个具体的项目或应用程序而学,侧重于应用性。而小学生是为成长而学,以Python语言为载体进行思维的完整性和逻辑性训练,掌握利用计算机解决问题的方法,培养思考力,激发兴趣,侧重于基础性。 其次,编写的教材要做到对、好、趣、高。 对。就是教材编写的内容要正确,这是最基本的要求。但由于Python语言的独特性,做到“对”并不简单。例如,一般程序设计高级语言中的变量是“箱子”,赋值是把某个表达式的值装入“箱子”的过程;而Python语言中的变量,是对象的标签,是对象的引用,赋值是把变量指向某个具体对象的过程。只有基于“指向”“引用”的认识时,孩子们才能理解多变量同时指向同一个组合类型对象时,修改某个变量指向的对象元素后,其他变量的值也会发生变化。因此,不能把Python语言中的变量比喻成“箱子”。 又如,一般程序设计高级语言中for循环是计数循环,而Python语言中的for循环是遍历循环,遍历循环可以实现计数功能,但它不是计数循环,只有从“遍历”的角度去理解,才能让孩子们明白遍历循环的循环体中对循环变量的重新赋值修改不会影响循环次数,不能把遍历循环简单处理为计数循环。 好。这个“好”一方面体现在编排顺序上,要循序渐进,不能把知识点简单地堆砌起来。对于有基础的成人,选用将各种语法知识集中呈现的教材能快速全面地掌握Python语言。但是知识点集中呈现的教材对于编程零基础的孩子来说是不适合的,犹如把各种字、词集中整理在一起的字典不能作为孩子学习语文的教材。在案例中,循序渐进地学习各个知识点或许是小学生学习编程的可行路径。在解决问题的实践中,引出新知,适可而止,由浅入深,由易到难,不求概念化,逐步系统化,实现从以语法为核心的知识体系的教学编排转向以解决问题为核心的能力体系的教学编排。 “好”的另一方面体现编排内容上,要做到因材施教。Python语言是一种生态语言,生态语言关注的不再是每个具体算法的逻辑功能和设计,而是尽可能利用第三方库进行代码复用,像搭积木一样编写程序,提高开发工作的效率。对于成人,从计算生态的角度学习Python是因材施教。如果小学生也是从计算生态的角度学习Python,那么要记住内置函数、对象的方法及各种库的调用语法,才能编写程序。但这样大脑就会进入记单词阶段,缺少思维活动会让学习变成记忆,不利于孩子的成长。因此,小学生应从算法的角度学习Python,注重基础性,弱化应用性,关注思维活动。数据、算法、算力是人工智能的三要素。选择算法作为学习内容,也符合时代发展的趋势。那么,选择怎样的内容才算是从算法角度编排的呢?例如,已知某一个数字列表中各个元素的值,求出该列表中所有元素的和。从计算生态的角度出发,直接学习内置求和函数sum()的调用方法,代码简洁,编程的效率高。从算法角度出发,应学习计算机高级语言累加求和的一般方法(先将累加器清零,再遍历列表中的每一个元素,依次累加各个元素的值,最后输出累加器的值)。这种求和方法的代码长,编程效率低,却能让小学生明白累加的一般过程,学会思考。站在一般程序设计语言的视角选择学习Python语言的内容,既要关注Python语言个性化的内容,也要关注程序设计语言的共性知识,两者有机结合,通盘考虑,适当地从语言细节上解放出来,才能更有利于孩子的成长。 趣。就是编写的教材要让孩子感到有趣。“趣”是有层次的。第一层次是精美的画面,以图吸引孩子。对于小学低年级学生,这个显得特别重要。对于从形象思维过渡到抽象思维的小学高年级学生,图对他们有吸引力,但引发的兴趣不持久,因学习而体验成功的快乐、因学习而实现自我价值引发的兴趣才是最持久的、最可贵的,这便是第二层次的“趣”。因此,编写的教材一方面要有插图,吸引孩子兴趣;另一方面要设计有梯度、有层次的问题,在解决问题的过程中利用自然语言、流程图或伪代码语言等方式,呈现解决问题的过程与步骤,让思维活动可视化,同时设计习题,举一反三,为孩子体验编程的快乐、实现自我价值、保持学习动力提供可能。 高。就是编写教材的指导思想要高。跳出学科看问题,跳出技术看问题,要从人的发展、培养人的角度来考虑。从人的发展角度看,多数孩子将来不会成为程序员或计算机科学家,因此,不能把编程看作一种狭隘的技术,而是把它当成一种解决问题的方法,让孩子学会问题的分解、抽象、建模、设计算法的能力,并能将这种能力迁移、应用到解决其他学习、生活中的问题中。从培养人的角度看,编程只是学习的载体,不是学习的目的,学习的目的是能让孩子在学习编程的过程中得到成长,关注孩子思维完整性和逻辑性方面的训练,培养孩子的理解力、思考力、创造力,为孩子的未来助力。不要只把编程当成筛选人才的工具,而是应该把编程作为培养人才的利器,因此,在编写教材时,应在科学的、发展的人才观、成才观、教育观的视角下组织教学内容,让编程成为一种素养。 本书基于以上认识和多年一线的编程教学实践编写而成。在编写的过程中,得到金华市婺城区教研室郑理新、金华市第五中学陈洪棋、金华市青春中学陈旭平、浙江师范大学熊继平等老师的指导与帮助。因编者水平有限,书中难免存在不妥或错误之处,欢迎读者批评指正,可以发送邮件至电子邮箱4878747@qq.com,更希望读者对本书提出建设性意见,以便修订、再版时改进。 潘洪波 2023年4月