面向研究型及应用型医学人才培养的Python教学探索
2018-09-05李秀敏王希杰刁丽娟
李秀敏,王希杰,刁丽娟
(滨州医学院,山东 烟台 264003)
随着我国科技和经济的迅猛发展,国家需要越来越多高质量、高素质、高水平的创新型人才。习近平总书记在十九大报告中提出的实施健康中国战略,为高校培养研究型、应用型医学人才队伍指明了方向。人才是医药卫生事业发展的重要基石,在提升国家整体医疗服务水平和实现全民健康目的进程中起着关键作用[1]。
医学人才的研究能力和实践应用能力包括医学研究、临床决策、指导临床应用等,是衡量医学院校人才培养的重要指标之一[2]。计算机科学在医学发展和研究中发挥着越来越重要的作用,在电子病历、移动医疗、生物信息学、健康物联网等新型交叉学科方面有着广泛的应用。计算机知识和应用能力已成为医学生综合素质的重要标志。
1 医学院校研究型和应用型人才培养现状与建议
1.1 现状
随着社会的发展,对医学生的综合能力要求越来越高。医学生必须具备良好的科学素养和科研能力,善于从医学实践中客观地分析和解决问题,才能适应当代社会发展的需要。科研能力主要指在开展科学研究活动时,运用科学方法探求并解决问题的过程中所表现出来的本领,主要包括信息分析判断和处理能力以及实践动手能力等[3]。近些年来,我国医学教育事业蓬勃发展,但也存在着资源短缺、师资不足、学生综合素质下滑等现象。部分医学毕业生就业后在继续学习能力、知识应用能力、科研创新能力等方面存在不足,学生综合素质参差不齐。医学本科生专业课程繁多且理论课时一般多于实践课时,同时教学计划中涉及创新性、应用性、设计性的实验课较少,在本科生中未开展相关课程的学习,科研基础知识和方法未普及,使得学生科研意识薄弱。
现阶段,我国从事医疗卫生行业工作的人员数量在不断增多,城乡医疗机构分布不均、人员素质偏低,这与我国的高等本科教育中实践应用型的人才培养不足有很大关系[4]。本科教学中要培养学生全面发展,不仅要教授其理论知识,还要让学生具备足够的实践能力,尤其在大数据时代背景下,要使其能够熟练应用某种数据分析工具来解决实际问题。
1.2 实施课程改革,更新教学内容和教学方法
为培养医学院校学生的研究和应用能力,需进一步厘清思路,改革与创新教育教学模式,深化“互联网+”时代下的教育改革。医学院校学生掌握一种程序设计语言,能够更好地掌握专业前沿知识,有利于今后的科研与技术创新。
大数据时代背景下程序设计课程的授课中除了掌握基本的程序开发方法外,还应进行大数据分析所需的技能素养和思维方式的训练及培养。Python已经成为流行的编程语言和科学计算的重要平台,在数据分析、机器学习、Web开发、图像处理等多个领域应用广泛,因而Python已经成为医疗等数据分析领域中最常用的语言。Python语言语法清晰易懂,在培养医学院校学生专业能力方面具有很高的教学价值。教学中采取让学生多参与、多讨论等方式,多为学生提供一些实践案例,做好研究型学习。
2 医学院校Python程序设计课程的教学实践
2.1 Python程序设计语言的特点
Python语言设计简洁优雅,安装便捷,学习效率比较高。通过Python的学习,可以促使学生把更多精力放在解决问题能力和思维能力的培养上,而不是关注其内部实现。Python语法简单,没有C语言中的指针、地址等涉及计算机系统结构的元素,对于具有医学背景的学生而言比较容易学习。
在Python中,不需要事先声明变量名及其类型,直接赋值即可创建各种类型的对象变量,这一点适用于Python任意类型的对象。Python是一种动态类型语言,变量的类型也是可以随时变化的,见图1(示例中安装软件为Python3.6,所有程序在IDLE中进行)。变量x的类型从int变为了str类型。Python中的变量并不直接存储值,而是存储了值的内存地址或者引用,这也是变量类型随时可以改变的原因。在Python中,没有字符常量和变量的概念,只有字符串类型的常量和变量,单个字符也是字符串。逻辑运算符and和or具有惰性求值或逻辑短路的特点。在编写复杂条件表达式时充分利用这个特点,合理安排不同条件的先后顺序,在一定程度上可以提高代码运行速度。例如3>5anda>3语句中,结果为False,并没有定义变量a。语句3<5ora>3,结果为 True,不需要计算 a>3。Python 主要有 for循环和while循环两种形式的循环结构,这里带有else子句是Python循环语句的特色之一。如果循环自然结束时则执行else结构中的语句,如果循环是因为执行了break语句而导致循环提前结束则不会执行else中的语句,见图2~3(图2中的代码执行结果为图3所示,可见并不执行else子句)。
图1 查看变量类型
图2else子句的理解
图3 图2语句执行结果
Python突出的优势还体现在拥有丰富的图形库和科学计算库,主要包括以Pandas为代表的数据分析库、矩阵计算模块Numpy、科学计算模块Scipy、数据可视化工具Matplotlib等。通过学习Python,不但可以培养学生分析和解决问题的能力,提升学生的科研和应用创新意识,而且有助于学生掌握一种终身受用的编程语言。
2.2 Python课程教学内容的设置
程序设计课程的教学重点是培养学生用计算机解决问题的通用方法,从而培养计算思维能力[5]。针对医学专业学生而言,结合各自的专业和兴趣进行Python模块的学习,适当增加学生的知识面和学习深度,同时结合所学内容开展大学生创新项目的科学研究,掌握数据处理的主要方法。
Python基础知识部分主要有基本数据类型、变量、运算符、表达式、程序流程控制、函数和模块等,涉及的类库主要有Turtle库、Math库、Random库和部分内置函数等。例如求5的阶乘可以通过内置函数用语句:reduce(operator.mul,range(1,6))来实现,程序简洁流畅。能力提升部分主要包括字符串、高级数据结构中的列表、元组、字典、集合等,涉及的类库主要有Datetime库、Calendar库、Time库。应用部分中主要是图像处理和数据处理、分析与可视化,涉及的类库主要有Graphics库、PIL库、Numpy库、Pandas库和 Matplotlib 库等[6]。
大数据背景下医学院校的学生应掌握大数据分析的基本技能,所以除了基本的程序设计技能外,更应侧重数据分析挖掘基本思想以及主要应用方法的学习。在Python语言数据处理过程中,首先将获取的数据转换成numpy数字,然后用Python提供的Pandas和Scipy模块进行数据分析及处理,最后提取数据特征并用Matplotlib库中合适的图形、图表表示出来[7]。例如,使用Python绘制出的散点图和直方图(见图4~5)。课程教学过程中,可以结合专业的不同特点选取介绍不同的类库,从而加强学生研究和应用能力的培养,为未来从事数据分析和应用工作打下基础。
图4散点图
2.3 教学方法的合理选择与思考
课堂教学中并非独立地应用一种教学方法,而是在不同的教学阶段,根据教学内容、教学对象的不同,选用适合的教学方法进行教学[8]。可以采用案例教学法、演示法、讨论法,并尝试运用慕课、微课程、翻转课堂等在线课程模式与传统教学模式相融合,进行教学方法的改革。教师要积极推行以学生为中心的教学理念,教师授课和学生讨论可以同步进行,同时配合相应练习,以巩固学生对知识点的理解[9]。课下给学生推荐网上教学资源,拓宽知识面,提高学习效率。
图5 直方图
我校已在2016级、2017级医学生中开设了Python程序设计选修课程,在教学过程中,为了激发医学生对算法中晦涩难懂知识的学习兴趣和思考积极性,采用了所见即所得的动态交互模式进行授课,将抽象、枯燥的教学内容以生动形象的形式展现,深入分析编写代码所涉及的算法思想,增加趣味性,促进学生对知识的理解与消化,增强教学效果。例如,通过使用Pythontutor图形化工具,可以观察程序执行过程,更好地理解代码,并对可能出现的问题进行现场调试。选取的Python案例,包含模块、函数、程序控制结构、列表的综合应用,箭头表示当前运行到的位置(见图6)。从程序执行的可视化过程可以很清楚地跟踪变量的变化和函数的调用(见图7),输出结果见图8。这种动态演示使抽象的算法简单明了,通过这种方式与学生进行互动,便于学生通过直接比较结果的方式掌握Python程序设计的精髓。
图6 代码
工欲善其事,必先利其器。选择合理的调试方法和工具对提升学习效果至关重要,我们可以在程序中增加输出语句,了解程序的运行和变量的值,缺点是程序变得稍微复杂。另一种较直观的方式就是使用断点调试和单步调试。例如利用Py-Charm调试程序时,在某行增加断点后,当程序运行到断点时就会停下,可查看此时各变量的值,从而进行代码的调整。
3 结语
对科研能力和应用能力的要求是研究型人才培养规格的核心。本科阶段培养学生养成主动思考、主动实践的思维方式,使学生能尽早掌握科研基本思路、基本方法,有利于培养学生的创造能力和创新精神[10]。应用型人才要被实际应用于某个领域,重点强调其分析问题、解决问题的能力,还包括自我发展能力、终身学习能力。
图7 程序执行可视化模拟
图8 程序输出
教学实践表明,Python语言程序设计课程的学习可以锻炼学生的临床思维和科研思维能力,是培养医学生数据分析处理能力的较好途径。我们将继续以学生为教学主体,持续探索如何将课程与专业实践应用更好地结合,为培养研究型和应用型医学人才而努力。