从案例程序角度谈计算思维培养
2019-12-16卫文亮
卫文亮
摘要:“计算思维”这一说法最早是由周以真教授在2006年提出,其在美国权威杂志《communication ofthe ACM》发表了一篇名为“computational thinking”的论文,“computational thinking”即被翻译为“计算思维”,论文中详细阐述了计算思维的概念和原理,并由此引起了全世界专家学者的研究兴趣,积极推动“计算思维”进入教育领域,不仅高等教育中推广和普及,更是渗透进基础教育阶段,倒逼着基础教育进行改革,以培养学生适应现代社会需求的计算思维能力。
关键词:计算思维;编程;案例教学
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2019)30-0183-02
国外很多国家在教育领域推动和渗透计算思维的动作是如火如荼,比如:美国在2007年即由“21世纪技能合作组织”研究制定了“21世纪技能框架”,此框架详尽地描述了培养学生计算思维能力的重要性,紧接着2011年,美国计算机科学教师协会又发布了《美国中小学计算机科学标准》,在这套标准中,提出了比较完整的计算机教育的框架,即在日常的教学中将计算思维和编程等内容进行融合,以此来开拓学生的思维视野;另外,新西兰、澳大利亚和英国等欧美国家也分别几乎差不多时间公布了本国的有关培养学生计算思维能力的计划或文件。
1概念界定
所谓计算思维,即计算思维继承了思维的一般特征,即具有抽象性,是一种人脑的思维方式,而不是计算机的思维。只不过是人类借助计算机的技术和方法去解决问题,从而让人类思维通过计算机实现“自动化”和更具“抽象化”。
一般来说,中学生的思维较之小学阶段已经有很大的发展,特别体现在逻辑思维能力方面,在解决问题的过程中更倾向于抽象的演绎推理和归纳,善于发现规律,拥有了很大的灵活性和开阔性。
2应用研究
以下两个案例或许可以帮助我们进一步窥探计算思维的本质。
【案例一】解一元二次方程
我们知道,计算思维实际上所反映的是利用计算机技术解决实际问题的思维方法。但是,假如对利用计算机技术解决问题的认知出现误差,那么肯定是不可能解决问题的。例如,有一位编程班的同学在刚学了两节课C++语言的时候,想检验下自己的编程水平,于是找来一道求一元二次方程8x2+5x-2=0的根的题目。用C++语言写出如下的程序段:
float x;//定义单精度变量
8*x*x+5*x-2=0;//给出方程式,让计算机求解
cout<
结果上机一调试,发现一大堆的错误,当然根本不可能得到想要的答案。这位同学却很纳闷的是:计算机不是可以帮助人去解决问题的吗?为何如此简单的一个方程都不能求解?这类困惑可能很多同学在刚开始学习的时候都会有。问题出现的主要原因是,没有将普通的数学问题抽象转化成信息世界的问题,而导致不能用计算机进行求解。因为确切地说,计算机只会帮我们“计算”,至于如何计算程序员的事情。就本例而言,我们必须得告诉计算机如何逐步地去求解方程,然后计算机才会按照我们的要求帮我们一步一步地去计算。理解了这样的“计算思维”,我们才能写出下面的程序段:
floatxl,x2,d;/定义变量
d=5*5-4*8*(-2);//通过d的值可以判定该方程的根的情况
x1=(-5+sqrt(d))/(2*8);//求根公式
x2=(一5一sqrt(d))/(2*8);//求根公式
printf(“%f,%f” x1,x2);//輸出结果
跟此案例同样的还有“鸡兔同笼”问题
【案例二】“鸡兔同笼”问题
今有雉兔同笼,上有三十五头,
下有九十四足,问雉兔各几何?——《孙子算经》
问题描述:鸡兔同笼,头共35,足共94,鸡兔各几只?
解法1:(兔的脚数×总只数一总脚数)÷(兔的脚数一鸡的脚数)=鸡的只数
总只数-鸡的只数=兔的只数
解法2:(总脚数-鸡的脚数×总只数)÷(兔的脚数-鸡的脚数)=兔的只数
总只数-兔的只数=鸡的只数
解法3:总脚数÷2-总头数=兔的只数
总只数-兔的只数=鸡的只数
关于此题的求解,数学方法很简单。由此导致有的同学出现疏忽,轻了敌。(因“鸡兔同笼”是小学数学题,所以采用小学的scralch软件编程)
由图1可以看出,学生并没有理解计算机是怎么计算的。由于没有“计算思维”,导致编程出现了偏差。如果有计算思维,学生们就可以画出如下的流程图(如图2)或者用能用自然语言描述出问题,后续的程序编写出来也就不是难事了。
S1:输入鸡和兔的总数量M
S2:输入鸡兔腿的总数量N
通过以上两个例子,我们可以看出计算机并不是可以完全替代人脑去思维,如果人都不知道怎么解决问题,计算机就更无从知晓了。某种意义上说,计算机只是协助人去计算,特别适合数量级很大的计算,而且算的速度非常快,因此,在数量和速度方面,计算机确实是可以胜人一筹的。但是,计算机永远都是在人脑的指挥下工作的!
3小结
那么,中学生的计算思维能力一定要通过编程来培养吗?答案当然是否定的。我们作为一线的教育工作者必须明白两点:一、编程只是培养学生计算思维的其中一个方法,信息技术也只是培养学生计算思维能力的学科之一,语言、历史、数学等学科和知识都可以培养不学生的计算思维;二、信息学科常常在编程课中渗透培养学生的计算思维,但并不代表只有编程课可以培养,而且不能不顾及不同学生的认知体验,强行把他们往程序员方面培养。计算思维的培养,从小的方面说,对学生的成长和发展来说意义重大,从大的方面说,对国家和民族的未来更具有深远的影响。如果说,科技是第一生产力,那么人才则是科技的第一要素。因此,我们需要培养学生思维方面的创新能力和解决问题的能力,提升他们的核心素养。