-
2020年7月,IEEE Spectrum公布了2020年年度编程语言排行榜,Python语言再度蝉联榜首,Java语言和C语言分别排名第二和第三,Python语言已连续四年夺冠[1]. 近些年来,Python语言在全球引起广泛的关注,不仅在IEEE Spectrum编程语言排行榜中,在TIOBE排名上,Python也在排行榜的前列,Python是一个开源语言,拥有大量的库,可以高效地开发各种应用程序. 其特点是:简单、高级、面向对象、可扩展性、免费开源、可移植性、丰富的库、可嵌入性[2]. 目前,国内外众多高校的人工智能、通信、软件工程等相关专业将Python程序设计作为专业必修课,也有高校将Python程序设计作为本专科学生的计算机基础课. 在“互联网+”的时代背景下,加上当前大数据、云计算、人工智能技术等领域的推动,Python将会持续获得人们的关注与青睐.
全文HTML
-
高校公共基础课的授课对象基本都是入学不久的新生,而Python程序设计课程中很多IDE是全英文的环境,涉及到很多计算机专业英语词汇,加之在学习程序设计过程中需要有编程思维,部分学生在高中阶段没有接受过程序设计类的课程和操作培训,导致突然进入python程序编程阶段感觉不适应,如果教学模式不更新,很难使学生从零基础状态转变为独立自主的编程状态,容易导致挫败感[3]. 大部分学生不是计算机或软件相关专业,对编程类的课程不关注或根本没有兴趣,认为自己将来可能不会从事编程和软件开发类的工作,认为Python程序设计是软件开发人员才学习的.
-
通过分析文献[4-6]和兄弟院校间组织的教学论坛交流结果发现,目前的教学方式大多以教师讲授理论知识,课后上机实验,理论知识很多需要课后消化理解,上机实验时,学生模仿教师的操作“照葫芦画瓢”,只能参照实验案例中的代码机械地敲键盘,遇到的实际问题不知从哪里打开突破口,一脸茫然,不能运用所学知识和编程思维去解决问题.
文献[7]认为,传统的教学方法是任课教师在理论传授中,在多媒体教室详细讲解知识点,学生不能实时动手操作. 例如在Python常用语句知识中,涉及到的if语句、if-else语句、while循环和for循环以及循环嵌套、break语句、continue语句等结构和使用方法中,在多媒体教室需要两次课左右,如果通过案例项目来实际操作,可能只需要一次课学生就可以掌握这些语法和语句的应用场景. 这种教学方法,并不适合Python程序设计这类的课程.
文献[8]将项目驱动运用到Python课程教学中,提出一种以抽签系统作为一个连贯的实验项目驱动教学改革,该方法主要目的是激发学生学习兴趣、提高动手能力、引导学生创新. 在课程案例设计上,主要是由团队群策群力来完成开发任务,但该方法在实施过程中不能及时有效监测到每个学生的学习情况. 因此,如何引导自律性不高、配合性较差的学生积极参与实践过程,是Python语言教学实践需要研究的重点.
-
如何提高学生的学习兴趣和自主学习积极性是首先急需解决的问题. 传统的教学方式需要改变,理论课安排太多,实验课程太少已不能满足社会发展的需要;在教学案例的设计上,要充分考虑到学生信息技术基础参差不齐、所学专业背景不同,以项目教学法为基础,以“分类别”“进阶式”为主线,由易入难、循序渐进地对实验内容进行规划与设计. 立德树人是高校育人之本,项目内容设计上对课程内容与“课程思政”的融合进行思考,提出通过项目教学法巧妙运用“分类”和“进阶”方法实现实践教学与“课程思政”的有机融合,培养学生的爱国精神、工匠精神、创新精神、团队协作精神等[9].
1.1. 学生对编程的理解
1.2. 教学方式和方法
1.3. 教学改革拟解决的问题和方法
-
项目教学法最早起源于18世纪的欧洲,19世纪中期推广至美国,经过不断发展,在20世纪中后期逐渐趋于完善,成为一种重要的理论思潮[10]. 项目法教学是一种以学生为中心,将实验内容作为一个项目分发给学生,同学在教师的指导下互相协同合作,主动思考、自主学习并提出解决问题的思路与方法[11]. 在完成整个任务过程中,学生需要设计解决方案、组织实施、运用技能和给出评价,从中获取到专业知识与操作技能. 与传统教学模式相比,教师由原来的知识传授主体转变成引导者,与学生角色互换,让学生自动去探索学习、接受知识. 项目教学法重点培养学生自主学习能力,提高综合技能和知识运用能力,使学生能尽早熟悉未来的工作任务或相关专业技能[12]. 项目教学法在理工科类课程教学中应用广泛,项目内容按照教材和考核要求进行设计. 根据剖析Python程序设计教学现状,在筛选教学内容阶段,要充分考虑到实验内容的层次应该由浅入深、由易入难、循序渐进,学生在学习过程中才不会出现实验内容不连贯、与理论脱节、厌学等情况. 在项目实施过程中,教师需要对项目内容提前进行设计、筛选,科学分析、整合、分类,合理设计课程内容,极大挖掘学生的实践操作能力,让学生在项目实践过程中既产生了兴趣又提高了程序设计能力[13].
-
项目教学法主要是指在教学中采用完成某个项目的方式,以学生为中心开展项目实践,教师作为引导者监控整个实施过程[14]. 每个完整的实验项目需要5个步骤:发布任务、制定计划、项目实践、结果反馈和项目总结. 正确将项目教学法引入到实践教学中,每个学生全程参与一个完整的项目,项目内容设计需要考虑周到,从而能够完整掌握项目中的知识点以及结构体系.
项目教学法在程序设计类课程中有以下几个作用:
1) 提高教学质量. 项目教学法是一种以实践为主的教学模式,该教学法实现了教师与学生之间的角色互换,从多角度发掘学生的自主学习能力,教师从“传授知识”转变为“智慧启迪”,能够锻炼学生的实际操作和应用能力.
2) 丰富教学内容. 项目教学法可以调动学生积极参与的热情,学生在学习了相关知识点后进行项目实践,按要求完成项目,对知识的掌握更加深刻,项目教学法将枯燥的课堂变成了实践基地.
3) 师生关系的创新. 项目教学法可以增进教师和学生之间的互动交流,让学生以一种全新的学习方式来学习,可以在项目实践过程中将自己的独到见解与教师进行沟通、商榷,相比传统教学方法,项目教学法能够培养学生的责任心,构建一种新型的师生关系,使学生能认真完成工作任务[15].
-
将该课程内容知识点划分为以下三种类别:
1) 基础类包含以下内容:① “学习准备”章节中的Pycharm,VScode,JupterNotbook等集成交互环境的安装、配置、简单使用以及特点等;②“变量及简单的数据类型”章节中的变量与命名规则、数据类型、字符串、类型转换;③“语法初步”中的操作符、运算符、数值运算及优先级、函数及函数的定义;④“列表”章节中的列表元素的增加、删除、修改、查询、元素顺序、range()函数、切片相关知识等.
2) 进阶类包含以下内容:①“数据类型及名字绑定”章节中的元组、集合、序列、名字绑定;②“条件、循环和双重循环”章节中的if-else语句、if-elif-else语句、for循环、while循环、break语句、continue语句以及循环嵌套等;③“字典”章节中的字典的基本操作与嵌套,成员函数clear()函数、copy()函数、fromkeys()函数、get()函数、pop()函数、update()函数等.
3) 开发类包含以下内容:①“函数与抽象”章节中的函数参数、作用域、递归、存函数于模块、globals()函数等;②“面向对象”章节中的创建类、枚举类型、封装、接口与实现、继承、父对象与子对象、类对象的属性和方法等;③“文件读写”章节中的基本操作、随机存取、文件内容迭代、json文件格式、二进制文件等;④“异常处理”章节中的曾经的异常、异常的捕获及处理、警告、出错日志、单元测试等;⑤“实践”章节中一棵树的建造、numpy快速处理数据、matplotlib精美绘图等[16].
-
项目教学法在分类教学过程中的实施分为四个环节:项目筛选、学生分组、项目展示、项目解析. 在实施项目教学法之前,教师已经将教学内容按类别进行划分,具体实施方法如下:
1) 项目筛选. 为了确保分类后项目教学的顺利进行,教师首先要对项目内容进行筛选与设计,需要查阅大量的资料、做好各项准备工作,避免出现准备不足或内容与理论知识不匹配而影响项目的顺利开展.
2) 学生分组. 项目教学法在实施基础类项目时,教师已经将内容选取好并归类,根据该班同学的其他科目成绩摸底调查结果将该班学生进行合理分组.
3) 项目展示. 教师作为引导者,首先要把整个实验项目的重点、难点、知识点和项目效果展示给学生,学生通过教师引导,通过自己的感知,对项目进行分析,根据自己所学的理论知识来解决项目中遇到的各种问题.
4) 项目解析. 在实施“基础类”项目时,学生只需在集成开发环境软件上验证教师理论讲解时的内容,该类项目能够将抽象的知识形象化,提高学习兴趣,强化学生对理论知识的理解,进一步锻炼学生的编程思维. 在实施“进阶类”和“开发类”项目时,教师需要带领学生分析该项目的需求与设计工作. 教师根据项目开发流程,对教学内容典型的任务进行详细讲解,导入相关理论知识并将理论与实践衔接,使学生能将理论知识运用在开发过程中. 对于一些难以实现的设计,教师需要集中解析,一些次要的内容可以交给学生自主学习完成[17].
-
课程改革的最终目标是提高教学质量,让学生更好掌握专业知识与实践技能. 在分类别实施项目教学法教学改革的过程中,教师需要对学生的综合表现进行评价与考核.
-
评价的目的是检验教学效果,实时监控学生实践过程,而实验结果只作为学生是否正确完成实验项目的参考. 项目考核的核心是考察学生在不同类型项目中的学习态度、课堂上的表现、小组相互讨论等.
-
评价主要包括学生自评、学生间互评以及教师对学生的评价. 自评是学生对自己作品的展示,知识点掌握程度和对自己项目作品做出分析和判断;互评是学生与学生之间对项目过程及成果进行评价,对出现的问题及解决方案相互提出意见. 教师评价则是对学生的课堂表现、项目实践中的创新与不足提出改进方法与策略[18].
-
课程考核主要包含两部分:过程和结果,过程考核重点考查学生思考、分析和解决问题的能力,引导学生全面提高专业素养和综合素质,提高学生的学习能力. 结果考核主要是对项目的完成情况进行考核,并结合项目验收报告进行评定.
2.1. 分类实施项目教学法的重要性
2.2. 项目分类
2.3. 项目分类后的实施
2.4. 教学评价与考核
2.4.1. 评价目的
2.4.2. 评价的内容
2.4.3. 课程考核
-
2018年9月,重庆文理学院人工智能学院开始在2018级新生大学计算机基础中引入Python程序设计课程,迄今已经试点运行两学年共4个学期,对比传统的程序设计类教学实验体系,“分类别”“进阶式”项目教学课堂实验效果良好、课程考核成绩大幅提升、等级考试通过率和学科竞赛获奖比例较以前有所增长.
-
随机抽取改革前后4个教学班5次课堂平均出勤率的数据进行分析,通过表 1中的数据可以得出,改革后学生的学习兴趣提升,课堂出勤率良好,同学们都能认真根据要求以小组合作方式完成项目内容. 根据重庆高校在线课程开放平台Python程序设计上的学习数据,抽取4个教学班4周的课后学习情况,学生课后运用平台进行学习平均时间达到3 h/周以上(表 2). 由于实验内容安排合理、项目分类别后实验内容更加丰富、易懂,学生的参与度、学习兴趣、完成情况有明显提升.
-
改革前的课程考核依据主要是期末考试卷面成绩、平时考勤和平时作业成绩,仅凭一张纸制试卷并不能真实反映出学生的真实水平. 因此,课程组制定了综合的考核方案,引入全新的课程评价体系,不再使用纸制试卷,采用自主研发的机考系统,总成绩由平时作业、单元测试、实验完成情况和期末考试总成绩按比例构成. 课程及格率由原来的75%提高到90%以上,实验平均成绩80分以上的人数占总参考人数85%左右,相比课程改革前提高5个百分点(图 1).
-
近几年,全国各级计算机设计竞赛日益增多,比如“蓝桥杯”全国软件和信息技术专业人才大赛、信息技术实践与创新大赛ACM、全国ITAT教育工程就业技能大赛等. 我校组织学生参加2020年10月的第11届“蓝桥杯”全国软件和信息技术专业人才大赛(重庆赛区),经过激烈角逐,共获得一等奖6项、二等奖5项、三等奖8项的优异成绩,同时获得重庆赛区优胜学校奖,获奖级别和获奖率均位居全市参赛高校前列[19].
-
教育部考试中心在2017年12月发布了“关于全国计算机等级(NCRE)体系调整”的通知,从2018年3月开始,全国计算机二级考试科目中加入“二级Python”[20]. 根据调研全国计算机等级考试重庆文理学院考点,结合最近三年3门编程语言的考试结果数据分析,2018年9月至2020年9月,我校全国计算机等级“二级Python”考试通过率均超过60%,远远超过全国二级“C语言”和“MS Office”的考试通过率,且Python通过率呈上升趋势,再次证明我校Python程序设计课程教学改革效果显著,已达到我们的预期目标(表 3).
3.1. 促进学生自主学习能力
3.2. 课程考核成绩大幅提升
3.3. 学科竞赛获奖
3.4. 等级考试
-
传统的项目教学法开展的程序设计类课程教学已无法适应社会发展的需求,特别是对目前在编程语言排行榜排名第一的Python语言进行教学模式与方法、考核与评价方式的改革迫在眉睫. 本文在教学改革实践中将课程内容划分为3种不同类别的实验项目,根据学生互评、学生自评、教师评价以及考核结果得出:“基础类”项目可以激发学生学习兴趣和学习积极性;“进阶类”项目可以提高学生编程能力;“开发类”项目可以提高学生的岗位职业技能,课程改革后的数据分析结果表明,基于项目教学的分类方法能促进学生自主学习能力.