1.4 计算思维
1.4.1 计算思维的基本特征
长期以来,计算机被社会看作一种高科技工具,计算机学科也被视为一门专业性很强的工具学科。专业性意味着认知门槛高,工具意味着它是一种辅助性学科。这种狭隘的认知是计算机向各行各业渗透的最大障碍。计算机大师迪科斯彻(Edsger Wybe Dijkstra,1930—2002,荷兰)说过:“我们使用的工具影响着我们的思维方式和思维习惯,从而也将深刻地影响着我们的思维能力”。
“计算思维”是卡内基梅隆大学(CMU)计算机科学系主任、美国国家自然基金会计算与信息科学工程部助理部长周以真(Jeannette M.Wing)教授提出的一种理论。周以真教授提出了以下计算思维的观点和方法。
1.计算思维的广泛性
计算思维是每个大学生必须掌握的基本技能,它不仅属于计算机科学家。教育应使每个孩子在培养解析能力时,不仅掌握阅读、写作和算术(3R),还要具有计算思维。
应当为大学新生开设一门“怎么像计算机科学家一样思维”的课程,面向所有专业的学生;应当传播计算机科学的快乐、崇高和力量,致力于使计算思维成为常识。
一个人可以主修计算机科学而从事任何行业。例如,一个人可以主修英语或者数学,而从事各种各样的职业。一个人可以主修计算机科学,而从事医学、法律、商业、政治以及任何类型的科学和工程,甚至艺术工作。
2.计算思维的基本原则
计算思维是一种递归思维,它是并行处理的思维方法。
计算思维是概念化的,不是程序化的。计算思维不光是编程,还要求在抽象的层次上进行思维。
计算思维是人的,不是计算机的思维方式。计算思维是人类求解问题的思维方法,而不是让人类像计算机那样思考。计算机枯燥而且沉闷,人类聪明且富有想象力,是人类赋予了计算机激情。
计算思维是数学思维和工程思维的相互融合。计算机科学本质上来源于数学思维,但是受计算设备的限制,迫使计算机科学家必须进行工程思考,不能只是数学思考。图灵和冯·诺依曼是“数学思维”和“工程思维”的典型代表人物。
3.利用计算思维解决问题的方法
计算思维建立在计算过程的能力和限制之上。需要考虑哪些事情人类比计算机做得好?哪些事情计算机比人类做得好?最根本的问题是:什么是可计算的?
当人们求解一个特定的问题时,首先会问:解决这个问题有多困难?什么是最佳的解决方法?表述问题的难度取决于人们对计算机理解的深度。
为了有效求解一个问题,可能要进一步提问:一个近似解就够了吗(如Excel中的计算精度是否需要16位以上)?是否允许漏报和误报(如视频播放时的数据丢失)?计算思维就是通过简化、转换和仿真等方法,把一个看起来困难的问题,重新阐释成一个人们知道怎样解决的问题。
计算思维采用抽象和分解的方法,将一个庞杂的任务或设计分解成一个适合于计算机处理的系统。计算思维是选择合适的方式对问题进行建模,使它易于处理。在人们不必理解每一个细节的情况下,就能够安全地使用或调整一个大型的复杂系统。
上述周以真教授关于计算思维的主要观点,是指导人们利用计算机解决问题的思维方式。
4.解决复杂问题的方法
大问题的复杂性是指随着问题规模的增长,问题的复杂性呈非线性增加。在计算机领域,问题的大小与计算的复杂性直接相关。
例如,对矩阵乘法这类问题,2阶矩阵相乘是个小问题,而1000阶矩阵相乘是个大问题。
例如,在CPU等大型集成电路芯片中,集成了数亿个晶体管,因此在设计中变得非常复杂,稍有不慎就会造成产品瑕疵。
例如,在软件工程中,随着问题规模的增大,系统的复杂性也在增大。每个新的信息项、功能或限制都可能影响整个系统的其他元素。因此,随着问题复杂性的增加,系统分析的任务将呈几何级数增长。在研制一个大系统时,控制和降低系统的复杂性,是区分和选择各种计算机技术的重要因素。
为了解决大问题的复杂性,哲学家和数学家笛卡儿在《方法论》一书中提出了一些基本方法,笛卡儿的主要思想如下:
第一,决不把任何我没有明确地认识为真的东西,当作真的加以接受。也就是说,小心避免仓促的判断和偏见,只把那些十分清楚地呈现在我的心智之前,使我根本无法怀疑的东西放进我的判断之中。
第二,把我考察的每一个难题,都尽可能地分成细小的部分,直到可以而且适于加以圆满解决的程度为止。
第三,按照次序引导我的思想,以便从最简单、最容易认识的对象开始,一点一点上升到对复杂对象的认识,即便是那些彼此之间并没有自然先后次序的对象,我也给它们设定一个次序。
第四,把一切情形尽量完全地列举出来,尽量普遍地加以审视,使我确信毫无遗漏。