工程实践项目驱动的Python课程教学改革探索
2019-09-26文欣秀王占全范贵生杨泽平
文欣秀,王占全,范贵生,赵 敏,杨泽平
(华东理工大学 信息科学与工程学院,上海 200237)
0 引言
清华大学副校长杨斌提出“对于‘新工科’建设要‘授人以欲’,创新是探索未知世界或解决实际问题,而未知世界或实际问题是不分学科的,创新的突破点往往是交叉学科。因此,‘新工科’建设尤为要注重学科交叉”[1]。因此,在计算机通识课程教学中,以培养学生分析专业问题能力为中心,探索多学科交叉融合的工程人才培养模式[2],通过工程实践项目展开教学改革真正提高学生运用计算机分析、解决各专业(如化学、化工、材料、生工等)问题的能力,是高校教师亟须解决的问题。
随着Python在国内外高校、就业市场的日益流行[3],Python在国内外高校非计算机专业中的教学引起了大量学者的广泛重视。目前Python的教学主要分为两种模式[4]:①将Python作为学习计算机编程的入门语言,利用其语法简洁、容易上手等优点帮助学生理解程序设计思想;②将Python作为一种辅助工具,运用其类库丰富、功能强大等特性进行复杂数据分析、深度机器学习等专题学习。此外,在新工科建设的背景下,许多创新创业大赛和专业学院都要求学生能够从具体问题(专业学习问题和实际生活问题)出发,基于实际工程项目进行需求分析、搭建系统框架、完成功能设计,并最终编写程序解决问题。因此,结合新工科建设要求,探索工程实践项目驱动的Python课程教学改革,从软件工程角度出发规划和设计教学模块,通过辅助教学系统对学生学习过程进行追踪,具有十分重要的现实意义。
1 面向工程项目的教学改革基础
新工科建设要求教师改变传统的知识点授课和实验模式,从学生专业需求、实际生活问题出发,不断探索新的教学模式,优化教学设计。
1.1 优秀作品基础
教师应尝试充分发挥Python的各种优势,指导学生与专业知识或实际问题结合,从真实需求出发研发各种软件系统。在2015—2018年中国大学生计算机设计大赛中,笔者共指导学生使用Python语言获得12项奖项,其中专业相关类的国家级一等奖作品3项,实际生活应用类国家级一等奖作品1项(部分获奖作品名称见表1)。
1.2 先修课程背景
Python程序设计作为一门为大二及以上学生开设的实践性强的选修课程,在课程中要求学生完成一套B/S架构的系统,这对学生的知识背景有一定的要求:一年级开设的大学计算机基础和C程序设计为Python项目的顺利进行提供了有力支撑(如图1所示)。在图1中,大学计算机基础课程中的数据库基础模块帮助学生理解关系型数据库的原理及设计方法,SQL语句的系统学习为网站后台的数据存取提供了手段;网站设计模块帮助学生熟悉网站架构及开发原理,HTML语言和CSS的学习为学生设计动态网站以及网站的美化提供了技术保障。此外,学生在C程序设计课程中通过3种基本结构、函数等模块的学习理解了程序设计的思想,通过简单数据类型、复杂数据类型及文件的学习掌握了数据存储的规则及特点,从而为面向工程项目的课程教学改革奠定了扎实的基础。
表1 2015—2018年部分“中国大学生计算机设计大赛”Python获奖作品
图1 先修课程背景
2 工程实践项目驱动的教学改革框架
二年级及以上本科学生在学习中会接触许多专业问题,如何通过分析将专业问题转化为计算机能够解决的问题,并使用Web页面或图形化窗体录入问题、运用数据库长期存储数据、调用算法实现数据的有效处理,最后将数据分析结果形象地展示出来,从而完成一个完整项目的开发,这是一项具有挑战性和趣味性的任务。4年来,笔者带领学生参加各种比赛,认为过去教师常常纠结的两个问题无需要过多关注:①具体的语法细节,因为这些知识碎片不仅可以从网上获取,学生之间也可以通过交流快速解决;②过于复杂的算法,本科阶段所涉及的专业问题通常并不需要过于复杂的算法。
2.1 软件工程思想指导下的项目规划
通过调查发现,目前针对校内大学生有各种各样的创新设计大赛,如“‘互联网+’大学生创新创业大赛”“中国大学生计算机设计大赛”“全国大学生机械工程创新大赛”等,这些大赛都要求学生具备工程项目设计与开发能力。作为目前TIOBE排行第3的语言[3],近几年Python凭借其各种优势受到越来越多学生的欢迎,成为参加各类大赛的首选语言。以“中国大学生计算机设计大赛”为例,要求学生不仅能完成创新性强、功能齐全、界面美观的作品,还要提供一整套规范的设计文档。因此,考虑到Python程序设计课程课时的有限性(共40课时,其中24理论课时+16实验课时),课程开始阶段的软件工程思想引导非常重要(如图2所示)。课程从历届获奖作品分析开始,通过多个优秀案例帮助学生理解软件项目的开发过程、规范文档的撰写思路、作品涉及的关键技术等,引导学生在课程第一个月(基础知识介绍模块)从专业课程或实际生活中找出待解决的问题,并完成需求分析文档。在后续的学习过程中,要求学生逐步运用所学技术,完成功能模块开发并撰写相应的设计文档,课程结束时上交项目和文档。由于学生不可能在短短几节课内理解所有获奖作品,所有获奖作品的视频和文档介绍均保存在华东理工大学自行研发的Piclass辅助教学平台上[5-6](2016年“中国大学生计算机设计大赛”二等奖作品,该平台具有微信点名、作业上传与自动批阅、手机微信刷题、师生互发消息、获奖案例分析等模块),学生可以随时在线学习,有效解决了课时有限的问题。
图2 基于软件工程的工程实践项目规划
2.2 基于工程项目的教学模块化设计
分析国内外大量的Python程序设计教材,以及MOOC上的Python程序设计课程,笔者发现大部分的授课安排还是以传统的知识点方式展开(基本数据类型、3种流程控制结构、复杂数据类型、文件、函数、界面设计、图形绘制等),比较适合初学者,但是对已经学习过C语言或VB.NET等编程语言的学生而言,重复学习的意义不大,转变教学思路,从软件工程的角度帮学生理清解决各种问题的思路,指引学生主动学习相关知识及技术是一种积极的教学探索。面向工程项目的知识模块设计(如图3所示)具体包括基础语法、数据获取、数据处理、数据存储、数据可视化及用户交互6个模块,通过获奖案例分析帮助学生理解和掌握相关知识:基础语法模块主要复习三大基本结构、介绍复杂数据结构以及文件、函数与类等方面的知识;数据获取模块介绍Requests爬虫框架、页面解析及各种专业数据的格式转换;数据处理模块介绍Numpy矩阵运算、Pandas数据分析以及经典的分类、聚类算法;数据存储模块讲解文件存储数据、如何访问MySQL数据库;数据可视化模块介绍图形绘制Matplotlib以及网页动态展示Echarts;用户交互模块介绍Web框架Django、前端框架Bootstrap以及微信接口开发等相关知识。
2.3 验证型、创意型并行的作业设置
伴随传统授课方式的往往是规范化的作业,作业内容常常为指定算法实现、规定图形绘制、经典数学问题解决等,很少考虑学生的个性化需求,导致学生的厌倦心理增强、抄袭现象严重。Python是一门适合发挥学生个性和特长的语言,经过4年的教学实践,笔者根据学生基础设置分层作业,并将作业分为验证型作业和设计型作业,学生根据自己的能力完成相应的题目,验证型作业由机器自动批阅并自动生成分析报告[6],帮助学生掌握相关知识点和算法。在学习完3种基本结构和文件后,学生即可在Piclass上完成验证型作业:如判断某学号学生是否为我班学生,是则打印欢迎信息,否则显示错误信息并再次提示用户输入学号,如果多个测试用例测试程序正确,系统自动打出满分。设计类作业由学生自行进行需求分析和方案设计,教师只需对学生的作业提出要求,制定评分标准,由学生之间实施互评,如材料学院的大三学生根据研究生师兄要求实现了电化学数据的自动处理,解决了复杂数据的处理问题。学生在互评过程中拓展了自己的视野,有助于提高学生完成作业的积极性和主动性。
图3 面向工程实践项目的知识模块设计
2.4 “综合大作业+开卷考核”的考评机制
传统的考试往往是标准化考试,很多高校考试都采用闭卷考试方式,机器客观题+人工主观题的阅卷方式,但是这种考试方式并不能真正判断学生分析问题能力以及实际编程能力,与新工科建设的目标不一致,因此进一步加大平时大作业的分数,修改闭卷考试为题目更加开放灵活的开卷考试是一项积极的探索:如本课程总成绩的合成公式为平时出勤(10分)+平时作业(10分)+综合大作业(30分)+期末开卷考试(50分),出勤成绩由Piclass辅助教学系统自行统计;平时作业由验证型作业和设计型作业合成,由Piclass系统和学生共同打分;综合大作业由2~3名学生合力完成,要求设计一个包含前后台的网站(网站类型及功能自选),评分标准分为文档10分+答辩5分+创意5分+功能完备性5分+界面及算法5分,由任课教师打分。最后,在大作业答辩的基础上,从综合评分高的学生中遴选出具有发展潜力的优秀成员,组成团队进一步培养,积极参加创新创业大赛。
3 教学效果评价
在基于工程实践项目的教学改革过程中,Piclass辅助教学平台不仅保存了历届学生的获奖作品供学生们参考,还通过考勤、作业等实现了学生学习过程的追踪。在以上多种因素的激励下,学生的很多综合大作业作品都超出了课程教学范围,如2017—2018年第2学期学生设计的花梨炒股、基于图像识别的公交站牌语音播报系统、新型立体式小区停车库上位机设计等。虽然这些大作业离参加相关大赛作品还有一定差距,但是很多优秀的学生和作品已经被成功地选拔出来,后续鼓励学生参与学校的创新实践基地,培养并组织参与各种竞赛,不断提高学生的创新实践能力和计算思维能力。在近3年教务处实施的教学测评中,Python程序设计课程的测评分数始终保持为优秀(见表2);在课程结束时也对学生的具体学习情况展开了测评,如对于2017—2018年第2学期学生的学习收获调研中,学生可以自由选择回答相关问题,调研结果见表3。
表2 近3年教务处获得的学生课程测评结果统计
表3 2017-2018第2学期学生学习收获调研
4 结语
目前,新工科建设正在如火如荼地展开,要求我们改变传统的知识点授课模式,从社会实际需求、学生专业需求出发,探索新的教学模式,着手新的教学设计。以创新创业竞赛为导向、工程实践项目为引领的Python程序设计课程在实际教学过程中取得了一定的成绩,大大提高了学生的创新实践能力和问题分析能力,笔者下一步的目标是进一步探索各类算法在各个专业中的应用,提高学生的计算思维能力和学术研究能力。