教学不是个体行为,而是教师、学生、教务管理三方协同开展的活动。因此,不同类型的学校必定适用不同的教学模式。
近十年的高校教龄,一直在二本任教。直到2020年春季学期,才第一次在重点大学的讲台主讲本科核心课程。两种层次的学校,教学模式存在着根本性的差异,这源于学生情况的根本区别。
学习目的 学生的学习动机,是教学有效实施的前提。学习动机的影响因素很多,非常复杂,其中最为关键的是:教与学一定要与职业定位相契合。据我的体会,在广大二本非职教型大学的工科专业,很多学生的自我职业定位都与培养方案不匹配,他们并不把从事专业技术工作当职业理想。学生的自我定位目标与学校的培养目标脱节,成为一个显著的问题。而在研究型大学的信息类专业,学生的主流职业定位瞄准IT业研发岗位,这就与培养方案大体一致。确保了一定的课程学习积极性,特别是实践相关课程。
我开设的《科学计算与编程》课,主干内容是传统的科学计算数值分析方法,但针对学校“信息黄埔”、“码农摇篮”的特色定位,对编程能力的训练进行了一定的强化。重点培养这样的能力:将具体的数学模型、公式和算法通过适当的数据结构和高级语言转换为计算机能够处理解决的程序代码。这是作为研发工程师和科学工作者所必备的基本功。在课程学习的过程中,凑巧发生了美国政府干预一些国内学术机构使用商业软件Matlab的事件。我告诉学生:“学习这门课程,就是学习怎样独立开发一个全新的科学计算软件开展科学计算,不依赖Matlab这样的成品软件。”这有效激发了学习兴趣。
教学方式的变革 满堂灌的原始教学方式不利于发挥学生的主动性,应该避免。作为一门实践性较强的课程,更不可满堂灌。课堂教学的灵魂在于师生互动,而不是一方尽讲一方尽听。课堂练习一直是我爱用的方式:全体都行动起来做题,最后叫几个同学上黑板演示结果。《科学计算与编程》这门课需要编程运行,仅仅用草稿纸和黑板演算是不够的。在开课之前,就曾设想,要求学生携带笔记本电脑上课,在课堂现场开展编程练习,然后利用通信网络将练习结果实时汇总,集中展示。结果迎头遭遇疫情,一律改为网课。就这样阴差阳错,不经意间在这个特殊的时间节点上被动开启了教学基本方式的重大变革。一方面,随着信息技术的发展,变革的客观条件已经成熟;另一方面,疫情迫使我们迅速改变习惯,采纳新的教学方式。可以想见的趋势有:
1. 无纸化。无纸化是信息化大势所趋。有很多优点,比如低碳环保;利于资料保存,不占地方,不容易丢失记录;方便检索、归纳、整理、复制。以往教师要保管大量的纸质实验报告和作业,不但占地方,还容易丢。无纸化以后,提交和保存作业都方便,甚至存在云端连本地存储空间都不占。看到一些学生用PAD写写画画,草稿纸也可以退出历史舞台了。上学只带一台PAD的时代已经到来。
2. 综合运用信息工具。现在有一些专用教室能实现课堂教学线上线下同步进行。但即使不用专用教室和设备,仍然可以提升课堂的信息化程度。比如使用QQ教学群。学生可把课堂练习的结果截屏传到QQ群里。《科学计算与编程》课有两类课堂练习题。一类是数学理论推导,一类是编程实践。对于比较简单的定理证明过程、公式推导和计算例题,尽量在课堂上专门留出时间,让学生现场动手自己做。几分钟以后,全班就陆陆续续把结果发到群里了。思路各不相同,形式五花八门。比如编程练习,用M语言、C语言、JAVA、PYTHON的都有,计算结果还能可视化。这种课堂练习的好处很多。同学们可以互相点评,彼此之间有明确的横向比较。老师可以动态掌握教学效果,实时发现问题并做出调整。各同学完成次序一目了然,可以在编程速度上激发大家的竞争意识。当然也总有一些同学过了十几分钟才姗姗发出答案。这虽然影响了后续听课,但也能体现学生对练习的执着和主动性。
毕竟是重点大学的学生,对于课堂提问,能够积极主动回答;对于我设计的课堂练习环节,大都能正常作答,出题几分钟后QQ群就不停闪烁,出现几十份答案。很多同学的数学推导能力较强,我猜源自中学练出来的解题功力。作为大二的学生,编程基础初始个体差异较大。但经历了一个学期的课堂练习、课后作业与实验的锻炼,编程能力的个体差异不断缩小。
教学内容的设计 《科学计算与编程》的课程教学目标由三个不同方面组成:
1. 掌握一些数学概念和理论,如病态问题、范数、条件数、不动点、收敛阶、雅可比矩阵等。这些数学知识比大学微积分、线性代数和概率论的基本内容更加深入。有助于为将来从事科研工作打好基础。
2. 学习一些常用的数值计算或分析算法,如牛顿迭代法、龙格库塔法、最小二乘法等。
3. 提升编程能力。
这三个方面,从理论角度,难度依次减低;而从实践角度,却实用性依次递增。传统的数值分析教材内容多,难度大;即使仅学习算法,过程和细节也大都比较繁难。例如最经典权威的李庆扬版教材,定位于“研究生或大学高年级学生”,且基准课时设置为72小时,属于一门大课。而我仅有32课时,而且是对大学低年级学生开课。因此教学内容的取舍和设计颇费周章。这门课其实难学难教。这也是大部分学校都从培养方案里删去了此课的原因之一。另一个原因是目前有很多现成的商业软件可用,实践中已不再需要靠自己从底层设计算法、编写代码。据我所知,教二本学生学习使用商业软件都很吃力。
鉴于以上,设计教学内容时主要有如下考虑:
1. 加入了蒙特卡罗法基础知识。蒙特卡罗法易于理解,适用性广,算法简单且计算复杂度不会随问题复杂度递增,而且对具体问题的解决过程无不渗透着建模的思想,适合低年级本科生学习。尽管有其他课程如《系统工程》对蒙特卡罗法也有介绍,但本课程作为全专业必修的核心课,还是加入了有关知识。将多重定积分和代数方程求解作为重点,并穿插了一些比较有趣的建模问题。
2. 一些重要的数学概念,如范数、条件数、不动点等,务求扎实掌握。
3. 算法学习突出重点,特别是对于自动化专业,牛顿迭代法、龙格库塔法和最小二乘法尤显重要。对于一些虽然实用但较为繁难的算法,如快速傅里叶变换,因课时限制,只能略述其思想。学生先在原理上初步了解,可以等以后实践中用到再查询工具书。
4. 作为一门工程数学、实验数学类课程,不是计算机课。我们假定学生具备基本编程能力,不限定编程工具,不刻意占用课堂时间讲授编程知识。对编程能力的辅导与提高主要通过课堂练习和课后作业与实验等实践教学形式进行。学生自己动手做,教师检查与纠正。
教学总结 一学期三个班认真教下来,最后期末考试的成绩略为低于预期,出现了一些不及格的情形。经过反思,主要问题总结如下:
1. 对重点大学学生的真实水平做了过高的估计。他们毕竟只是学生,〇〇后的孩子,不应期望过高。教师对学生的了解,需要经历一个过程。有时这个过程还会比较漫长。
2. 因为高估了学生水平,所以教学内容分量偏重了。一些知识显得有些过难过深,客观上可能对学生的自信心和学习兴趣都有负面影响。另外本来就只有16次课,又有2次课学校放假没上,部分课时有点赶进度,知识密度偏大,也影响了教学效果。以后将更加注重教学内容的进一步凝练和对重要知识点的强化。
3. 疫情原因,全在线授课。相比线下课堂,教学效果还是打了折扣。一方面,不能实时观察学生的反应,及时调整教学方法。其实课堂表现积极的学生,统共就那么十几个。这些人的活跃容易造成假象,使教师觉得全体都在认真投入,忽略了那些划水摸鱼的问题学生。另一方面,坐在桌前对着冷冰冰的电脑屏幕讲话,总归感觉有点僵硬,缺失了一些灵动。
4. 对助教的培养和要求不够严格。主要是没要求助教随堂跟课。学习本门课程颇有难度。助教毕竟只是研一的学生,还是个孩子,时间规划和自我约束能力肯定都不成熟。助教平时其他事务多,投入在课程学习的时间不够,慢慢就跟不上教学进度了。助教自己对知识掌握得不深入,甚至可能不如本科生,能在教学上给我提供的有效帮助就很少了。以后一定硬起心肠,对助教严格要求,严格培养。
转载本文请联系原作者获取授权,同时请注明本文来自蔡宁科学网博客。
链接地址:https://wap.sciencenet.cn/blog-1213429-1257997.html?mobile=1
收藏