赵广辉,李 屾,秦珀石,汪朝霞
(武汉理工大学 计算机科学与技术学院,湖北 武汉 430070)
随着经济和社会的快速发展,大学也随之发生了极大的变化。自1977年恢复高考到1998年,我国高校录取人数的增长率一直远低于人口增长率。截至1998年,我国大学毛入学率约为6%,高等教育属于精英教育阶段。精英的学习动机明确,自学能力强,他们渴望通过学习实现自我,改变世界。学生主动学习能力强,老师只需要告诉他们“学什么”和“怎么学”就可以。
为提高国民素质,1999年高校开始扩大招生,伴随新生人口数量的下降,大学录取率和毛入学率迅速提高,在2002年毛入学率超过15%,达到大众教育阶段,2019年毛入学率超过50%,达到普及教育阶段。目前进入大学的学生是伴随着互联网成长起来的,他们具有视野开阔、个性鲜明、独立性强等优点,但也存在着学习动机不明确、自学能力弱、过度依赖教师讲授、沉溺于娱乐和社交网络等缺点。
在高等教育普及化阶段,如何实现“大国办强教育”,实现从教育大国向教育强国的战略转变,线下教学将起到至关重要的作用。
程序设计教学语言是具有显著的时代特征的,随着计算机硬件和应用需求的变化,程序设计的教学语言也随之发生着变化。早期计算机计算能力弱,主要用于解决计算问题,Basic是适合应用需求的教学语言。随着计算能力的提升以及多媒体技术的出现,Fortran、C语言、Visual Basic等才逐渐走入课堂。
随着计算机技术和网络技术的飞速发展,计算机的应用从单纯的计算和数据管理逐步转向人工智能与大数据技术。在这样的背景下,目前程序设计公共课的主要教学语言C、Visual Basic等只能讲授基本的编程方法,无法直接被用于复杂专业问题的求解,课程知识与学生应用需求脱节,学生对课程的满意度低。
当前正处于工业4.0时期或称为人工智能时代,程序设计等信息技术被越来越广泛地应用于各个学科专业的学习、工作和研究过程。各学科对知识的交叉融合需求越来越强烈,需要对程序设计课程的教学内容、课程教学目标和教学方法进行全方位的重构,为学科交叉融合提供更多和更深层次的技术支撑。建设通识教育“金课”是通识教育工作的主要任务和高等教育工作的重要任务之一[1]。
吴岩司长提到:“线下课堂教学是“金课”建设的主阵地、主渠道和主战场”[2]。与线上授课相比,线下授课具有一些独特的魅力和优点,其中最重要的是言传身教和身临其境。
线下教学可以做到言传身教,即可教书,又可育人。课堂教学除了知识传递以外,还有一个更重要的元素是文化传承,教师通过言传身教,把自己的思维方式、治学态度、科学精神传承给学生。《礼记》有云:“师者也,教之以事而喻诸德也。”著名教育家陶行知先生也曾说过:“先生不应该专教书,他的责任是教人做人;学生不应该专读书,他的责任是学习人生之道。”从教师教育学生的角度来说,线下教学中,教师可以以德治教、以德育人、言传身教,对学生起到潜移默化的影响,达到润物细无声的效果。
课堂教学过程中,学生与老师处于同一物理空间,学生可以清晰地感受到授课老师的情绪,很容易受课堂学习和讨论气氛的感染。老师可以通过肢体语言的变换和语气、语调、语速的变化吸引学生的注意力,提升学生的兴奋度,而且学生还可以深度参与教学活动中,师生之间可以有包括思维互动、问答互动、情感互动、行为互动等各种互动,这些互动体现了师生之间的一种合作精神。这与现场看演唱会、球赛一样,教与学的对象之间存在着一种能量的流动,这是线上教学无法比拟的。
2017年2月以来,教育部积极推进新工科建设,先后形成了“复旦共识”“天大行动”和“北京指南”,奏响了新工科建设的“三部曲”,而新工科建设中,继承与创新、交叉与融合、协调与共享是主要建设途径,其中,多学科的交叉与融合处于核心地位。这种交叉与融合催生出新工科、新医科、新农科、新文科、新商科等众多新兴学科。教育部要求重视人工智能与计算机、控制、数学、统计学、物理学、生物学、心理学、社会学、法学等学科专业教育的交叉融合,形成“人工智能+X”复合专业培养新模式,到2020年建设100个“人工智能+X”复合特色专业。
这些新政策对程序设计公共课程教学提出了更高的要求,要求这门课程在为专业问题求解提供支撑的基础上,承担起人工智能和数据处理方面能力培养的重任。
现在正在进入人工智能时代,李开复、李飞飞等人工智能专家都断言人工智能将是人类社会第四次工业革命的直接驱动力。现在社会正处于第四次工业革命前夕,云计算、物联网、大数据和人工智能都离不开程序设计,这是程序设计课程存在的重要意义;同时,过去的知识和技能正在失效,需要构建新的知识体系和技术指标,对程序设计的课程内容、教学方法等进行革命性的变革和重构,以适应新时代的要求。
程序设计公共课的教学目标一般是掌握程序设计的基础知识、技巧和方法,具有编写结构良好程序的能力,为学生的后续课程学习打下良好基础,其本质是培养具备基本编程能力的初级程序员。
在压缩学分和课时的大环境下,学生很难再有机会进行后续计算机相关课程的学习,新工科倡导跨学科能力的大融合,跨界、整合、集成、创新,成为新一代人才的标准能力。程序设计公共课的教学目标也应提升为培养具备基本编程能力、数据分析能力、计算思维能力和复杂专业问题求解能力的学科交叉人才(如图1所示)。
图1 Python程序设计课程教学目标
在教学内容方面,选择人工智能和大数据领域的标准语言Python语言作为教学语言,符合时代性和前沿性。阿里集团前董事局主席马云先生说过:“在未来的30年中,数据将会成为生产资料,计算会是生产力,互联网会是一种生产关系。”现在是工业4.0时代、人工智能时代,大数据与人工智能是主旋律。Python是人工智能、数据分析领域的第一语言,也是目前应用最广泛的通用程序设计语言,其近20万第三方库为其构造了良好的生态圈。Python语言被广泛应用于各学科、各专业,用于快速、简洁地解决各种复杂专业问题,且针对不同的专业设计了一系列与专业问题相关的教学案例。通过这些案例搭建的知识到应用的桥梁,普通学生可以具备基本编程能力,大部分学生能够具备数据分析和可视化能力,优秀的学生具备解决复杂专业问题的能力。
在教学方法方面,融入斯坦福大学提出的“轴反转”理念,先能力、后知识。把知识融入问题之中,从一个问题出发,朝着一系列问题求解的目标,在问题中将相关知识与技能、过程与方法穿插起来。带着问题学习,让学生知道解决一个问题需要具备哪些知识,再有针对性地学习相关知识的应用,强调问题的求解和知识的综合运用。
3.2.1 备教材、备教案和备学生
线下授课除了传统教学中的备教材和备教案外,还可以备学生,根据学生专业和个性特点因材施教。不同学校的学生层次不同,同一学校的学生也存在较大的差异性。孔子《论语·阳货》中把学生大致分为3类:“上智”“中人”和“下愚”。上智不教而成,闻一知十;中人不教不知,闻一知二;下愚虽教无益,只能教给他们与智力水平相符的知识。教学中根据不同学生的认知水平、学习能力以及自身素质,选择适合每个学生特点的学习方法进行有针对性的教学,发挥学生的长处,弥补学生的不足,激发学习的兴趣,树立学习的信心。
教材选择是非常重要的一个环节,要根据学生认知水平选择有适当难度的教材。教材难度不够,将无法激发学生的挑战欲;教材难度过高,又会让学生失去学习的信心。教材内容可以超过授课内容的30%~50%,给学生自主学习留下一定的空间,也保证课程具有一定的挑战度。
教学案例设计可以根据学生专业背景和需求的不同进行个性化的设计,教学的内容应各有侧重,不能千篇一律。《论语·学而》有云:“不患人之不己知,患不知人也。”不了解学生的个性差别,千篇一律地灌输知识,不考虑哪些学生能接受,哪些学生不能接受,学生接受多少,是很难保证教学效果的。
备学生主要是通过听其言、观其行,了解学生的专业方向和兴趣爱好。学生专业背景不同,需求不同,教学的方法和内容应各有侧重,不能千篇一律。通过备学生,可以实现因材施教和个性化教学。
3.2.2 以赋能为目标的教学设计
传统的程序设计课程教学主要是程序设计基础知识的讲授,同时用一些经典案例讲授基础算法和一些单纯数学问题的求解[3]。在这种教学模式下,知识与应用脱节,学生无法将程序设计课程内容与具体的应用结合起来,学习目标不明确,难以培养浓厚的学习兴趣,学习动力不足。
Python语言是一门通用的程序设计语言,可以被用于几乎所有专业问题的求解。为充分发挥出Python语言的优势,设计大量专业问题求解案例,利用这些案例搭建从知识到应用的桥梁,实现学习基础知识、掌握应用技术和提升综合能力[4]。
受学时的限制,不可能把全部案例用于课堂教学中。采取的方案是把基础知识中容易理解掌握的和操作性的知识提取出来录成微视频,供学生自行下载学习。课堂教学重点放在基础知识中不容易理解部分以及各专业都可能用到的、通用性最强的数据分析、处理和可视化部分的讲解。
对于复杂专业问题的求解,因问题与专业结合紧密,甚至需要专业背景知识才能完成,可以按学生的学科专业组织个性化教学。考虑到程序设计公共课有统考要求,因而可以在课堂理论授课过程中只讲授与专业相关的复杂问题,例如,如何厘清问题的核心,如何对问题进行抽象,如何将其分解为一系列规模较小的可计算问题以及如何确定合适的算法。教学过程中,给学生树立学科交叉的理念,打破传统学科的界限,在不同学科之间的融合过程中寻找创新的机会,将其具体实践与实现放在实验课程中,让学生借助一些与之相关的微视频,通过分组讨论和小组合作完成复杂专业问题的求解,真正具备应用程序设计方法求解复杂专业问题的能力。
其中最重要的是案例资源建设,这是提升课程挑战度的关键。这部分工作需要老师不断地提升自己,通过大量的编程实践,熟练掌握哪些知识可以解决哪些实际问题。老师要能够花时间、花精力选取有通用价值的专业问题案例,对其进行抽象和简化,保留足够的复杂程度和难度,把尽可能多的程序设计知识融合进去。学生需要通过较多时间的学习、思考和讨论才能够完成,达到解决复杂问题的目的。以赋能为目标的教学设计如图2所示。
图2 以赋能为目标的教学设计
3.2.3 “轴反转”理念的教学组织
在教学过程中,融入斯坦福大学提出的“轴反转”理念,先能力、后知识[5]。把知识融入问题中,带着问题学习,强调问题的求解和知识的综合运用。从一个应用问题出发,将其分解为由浅入深的一系列子问题,将相关知识与技能、过程与方法贯穿于多个教学环节中,让学生知道解决问题需要具备哪些知识,带着使命去学习相关知识的应用。
图3所示是一个数据可视化的教学案例。教学时先抛出这个问题,将其分解为列表及列表操作、读文件数据、字符串处理方法、字符串到浮点型数据类型转换、分支与二重循环、Matplotlib绘图及标注美化等子问题。在学习列表知识时,将问题简化,数据直接放入列表,让学生知道把列表传给plot()函数即可实现图3(a)的绘图;在学习文件时,再次拿出这个问题,让学生掌握从文件中读取一组数据、处理字符串、转换数据格式,再完成图3(a)的绘图;在学习数据可视化时,再增加一重循环,读取文件中的多列数据,实现图3(b)多组数据曲线的绘制;再增加区间判定,实现图3(c)所示指定区间曲线的绘制。先明确能力目标,再将知识分解融入各小目标中,随问题复杂程度的提升,代码数量从5行逐渐提升到20行,使学生循序渐进地具备综合运用多种知识解决复杂问题的能力。
图3 贯穿式案例设计
在教学中,除了课堂传统意义上的互动外,通过把所有教学资源数字化,利用平台进行教学和训练,可以实现数字赋能互动。在作业、练习、实验和自主学习过程中,采集学生的学习行为数据,利用人工智能技术对学生学习情况进行分析、评价和预测,阶段性地对学生掌握程度进行预测,对进一步的学习给出建议,实现数字赋能互动。
经过两年多的探索和实践,这种教学设计取得了较好的教学效果。表1是2019年采用这种模式教学的实验班级和同期平行教学班级各分数段人数比例情况。从数据对比中可以发现,与平行班级相比,实验班级低分段人数比例明显较少,高分段的人数比例较高,优良率明显提高。
表1 考试成绩分析 %
Python语言是人工智能和大数据的标准语言,随着云计算、大数据、物联网、人工智能、区块链等技术被广泛应用于各行各业,Python程序设计课程对各学科的支撑作用将超过以往的任何时期。Python程序设计课程的建设不可能一蹴而就,必须经过反复探索和实践。课程建设也没有终点,需要进一步花时间、花精力、花情感将之建设为受学生欢迎的好课。