宣震
目前,信息技术项目学习中内容虚空化现象较多,导致学生在解决实际生活中的问题时往往束手无策。因此,本文通过探讨创设真情境,解决真问题,让学生在项目活动的学习中感受到身边真实问题的解决,探索项目教学的实效。
● 创设真情境,解决真问题
项目式学习(Project-Based Learning,简称PBL)是一种以学生为中心的学习方法。目前,PBL出现的一大问题是项目内容的虚空化,即教师把操作活动、假设的背景内容或者是数学上的某道试题作为项目进行教学,而学生在完成这样的项目学习后,往往不能解决生活中遇到的实际问题。
什么是“真情境”?项目学习中的真情境是指能引起学生共鸣的来源于学生真实生活中的情境。如何挖掘“真情境”呢?这需要从学生已有的经验出发,充分了解学生的习惯、爱好和时代发展特点,关注学生的衣食住行,从中挖掘项目素材。新课程标准鼓励学生通过自主探究解决项目中的问题,那么哪些问题是值得探究、适合解决的真问题呢?笔者认为,真问题首先应指向“真实世界”,即问题是真实存在的,是有价值的,是对解决未知的问题有指导作用的。其次,真问题应促进“高阶思维”发展。项目学习中的问题,一定不是孤立的问题,应该是以问题链的形式存在,由此保证问题引领的深度、高度和广度。
● 从现实中寻找项目设计主题
从现实中发现问题,寻找到的项目设计主题,对学习往往更有实效。“一卡一码一报告”项目的主题即来源于生活实际。
2022年3月,多地暴发新冠疫情。自我市清明后复课以来,根据上级要求,班主任需要每天收集学生及同住人的健康码、行程卡,周末还需收集48小时内的核酸检测报告(以下简称“一卡一码一报告”),并检查健康码的截图时间、是否绿色,行程卡的更新时间、是否外地、是否带星,核酸检测报告的检测时间、是否48小时内以及是否阴性。
教师每天检查的一卡一码一报告文件,少则数百,多则上千,难免出现疏漏的情况。那么,能否利用所学知识开发一个应用,将一卡一码一报告的关键信息提取出来,并进行分析整理输出呢?
● 项目实施过程
通过项目规划,本次项目一共需要6课时,全程基于“用技术解决问题”的思路,进行问题分解、编程处理与代码优化。
1.问题分解
健康码、行程卡和核酸报告的图片各不相同,那么先从大量的健康码中识别出姓名、身份证号码、截图时间、健康码颜色等信息。
2.编写程序处理一张健康码图片
第1课时的设计里,主要是通过和人类处理此类问题进行类比,引导学生思考人类是如何判断健康码的颜色等信息的,进而思考、讨论总结出计算机程序在解决问题时,可以通过读取、识别和处理三个过程来完成。为了保证教学效果,这部分提供半成品程序代码,利用半成品加工策略来协助学生完成。从代码中可以看出这部分解决的问题主要是:指定图片文件的目录和文件名,按照二进制位对文件进行读取。在识别图片过程中,使用百度的人工智能aip库对读取的健康码图像文件进行文字识别。在项目实施过程中,可以使用print(mywords)观察识别的结果,体会百度aip库对图片中文字的识别效果,进一步可以探讨影响识别率的因素有哪些。
这是Python中列表和字典的典型应用,学生通过“真问题”的解决,感受到了列表和字典的综合应用,促进了高阶思维的发展。通过完成半成品文件,巩固了对列表、字典取值方法的掌握。
3.迭代功能,完善程序,形成“高效”应用
在真实情境中,遇到的情况是非常复杂的,对于健康码这个类型,教师收集到的图片从结构上看也可能是不同的。在本项目的第2~3课时,学生将体会真实情境下的问题解决,体验通过迭代完善程序功能,并最终形成应用工具,提升效率。第2课时内容如右图所示。
这部分提供半成品程序代码来协助学生完成。上节课编写好的程序,并不能正确识别每一张健康码图片。通过对迭代1问题的讨论,突出了项目的真实性和真实问题的复杂性,由此引出判断身份证号码的教学。教师收集到的健康码虽然从结构上看会有不同,但几乎每一张健康码中身份证号码、截图时间等这些重要信息都会包含其中,因此利用正则表达式定位身份证号码的位置就成为解决问题的关键。
在学习过文件操作内容后,学生已经会打开并读取一个文件内容,但是读取某个目录下的所有文件还有问题。这是一个遍历的过程,体现了循环的思想,彰显出循环结构程序的自动化功能,很好地落实了计算思维。而将结果保存在一个csv文件中,更是现实问题解决过程中经常遇到的。这一处理的好处是,后期可以方便地进行数据清洗和可视化表达,真正将学习过的书本知识和实际应用相结合。在第3课时里,学生将继续对程序进行完善,以应对复杂的实际情况。
这部分继续利用半成品加工策略协助学生完成。基于解决实际问题的需要,编写的程序应当具有一定的健壮性。try…except…异常处理结构的引入,使得程序可以处理出错的情形。教材中对时间处理的模块介绍得并不多,然而却是很实用的,在本项目里是通过两次的时间差来计算程序的运行时间,作为后续程序优化的参考依据。
另外,大多数程序的运行调试是在Python的IDLE或者各种IDE中进行的。但在真情境下解决问题时,无法保证Python的环境是否安装正确。因此,将编写好的程序导出成exe文件是将程序应用于实际生活中成为效率工具最重要的一个步骤。
4.进行“仿制”,处理行程卡和核酸报告
在第4课时,参考识别健康码的程序,利用提供的半成品文件编写处理行程卡和核酸报告的程序。截图日期是否当日、行程信息是否带星号、是否外地、采样时间是否超过48小时等真问题的提出和解决,使得学生的“高阶思维”得到发展。
5.將三段程序代码进行整合,智慧识别与处理一卡一码一报告
本节课将进一步提炼一卡一码一报告的识别规则,实现img目录下所有图片文件的自动识别与处理,使自己编写的程序真正得到应用。在本节课结束时,引导学生向班主任推荐所写的应用,并收集教师的反馈意见。
● 项目实施成果展示
通过项目小组的轮流成果展示,让学生充分享受合作分享的快乐。通过对教师反馈意见的收集和整理,提出进一步优化程序的方案。通过帮助教师解决实际问题,获得成就感。
● 项目教学反思
通过项目实施,笔者发现项目设计中有两处细节需要修正:①对于没有循环体的特殊for循环的应用,还需要讲解清楚。教材中的例子是取两个集合的交集,写法是 w for w in a if w in b。②本次项目中的图片识别采用百度的aip库。在免费的前提下,aip库的调用是有并发数限制的,在大量文件进行识别时会导致result["words_result"]异常,在实际应用中,还需要加入sleep()。总体上看,本次项目的完成率大大超出了笔者的预期,有少部分小组已经开始基于读取、识别和处理的过程,设计自己的小组作品。从项目实施和成果分享环节看,学生很享受利用技术解决实际问题的过程,对Python程序设计的兴趣大大提升,对现实生活中其他问题的解决跃跃欲试。本次项目中为了解决实际问题引入的正则表达式、数据帧和异常处理等知识的教学,也是提升学生信息意识、计算思维和解决问题能力的有益尝试。
综上所述,项目学习中的真情境一定是来源于学生的真实生活,只有联系生活,解决真实问题,让技术为生活服务,才能让项目教学真正发挥实效。
本文为江苏省教育科学“十三五”规划课题“开放式项目学习:培养高中生计算思维素养的实践研究”(项目编号C-b/2020/02/19)研究成果。