基于计算思维能力培养的C语言课程目标导学模式研究
2017-09-09陆淑娟吕俊
陆淑娟+吕俊
摘 要:以C语言课程为例,阐述了基于计算思维的目标确定以及释疑启读,探讨了在C语言教学中引入目标导学模式的方法和策略,旨在实现学生计算思维能力和创新实践能力提升。
关键词:计算思维;目标导学;C语言教学
DOIDOI:10.11907/rjdk.171301
中图分类号:G433
文献标识码:A 文章编号文章编号:1672-7800(2017)008-0214-02
0 引言
作为计算机基础教学中的一门重要课程,C语言在很多高等院校都作为理工科学生的必修课。计算机語言课程的目的在于培养学生分析问题和解决问题的能力。而在实际教学中,有很多教师对于课堂教学随意性强,教学效果不甚理想,对学生的要求也只注重程序编写而忽略了思维能力的培养。同时,学生往往也会因为繁琐的语法和对算法的不甚理解最终失去学习兴趣。
在教学中引入目标导学模式,可以将传统的“讲授—听课”关系转变成“引导—参与”模式,通过以计算思维的培养来设定目标,实现以教师为主导、学生为主体的“双主教学”来激发学生的学习动机,从而达到提升学生计算思维能力和创新实践能力的目的。
1 目标导学模式内涵
美国著名的心理学家,教育家布鲁姆在20世纪中期发表了著作《教育目标分类学》和《掌握学习理论导言》,而目标导学正是在“目标分类”和“掌握学习”这两大理论基础上发展出来的一种教学模式,它是一种以教学目标为核心和主线实施课堂教学的方式。这种模式下,教师作为主导,以教学目标为导向引领、指导学生围绕目标展开一系列的教学活动,最终完成教学任务。学有目标,则更能激发学生的学习兴趣和主动性;目的明确,学生的积极性被充分调动,在教师的引导下真正成为学习的主体。相比其它教学法,目标导学更注重教学的过程和效果,而学生也能在较短的时间内获得达标后的喜悦感和成就感,从而形成良性循环,促使学生更加努力地想要完成下一个目标。
2 计算思维能力要义
计算思维概念的提出,起源于美国麻省理工学院西蒙·帕佩特(Seymour Papert)教授,而美国卡内基梅隆大学周以真教授则对其进行了系统阐述和推广。周以真教授将计算思维定义为:“计算思维涉及运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为。计算思维涵盖了反映计算机科学之广泛性的一系列思维活动。”她认为,计算思维可以通过约简、嵌入、转化和仿真等方法把一个看起来困难的问题重新阐述成一个大家知道怎样解决的问题。计算思维代表着一种普遍的认识和一类普适的技能,每一个人都应热心于它的学习和运用[1]。随着国外计算思维的兴起,国内计算机教育界也对计算思维进行了探索和研究,哈尔滨工业大学战德臣教授等[2]用“计算之树”给出了计算思维多维度的表述框架,认为“0 和1”、“程序”、“递归”三大思维最为重要。而九校联盟[3]在《计算机基础教学发展战略联合声明》中也强调要把培养学生的计算思维能力作为计算机基础教学的核心任务。
3 目标导向模式在C语言中的教学组织
当前,如何将计算思维理念融入到计算机语言教学中,培养学生的计算思维能力,成为计算机教学研究的焦点,国内外的探索也取得了一定的成果,但尚未形成一套完整有效的教学模式。通过在教学中的不断摸索,发现在计算机语言教学中非常适合融入计算思维。以C语言为例,首先教学目的是为了让学生学习计算机分析、解决问题的思路和方法,培养学生运用计算机技术去解决问题的能力,这正是计算思维的一个方面;其次,语言课程的内容也非常好地体现了语言级问题的求解方法,这也是计算思维能力培养的重要内容。与此同时,也发现C语言中很多生动有趣的案例都可以和语法结合起来设置成一个个学习目标。因此,围绕学生计算思维能力培养这一核心任务,在C语言教学中构建目标导学模式,可以达到事半功倍的教学效果。
3.1 教学目标设计
将目标导学运用到C语言教学中,首先要示标,通过出示教学目标,唤起学生的参与意识,产生学习动机,并对学习起到引导和激励的作用。教学目标是每堂课的出发点也是最终的归宿,它应该有明确的教学内容和要求,一个好的教学目标应该不过于简单也不过于难,能让学生在积极思考后体会达成目标的快乐,这样才能充分激发学生的学习兴趣[4]。同时,目标还应该具有启发性,培养学生的创造性,激发学生的探究性,从而培养学生的思维能力。因此,目标确定非常重要。设计目标时应遵循以下原则:
(1)以计算思维培养为目标。传统的程序设计教学普遍重视编程能力的培养,对计算思维的本质“抽象和自动化”关注较少。抽象过程就是对问题系统进行建模的过程,是从现实世界——信息世界——机器世界的转变。而自动化则是指“机械式”地按照步骤自动执行,所以对问题的求解要有精确的算法描述和严格的符号表示。因此,在设定目标时,可以选择一些生活化的案例,让学生体会如何用计算机解决问题的方法来解决实际生活中的问题,这个过程恰恰就是计算思维培养的过程。例如在分支选择部分选择超市打折问题、税率计算问题等。学生在完成目标时,首先要对现实问题建立模型,写出对应的分段函数,然后再转变成C语言的算法描述,并且严格地定义符号表示每个需要计算的量,也即变量,根据算法描述运用if—else—else if—和switch结构分别写出对应的代码,最终完成多分支选择结构的学习目标,在整个过程中,引导学生逐步理解并使用抽象化和自动化的方法,慢慢提升计算思维能力。
(2)目标要具有层次性。由于地域的差异,学生的基础水平参差不齐,传统的教学组织方式无法照顾到所有学生,很容易造成“优生吃不饱,差生吃不到”的情况。因此,在设定目标时要充分考虑群体的层次性,可以设定基本性、提高性、拓展性等不同目标,学生可以根据目标层次循序渐进地学习,这样也就做到了让差生学有所获,让中等生学得踏实,也能让优等生吃得饱。例如,在讲述循环时,同一个问题“分解一个整数的各位数”,就可以让不同层次的学生用不同的方法求解,从而完成不同的学习目标。基础较弱的学生可以采用百、十、个位数分别分解的方法如“a=x/100;b=(x-a*100)/10;c=x%10”来完成,这里的学习目标仅在温故,进一步熟练掌握并使用上一讲中的数学运算符和表达式;中等学生可以用循环方法如“while(x>0) {a=x%10;printf(“%d”,a);x=x/10}”来求解,这里的学习目标是循环,通过程序掌握while循环的使用方法,了解循环是重复执行一组相同的操作;而学有余力的学生则可以在此基础上进一步拓展,要求他们将分解后的各位数重新组合成原数的逆序数。这里较高的层次都是在较低层次上的一个递进,这样就可以在同一个课堂上让不同层次的学生都能完成目标,体会达标的欣喜,同时,也可以激励基础较弱的学生,激发他的好奇心、好胜心,培养他的进取心。endprint
3.2 自学探索,讨论释疑
在教师展示目标之后,则是学生的自学探索阶段,对需要完成的目标内容进行思考,进而生疑,或者由教师进行设疑,而后共同讨论释疑。这个过程也是目标导学的核心,它将传统的“以教为主”转变为平等的“教学互动”,充分发挥学生的主体性,避免学生依赖教师,思维产生惰性。同时这个过程也正是培养计算思维非常重要的时机,在启读、释疑的过程中转变、培养学生的计算思维,对学生解决问题的方法进一步地分析、总结、改进,将计算思维的优化特征充分融入到程序的设计过程中。
例如,在设定目标求解1+2+…+100时,有学生直接用等差数列的求和公式进行计算,而百钱买百鸡问题,则有学生提出疑问认为无法解,因为3个未知量只有2个方程式,这些都是典型的数学思维,在计算机世界,会用重复的累加完成1~100的求和,会用穷举法列举公鸡、母鸡、小鸡的所有可能组合,这些看起来费力的笨办法却正是计算机所擅长的,因此,在讨论过程中要转变学生思维,引导学生学会将一个问题转化成简单而有规律的重复运算,这正是使用计算机科学对问题求解的一种思维方法和能力。
另外,在算法设计中,不仅要实现问题的解决,还要寻找最优的算法。比如上文提到的百钱买百鸡问题,根据穷举法写出程序如下:
For(i=0;i<=100;i++)
For(j=0;j<=100;j++)
For(k=0;k<=100;k++)
If(i+j+k==100 && i*5+j*3+k/3.0==100)
Printf(“%d,%d,%d”,I,j,k)
而根据题意,利用i+j+k=100可将三层循环减为两层,并根据价格缩小穷举范围,修改后代码如下:
For(i=0;i<=20;i++)
For(j=0;j<=33;j++)
{ k=100-i-j;
if( i*5+j*3+k/3.0==100)
Printf(“%d,%d,%d”,i,j,k);
}
循環执行的规模一下子从106减小到600多。再比如数组一章中的冒泡排序,极端情况下每一次比较都要进行元素的交换,而对算法进行优化以后,可以在一趟比较中找出一个最大元素和最后一个交换,这样大大减少了元素的交换次数。正是这样,在讨论过程中,把计算思维一点一点地融入到教学过程中,让学生养成一种自觉运用计算思维解决问题的习惯,这也是程序设计课程的价值所在[5]。
3.3 反馈测试、归纳总结
根据学习目标,了解学生的掌握情况,可以提问的方式、学生主动讲述的方式或是竞答的方式,让学生在完成目标后能得到验证和表现。这个环节是目标导学的目的也是归宿,是对前面环节学习效果的总体反馈,也是对知识的查漏补缺。教师应对学生获得的成果给予充分的肯定和激励,再进行归纳总结,强调重点,达到巩固知识的目的。
4 结语
著名的计算机科学家、图灵奖得主艾兹格·迪杰斯特拉(Edsger Wybe Dijkstra)说:“我们所使用的工具影响着我们的思维方式和思维习惯,从而也将深刻地影响着我们的思维能力[6]。” 在计算机成为这个时代最为有力的工具时,计算思维的培养也变得日益重要,它不仅可以帮助人们更好地解决身边遇到的问题,还将有助于人们在今后从事的事业中更有效地运用专业知识。因此,在课程中进行计算思维能力的培养是一个值得深入研究的课题。
参考文献:
[1] 郭喜凤,孙兆豪,赵喜清.论计算思维工程化的层次结构[J].计算机科学,2009(4):64-67.
[2] 战德臣,聂兰顺.计算思维与大学计算机课程改革的基本思路[J].中国大学教学,2013(2):56-60.
[3] 董荣胜.《九校联盟(C9)计算机基础教学发展战略联合声明》呼唤教育的转型[J].中国大学教学,2010(10):14-15.
[4] 韩丽红.“目标导学法”在教学中的应用[J].科教文汇:中旬刊,2008(11):95.
[5] 李妮.基于计算思维能力培养的C语言程序设计课程改革[J].运城学院学报,2014(5):72-74.
[6] 王玉锋,孔繁之.基于计算思维的计算机教学研究[J].计算机教育,2013(13):57-59.endprint