论文部分内容阅读
在程序设计的“循环结构”教学中,有一个经典题例就是“1 2 3 …… 100”的求和。因为学生都知道高斯公式,相信很多学生都曾质疑过这一算法为何不用高斯公式而要用笨拙的循環?
我以前给学生的解释是:我们编程的目的是让计算机帮我们解决问题,类似于高斯公式的规律,是前人总结出来的,直接使用公式,不是让计算机帮我们解决问题,而成了我们来帮计算机解决问题了。当我们需要解决的问题没有公式可用时,如何让计算机来解决呢?有规律可循,我们就能利用循环,让计算机充分发挥它强大的运算能力和极快的运算速度,得到我们需要的结果。一句话,程序设计时要跳出“人”的思维,采用“机器”的思维。
这种“机器思维”,看似笨拙,却来得简单,我们只需要根据规律,让机器重复运算,不需要太动脑筋思考复杂的解法。“算法”的本质虽然也是解决方法,但它是给机器准备的,不是给人工计算准备的。
现在回头来看,这种思想与后来周以真教授提出的“计算思维”不谋而合。根据周教授的定义,计算思维是运用计算机科学的基础概念进行问题求解、系统设计,以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。“计算思维”很好地概括了进行科学研究尤其是计算机相关学科研究和思考时应该遵循的科学思维方法。在程序设计的教学中,向学生灌输计算思维的思想方法,可以使学生更快地步入程序设计的大门。
一次在让学生设计一个带单位运算功能的计算器时,遇到了一个棘手的问题。当时仅仅是布置下去任务,并没有仔细考虑需要解决的细节问题。当学生对司空见惯的单位运算竟束手无策、无从下手时,我才发现这不仅仅是个数学问题、编程问题,更像是一个哲学问题。
表面上看,单位运算还要取决于数值运算的类型:对于一级运算(加法、减法),单位是不需要参与运算的,只要转换为相同单位即可,如1米 2米=(1 2)米;对于二级运算(乘法、除法),单位却要参与运算,数值和单位同时分别进行运算,如2米×3米=(2×3)米2,10米÷5秒=(10/5)(米/秒)。虽然看起来确实是这样的,但问题是,为什么一级运算中单位不参与运算而二级运算中单位却要参与运算?
在网上与一些信息技术教师讨论,大家看法各不相同。有人认为一级运算隐含了一个特殊条件,即单位必须相同,运算才有意义;有人认为一级运算中的单位其实也参与了运算,只不过因为单位相同,看不出是运算过的;还有人认为,单位运算有可能采用的是逻辑运算而非算术运算规则,1米 2米中的单位“米 米=米”就类似于逻辑运算中的“1 1=1”了……
继续深入讨论,最初的数学问题逐渐转变为哲学问题。为了把问题简化,避免在举例时出现众多单位,我把所有单位都用“U”来表示,无意中这个“单位”就成为一个变量符号了,写在纸上一看,不由欣喜若狂!——管它什么一级运算、二级运算,只不过是变量的加减乘除、多项式的四则运算,所有的运算都遵循数值运算的法则!
困惑豁然开朗,问题迎刃而解。思维驰骋了一圈又返回原地,反思时忽然意识到,问题的根源还是在于我们缺少计算思维,一直是用自然人的思维在考虑程序问题。
人类一思考,上帝就发笑。可惜没有上帝来指出我们太多的思维缺陷,只能在上帝的嘲笑中继续我们的思考,完善我们的思维品质。
我以前给学生的解释是:我们编程的目的是让计算机帮我们解决问题,类似于高斯公式的规律,是前人总结出来的,直接使用公式,不是让计算机帮我们解决问题,而成了我们来帮计算机解决问题了。当我们需要解决的问题没有公式可用时,如何让计算机来解决呢?有规律可循,我们就能利用循环,让计算机充分发挥它强大的运算能力和极快的运算速度,得到我们需要的结果。一句话,程序设计时要跳出“人”的思维,采用“机器”的思维。
这种“机器思维”,看似笨拙,却来得简单,我们只需要根据规律,让机器重复运算,不需要太动脑筋思考复杂的解法。“算法”的本质虽然也是解决方法,但它是给机器准备的,不是给人工计算准备的。
现在回头来看,这种思想与后来周以真教授提出的“计算思维”不谋而合。根据周教授的定义,计算思维是运用计算机科学的基础概念进行问题求解、系统设计,以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。“计算思维”很好地概括了进行科学研究尤其是计算机相关学科研究和思考时应该遵循的科学思维方法。在程序设计的教学中,向学生灌输计算思维的思想方法,可以使学生更快地步入程序设计的大门。
一次在让学生设计一个带单位运算功能的计算器时,遇到了一个棘手的问题。当时仅仅是布置下去任务,并没有仔细考虑需要解决的细节问题。当学生对司空见惯的单位运算竟束手无策、无从下手时,我才发现这不仅仅是个数学问题、编程问题,更像是一个哲学问题。
表面上看,单位运算还要取决于数值运算的类型:对于一级运算(加法、减法),单位是不需要参与运算的,只要转换为相同单位即可,如1米 2米=(1 2)米;对于二级运算(乘法、除法),单位却要参与运算,数值和单位同时分别进行运算,如2米×3米=(2×3)米2,10米÷5秒=(10/5)(米/秒)。虽然看起来确实是这样的,但问题是,为什么一级运算中单位不参与运算而二级运算中单位却要参与运算?
在网上与一些信息技术教师讨论,大家看法各不相同。有人认为一级运算隐含了一个特殊条件,即单位必须相同,运算才有意义;有人认为一级运算中的单位其实也参与了运算,只不过因为单位相同,看不出是运算过的;还有人认为,单位运算有可能采用的是逻辑运算而非算术运算规则,1米 2米中的单位“米 米=米”就类似于逻辑运算中的“1 1=1”了……
继续深入讨论,最初的数学问题逐渐转变为哲学问题。为了把问题简化,避免在举例时出现众多单位,我把所有单位都用“U”来表示,无意中这个“单位”就成为一个变量符号了,写在纸上一看,不由欣喜若狂!——管它什么一级运算、二级运算,只不过是变量的加减乘除、多项式的四则运算,所有的运算都遵循数值运算的法则!
困惑豁然开朗,问题迎刃而解。思维驰骋了一圈又返回原地,反思时忽然意识到,问题的根源还是在于我们缺少计算思维,一直是用自然人的思维在考虑程序问题。
人类一思考,上帝就发笑。可惜没有上帝来指出我们太多的思维缺陷,只能在上帝的嘲笑中继续我们的思考,完善我们的思维品质。