王 健,刘惠子
(辽宁师范大学 计算机与信息技术学院,辽宁 大连 116081)
在中共十九大吹响建设教育强国的号角后,夯实专业基础知识,促进实践能力提升,强化创新意识培养,推进综合素质发展,逐步构建高质量计算机专业人才培养体系是落实新工科人才培养理念的重要方向。教育部于2018 年发布的《教育信息化2.0 行动计划》中明确要求各高校要推进现代信息技术与教育教学的深度融合,面向国家战略需求,培养高性能专业人才,加强对学生课内外一体化信息技术技能、应用能力的培养[1]。高素质应用型计算机人才的培养对于加快信息化建设、提升国家经济发展水平有着至关重要的作用。
随着国家不断深入推进数字化进程,开源理念得到广泛传播与支持,我国开源事业也取得了长足发展,以集体开发、合作创新、信息共享为特点的开源社区发展势头迅猛。据统计,截至2018 年,中国最大的开源代码托管平台码云共收录开源项目超46000 个,推动了新一代信息技术的蓬勃发展,进而催生出自由、开放、共享的开源生态[2-3]。其中,Python 语言具有应用广泛、开源兼容、代码简洁高效、丰富库资源等特点,以其为基础构建的项目也日益增多,为借助开源项目开展Python 语言程序设计课程创造了有利条件。
本文结合Python 语言的特点及计算机专业人才培养目标,探究在开源共创理念下的数字化教学方法,针对Python 程序设计中的综合实践环节提出一种基于开源项目的混合式教学模式,以项目驱动的方式助力学生实践能力与创新思维的发展,以期探寻提升学生专业能力和计算思维的有效路径。
开源项目是指其在一定的框架基础上,使用者可依据自身需求进行修改的项目[4]。这里的开源项目既包括开源硬件也涵盖开源软件。美国是最早将开源项目应用于教学的国家,后来这种教学方法在德国盛行,并在软件学院得到了广泛应用。中国开源运动的序幕始于龚敏博士回国后带回的Linux 等开源软件[5-6]。伴随着开源运动在中国的推进以及GitHub、Source Forge 等开源社区日益成熟普及,如何将开源软硬件和开源社区的资源与教学内容相结合并应用于实际教学中成为越来越多教育者思考的问题。例如,章宗长等[7]从准备、设计与实施三阶段详细介绍了软件工程课程中利用开源项目开展实践的具体方法;覃国蓉等[8]探究并实践了开源项目在Java 教学中的具体应用;沈忱[9]详细阐述了开源硬件融入人工智能课程的开发策略及课例经验,其从理论探究到具体实践,发现开源项目融入到教学中能较好地激发学生的学习热情与兴趣,在培养学生计算思维、综合能力等方面起到了良好作用。
近年来,Python 以开源兼容、具有丰富扩展库的优势被广泛应用于机器学习、人工智能等领域,深受创客运动、创新企业以及世界高校的欢迎,这也促进了Python 开源项目的产生,愈来愈多的学校开始借助开源项目开展Python课程的学习。例如纽约工业大学Boyan 等[10]为促进学生的泛在学习,将Python 的学习建构在一个开源编程环境中;秦维超等[11]尝试将Python 双重循环知识点与开源硬件Micro:bit 相结合,从而促进学生对双重结构的理解与掌握。综上所述,以开源项目驱动Python 课程的学习具有强化学生实践操作能力、深化专业知识理解等优点。
在教学实践方面,Python 程序设计课程面临着诸多挑战。从教学方式和方法的角度来看,目前Python 课程多采用填鸭式讲授方式,教师在教学中过于注重语法和原理的讲授,导致很难在有限课时内兼顾理论与实践的教学,缩短了上机实践的时间,使其成为理论课程的附属,容易使学生失去学习兴趣。除此之外,教学实例普遍沿用多年前简单抽象的老例子,内容存在一定的滞后性,技术变革带来的先进性与已有教学模式之间产生了很强的张力,导致所学内容与市场需求产生脱节,不仅不能满足技术革新的需求,而且忽略了利用编程语言对学生进行设计方面的训练,缺少对其计算思维、综合能力的培养[4,12]。从学生角度来看,有限紧凑的教学时间和抽象繁多的授课内容之间的矛盾不断激化,使课堂实践环节多以验证性实验为主,学生机械地搬运代码,对算法的理解只停留在表面,导致学而不会用、听懂容易编码难的现象层出不穷,大大降低了学生学习的积极性。
针对上述问题,越来越多的研究者开始探索Python 程序设计课程的教学新样态。一些学者从课程定位与需求角度出发,例如金传洋等[13]提出Python 程序设计课程四阶段改进措施;吕友波等[14]关注学生计算思维和对复杂问题的解决能力,结合OBE 理念提出Python 程序设计课程内容设置实施方案,以实现学生综合能力的提升;刘宁等[15]对如何开展Python 课程的混合式教学进行了理论探索与实践研究。尽管研究者们对Python 课程的教学改革进行了探索与研究,但大多数是对教学内容与方法的分析,较少关注教学设计的具体过程,且鲜有人探究开源项目在Python 课程中的应用。为此,本文在借鉴已有研究的基础上,结合CDIO 理念构建基于开源项目的混合式教学模式,旨在提升学习者的计算思维和实践能力,将其从机械的教学活动束缚中解脱出来,将教师从“一言堂”教学的桎梏中解放出来,进一步提升课程教学质量,促进专业人才培养向全方面、多层次、高质量方向发展。
现阶段我国高等教育已具备在线教育经验和现代化教育技术水平。健全的校内信息化设备和完备的数字化校园建设为混合式教学提供了基本条件,而雨课堂、学习通、码云等在线教学平台通过提供智能化与数据化的技术支持服务,为开展高质高效的混合式教学提供了重要保障。自混合式教学概念提出以来,全国高校积极开展线上线下的有机融合,如刘满兰等[12]以产出为导向探索Python课程的混合式教学方法;赵胜楠等[16]融合CDIO 理念,借助Jupyter 平台,以实训项目为切入点探究Python 混合式课程改革方案。这种教学模式注重陈述性知识与程序性知识的融合,将线上自主学习、线下针对教学有效结合,充分发挥学生的主动性,促进教学质量进一步提升。
受益于开源共创理念的深入影响以及新一代信息技术的飞速发展和广泛部署应用,以代码托管、版本控制、分支管理为基本特征的开源平台日益成熟普及[6]。其中,GitHub、码云等代码托管平台相继推出高校版,为计算机教学提供了良好的教学环境和开发工具,也为Python 课程的实践环节带来了新的契机。如教师可借助码云高校版提供的Fork、Pull Request、Issue、Wiki 等功能创建分班管理、教学任务布置、学生作业在线提交、教师在线检查作业以及课程回顾与总结等多种教学场景,以灵活高效地开展教学工作;还可借助代码在线查看、代码质量检测等功能帮助学生实现结对编程与小组协作开发[17]。
GitHub、码云等开源社区为高校师生提供了大量有价值的开源项目。作为最活跃的社区之一,Python 开源社区提供了以综合运用Python 类库为基础并面向不同应用维度的开源项目,为Python 语言的实践环节提供了丰富的资源和素材。本文结合Python 程序设计课程的知识内容,从码云仓库的推荐中选取了部分开源项目,如表1 所示。开源项目的引入不仅使学生开阔眼界、与时俱进,也有助于其领会项目中蕴含的先进编程内容与具体的编程规范,有效缓解Python 课程实践课时少、知识更新快的问题。
Table 1 Partial Python based project list表1 部分基于Python的项目清单
秉承以生为本、学为中心的教学理念,基于新一代信息技术的发展现状和社会人才培养的现实需求,构建基于开源项目的混合式教学模式,结构如图1 所示。该模式着眼于教师与学生两大对象,以开源项目为载体,以任务为驱动,融合线上线下多种教学方法,采用多元评价方式开展Python 程序设计课程的学习,促进教师“导”与学生“学”深度融合。
具体来说,该模式的第一部分为教学准备,即教师在充分了解学情、学习目标、内容的基础上选取适切的开源项目和教学资源,并进行设计与开发,以支持后续教学活动的开展;第二部分为课堂教学设计,围绕课前、课中、课后3 个阶段进行具体教学设计。其中,课前的教学步骤主要在线上进行,课后的教学步骤多采用线上线下交叉融合的方式完成。该模式主要应用于学生完成Python 基础知识学习后的综合实践环节,用于指导学生实战项目的设计与实现。
Fig.1 Blended teaching model based on open source projects图1 基于开源项目的混合式教学模式
充分的教学准备是有效开展课堂教学的前提,是指教师借助访谈、问卷调查等方式,对学生的学科基础知识、学习需求、学习内容及对在线平台的接受度与操作熟练度情况等进行充分的调查与分析。在充分分析学习要素的基础上,教师结合实际调研结果选取合适的开源项目,并从知识内容、难易程度、进度安排等方面对项目进行科学设计与改造。作为学生开展自主学习的支架,多样化的教学资源设计与开发也尤为重要,教师可通过引入和改造相关优质平台提供的资源来获取,也可亲自开发、设计课程资源。
3.2.1 课前阶段
课前阶段主要是利用在线教学平台提供的功能,使学生依据教师上传的资源进行自主学习,进而掌握相关基础知识,自主发现问题,并对项目有初步的了解与构思,主要包括:①发布项目、推送资源。教师将选取的项目、制作好的任务清单以及在线配套的教学资源发布到在线教学平台上,学生通过终端查看任务清单,明确项目内容并自主学习课件、视频等教学资源,完成预习任务;②创建团队。教师课前在教学平台上创建班级并依据组内异质原则划分学习小组。每组3~5 人,设项目经理、项目架构师、开发工程师、测试工程师等角色,通过角色扮演的方式进行项目构思、设计、实践与创新,培养学生各司其职的团队协作精神。每完成一个项目,学习小组重新划分;③发布测试、答疑解惑。教师针对预习内容发布相应测试,学生完成测试内容,并将学习过程中遇到的问题反馈给教师,寻求教师和同伴的解答;④组织讨论、在线研讨。教师组织学生针对存在的问题及项目需求分析展开讨论,解决浅层次问题,完成对项目的初步构思,引导学生不断向项目的深层次问题推进。
3.2.2 课中阶段
课中阶段主要是教师依据在线平台提供的数据开展精准教学,通过协作学习方式开展学习,通过完成项目促进知识内化,达到意义建构的目的,主要包括:①重难点讲授。教师依据测试结果和问题反馈情况,分析学生共同存在的知识薄弱点以及教学重难点,并有针对性地进行讲解。学生结合教师的讲解进一步理解相关知识,解决课前预习时产生的问题;②组织协作学习。教师结合线上讨论情况,组织学习小组对项目具体功能模块的算法设计进行探究。若探究过程中学生提出的方案存在问题,教师要及时提出建议;③项目实践,共性讲解。学生依据项目方案进行实践操作,在上机实践过程中,教师要进行巡视,针对操作过程中出现的个性问题,教师要给予适当的指导和纠正;而对于存在的共性问题,教师要进行集中讲解并现场演示;④成果展示、知识总结。教师组织学生展示项目成果,相互评议并进行总结评价。横向比较有利于学生相互学习、打开思路,从多角度对项目进行分析与反思。
3.2.3 课后阶段
课后阶段主要是教师引导学生巩固所学知识,鼓励学生发散思维,提升创新意识。除此之外,教师要借助在线平台组织学生开展线上评价,并结合在线平台数据对学生进行综合评价,主要包括:①布置拓展项目。教师结合课堂教学内容,借助在线平台发布多主题拓展项目,学习小组自行选择其一。项目经理统筹规划项目进程,与课堂教学同步进行具体功能的实现。鼓励学生利用所学知识对项目进行个性化设计,并组织项目展示与评价;②资源分享,教学评价。对于学习中存在的问题或在课堂中没有消化透的知识,教师在课后可借助在线平台上传知识总结和拓展资料,供学生在课下复习巩固、拓展延伸。教师采取过程化评价方式,借助线上教学平台实现评价场景和形式的多样化,例如课前依据学生的测试结果和预习进度对学生展开评价;课中对学生课堂参与度、思维状态、交流互动、项目实践以及课堂情感等表现进行多元主体评价;课后对学生完成系统学习后的学习效果、项目成果展开综合评价。无论是课前、课中、课后哪个阶段,教学评价标准都要从知识点的记忆转向项目完成情况,对学生的学习过程、学习态度、项目成果、创新性、团队协作等进行多维度考核,扭转重理论轻实践、重知识轻创新的现状。
基于开源项目的混合式教学模式具有以下几方面特点:①以在线教学平台为依托,以项目始终贯穿理论与实践的教学逻辑为指导开展Python 课程教学;②采用原型迭代的思路,对项目进行由浅入深、由易到难的进阶式设计与适用化改造,形成循序渐进的教学体系,促进学生对知识的内化与运用;③以分组形式模拟实际环境与工作,使学生更明确真实项目开发过程,拉近课程内容与实际项目的距离;④在线教学平台的智能化为教师制定教学内容提供了方向,为了解学生的学习状况提供了支持,为开展教学评价提供了科学依据。
案例设计选取“淘宝商品信息爬取”项目并以计算机专业大三学生为教学对象,他们已经具备编程语言基础,学习过前端基础课程,且熟悉在线平台操作。结合Python课程知识内容和对学情的分析对所选项目进行适用化改造,具体分为自动爬取网页、关键信息爬取、爬取信息的整理和存储3 部分,针对不同教学内容对资源进行开发与设计。
4.2.1 课前阶段
教师通过学习通平台向学生发布项目内容,阐明自主学习任务,并向学生提供相应的教学资源,使其对网络爬虫中的HTTP 协议、Requests 库方法等知识有初步认知。具体学习任务清单如表2所示。
Table 2 Learning task list of Taobao commodity information crawling project表2 淘宝商品信息爬取项目学习任务清单
教师借助码云平台创建班级并划分学习小组,设项目经理负责收集小组的学习情况,统筹人员安排,规划项目设计开发进程。学生登录学习通平台查看项目,依据任务清单自主学习完成课前测试并查看结果。针对学习过程中遇到的问题,鼓励学生借助私信功能寻求教师和同伴的帮助。教师组织学生针对爬取淘宝商品信息的需求分析展开讨论,帮助学生顺利进行项目实践开发。
4.2.2 课中阶段
课中,教师对课前测试和问题反馈进行讲评,理清知识脉络,并重点讲授Requests 库的get()方法、post()方法等和Beautiful Soup 库的主要方法。有了对相关知识的理解,教师组织学生围绕实现网页爬取的具体算法展开探究。然后教师借助码云平台将项目中使用的素材、代码等放置到相应文件中并发布给学生。项目经理可Fork 项目到小组仓库下,组织成员进行实践操作并展示实践成果。在实践过程中,教师需对存在的共性问题进行进一步的讲解与示范。展示完毕后,学生相互评议并畅谈感受与收获,教师进行总结评价。
4.2.3 课后阶段
根据网络爬虫的内容,项目小组需选取不同主题项目(如豆瓣电影网站评论数据爬取、网络图片爬取和存储、股票网站关键信息爬取等)进行创新实践并将项目代码和实验结果一同提交至码云平台。教师将课程的知识总结和拓展资源分享给学生,供其进一步复习巩固、拓展提升。教师借助学习通平台组织学生开展自评、互评,及时发现自身问题。教师对学生的评价从以下3 个方面展开:①日常表现(30%),主要依据课前MOOC 平台、Python123 平台提供的数据以及参与讨论交流的情况评价;②项目评价(40%),主要依据项目完成度、对项目的贡献度、小组协作交流情况评价;③期末测试(30%),主要通过上机测试结果评价。
优质的项目是保证教学效果的核心,因而在项目选择时需满足以下4 个原则:①尽可能全面涵盖Python 课程相关知识点;②要与学生的知识水平相匹配;③具有一定的代表性和趣味性;④紧密结合生活实际。选定的开源项目不能直接应用到教学中,因此教师需了解项目结构与框架,对其进行适用化设计和改造,使其既保持实战项目的可操作性和真实性,又要符合学生由易到难、由简到繁的认知规律[8]。
作为贯穿整个学习过程的开源项目,教师在选取时不仅要注意项目是否涵盖教学内容、是否具有一定的新颖性和趣味性,最重要的是关注项目是否具有代表性,项目编写是否具备规范性。通过开源项目,学生在学习专业知识的同时能够学习到专业程序代码的编写规范,体现出实用为主、够用为度的理念。
开源项目虽然节约了成本,但其通常只提供最终源代码,用于教学还需要进行大量适用化改造和设计,这就需要教师不断提升自身教学素养。具体而言,教师需要加强智能素养、专业技术能力、教学信息和数据的收集分析能力、外语能力的培养,如此才能够充分了解项目中的结构与框架,把握学生的先验知识水平、学习态度等,设计开发出更适切的项目促进教学研有机结合,达到最优教学效果。
信息产业不断扩大的现状迫切要求计算机专业人才具备自主学习、团结协作、融合创新的综合能力,而传统教学模式难以适应社会发展对于新型专业人才的培养需求。针对当前Python 程序设计课程在实际教学中所表现出的阻碍教学成效提升的关键问题,本文结合开源项目的开放性与个性化特征构建了基于开源项目的混合式教学模式,为新工科背景下学生综合实践能力的提升提供了新思路。未来将进一步扩大实践研究,细化各类数据分析并不断改进与完善,以持续优化教学效果。