《计算思维与算法入门》 —1 程序设计与计算思维

举报
华章计算机 发表于 2019/12/09 16:49:12 2019/12/09
【摘要】 本节书摘来自华章计算机《计算思维与算法入门》一书中第1章,第1.1.1节,作者是赵军 等。

第 1 章  

程序设计与计算思维

 

计算机堪称20世纪以来人类最伟大的发明之一,对于人类的影响更甚于工业革命所带来的冲击。计算机是一种具备数据处理与计算功能的电子设备。自从人类发明并开始大量应用计算机之后,无论是政府、企业还是个人,对于数据和信息处理的效率都有了极大的提升,如图1-1所示。

   image.png

图1-1  工厂生产线与大楼自动化安保管理

对于一个有志投身信息技术领域的人员来说,程序设计就是一门和计算机硬件与软件息息相关的学科,是计算机诞生以来一直蓬勃发展的一门新兴科学。之所以说它是新兴科学,是因为计算机的程序设计还在不断地发展和演变,只不过现在的方向是大数据和人工智能等领域。为了发挥计算机强大的运算能力,我们必须掌握程序设计的基本方法和了解它的基本概念。所谓程序,是由符合程序设计语言(Programming Language)语法规则的程序语句、程序代码或程序指令所组成的,而程序设计的目的是通过程序的编写与执行来满足计算机用户的需求。

提  示

程序设计语言是一种人类用来和计算机沟通的语言,是由文字与记号所形成的程序语句、代码或指令的集合。程序设计语言主要的功能是将用户的需求使用程序指令表达出来,让计算机按照程序指令替我们完成诸多工作和任务,每种程序设计语言都有各自的文法规则,即语法(syntax),也就是它的使用规则。程序设计语言的语法一直朝着易于使用、易于调试、易于维护以及功能更强的目标持续发展和演变。

对于我们学习程序设计而言,目标无疑就是让我们设计的程序更有效率、可读性更高。我们知道,与计算机作为硬件工具一样,程序设计语言也只是一种应用工具,因此没有最好的程序设计语言,只有是否适合的程序设计语言,各种程序设计语言都是实现目标的方法。例如,著名的积木式程序设计语言Scratch,其集成开发环境的界面如图1-2所示。

 image.png

图1-2  积木式程序设计语言是指设计者能以拖曳积木的方式来组合出程序

 image.png

图1-3  云计算加速了新一代人才

必须具备程序设计能力时代的来临

随着信息技术与网络科技的发展,当前进入物联网(Internet of Things,IoT)、大数据、人工智能的云计算(Cloud Computing)时代。一个国家或地区的程序设计能力已经被看成是国力或者地区竞争力的象征。程序设计不再只是信息类学科的专业,而是新一代人才必备的基本能力,各个先进的国家或者地区纷纷将程序设计(或简称编程)列入学生的必修课程,发达地区的城市中小学都开设了编程的信息课程。通过学习程序设计的过程让学生获得解决问题的能力,只有将“创意”通过“设计过程”与计算机相结合,才能顺应这个快速发展和演变的物联网、大数据、人工智能的云计算时代,如图1-3所示。

 

提  示

“云”泛指“网络”,这个名字的源头是工程师通常把网络架构图中不同的网络用“云朵”的形状来表示。云计算就是将网络连接的各种计算设备的运算能力提供出来作为一种服务,只要用户可以通过网络登录远程服务器进行操作,就可以使用这种计算资源。

“物联网”是近年来信息产业界的一个非常热门的议题,它是指将各种具有传感器或感测设备的物品(例如RFID、环境传感器、全球定位系统(GPS)等)与因特网结合起来,并通过网络技术让各种实体对象自动彼此沟通和交换信息,也就是通过巨大的网络把所有东西都连接在一起。

1.1    认识计算思维

学习程序设计的目标绝对不是要将每个学习者都培养成专业的程序设计人员,而是要帮助每个人建立系统化的逻辑思维模式。以往程序设计的实践目标非常重视“计算”能力,近年来随着因特网的高速发展,计算能力的重要性早已不是唯一的目标,因而程序设计课程的目的特别着重于培养学生的“计算思维”(Computational Thinking,CT,或称为“运算思维”),也就是分析与分解问题的能力。

 image.png

图1-4  要学好计算思维,通过程序设计来学

是最快的途径

编写程序代码不过是程序设计整个过程中的一个阶段而已,在编写程序之前,还有需求分析与系统设计两大阶段。计算思维是用来培养系统化逻辑概念的基础,进而学习在面对问题时具有系统的分析与分解问题的能力,从中探索出可能的解决办法,并找出最有效的算法。我们可以这样说:“学习程序设计不等于学习计算思维,但要学好计算思维,通过程序设计来学绝对是最快的途径”,如图1-4所示。

计算思维是一种使用计算机的逻辑来解决问题的思维,前提是掌握程序设计的基本方法和了解它的基本概念,是一种能够将计算“抽象化”再“具体化”的能力,也是新一代人才都应该具备的素养。计算思维与计算机的应用和发展息息相关,程序设计相关知识和技能的学习与训练过程其实就是一种培养计算思维的过程。当前许多欧美国家从幼儿园开始就培养孩子的计算思维,让孩子从小就养成计算思维的习惯。培养计算思维的习惯可以从日常生活开始,并不限定于任何场所或工具,日常生活中任何牵涉到“解决问题”的议题,都可以应用计算思维来解决,通过边学边体会,逐渐建立起计算思维的逻辑能力。

假如你今天和朋友约在一个没有去过的知名旅游景点碰面,在出门前,你会先上网规划路线,看看哪些路线适合你的行程,以及选乘哪一种交通工具最好,接下来就可以按照计划出发。简单来说,这种计划与考虑过程就是计算思维,按照计划逐步执行就是一种算法(Algorithm),就如同我们把一件看似复杂的事情用容易理解的方式来解决,这样就具备了将问题程序化的能力。图1-5所示的范例是小华早上上学并买早餐的简单计算思维。

 image.png

图1-5  学生买早餐的过程也是一种计算思维的应用

2006年,美国卡内基?梅隆大学Jeannette M. Wing教授首次提出了“计算思维”的概念,她提出计算思维是现代人的一种基本技能,所有人都应该积极学习。随后谷歌公司为教育者开发了一套计算思维课程,这套课程提到培养计算思维的4部分,分别是分解(Decomposition)、模式识别(Pattern Recognition)、模式概括与抽象(Pattern Generalization and Abstraction)以及算法(Algorithm)。虽然这并不是建立计算思维唯一的方法,不过通过这4部分我们可以更有效地进行思维能力的训练,不断使用计算方法与工具解决问题,进而逐渐养成我们的计算思维习惯。

在训练计算思维的过程中,其实就培养了学习者从不同角度以及现有资源解决问题的能力。正确地运用培养计算思维的这4部分,同时运用现有的知识或工具,找出解决困难问题的方法。学习程序设计就是对这4部分进行系统的学习与组合,并使用计算机来协助解决问题,如图1-6所示。

 image.png

图1-6  计算思维的4部分示意图

1.1.1  分解

许多人在编写程序或解决问题时,对于问题的分解不知道从何处着手,将问题想得太庞大,如果一个问题不进行有效分解,就会很难处理。将一个复杂的问题分割成许多小问题,把这些小问题各个击破,小问题全部解决之后,原本的大问题也就解决了。

假如我们的一台计算机出现部件故障了,将整台计算机逐步分解成较小的部分,对每个部分内的各个硬件部件进行检查,就容易找出有问题的部件。再假如一位警察在思考如何破案时,也需要将复杂的问题细分成许多小问题,如图1-7所示。

 image.png

图1-7  将复杂的问题分解为小问题

下面举一个例子来说明。假如我们要分解教小孩刷牙的问题,可以分解与细分成以下情况(见图1-8):

    用哪种牙刷较好

    要刷多久

    如何刷

    哪种牙膏适合

    准备漱口杯

 image.png

图1-8  教小孩刷牙的问题

在一些综艺节目中会出现所谓的终极密码游戏,主持人随机从1~100中取出一个彩球(见图1-9),让嘉宾猜彩球的数字,主持人只能针对嘉宾猜的数字回答“高了”或“低了”,这也是一种问题分解的具体应用。想想看,如何才能快速猜到这个数字呢?

 image.png

图1-9  抽彩球游戏也是一种计算思维的训练

假如取出的彩球数字是“38”,那么我们可以将1~100的数字数列(sequence)先取中间的数字50来比较,38在1~50之间,所以只剩下数列前半段1~50,运用同样的方式取中间的数字再进行比较,数字数列又排除一半,只剩25~50,一直循环这个过程就能找到数字38。这个过程可以参考图1-10。

 image.png

图1-10  猜测彩球数字的一种二分查找法

事实上,这样的解题分析过程就是训练和培养程序设计的计算思维过程。在上述分析过程中,虽然并没有提到任何艰深的程序设计语言,但是已经带入了程序设计的两个重要概念:“循环(loop)”和“二分查找法(binary search)”。

提  示

循环会重复执行一个程序区块中的程序语句,直到满足特定的结束条件为止。例如,想要让计算机算出1+2+3+4+…+100的值,在程序语句中并不需要我们大费周章地从1累加到100,这时只需要使用循环结构就可以轻松实现这种累加。

二分查找法是将数据序列分割成两等份,再用要查找的键值与中间值进行比较,如果键值小于中间值,就可以确定要查找的数据在数据序列的前半段,否则就在后半段。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。