面向医学专业的“Python程序设计”课程教学方法研究
2020-11-09周旭李艳丽魏唯张宇楠聂丹丹
周旭 李艳丽 魏唯 张宇楠 聂丹丹
[摘 要]针对医学专业Python语言程序设计课程教学现状,为了让教学过程变得生动有趣,增强程序设计语言教学效果,该文利用任务驱动式教学的优点,根据Python课程的内容及特点,把任务驱动教学运用于Python课程的教学中进行研究。并且在教学中增加小组讨论和小组项目展示环节,以课堂精讲为主,课后答疑为辅,培养医学生计算机方面自学能力,训练学生程序设计能力,期望通过教学改革提高医学类专业学生的计算思维与科研创新能力。
[关键词]Python语言;任务驱动;教学方法
[中图分类号] G642,TP312[文献标识码] A[文章编号] 1674-9324(2020)44-0-04[收稿日期] 2020-05-08
引言
大数据时代背景下,医学生程序设计课程的定位是通过某一编程语言的教学,使掌握科研数据背后的医学意义。相比于其他程序设计语言,Python语言是一种面向对象、解释型计算机程序设计语言,是目前最接近自然语言的通用编程语言[1]。Python具有语法规则简单、易上手、易理解的特点,被一致认为是最适合入门编程的程序设计语言[2]。由于Python完全免费并且在人工智能、图像处理、数据挖掘和数据可视化等方面有不断优化的库,学生可以轻易完成各种高级任务,可以很方便地使用这些丰富的扩展库完成和医学数据处理相关的各种工作。通过学习基本的语法知识和第三方库安装方法自如地处理、分析和管理医学数据,学生既掌握通用程序开发技术,又能在程序开发过程中熟练调用通用的数据分析挖掘模块。Python程序设计语言的学习可以培养医学生大数据分析所需的数据素养,促进医学生自身专业能力的提升。
在教学随社会需求不断演化变迁的实践中,如何让医学生快速地适应大数据分析需求,精准掌握程序设计基本技能,提高计算思维能力。文章在Python程序设计课程教学方法上进行了研究,重点采用任务驱动的课堂教学,以课堂精讲为主,课后答疑为辅,同时在实验内容上进行改革,让医学专业学生掌握学习程序设计基本编程技能,能够独立编写程序,把计算机技术应用到医学领域,促进医学应用的创新发展。
一、教学现状
Python语言程序设计是大多数高校针对非计算机专业学生设定的一门必修公共计算机基础课程,此门课程主要是培养学生应用计算机技术来解决实际问题的能力。程序设计课程的特点是动手能力要求高、知识点多、重点难点多、课时少,大部分程序设计课程的学习要求学生在一个学期内由入门转化为熟练编程,顺利通过国家二级考试[3]。
大学新生计算机水平参差不齐,大部分没有用过具体的计算机编程语言进行程序设计实践。当接触程序设计类课程时,普遍感觉知识凌乱、内容枯燥、难以理解。对于传统授课的教学方法,只是让学生机械性地记住一些语法知识,程序设计课程的实验作业大多是统一布置的一个一个独立的小题目,前后缺少连续性、整体性[4]。在学期结束谈到对这门课程的感受时,仍有部分同学感觉所讲内容没有掌握完全。有些医学生仅仅能看懂程序却不会编程序,不能用python语言解决实际问题。
学生对Python在医学专业应用领域的见解图
二、教学改革方法
(一)课堂教学分配上,学习任务明确
第一节课展示应用范围,展示Python编程魅力,展示和医学相关例子,如肿瘤患者数据分析,医学图像处理等。同时,进行调查问卷,了解学生的需求。从而设计严密的针对本班级学生的教学计划和有倾向性的教学任务。图1为利用学习通对学生进行问卷调查“希望Python这门课对以后医学专业学习有什么帮助并帮你解决什么问题”得到的学生回答词云。从上图可以看出有些同学对Python和医学专业之间的应用关系没有明确想法,有些同学则侧重想利用Python解决医学辅助诊断,医学数据分析和建模,或对医学影像进行处理。针对学生需求,我们会在基础阶段向同学讲授基本的编程思想和语法知识,并在进阶拓展阶段,向同学们介绍一些和医学数据分析相关案例程序。把基础和进阶两部分教学阶段的学习内容分配在有限的教学学时内,让学生学会使用程序设计语言,掌握基本语法知识和应用实例。学习目标分成三部分:了解自然问题利用计算手段进行求解的基本思维方式,了解集成开发环境的特点和使用方法;掌握程序设计、模块化编程基本思想,具备高质量程序的良好编程素养;了解常用的算法和问题求解策略,体会算法、数据结构在解决实际问题中的作用。
(二)课前预习,课上精讲,课后复习
1.对学生进行分组。每次课前会发布学习任务文档,让学生了解每节课的重点难点,学习目标,同时将知识模块的相关案例程序发放给学生,要想写出程序,必须能读懂别人写的程序。学生先自己学习教材内容,对照教材和相关学习视频,自己研究下发的案例程序,遇到不懂的知识点进行标注,通过学习通、QQ群等交流平台进行讨论咨询。另外,学生通过前期关于研究程序方面的交流,逐渐掌握解决相似问题的基本方法。
2.项目驱动,分组进行程序设计。首先让学生了解本次课所要学习内容的主线,对重点难点进行区分。在项目任务驱动的教学模式中,教學成效的好坏直接取决于项目任务的设计,合理有效的项目任务设计才能成为教学的动力,才能引导学生自主探究学习,而过于简单或者过于复杂的项目设计,可能就不能达到理想的教学效果[5]。在组织教学内容方面,以完整的案例为依托,设计一些生活中常用的案例和项目覆盖教学知识点,将零散的知识汇总,难易适当,循序渐进地帮助学生掌握各种数据类型、程序控制结构,函数和文件处理等操作。以可视化界面和以Turtle绘图为例的程序会引起学生的兴趣。因此,引入Tkinter库和Turtle库,分别设计一个简单的医学药品管理程序和数码管绘制程序。借助医学药品管理程序向同学们深入讲解组合数据类型和数据操作、控制语句和函数的使用等等。采取逐步扩张法进行项目开发,将项目划分为一个个子项目,通过在教学过程中完成一个个子项目而逐步将整个大系统实现。而每个子项目又是随着应用的需求逐步提出来的,由此引进新的概念和新的教学内容。另外,通过绘制数码管重点讲授日期数据类型的使用和自定义函数的定义与调用。同时,给学生展示科赫曲线和数码管结合的小程序,激发学生的创造意识,提高医学专业学生学习程序设计语言的兴趣,促进Python语言程序设计课程教学成效的提升。
在开展项目任务驱动的Python语言程序设计课程教学中,教师要创新课程教学设计,突破以往课程教学担任学习教学模式,将学生从单个的学习模式中解放出来,组成项目任务的探究小组,制定明确的小组项目任务和目标,让小组成员的都积极参与到Python语言程序设计课程项目的任务实现中来,例如,教师就借助这样的项目任务教学,让学生围绕一个任务进行合作探究式学习,不仅能够增强学生之间的团结合作,还能促进学生对Python语言程序设计中的技巧和方法进行掌握,能够促进课程教学不断取得实实在在的成效。学生可以通过在创建窗体上添加控件的方式,通过完成具有其他功能的程序设计开发。比如将Tkinter和绘图程序结合,通过交互式界面展示绘制的多个医学化学结构分子式,或者开发医生生成绩管理系统,这些设计与实现会增进并巩固学生对新概念、新知识的理解的运用。由此,项目开发与课程教学交叉融合、相辅相成,从而实现教学目标并培养学生的计算思维。
3.课后复习答疑。教师要检查学生作业,通过学生在作业中的代码注释了解学生的编程思路和方法。课后让学生充分发挥创造力,在课本小例子的基础上进行创新,设计一些其他程序,以学生兴趣为导向,培养学生解决问题能力,在解决问题时学习知识。对于学生不理解的,教师可以采用多媒体PPT、实验课上机演示等展示相关问题。另外,教师鼓励学生通过分小组讨论方法进行归纳整理,实现本小组的项目。教师通过远程控制软件,帮助学生分析问题出现在哪里,协助学生一起调试程序,通过学习通软件中的讨论模块、通讯QQ软件的远程控制模块,师生之间完全摆脱了时间和空间的限制,在课后及时对知识点进行学习交流。
(三)实验改革
以往学生的实验过程,只是完成书上的例题,学生上机只是照搬书上的程序输入计算机,调试发现语法错误,输出结果,这样的实验安排不能很好地锻炼学生的创造力和想象力。无法调动学生的积极性,提高编程能力。将实验内容划分为基础实验和进阶实验(按学生需求划分实验内容)。
1.在基础实验阶段,主要是验证学生对基础python语句,函数定义使用,程序控制结构掌握的程度。在讲解字符串内置函数方面,设计敏感词隐藏程序,让学生掌握replace方法的使用,还增加一些其他程序,如猜数字游戏了解循环语句和分支语句的使用方法,强化学生的基础知识。
2.进阶实验阶段,主要设计一些和生活相结合的题目,让学生动手编程。目前很多编程语言教材上列出的习题多是一些数学计算题,这类题目虽然契合知识点,但是相对单调,而且容易误导学生以为该程序语言只能进行一些算术运算,渐渐学生会对该编程语言失去兴趣,我们的教学改革侧重为学生布置相对轻松的编程任务。
Python是最为灵活、功能强大的编程语言,在人工智能数据挖掘数据可视化方面有不断优化的库,以jieba库为例向学生介绍第三方库的安装方法,在掌握基础知识后,对学生进行能力测验,通过调查问卷获取学生兴趣,对学生进行兴趣小组划分,以小组为单位完成进阶实验内容。在项目任务驱动的教学模式中,教学成效的好坏直接取决于项目任务的设计,合理有效的项目任务设计才能成为教学的动力,才能引导学生自主探究学习,而过于简单或者过于复杂的项目设计,可能就不能达到理想的教学效果。因此,在项目任务设计中,我们给医学生设定5个方面的项目任务,每个方面需要安装的第三方库和一些关键知识要点都有相应的说明文档,并给学生发对应的例子和任务文档,要求同学们在给定例子的基础上,进行创新改进程序,填写制定的实验报告。同时,同学们也可以发挥想象力,完成这5个方面以外的其他内容。小组成员通过分模块,分功能合作的方式完成程序设计工作,不仅灵活地掌握知识,还提升自主学习能力。
(1)图像处理。Python图像处理医学图像主要借助于Pillow库,学生可以对图像进行分割渲染等等。Pillow库通过该程序可以实现对动图的图像处理,包括连接动图、灰度处理和手绘风格处理三个功能。
(2)爬虫统计分析。和爬虫相关的第三方库有urlli、requests等。可以利用爬虫实现医学专业英语名词和中文的汉译英工作。 (3)文本处理。Python文本处理可以分析医学病历,通过词云解析对病例进行词频统计,结合聚类算法得到患者的最终患病情况结果。(4)格式化输出。Python程序设计可以编写一个体检报告 格式化输出网页版。
(5)游戏设计。游戏设计需要第三方库Pygame。考虑到一些学生喜欢设计游戏及想要开发可视化界面的需求,以pygame库为例,给大家介绍贪吃蛇游戏的设计技巧。
按照上述项目划分和学生兴趣驱动,要求学生们在布置任务4周之后,提交本小组项目实验结果。大家均在既定的程序上进行了创新,开辟了其他有意思的程序并撰写了小组分工程序设计实验报告。另外,在课堂上让每组进行程序作品演示,测试他们对模块函数的理解程度,同学们对此非常感兴趣,演示的结果也得到其他组同学的认可。例如有些小组完成的是学生成绩分析及GPA统计程序。在用户登入成功后,可根据用户输入成绩数据计算绩点与平均成绩、平均绩点,并根据用户要求绘制学年成绩分析雷达图。还有的小组构建了一个以老式飞机大战游戏为基础,打造出坤坤与《逍遥游》中鲲的大战场景,将老套的游戏赋予了新的时代内涵。在原代码的基础上加入了背景音乐,对游戏界面进行了美化,对游戏速率和关卡进行了调整。还有的小组提交的作业是从网络中爬取下一些医学婴儿出生过程的图像,然后编程实现对图片进行连接、合成及手绘风格的处理。
实践表明,让学生带着问题去思考,在每次学习完新的知识之后,都可以通过一个例子,把之前的语法知识串在一起,这样不仅可以巩固基础编程知识,还可以进一步通过拓展练习增强学生的编程兴趣,学生充分发挥想象力,强化知识的应用,达到了预期学习效果。
三、考核方式
传统的课程考核是期末考试,通过最后一次考核很难评价学生的动手能力如何。新媒体时代下的考试不应该仅在最后考试,平时也有考试,在每一单元模块学完、甚至在每一次上完课后都进行课堂在线考试。在保证检验基本知识的同时,增强平时实践在考试比重,强化考察学生们的动手实践能力。所以这门课程的期末总评分数应该是如下构成:平时上课表现(10%)+平时在线考试(20%)+平时项目作业(30%)+最后的期末考试(40%)。其中,平时上课表现包括出勤率、课上回答问题情况,平时在线考试则是借助学习通,在讲完每章或者几个章节的知识点后,发布作业或者在线考试任务,及时掌握学生对知识点掌握情况,平时项目作业包括分小组完成的项目任务,它属于过程性考核,增加它在总成绩中的占比(30%),促进学生平时投入学习,保证学习质量,避免突击考试的应试学习。最后的期末考试实行无纸化考试模式,利用“万维全自动计算机基础考试平台”实现对于理论知识和程序设计能力综合测验。期末考试题型包括单项选择题,多项选择题,判断题,填空题和程序题,所有的题型覆盖书中知识点,考察學生的编程能力,基础知识能力。
通过在吉林大学医学专业3个班级中实施该课程考核方式,实现了综合评价学生的学习效果,提高医学专业学生学习程序设计语言的兴趣,这样的综合性考察方式满足对学生的学习情况进行客观评价。
四、总结
Python程序设计课程是计算机基础课程中医学生较难掌握的内容。文章探讨了教师在教学过程中如何设计针对医学生的教学案例,通过任务驱动方式让这门程序设计语言和医学生的专业紧密联合起来,从而提高学生的学习兴趣,让枯燥的语法教学变得生动有趣,增强教学效果,促进专业课知识发展和应用,进一步培养学生计算思维,提升自学能力,综合应用能力。
参考文献
[1]罗晓玲,张晶晶,郑斯文,等.Python语言程序设计教学模式改革研究[J].电脑知识与技术,2020,16(07):138-139.
[2]嵩天,黄天羽.Python语言程序设计教学案例新思维[J].计算机教育,2017(12):11-14+19.
[3]周乃富.新媒体时代下程序设计课程的教学模式构建[J].福建电脑,2018,34(09):155-156+146.
[4]王瑞,唐万梅.“MOOC+翻转课堂”的多元化教学模式研究与实践—以“Python语言程序设计”课程为例[J].软件导刊,2019,18(02):204-207.
[5]崔立新,焦彦敏,刘春帮.计算机任务教学中任务设计的有效性分析[J].信息安全与技术,2015,6(02):95-96.