“程序设计基础”课程教学方法研究与探索
作者: 赵岩[摘 要] “程序设计基础”是数据科学与大数据技术专业的核心基础课程,如何在有限的时间内让学生掌握Python语言的基础知识、具备程序编写的基本能力是一个值得探索和思考的问题。经过教学实践,设计了一套“程序设计基础”课程教学方案,提出了四种有助于提高教学质量和改善教学效果的方法。同时针对教学实践中遇到的问题,探讨了在课程教学过程中如何提升课堂教学趣味性、激发学生学习兴趣和自主学习热情的方法,以期达到寓教于乐的学习效果。
[关键词] 程序设计基础;数据科学;Python;教学方法
[作者简介] 赵 岩(1986—),男,河南西平人,博士,长江大学地球物理与石油资源学院副教授,主要从事地球物理勘探研究。
[中图分类号] G642.0 [文献标识码] A [文章编号] 1674-9324(2023)15-0105-04 [收稿日期] 2022-04-18
引言
随着人工智能与大数据技术的蓬勃发展,新一轮科技革命和产业变革悄然来临。为应对新的要求和挑战,2017年,教育部启动了新工科建设,主要针对以互联网和工业智能为核心的新兴产业,包括大数据、云计算、人工智能、区块链、虚拟现实、智能科学与技术等相关工科专业[1-2]。笔者通过调研发现,很多高校在数据科学与大数据技术专业的培养方案中都将Python语言作为程序设计的入门语言。
Python语言作为数据科学的主要编程语言,在人工智能、云计算、网站开发、数据科学、金融分析、爬虫开发、网络编程等领域具有广泛的应用。2020年,Python已连续四年超越Java和C语言,夺得IEEE Spectrum编程语言排行榜榜首。学好Python语言非常关键,它不仅是数据分析的一个强大工具,也是后续机器学习课程的知识基础。
一、课程介绍
“程序设计基础”是数据科学与大数据技术等专业的核心专业必修课程,也是一些计算机类专业的选修课程,在新工科人才培养中占有重要位置。课程结合大数据与人工智能的发展方向和产业需求,以Python语言为依托,教授学生程序设计的基本概念和基本流程。
Python是一种解释型的、面向对象的、带有动态语义的高级程序设计语言。Python语言简单、优雅、明确,具有简单易学、灵活通用、可移植性和可扩展性强等特点,同时还有丰富的第三方库函数,是数据科学教育的首选语言。
二、教学内容设计
本课程共56个学时,其中理论课时44学时、实践课时12学时。Python作为一种生态语言,除了基本的语法知识之外,还有大量常用的标准库或者第三方库。如何在有限的时间内统筹基础语法和库函数的介绍和使用,需要在前人经验的基础上进一步在实践中进行探索。笔者经过教学实践,探索出一套“程序设计基础”的教学内容和方案,具体如下:
1.程序设计基本概念。主要包括计算机基础、程序设计语言、Python语言、Python开发环境配置、程序设计的一般过程和程序的基本编写方法等内容。重点向学生介绍数值、数据、进制、ASCII码、编译、解释等基本概念以及Python语言的特点和优势,并结合Python在人工智能领域的广泛应用,激发学生的学习热情。
2.程序实例解析[3]。主要包括1个程序实例的介绍和相关Python语法元素的分析。该程序实现摄氏度和华氏度之间的转换。通过对简单程序实例的“解剖”,重点向学生展示把实际问题转化成程序代码的过程,并结合程序代码,解析Python语言的语法元素,如程序的格式框架、命名与关键字、赋值语句、字符串、输入输出函数和注释等,让学生对程序编写有一个直观的感受,克服对编程的恐惧感;同时通过解决实际的小问题,提高学生运用编程解决实际问题的兴趣。
3.基本数据类型。主要包括数字类型、变量和语句、运算符和操作对象、字符串类型及其操作、字符串类型的格式化等内容。重点向学生介绍整数、浮点数、变量的命名、Python关键字、算术运算符、赋值运算符、比较(关系)运算符、逻辑运算符、运算符优先级、字符串以及字符串的格式化方法等。通过Python语言基本语法的介绍,教授学生编写简单的程序。
4.组合数据类型。主要包括组合数据类型概述、列表类型和操作、元组类型和操作以及字典类型和操作等内容。重点向学生介绍列表、元组、集合和字典的基本概念和定义,相应的操作以及它们之间的区别和联系。通过复杂数据类型的介绍,进一步教授学生如何在程序设计中利用组合数据类型。
5.程序的控制结构。主要包括算法、程序的基本结构、分支结构、循环结构、程序的异常处理等内容。重点向学生介绍算法的概念、算法的特征、流程图、二分支和多分支结构、for循环、while循环、break和continue语句等。结合前面学习的知识,教授学生利用控制结构编写复杂的结构化程序。
6.函数。主要包括函数的基本使用、函数的参数传递、变量的作用域、代码复用和模块化设计、函数的递归、Python内置函数和函数实例等内容。重点向学生介绍函数的定义、函数的调用过程、函数的参数传递和返回值、全局变量和局部变量、递归函数的定义和使用等。通过函数的介绍,教授学生利用函数实现程序的模块化设计,提高学生程序代码编写的质量。
7.类。主要包括面向对象的概念、类的定义和使用、继承、多态和封装等内容。重点向学生介绍类、对象、类的访问权限、基类、父类、继承和多态等。结合结构化程序设计思想,教授学生类比学习面向对象的程序设计思想,为后续大规模复杂程序设计打下基础。
8.文件。主要包括文件的使用、一二维数据的格式化和处理以及高维数据的格式化等内容。重点向学生介绍文本文件和二进制文件的打开、读写和关闭,CSV格式等。通过此章节的介绍,教授学生读写文件,以便后续进一步学习基于Python的数据处理编程。
9.上机实践。主要包括6次上机实践教学,主要包括数据类型、分支结构程序设计、循环结构程序设计、函数的定义和调用、类的定义与操作以及文件操作等内容,重点训练学生的实践动手能力,进一步加深学生对知识点的理解和掌握。
Python中有大量的标准库和第三方库,掌握这些库对于Python编程非常重要,可将一些常用函数库的使用方法在前述章节中依次介绍。
三、教学方法探索
1.多媒体教学和现场程序代码演示相结合。多媒体教学和板书的有机结合是当前课堂教学的主要教学方式。多媒体教学具有直观、形象、信息量大等特点,板书教学可以深入探讨一些疑难知识点,二者都是不可或缺的教学手段。但是笔者认为,对于“程序设计基础”课程而言,应该结合其自身的特点,更多地采用多媒体教学和程序代码现场演示相结合的方式。一方面,通过多媒体教学介绍Python语言的相关知识点,并通过大量的代码示例让学生及时理解和掌握;另一方面,通过笔记本电脑的现场程序代码演示可以让学生有更直观的认识和感受,这一点非常重要。笔者在教学实践中发现,很多学生不能及时理解和掌握IDLE的使用方法,通过现场演示,可以有效讲解交互命令窗口和文件窗口的作用。另外,笔者在实践中发现,在初学阶段,学生常常出现的错误都很简单,如中英文标点符号的误用、左括号或者右括号的缺失以及错误的数学运算顺序等。在现场演示过程中,教师可以有意识地展示一些常见的编程错误,带领学生查找错误的原因,并教学生排除错误。这样的训练有助于学生在编写和调试代码的过程中及时发现和排除错误,少走弯路,提高编程效率。
2.强化实践教学,提升课程上机实践的学时。对数据科学与大数据技术专业的学生而言,程序编写是最基本的能力。通过笔者的课堂调查,绝大部分学生在入学之前并没有接触过程序设计,更不知道如何进行程序编写。我们都知道,“不下水,永远不可能学会游泳”,编程更是如此。Python语言虽然简单易学,学生也比较容易理解和掌握,但是经过笔者的教学实践,发现有很多学生在上机实践中不知道如何动手,部分学生存在眼高手低的现象。因此笔者认为,作为程序设计的第一门课程,应该加强上机操作等实践教学的学时。程序语言学无止境,知识点很多,但教学课时有限。应该在完成Python语言基本语法教学的前提下,尽量多指导学生进行编程实践,尽快让学生入门,为后续的自主探索打下基础。
然而,课程内的上机实践时间也是有限的。学生编程能力的提升需要其在课后进行大量的实践。但是笔者发现,有相当一部分学生在课后并不会进行编程实践,这就需要教师给予一定的安排。如可将学生分为不同的小组,通过向小组派发不同的任务或者作业,提升小组的学习氛围和小组成员的学习热情。
3.以优质慕课资源作为课堂教学的补充。随着网络技术的发展和教学理念的革新,以慕课为代表的线上教育资源愈加丰富。慕课以其移动化、碎片化的优势逐渐成为一种不可或缺的教育资源和教育手段。优质的慕课资源顺理成章地成为课堂教学的有益补充。比如,本门课程选择的教材为嵩天、礼欣和黄天羽编著的《Python语言程序设计基础》,而三位作者共同开发的“Python语言程序设计”慕课资源在中国大学MOOC网上同步上线,经过几年的发展,已成为国家精品慕课资源,深受学生的喜爱。这对学生的自主学习以及复习巩固具有很好的帮助和补充作用。除此之外,还有全国其他高校开发的Python程序设计课程,学生可以根据自己的喜好,选择不同的课程进行学习。
4.利用线上手段帮助调试程序和课程答疑。随着移动互联网的发展以及智能手机的普及,即时通信社交软件已成为学生和教师之间的线上虚拟教室。通过社交软件,教师和学生的互动以及答疑可以不再受时间和空间的限制,这对学生来说具有很大的便利性,特别是在编程过程中遇到程序调试问题时,可极大地提高学生的答疑效率。在本课程授课过程中,有相当一部分学生都会通过即时通信社交软件的方式向笔者求助,笔者及时帮助其解决在编程练习中遇到的问题,这有助于提高学生编写程序的积极性。
四、教学方法探讨
兴趣是最好的老师。如何在教学过程中激发学生的学习兴趣和学习热情是教师需要思考的一个重要问题。笔者在教学实践中发现,虽然在课堂上绝大部分学生都很认真,但是依然会出现个别学生注意力不集中的情况。作为教师,笔者一直在反思能不能进一步把“程序设计基础”课程讲授得更有趣一些,能否做到一直吸引学生的注意力,并进一步激发学生的兴趣和热情。经过调研,笔者下一步准备把生动有趣的游戏融入各个章节的教学之中,增强趣味性。大概分为以下几类:
1.利用Python语言的turtle库,绘制精彩酷炫的图像,展示Python强大的绘图能力。可以在课程教学中结合时事热点,如随着2022北京冬奥会的开幕,吉祥物“冰墩墩”的可爱形象深入人心,一时出现了“一墩难求”的盛况。利用Python语言中的turtle库,教学生如何自己动手绘制一个属于自己的“冰墩墩”。另外,也可以用turtle绘制经典的奥运五环图案等。
2.创意编程。创意编程不是单一的教授编程语言的语法,而是让学生形成算法思维,培养用程序设计语言思考和表达的能力。创意编程可加深学生对Python语法知识和开发方法的理解,建立程序思维方式,锻炼和提升逻辑思维水平,增强认识问题和解决问题的能力。在实施过程中,可将语法知识穿插在创意程序的开发之中,可进行具体案例学习或巩固新的语法知识。为了适合初学者,所有案例需要精心设计,代码最好不超过50行。通过创意编程,学生编写出好看好玩的程序,提升了课程的趣味性,同时也提高了学生的学习积极性。
3.游戏编程。可以在语法和代码讲解等传统教学方式的基础上,借助丰富多彩的游戏资源和游戏机制,在课堂教学过程中开展游戏编程学习,给学生带来多元化的学习内容和学习形式[4]。这样能有效支撑程序设计学习过程中重点和难点问题的讲解,从而培养学生思考和解决编程问题的能力,提升教学效果[4]。游戏编程学习以其富有吸引力的情境和挑战,激发了学生的学习热情,收到了良好的学习效果[5]。在实施过程中,可针对每个章节的知识点和学习进度,选择一些有趣的游戏编程作为教学的素材或者作业。考虑到初学者的接受能力,需要循序渐进,游戏的代码最好不要太长,不超过100行。