摘要:中职学生在学习程序设计类课程时,存在跟着老师会做,自己无法解决问题的困扰,虽然我们课程团队在实践“基于工作过程”的项目化教学,知识点和技能点都通过案例来支撑,但仍然存在学生学习完课程后,知识点独立,对于实际问题无法建立自己的解决思路。本文通过设计阶梯式项目,将知识和技能点系统化,驱动教学目标的达成;依据软件开发流程的教学过程设计,通过信息化手段的互动,培养学生程序逻辑思维能力;通过头脑风暴,提升学生知识综合应用能力。
关键词:阶梯任务、任务引领、过程评价
0引言
目前在讲授程序设计类课程(《桌面应用开发》)的程序结构内容时,我们一直在尝试“基于工作过程”的项目化教学,通过设定教学任务和教学目标,让师生双方边教、边学、边做,力求构建素养、知识和技能培养框架。但在教学过程中很难基于软件开发过程来引领学生参与学习,对于每个知识点只能通过案例来支撑,不能有阶梯式的案例支撑,知识点相对独立,无法形成系统。最后按照教学计划的设置达成“既定目标”,这对学生知识的传授、技能操作规范性的培养是有积极意义的,但是忽略了对学生宏观编程思维的培养、学生自主探究能力的培养。这样就会导致,知识和技能都会了,但是遇到一个复杂的问题,学生无法整合知识并形成自己的解决方案。
为尝试解决这些问题、激发学生解决问题的能力,提升课堂的活力,我在教学设计及实施过程中,将任务设计成由易到难的阶梯式任务,学生夯实基础知识和技能的同时,尝试在此基础上解决更为复杂的问题,完善自己的逻辑思维。
1 背景分析
“多分支结构”是程序结构中非常重要的一个教学内容,“多分支结构”我们会想到if……elseif……else语句和swich语句,在此选择“判定学生成绩等级”这个典型任务来学习多分支结构的知识和技能,主要考虑这个任务与学生切身相关,阶梯式任务驱动容易开展。“判定学生成绩等级”这个任务的教学目标为:掌握多分支结构的语句、分支结构的特点、分支结构条件表达式,能运用if……elseif……else语句和swich语句编写简单的程序。能在工作任务中了解软件开发的流程和编码的规范,并能形成自己的编程思维。目前主要存在的问题有:
(一)在教学任务选取上缺乏对知识技能的系统性融合
在以往教学中,教师一般会选取典型案例来讲授多分支结构,比如讲解if……elseif……else语句时设计了“工资交税分析”任务,设计“输入一个数字字符,判断是星期几”讲解switch语句,学生根据老师的任务分析,代码分析,完成最后的编码,学生完成了任务。学生以“记住”的方式获得知识和技能操作中的基本要求。在理解if……elseif……else语句和switch语句还是独立的,比如课后“判断每个月有多少天”任务,有很多同学无法完成,有部分同学完成了,发现也是用if……elseif……else语句完成,分支结构冗余,程序不够优化,主要还是没有把多分支结构的知识进行整合,不能灵活应用,更无法培养解决工作实际问题的能力。
如何设置典型工作任务和任务载体,让任务目标达成充满“典型性”、“层次性”、“包容性”、“可拓展性”,教师如何利用信息化教学手段,从学生的“视角”出发,以教学目标为终点,将知识体系进行融合,这些都成为了教师智慧的体现。
(二)课堂上学生未能形成自己的任务解决思路
在以往教学中,学生先进行任务分析,就简单粗暴的开始学习代码,之后就开始代码的实现,在学习过程中,学生都在被动的接受教师的思路,这也是为什么好多同学虽然学习了这么长时间的程序设计课,但是却不能自己独立的解决实际问题,或者遇到任务,没有自己的思路。即使有思路却也未能编码实现。
(三)接受能力梯度培养不明显
课堂教学时间是固定不变的,学生的学习经历也是有一定限量的,在这种情况下,要提高学生的学习效率和课堂效率,就必须关注学生在课堂上的差异,必须关注“课堂学生接受能力的梯度”。而学生差异的增大,教师需要针对学生课堂参与的梯度做出回应。如何来解决能力梯度的培养,就是一个困惑的问题。
在“判定学生成绩等级”案例中,学生对if……elseif……else语句完成任务接受度较高,而对swich语句来完成任务,有部分同学不好接受,即使上课听懂了,但是真正遇到实际问题时,还是会存在一些问题,比如break如何使用,break去除是什么效果,default是什么意思,如何对分数区域转换成一个固定的常量。针对存在的问题,如何设计教学情景来解决,并实现能力梯度的培养。
2解决思路
对于程序初学者来说,更加需要系统性学习,通过系统性学习之后,知识体系构建起来了,就像一棵树的树干已经长好了,之后再去碎片化知识的学习,将会达到事半功倍的效果。课堂教学本身是一个动态的过程,学生接受知识也是由浅层获得向复杂深层应用转变,逐层叠加。
(一)设计阶梯式项目,驱动教学目标的达成
知识和技能的学习归根结底是学生个人能力的获得,有效的教学场景设计能为学习的有效性找到落脚点,让学习问题实际化、目标可见化。教学内容和教学目标明确后,为了实现这个目标便产生了“教学问题”——如何实现教学目标,教师需要寻找到合适的教学情境承载教学问题,不仅包含自学知识的应用,还能反应新知识的典型应用。教学场景选择具有典型性层次性丰富性,驱动教学目标的达成。
在“学生成绩管理”模块学习中设计了五个阶梯式任务
每个任务逐步递进,知识点和技能点逐步融入,并逐步加深,任务之间都互相关联,形成了系统性的知识,学生容易接受。
其中“判定学生成绩等级”案例中,在使用if……elseif……else语句完成任务后进阶到用swich语句来实现,学生理解不同的方式解决同一个问题。全体同学在信息化手段的辅助下,也深深的记住了两种语句的区别和适合的应用场合。
(二)依据软件开发流程的教学过程设计,培养学生程序逻辑思维能力
在教学过程中,设计软件开发的流程,学会需求分析:分析任务,清楚输入输出条件,数据错误处理等。概要设计:设计任务整体流程图和分解出任务的流程图,学生理清解决任务的思路。模块设计:核心逻辑的掌握,明确解决任务的逻辑和核心方法,并进行核心代码的补充。代码编写:根据自己的思路完成代码的编写和调试并给出测试报告,根据任务的情况进行头脑风暴,对任务进行拓展。在评价中,学生对代码进行优化,提升编码规范和效率。
为了更好的培养学生程序逻辑思维能力,在概要设计阶段学生要通过平台互动进行程序流程图完善,在详细设计中对程序的逻辑和关键方法进行互动练习。在“判定成绩等级”案例中的概要设计中设计了如下的互动:
程序整体流程:
判定学生成绩等级流程
在详细设计中学生借助平台模拟练习本任务的表达式选择(配对)互动:
在代码编写之前,我们设计了关键代码的补充互动:
教学过程中,每一步都落实的细处,通过信息化手段,确保每位同学都能有自己的解决思路,培养学生精益求精的态度、规范编写代码和缜密的逻辑结构。
(三)头脑风暴,提升学生知识综合应用能力
为完成本节课的教学目标,使学生的学习结果和实际工作需求真正对接,在教学设计中,设法通过头脑风暴的创设,学生结合任务提出问题或者老师预设的问题,在问题解决中实现知识的综合内化和技能的提升。而在教学过程中,解决问题都要遵循从浅层问题到深层问题推进的规律,最后指向具体情境中解决问题的能力。所以教学目标不能仅仅停留在浅层次的会使用if……elseif……else语句和switch语句来解决实际问题,还应该关注学生个体的区别,关注每个学生的学习如何从知识转化为应用,更应该鼓励教学中出现的“自主学习、自主探究”,通过教学中头脑风暴的创设及预设问题、生成问题的智慧应对让全体学生在知识、技能的应用上得到提高。
学生根据阶梯递进式的学习任务,自主探究,以提高职业综合素养为目标,追求精益求精的工作态度,最终达到规范高效有质量有内涵的课堂效果。
在本案例中,我们创设了如下头脑风暴:
头脑风暴1:
Q:跳转语句break;有什么作用?如果这里去掉break会有什么样的结果?
A:break跳出switch语句,直接结束switch语句,如果不写break,程序会继续后面的语句输出。
头脑风暴2:
Q:default语句起到什么作用?
A:default包含了前面列举之外的所有情况的输出。
3 总结
在教学上基于“工作过程”的项目化教学,分层任务驱动知识点和技能点难度螺旋式上升,学生逐步达到顶层的教学目标。对于程序初学者来说,更加需要系统性学习,通过系统性学习之后,知识体系构建起来了,就像一棵树的树干已经长好了,之后再去碎片化知识的学习,将会达到事半功倍的效果。解决了学生碎片化学习后,无法形成系统性知识的难题。
教学过程按照软件开发流程进行,学生知晓解决实际问题的步骤,在教学过程中注重流程设计、程序逻辑和关键方法练习、代码的补充互动这些信息化的手段,学生逐步形成自己的编程逻辑思维。通过头脑风暴,解决学生能力阶梯问题,实现个性化培养。
参考文献
[1] 安育红.针对中职计算机课堂教学的优化策略分析[J]经验交流.2020.02
[2] 杨建光 . 提高中职计算机课堂教学效率探研 [J]. 成才之路,2018(35):50.
[3] 朱红斌.关于 WEB 前端开发技术的课程教学模式的创新研究[J].科技风,2018(33):81.