《写给所有人的编程思维》一本老少咸宜的编程思维科普书

“编程思维”并不是编写程序的技巧,而是一种高效解决问题的思维方式,是“发现问题——思考问题和解决问题”的高效思维过程。

计算机协会对“编程思维”的官方定义是,编程思维是一种解决问题的方法,它将计算机科学的领域扩展到所有学科,提供了一种开发和分析解决方案的方法,从而这些问题有可能由计算机解决。

编程思维学习远远大于编写程序技巧学习。可以这么认为:你在编程的时候一定使用到了编程思维,但你在学习编程思维的时候,未必需要学编程。因此,编程思维及其核心元素的教授可以不涉及编写程序的技巧。

《写给所有人的编程思维》吉姆·克里斯蒂安

今天给大家分享的书就是《写给所有人的编程思维》,这是一本老少咸宜的编程思维科普书籍。作者是英国著名科技教育专家,编程怪才,畅销书作家:吉姆·克里斯蒂安。书中通过对“编程思维”的“发现问题的框架设计思维、思考问题的问题拆解思维和解决问题的函数思维”三部分组成。

掌握编程思维的重要性

在我们的认知中编程只是一种语言,一种在数据化时代的新的外语,是一种工具就跟数学、哲学、外语等一样的工具。编程能够帮助我们理解每个事物的形成过程,更好的适应未来变化。

学习编程思维对于我们提高技术与知识水平至关重要,因为计算机程序现在已经无处不在,我们手中的智能手机的计算能力,都NASA登月时用的计算机还要强。

计算机太普遍了,我们每天都在用计算机处理问题、进行娱乐。或许,正是太习惯于计算机无处不在的生活,我们都不会去想,其实身边那么多东西都是计算机。

正在崛起的物联网中,用途单一的日常物件如汽车、单车、门禁,在其中置入计算机芯片,使其具备网络联通能力,都可以“智能”起来,这都要依赖计算机和程序员才能正常运转。

编程思维

学习编程思维的过程,将帮助你培养批判性的思维方式,提升你的组织能力,增强你使用计算机的信心。这样,即便在以后的人生道路上遇到了编程术语的问题,也不会为之困扰。

通过计算机科学、逻辑学和数学核心概念的学习,获取一套可以终生受益的工具,把自己武装起来,迎接各种挑战。

学习思维模式,就意味着有能力创造性地解决问题、表达思想。

其实,你早已经在创造性地解决问题、表达思想啦。但问题在于,你可能还不知道如何以编程思维的视角去看待生活中的方方面面。

如果你喜欢作曲,你就知道如何运用编程思维。

如果你想设计舞步,你就会知道如何运用编程思维。

如果你喜欢打篮球,那么你也会知道如何运用编程思维。

编程思维,计算机思维,电脑科学,不管你听到的是哪个术语,这些术语并不只是指数字、符号或者代码,最重要的是指如何创造性地解决问题。

发现问题的“框架设计思维”

学习编程思维,并不意味着你必须具备多种特殊的技能。不过,拥有解决问题的欲望却非常重要!其实,你一直都在解决问题,只是自己没有意识到而已。

试想一下,你要去一个从未去过的地方,走着走着就迷了路,找不着那个地方了。其实这也不算什么大问题,你可以使用手机导航,可以打个电话找朋友帮忙,也可以查看当地的地图,或者找行人问问路。这些简单的从别处寻求帮助的行为,就是解决问题。

解决问题可能具有挑战性,经常解决问题会使人感到疲惫,但是这对大脑却不见得是件坏事。我们的大脑需要刺激,这些刺激可以使大脑得到锻炼。即使你不习惯每天都要解决很多问题,也可以先从小问题入手,然后再去解决大问题。

定期锻炼大脑、解决问题,不仅仅有益于编写程序或培养编程思维,还有助于集中精力,提高记忆力和反应能力。因此,积极地解决问题,对于每个人而言,都是百利而无一害的。

大脑是由左半脑和右半脑两部分组成的。右半脑控制左侧身体,还负责想象、艺术和创造;而左半脑控制右侧身体,负责逻辑思维、语言学习和推理论证。

大脑的左右两个半球都需要不断地滋养,才能日复一日地执行任务。我们从每日所吃的食物、所喝的水中获取大脑所需的营养,还要通过充足的睡眠保证大脑休养生息。

锻炼身体也是非常重要的。适当地休息休息,伸伸懒腰,到外面呼吸呼吸新鲜空气,都是十分必要的。有时候,快走这样简单的运动,都有可能让你想到一个难题的解决方法。

学习编程很有益处,可以同时锻炼左、右脑——也就是做到所谓的“全脑思维”。

发现问题的“框架设计思维”就是把一个复杂的大问题,拆解成更可执行、更好理解的小步骤。

思考问题的“问题拆解思维”

想一想一部电影是如何制作并剪辑完成的。好莱坞的电影制作团队,从视觉效果团队、服装师到餐饮服务人员,一般都有好几千人。

虽然在屏幕上仅仅只看见有限的几个演员以及导演和制片人的名字,其实他们的背后是一个庞大的团队。

这些人共同协作,才能保证电影制作完成并顺利发行。如果我们把好莱坞电影看作一个需要解决的大问题,那么演员和相关摄制工作人员就是问题的组成部分,所有这些组成部分共同协作才能最终解决这个大问题。

这些问题,打眼一看,觉得非常复杂。如果是这样的话,我们就把大问题分解成小问题,一个一个的理解和解决。

其实,聪明的并不是计算机!虽然凭借内部的芯片,计算机拥有快速执行多项任务的智能,但是一切智慧的源头还是程序员。

因而,每当程序员要让计算机执行任务时,都必须给出十分具体、清晰的指令。有些编程语言已经具有一些可供使用的内置指令。这些预先编好的指令,我们先就内置指令做几个一般性的设想:

计算机能够接收输入并提供输出。计算机接收键盘按键和鼠标移动的信息,然后将结果输出到屏幕、储存设备或者打印机上。

计算机能够识别数据并加以处理,即计算机可以区分数字、文本以及其他数据类型。

计算机能够处理变量、逻辑和运算符,完成数学运算。毕竟,计算机完全是依靠数学运算来保证运行的。

计算机能够辨别方向、标绘路线、在地图上给出位置坐标。即使计算机具备这样的能力,我们也必须下达十分具体、清晰的指令,计算机才可能完成。

即使计算机具备这样的能力,我们也必须下达十分具体、清晰的指令,计算机才可能完成。换句话说,不能笼统地告诉计算机整理床铺、打扫房间、做三明治,必须清楚地解释所要执行任务的每一项具体步骤。

下一页的流程图就展示了机器人是否需要整理床铺的判断过程。这个流程图比较简单。而用于商务和软件开发的流程图多种多样,既有像这样简单的,也有更为复杂的。

整理床铺判断过程的流程图

编程思维就常常要求你离开电脑屏幕,运用其他工具来呈现程序的流程,并与他人进行分享。

解决问题的“函数思维”

假如我要在周六下午三点,到朋友小明家去。我住的地方离他家有10公里。星期六早上,我要先给宠物喂完食,再去游泳。然后,要在下午一点在城北快餐厅吃午饭,估计两点之前可以吃完。快餐厅离朋友家还有3.5公里。那么在两点到三点得走多远的路呢?

使用抽象思维时,我们要剔除那些与手头问题无关的信息。例如,我住的地方离小明家有多远,这就无关紧要,因为星期六下午,我吃饭的地方离他家更近。至于我要喂宠物、去游泳,也都与去小明家无关。

唯一相关的信息只有一个:快餐厅距小明家有3.5公里。

如果是复杂的问题,比如好莱坞大片的拍摄,这样的场景:在外面观看影片的过程中,脑海中出现了一些令人惊骇的场面,然而屏幕上并未出现那般恐怖的景象。

导演有时会花费数百万美元,有意利用镜头,拍摄演员面对屏幕上的怪物而做出惊骇的表情,目的在于制作特效,创造紧张氛围。

完成以上步骤后,就是编程思维的最后一步了,将从问题分解、模式识别和抽象思维中提取的问题进行设计、检测。

编程时,我们不需要将程序一点一点地全部写出来,有些部分计算机会帮你完成,这就是函数的作用。

简而言之,函数就是一种编程语言中已经写好、可供使用的代码。这些语句已经编写在一起等你使用,这就是常说的内置函数。

内置函数因编程语言的不同而有所差异,但其存在的意义在于避免程序员做重复的工作。进行基础或复杂的数学运算,生成随机数,在屏幕上显示文本,这些都是内置函数应用的实例。

有了前人辛苦工作的成果——函数,我们就不需要再花时间重复别人已经做过的事情了。

为了更清晰地解释这个步骤,我们去见一见著名的数学家、天文学家高斯。如果让你把1~100的所有数字用心算的方法加起来,你能做到吗?

早在公元1785年,高斯的老师就给学生们出了这道题。老师本希望能多占用一些课堂时间,但是出乎老师的意料,高斯很快给出了答案:5050。

1~100 快速求和

不要因为没有看出高斯所发现的规律而伤心!高斯可是个数学天才,他一生有很多重大发现。他死后,他的大脑都没有随着身躯一起下葬——他的大脑被送到哥廷根大学去做研究。时至今日他的大脑还在哥廷根大学呢!

高斯并不是死板的将这些数字一个个相加(1+2+3+……+98+99+100)。他发现这些数之间有一个规律,就是将这组数首尾相加都会出现相同的结果:1+100=101,2+99=101,3+98=101……一共有50组这样的数字相加。因为1~100中间的数是50,所以高斯只需要计算50×101,最后的答案就是5050。

高斯不是计算机方面的专家,在他的时代也没有计算机,他只是个9岁的孩子。但是高斯很聪明,善于创造性地解决问题。