CCCF卷首语 | 计算思维及其意义
计算思维是一种重要的思维方式,有了计算思维就会知道如何将一个问题抽象,变为让计算机可“理解”即可计算模型,这个计算能够收敛并在有限的时空内得出结果。但仅靠抽象的理论是训练和培养不出来的,只要动手编程,情况就会大有不同。
尹宝林在本期发表了《编程实践是培养计算思维的必由之路》一文(详见今日微信第四条),探讨编程和培养计算思维的关系,我很赞同他的观点。早在2006年3月,周以真(Jeannette M. Wing)在CACM上发表了《计算思维》(Computational Thinking)一文(译稿发表在本刊2007年第11期)。
周以真的文章发表后,引起了国内计算机教育界的高度关注,有众多专家发表有关计算思维的看法,有的高校还在课程中增加了计算思维的内容。但据我了解,国内把这件事搞清楚的人似乎不多,问题在于:从概念出发,没搞清计算思维的本质。
我们从初中开始学习平面几何,就是为了训练逻辑思维,让学生通过公理从点线面等元素中找到关联关系,进而证明一个结论。尽管我们现在日常工作中很少用到平面几何的知识,但这种逻辑思维已经融入我们的脑海中,无时无刻不在影响我们的思维。
计算思维有点类似。人们把一个要解决的问题构造成一个模型(行话叫算法),用计算机理解的语言(通常要通过编译)编程(描述该模型),再让计算机执行程序,最终形成结果,这个过程就是计算思维的过程,这有点像平面几何中的“已知、求、解”。人类的认知规律是从实践到理论,从现象到本质,即从问题出发,通过解决问题总结出规律,再用总结出的规律解决新的问题。因此,没有编程实践而空谈计算思维是没有意义的,这也是为什么很多高校多年进行抽象的计算思维教育而收效甚微的原因。
实际上,即使从事的不是计算机专业工作,计算思维也是非常重要的。有了计算思维就会知道如何将一个问题抽象,变为让计算机可“理解”即可计算模型,这个计算能够收敛并在有限的时空内得出结果。有了计算思维就会了解如何把一个大的问题分解成一个个子问题,再把一个子问题分解成为子子问题,直到不需要分解,这就是自顶向下和结构化设计的方法。有了结构化设计思想,就会简化问题,从而“分而治之,各个击破”。有了计算思维就会明白正确性和可行性的关系和区别,就会明白解决问题的方案不仅要在理论上正确,而且要在实际中可行。
具有计算思维就会清楚如何清晰定义一个数据类型(角色)和对其的操作,还会了解如何用最短的编码表征一个数据。如果规章制定者学过编程,就不会在法规中使用“一般”、“原则上”和“试行”这样的词汇;如果公安部门在身份证编码中使用字母和数字,就不会把身份证编成18位,而你的生日这一重要信息也不会暴露在“光天化日”之下。
有了计算思维就会知道如何定义标识符,了解如何定义全局变量和局部变量及其作用域(权限),了解指针及通过函数的参数传递结果是多么巧妙!当然也不会编出有goto语句使结构紊乱的程序。
计算思维作为一种重要的思维方式,仅靠抽象的理论是训练和培养不出来的,但只要动手编程,情况就会大有不同。据我十多年的计算机工程实践,对于一个计算机专业人士,没有写过两万行代码,大概还达不到那个境界,那程序的美感自然也体会不到。
学校应当停止那些概念式的教学方式,而应该从编程开始,在这点上,没什么捷径可走!
作者介绍
杜子德
1996年任CCF专职副秘书长。1998年创建YOCSEF,2004年4月起,任CCF秘书长。2005~2008年任国际信息学奥林匹克竞赛主席,2009~2015年担任世界工程组织联合会信息与通讯委员会秘书长。
zidedu@ccf.org.cn
CCF推荐
【精品文章】
点击“阅读原文”,点击了解并加入CCF。