Matlab与Python程序设计课程教学探索

2022-06-25 22:36骆剑平郑能恒邹文斌何志权
高教学刊 2022年18期
关键词:教学探索

骆剑平 郑能恒 邹文斌 何志权

摘  要: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,同学们可以结合这些基础案例进行入门学习和知识学习。本课程结合实例进行讲解,提高学生对问题的认识能力,并且使所学知识用于解决实际问题,有效锻炼学生的实际编程动手能力。

(三)对象式传授

对象式传授,即是需要针对不同的学生群体在一些特色教学环节选择不一样的教学内容和教学手段。本课程授课对象大体可以分为电子工程专业、通信专业、微电子专业和集成电路四个专业的学生。前两个专业以后的就业方向可能更多偏向软件,而微电子和集成电路专业的学生可能更偏向硬件多一些。对于前两个专业学生需要在整体程序设计方面要求更高,学习主要目标是利用Matlab与Python进行专业综合设计及应用。因此,对于这类学生在授课内容的选择上除了基础的编程知识之外,更需要注意选择综合性更强的系统设计类内容。在教学方法上也更强调对整体问题的认识,注重锻炼培养他们系统综合设计能力。对他们的考核也是以系统性问题解决为抓手,突出问题综合解决能力的考核。对于微电子和集成电路专业的学生,学习主要目标在于对一些局部问题的优化和解決,拓宽学生的知识面。因此,对这部分专业的学生在组织授课内容时以较小的工程应用问题为主,有意识培养他们对于某个问题的优化和求解方面的能力。在教学方法上也更强调学生局部优化能力的培养,注重学生对某个问题精益求精的解决思路。在考核时以基础编程知识为主,突出对知识面的了解和对小型化问题的求解能力。对象式传授有利于针对不同层次的学生准确匹配合适的教学内容和教学方法,使学生的学习效果收益最大化。

(四)互动式提高

互动式提高教学,即是在教学过程中让学生充分参与到具体教学过程的教学方式。Matlab与Python编程这门课程由理论课学时和实验课学时相结合,课上学习和课后巩固相结合,每个步骤都需要师生互动参与才能发挥最好的学习效果。课堂上的互动式学习,主要是需要有针对性地设计课堂提问和回答环节让学生融入到课堂。这门课程众多知识点相互关联又各有特点,我们重点针对容易混淆的知识点来设计提问环节。这不仅让学生精力可以更好地聚焦在课堂上,通过提问还可以让学生对重点知识起到重点理解和掌握的效果。实验课的互动式学习,主要是在实验过程中老师参与到学生编写代码的过程之中。针对具体的实验任务,学生在编程实践过程中有问题随时向老师提问。这要求实验课时老师不能在讲台被动等待,需要不断游走在学生实验电脑台前回答学生问题,同时不断发现问题,及时纠正并给予指导。通过师生之间互动交流共同完成实践任务。课后的互动式学习,我们主要是通过班级微信群来开展,老师根据教学内容布置学习任务、作业;学生有问题随时在平台提问,老师也留意学生意见反馈,第一时间回答问题。通过互动式学习,让师生一起全程高效率参与到教学过程中。

(五)深入式巩固

深入式巩固主要是对上课学习到的知识进一步提升和巩固的过程。本课程主要通过布置项目作业的方式开展。结合Matlab与Python编程的特点以及深圳大学电子与信息工程学院学生的将来就业情况,主要在人工智能、机器学习和智能仿真这几个领域布置课后案例作业,让他们用所学的知识进行实际编程来解决问题。程序设计课程和其他课程最显著的区别是一定要实际动手编程才会掌握牢固,才能达到期望的收获。因此深入式巩固这个环节在这门课程的教学必不可少。比如其中的一个题目是“用Matlab和Python分别设计十层神经卷积+残差网络实现Cifar数据库的自动识别”。课程作业布置下去后,经过在线答疑等环节,一周后班上绝大多数同学都能独立完成该作业,写出对应的代码并完成调试和测试,掌握了开发深度学习网络的全流程。在完成较大作业时有些同学往往会有困难,这时老师提供的答疑通道非常重要。通过班级微信群来建立答疑平台。本课程通过类似的深入巩固式题目和教学方法,让学生在实践动手编程中对课程内容达到熟练掌握的目的。

三、结束语

本课程围绕:(1)如何在有限的教学时间内设计难度适中、抓住核心重点的案例教学内容;(2)如何在比较式教学中把握内容的横向比较而不会引起知识的混淆副作用;(3)如何设计合理的对象式教学方法等几个核心问题,在以下方面给出了具体措施并付诸实际教学,取得了很好效果。

精心设计课堂教学内容,压缩旁枝末节,提炼核心内容,抓住数据结构和过程设计这两门编程语言的精髓精心编排内容,使得教学有的放矢;组织实验课内容解决目前实验课内容知识碎片化、重复性突出、不利于培养学生宏观思考程序设计的思维的不足。

比较式教学通过对类似的内容用不同编程语言的视角(Matlab、Python、C、以及C++)进行讲授和阐述,以甄别它们之间的特点和差异,让学生学习通过比较来提高记忆辨识度,从而达到摆脱对不同语言记忆纠缠不清的困惑,提升对它们之间共性的了解,进一步对各种语言达到融会贯通的水平。

案例式培养使得学生程序设计不再纠结于语法繁琐的记忆,而是从整个案例工程的角度审视和思考程序的整体构建和运行方式,培养用程序设计解决问题的整体思维。

对象式传授措施因材施教,达到激活学生学习热情、培养编程兴趣、提高教学效率的目的。

参考文献:

[1]王颖杰,刘海媛.虚拟仿真软件在电气专业教学中的应用与实践[J].科技导刊,2020(33):37-38.

[2]王新良,马耀博.基于Python语言的“人工智能”课程教学改革研究[J].科技导刊,2020(2):145-146.

[3]马文秀,李焱.Python程序设计从知识型课程向能力培养型课程的改革实践[J].电脑知识与技术,2019,15(28):162-163+187.

[4]REMINGTON T L,BLESKE B E, BARTHOLOMEW T, et al. Qualitative analysis of student perceptions comparing team-based learning and traditional lecture in a pharmacotherapeutics course [J]. American Journal of Pharmaceutical Education,2017,81(3):1-9.

[5]SHIEH D. Theses lectures are gone in 60 seconds[J]. The Chronicle of Higher Education,2009(26):1-13.

猜你喜欢
教学探索
内蒙古商贸职业学院国际商务会计人才培养的实验教学探索与实践
高职国际交流与合作背景下的剑桥商务英语教学探索
基于素质教育视角下的民族高校逻辑学教学探索与实践
高中数学课堂中德育溶合的探索
高分子材料与工程专业综合实验的教学探索