Matlab与Python程序设计课程教学探索
作者: 骆剑平 郑能恒 邹文斌 何志权摘 要:Matlab和Python程序设计课程包含两门编程语言。这门课的授课对象主要是大二大三的学生,授课对象已在大一大二学习过C语言程序设计以及面向对象程序设计(C++程序设计),因此学生需要面对Matlab、Python、C以及C++等多门编程语言所构成的知识编织网,存在类似知识相互纠缠的困惑难题。针对该特点,文章对该课程的教学做大胆探索,精心设计课程教学内容,提出“比较式教学、案例式培养、对象式传授、深入式巩固”为主线的Matlab与Python课程教学模式。通过比较式教学解决相似知识之间模糊纠缠的困惑;案例式培养根据问题培养学生的整体编程思维;对象式传授和互动式提高措施因材施教,激活学生学习热情,培养编程兴趣,提高教学效率;深入式巩固进一步加固学生课堂学习到的内容。
关键词:Python;Matlab;教学探索
中图分类号:G640 文献标志码:A 文章编号:2096-000X(2022)18-0135-04
Abstract: The programming course of Matlab and Python contains 2 programming languages. This course is mainly taught to sophomore and junior students, who have already learned C language programming and object-oriented programming (C programming) in the sophomore year. Therefore, students need to face the knowledge weaving web formed by Matlab, Python, C and C++, which has the confusion problem of similar knowledge entanglement. In view of this characteristic, this paper makes a bold exploration of the teaching of this course, carefully designs the course teaching content, and puts forward the Matlab and Python course teaching mode of "comparative teaching, case training, object teaching, in-depth consolidation" as the main line to solve the confusion of similar knowledge through comparative teaching; case training cultivates students' overall programming thinking according to problems; object teaching and interactive improvement measures are used to teach students in accordance with their aptitude, activate students' learning enthusiasm, cultivate programming interest, improve teaching efficiency; and further strengthen the content that students learn in class.
Keywords: Python; Matlab; teaching and exploration
Matlab与Python程序设计课程是深圳大学电子与信息工程学院面向全校相关专业开设的一门专业基础课程。本课程与深圳大学电子与信息工程学院相关专业具有很好的融合性,是实现计算机专业信息化的主要工具之一。在人工智能为代表的高新技术蓬勃发展的今天,由于Python和Matlab广泛应用于相关领域的程序开发和构建过程(比如目前深度学习框架中广泛采用Python编程),这门课程的开设具有特殊的意义。通过学习使用Matlab与Python程序设计语言编写程序,使学生理解相关编程语言的核心知识,掌握正确的程序设计方法,养成良好的程序设计思维;结合案例上机实践,培养学生从整个案例工程的角度审视和思考程序整体构建和运行方式的能力,进一步提升动手编程能力,并能够运用这些思想、方法和技巧,开发和使用Matlab与Python应用程序,解决一些实际工作中的问题,从而使学生具备应用编程知识解决相关实际工程应用问题的能力。
Matlab编程语言是集数值计算、符号计算和可视化计算于一体的大型科学与工程计算综合软件。它是一款脚本解释型语言,具有良好的人机交互编程界面。Matlab编程语言最典型的特征是它包含众多的计算资源库,其中包括各类数值计算、图形图像处理、机器学习、智能仿真等。用户只需要编写非常简单的代码即可调用底层极其复杂的各类库函数,极大提升用户的开发和仿真效率。虽然它在运行速度上相较于传统C、C++语言要慢,但目前它已经支持和C、C++代码之间的转换功能,具有良好的拓展性和通用性。Python编程语言是一种面向对象编程的脚本型语言,它具有非常简洁和高效的编程结构逻辑。目前有众多科学计算库如NumPy、matplotlib都提供了Python调用的接口,使得Python编程语言逐渐流行。近些年,机器学习领域几个大的平台,如torch,tensorflow都建议首选Python接口编程,使得Python课程语言在人工智能领域成为使用最广泛的语言。Matlab与Python程序设计这门课程同时包含了两门主流编程语言,受到学生广泛的认可和欢迎。可以预见未来这门混合型课程将会在越来越多的高校工科专业课程中开设。
Matlab与Python两种编程语言受到工程技术人员和专家学者的广泛青睐[1-3],众多高等院校相续开设了相关课程。目前深圳大学电子与信息工程学院开设此课程教学中仍存在几个主要缺点:(1)这门课程授课对象学生在大一大二已经学习过C和C++语言,因此他们处于由Matlab、Python、C以及C++等多门语言所构成的混合编织网之中,不同编程语言存在相通之处,也存在明显不同,学生学习过程容易在其中产生记忆模糊和混淆;(2)相对于分配的课时,教学内容偏多且纷杂,学生很难在有限时间内掌握核心内容;(3)学生学习目标不明确,学习态度消极;(4)教学的方式方法使学生缺少独立思考的机会;(5)教学内容和实际案例脱节,很难做到内容联系实际。因此,这门课程面临多门编程语言混合、理论课和实践课混合、内容多、课时紧等这些问题,若采用传统的教学方法进行教学,学生不容易甄别重点知识内容之间的区别和联系,从而容易陷入由相似知识组成的知识旋涡而不能自拔。学生学习效率低下,从而导致学习意愿低下、厌学,而这又进一步加剧学习效果的下降[4-5]。针对这些问题,作者在该课程的教学方面积极探索,精心挑选和设计课程教学内容,提出以“比较式教学、案例式培养、对象式传授、深入式巩固”为主线的Matlab与Python课程教学模式。
一、编排课程核心教学内容
(一)以数据结构和过程设计组织课堂内容
目前Matlab与Python两门编程语言有两本教材,内容众多,而课时却每周仅有2个学时。因此,需要在教材的基础上挑选和组织两门语言最重要的核心内容作为主要内容。围绕挑选的主要内容组织相关的教学学习和案例教学,让学生根据主要内容掌握这两门编程语言的编程精髓和使用方法,培养对这两门语言的兴趣。由于这门课的授课对象已有一定编程基础,因此,挑选组织内容的主要策略是:淡化语法基础、加强数据结构、强化过程设计这三方面。每个编程语言的核心就是数据结构和过程设计这两方面,要围绕这两个核心安排章节内容和讲授内容。数据结构主要是关于数据的组织形式和表达方法在编程语言中的具体实现,不同的编程语言有不同的形式、要义和特点,也有共通的地方,这是理解和掌握编程语言的第一个核心。过程设计是利用数据结构和语法基础实现程序框架,这是程序的具体功能实现过程,也是理解和掌握编程语言的第二个核心。抓住这两个核心对Matlab与Python各组织两章内容分别重点讲授这两个核心。经过一个教学学年的检验,该课程内容设计能让学生有效抓住课程的核心内容,围绕核心内容展开学习并掌握核心知识。
(二)从科研活动中抽取组织实验课内容
由于这门课的授课对象主要是大二大三的学生,他们在大一大二已经学习过C语言程序设计以及面向对象程序设计(C++程序设计),已经对编程基本原理和过程有一定理解和掌握,因此实验课应该重点提升学生程序设计的综合能力和实际解决问题能力。目前的实验课内容都是一些非常小的程序针对某个函数或功能的实现,知识碎片化、重复性表现突出,不利于培养学生宏观思考程序设计的思维,因此需要对实验课重新设计实验编程的内容。本课程主要从目前本人相关科研活动中抽取和组织一些实际案例和题目供学生实验,比如对于Python组织了模式识别(人脸识别、手写体识别、车牌识别等)相关的Python编程实验;Matlab部分也组织类似的实验,比如五层卷积神经网络的构建、残差网络的实现等相关内容。课后总结发现学生可以很好地根据这些实验掌握相关的实验内容,提升了学生实际动手编程能力。
二、设计科学合理的教学方法
(一)比较式教学
这门课程授课对象处于由Matlab、Python、C以及C++等多门编程语言所构成的内容编织网之中。有些人还学习过其他编程语言,那么这个编织网可能更大更复杂。如何让学生从复杂容易出错的编织网纠缠中解脱出来是这门课程面临的教学难题。本课程设计了比较式教学方法,即对类似的内容用不同编程语言的角度进行讲授和阐述,以甄别它们之间的特点和差异,让学生学习通过比较来提高记忆辨识度,从而达到摆脱对不同语言记忆纠缠不清的困惑,提升对它们之间共性的了解,进一步对各种语言达到融会贯通的水平。比如在讲函数参数传递这个知识点时,C、Matlab和Python三门语言有相同的地方,也有各自不同之处。参数都是基于拷贝机制,但拷贝的内容却有本质区别。有的传递地址信息,有的传递数据本身,有的传送容器。通过比较式教学,学生可以很好地体会其中的关键本质。由于作者之前讲授过C语言程序设计和C++程序设计这些课程,因此对比较式教学的过程组织和实施效果较好。
(二)案例式培养
Matlab与Python程序设计课程授课的核心任务是让学生掌握这两门课程的核心编程知识,从而可以编程解决实际工程问题。我们这门课程是案例式培养,即是致力于解决精心挑选的实际工程应用问题来编排和设计课程内容。让学生直接建立编程知识和实际问题之间的联系,这有利于让学生了解学习编程的目的,提升他们的学习兴趣,从而建立有的放矢的良性反馈学习机制,提高学生的学习效率。本课程采用案例式培养,有意识引入与当前社会发展以及日常生活密切相关的一些实际待解决的工程问题,使学生有效地对要解决的问题和需要学习的知识建立初步直观的认识。比如在讲Python机器学习编程部分,我们以车牌识别作为案例。分析了普通车牌识别技术在不同天气状况、照明情况下存在的识别困难。为提高识别率,需要更深的卷积网络来提取车牌的特征,做到更深层次的内容获取与识别,而构建深度卷积网络可以方便通过Python编程来实现。由于学生是有目的地带着疑问进行听课,因此更能理解老师讲授内容的重点与难点,学习积极性提高了,课堂的学习氛围也得到加强。另外我们课程组也鼓励学生通过参加各类竞赛、挑战赛把课程和实践结合起来。这些挑战赛通常会提供一些基础案例Demon,同学们可以结合这些基础案例进行入门学习和知识学习。本课程结合实例进行讲解,提高学生对问题的认识能力,并且使所学知识用于解决实际问题,有效锻炼学生的实际编程动手能力。