辛彦君,郑晓艳
(天津职业技术师范大学 信息技术工程学院,天津,300222)
Python 语言具有优雅简单、开源和可读性强等特点,轻量级的语法[1]能够减轻学生学习的负担,高层次的语言表达[1]能有效提高学生的逻辑思维能力和编程能力。部分中职院校也纷纷开设了Python 语言程序设计课程,但是在大多数中职院校Python 课堂教学中,有部分教师不能站在国家发展战略的高度和大局充分认识职业教育,同时由于自身职业技能水平相对欠缺,导致在课堂教学中仍然存在“以老师为中心、以教材为中心”的现象,具体表现为教学方法单一,教学内容冗余枯燥,师生之间互动少,老师对学生的指导不足,习惯以总结性评价为主;同时,学生学习知识也只是一味地“复制”,没有思考的过程,学到的仅仅是局限于记忆类的知识,不能对重难点知识进行迁移和综合运用。枯燥的教学方法不能激发学生的学习兴趣,也不能培养学生解决问题的能力,使培养的人才不能满足企业的要求。
任务驱动教学法是以任务为主体、以知识为载体,充分体现“以教师为主导,学生为主体”的教育理念的一种教学方法。它适合操作类知识的教学,结合学生的兴趣,让学生在完成一个个任务的过程中提高他们的逻辑思维能力和自我效能感,同时它容易结合学生的认知结构开展教学,能够充分调动学生参与学习的积极性,能有效提高学生的自学能力和协作学习能力,培养学生养成好的学习习惯和学习思维方式,有利于学生职业素养的形成。
掌握学习理论由布鲁姆提出,他认为“绝大多数学生都能学到学校所教的一切东西”。掌握学习理论是以班级授课制教学为基础,辅之以经常的、及时的反馈,为学生提供所需的个别化帮助以及所需的额外学习时间,从而使大多数学生能够获得知识、掌握相关技能。教学以“掌握”为核心。老师“为掌握而教”,老师要更多关注学生对知识和技能的掌握情况,关注学生学习过程中收集信息、解决问题的思路以及合作学习能力。学生“为掌握而学”,学生学习不只是提高分数,更多的是对知识的理解和操作的熟练,养成好的学习习惯,学会学习,形成适合自己学习方法。掌握学习理论的实施步骤是诊断性评价、团体教学、单元形成性测验(通过者进行加深学习而未通过者进行补救学习,待学生掌握之后再进入下一单元的学习),最后是学生学完本门课程后的终结性评价。
1)启发诱导。
教学过程要遵循“老师为主导,学生为主体”的原则,老师不能一味地给学生灌输知识,只重视记忆类知识的讲解,学生也不能单纯地“复制”老师的步骤,在教学中老师应该培养学生解决问题的思维方式以及引导学生学会如何学习,特别是在引发学生认知冲突后应及时指导,转变学生的错误观念,丰富学生的认知结构。
2)学思行并重。
“学以致用”,学习是求知的手段,但不是目的。学习、思考和练习结合在一起,给学生大量的自主探究和练习的时间,有利于学生知识的内化和技能的掌握。
1)分析阶段。
一是分析学习者的特征。中职院校的大多数学生学习动机薄弱,主动探索知识的积极性较弱,对知识认知和接受速度较慢,自我效能感低,没有一套适合自己的学习方法,同时大多数学生计算机编程能力薄弱,更倾向于场依存的学习风格。
二是分析企业需求。中职院校培养的是技术技能型人才,因此学校所开展的教学内容应该密切结合企业发展的需要,不仅要让学生具有专业知识和技能还要具有职业道德、工匠精神。与Python 有关的企业普遍需求是学生要了解服务端应用程序的研发,有较强的代码调试能力与问题分析能力,有良好的团队合作意识,善于自主思考。因此在Python 教学中要更加注重培养学生的编程能力和逻辑思维能力,以及自主学习和合作学习的能力。随着互联网技术的发展,程序设计是一个具有很大发展空间的技术活,学生必须要好好学习,夯实好基础。
2)选择阶段。
根据中职学生的学习特点和企业的需求,选择教学内容和教学方法。
一是教学内容。《国务院关于加快发展现代职业教育的决定》[2]中提出“适应经济发展、产业升级和技术进步需要,建立专业教学标准和职业标准联动开发机制,推进专业设置、专业课程内容与职业标准相衔接,全面实施素质教育,科学合理设置课程,将职业道德、人文素养教育贯穿培养全过程。”在校所学内容不仅要与企业发展密切联系,还要根据奥苏泊尔所提出的最近发展区,选择学生能够通过协作学习或者在老师的帮助下容易理解掌握的教学内容。中职学生Python的学习内容主要包括顺序程序设计、选择结构程序设计、循环结构程序设计、序列、字典与集合、函数与模块、文件和异常处理。
二是教学方法。基于中职学生场依存的学习风格和Python 语言自身具有较强的操作性,选择任务驱动教学法,以掌握学习理论为基础,结合支架式教学,充分调动学生收集信息、处理信息的能力,锻炼学生独立思考能力和协作学习能力,把学生的最近发展区转化为现实。
3)设计阶段。
一是设计教学目标。教学目标既是教学的出发点,又是检验教学效果的关键,目标因素构成了教学的核心。根据中职学生学习特点、Python语言的特点以及企业对学生、学科的要求合理地设计教学目标。学生通过学习在知识与技能方面能够达到熟练掌握Python 的编程语法的教学目标;在过程与方法上能够完成简单的程序编写和程序调试,对所学知识进行迁移和综合应用;在情感态度和价值观上养成终身学习的意识,学会学习,具有自主分析问题和解决问题的能力。任务驱动法把教学目标分成若干个子目标[3],通过上机练习,解决若干个子任务,最终完成教学目标。学生通过完成任务能够学到知识,提高操作技能。
二是设计教学任务。高质量的教学任务的设计是激发学生学习兴趣,提高学生的主动性和积极性,促进学生综合运用知识的关键。任务的设计要有趣味性、可操作性[4],要根据教学目标,紧密结合中职学生现有的知识结构并且符合学生的最近发展区。任务分为总任务(用于期末考核)、任务(在教学中布置的任务)和模块化任务(几个知识点学完后进行测评的任务)[5]。任务具有层次性,可细分为基本型任务和拓展型任务。对于基本型的任务,提供支架式教学,学生独立完成,有利于学生掌握重点知识和技能,使大多数学生能够体验到学习上的成功,增加其自我效能感;拓展型任务有助于学习进度稍快的同学进一步提升,有助于学生对知识的深化和综合运用。
1.4.1 诊断性评价
在讲授新知识前,老师先对学生进行诊断性评价,了解其编程能力或测试学生对已学知识的掌握情况,以便老师对教学工作适当地调整。
1.4.2 团体教学
1)创设情境,导入任务。
建构主义强调教学要为学生创设理想的学习情境和应用知识的情境,主张学生在真实的情景中建构知识。直观形象的学习情境,不仅能够激发学生的兴趣,也能唤起学生认知结构中已有的知识和经验,对新知识进行重组。
老师根据知识内容创设相应的学习情境,激发学生的学习动机,学生的兴趣和动机被激发后,学习的积极性和主动性也大大增加,这时导入任务,引起学生的认知冲突。学生融入学习情境,明确任务,在认知冲突的状态下带着问题进行思考。
2)分解细化任务。
任务的难度在50%时,最能激发学生的求知欲。同时,任务的数量要适宜。在任务设计中基本型任务应包含基础知识和重点知识,提升型任务要包含重点知识和难点知识。
老师导入任务后,不急于讲解新知识,也不急于让学生完成任务,而是先引导学生用算法式、手段—目的分析法和逆向反推断法等方法,分析任务的构成,明确任务中目前能解决和不能解决的问题,接着分析不能解决的问题里所包含的知识点和难点。学生在老师的指导下,把任务分解成一个个子任务,明确各子任务之间的关系[6]和解决子任务的知识点和具体方法。当然,学生也可以先提出任务中包含的难点和疑点,再由老师归纳、引导分析。
3)引导完成任务。
老师担任指导者,为学生提供解决难点问题的相关资料,引导学生提出解决问题的思路,循序渐进。同时任务中涉及的新知识,老师可通过案例教学法、演示法等进行讲解。在教学中老师可以提升学生的信心,进一步增加学生学习的兴趣。
学生在新旧知识的同化和顺应下,先提出解决这些问题的假设,通过自主学习或者协作学习来逐一验证假设,最终完成任务。
4)评价任务。
评价是为了反馈学生的学习情况以及促进学生的可持续发展。
学生展示自己完成的任务,可简单介绍自己的思路和任务解决中的亮点、创新点或不足之处。接着,学生之间互评,长善救失。最后,老师点评。老师应多过程性、鼓励性评价,不仅仅以任务的最终完成情况进行点评,更应该关注学生在完成任务过程中的表现,如学生发现问题的能力、解决问题的思路和操作的熟练度等方面。对学习过程中表现不太好的同学帮助其找出存在的问题并提出建议,多鼓励教育。最后是对本节知识做总结,特别是重点、易混淆点以及学生完成任务过程中出现的错误情况做总结。学生应进行反思,自我提升。
1.4.3 单元形成性测验
以知识点来划分任务,当完成一个单元的知识点学习时,对学生进行形成性评价,来反馈学生对本单元知识点的掌握情况。在形成性评价中可设置模块化任务,对不同的知识点设置成不同的模块,在测验中已通过的学生可进行巩固加深学习,也可帮助未通过的学生学习,而未通过的学生进行补救学习,待所有学生都通过后再进入下一个知识点的学习。
1.4.4 终结性评价
在学完整本书的知识点后,对学生进行终结性评价。评价方式主要是以期末的总任务为主,形成性测验中的模块化任务和平时教学中的任务完成情况为辅,老师更多的是过程性评价,主要了解学生对知识的掌握情况和技能操作的熟练程度。
以清华大学出版社出版的《Python 语言程序设计》教材为例,老师在讲解字典新知识前,先对学生元组基本知识的掌握情况做诊断性评价;接着,创设与本节任务教学的相关情境即演示一段歌词解析,查看每个单词出现的次数。由此引出课程的主线任务,用字典存储的形式展示字符串中每个单词及其出现的次数。要完成这个任务,已学过的知识能不能解决呢?新的方法需要哪些知识呢?可把这个任务划分成4 个子任务,见表1。
表1 任务分解中各子任务中所涉及知识点
用字典的存入方式显示每个字符及字符出现的次数就是比较典型的任务。
在老师创设情境、导入任务后,首先用算法式分解总任务下包含的子任务。具体如下:一级任务,切割字符串;二级任务,循环处理列表中的每个字符;三级任务,字典的创建、访问、添加、删除、遍历;四级任务,提取数据并取值。
因中职学生的自主探究能力和编程基础比较薄弱,老师先引导大家分析解决各任务所需要的知识点,如一级任务中切割字符串用Split 函数,循环处理列表中的每个元素时for 和in 的使用等,接着对字典的相关知识进行系统讲解。再提供支架式教学引导学生提出解决问题的思路,如在提取数据时如果未提取到该元素就让其存进字典,如果提取到该元素就将其值加1。
学生融入老师所创设的情景,明确总任务和子任务,并厘清解决各子任务所涉及的知识点和解决任务的思路。接着学生在老师的帮助下提出解决各子任务的假设,如在提取数据时如果未提取到该元素就以该元素作为Key,1 作为value 存进字典;如果提取该元素就到将对应的Key 的value 修改,值加1;最后再根据输入的字符串当做key 去字典里取值,并通过自主学习或者合作学习验证假设、逐一完成各子任务,最终完成任务。
当学生完成任务后,老师再对其进行评价和总结,串联各知识点,使学生形成完整的框架,提高学生的逻辑思维能力。
在Python 教学中运用任务驱动教学法,使学生明确学习目标,有效地把学生的学习、思考和练习结合到一起,促进学生对重难点知识和技能的掌握,达到学以致用的效果。任务的设计是关键,而且在一定程度上分散的任务教学较难保证教学内容知识体系的完整性,因此老师在任务设计时要注意各知识点之间的关系,灵活运用多种教学方法,才能达到更好的教学效果。