什么是编程思维?
计算机思维可以分解为四个部分:
·问题分解
·模式识别
·抽象思维
·算法设计
问题分解
想一想一部电影是如何制作并剪辑完成的。好莱坞的电影制作团队,从视觉效果团队、服装师到餐饮服务人员,一般都有好几千人。虽然在屏幕上仅仅只看见有限的几个演员以及导演和制片人的名字,其实他们的背后是一个庞大的团队。这些人共同协作,才能保证电影制作完成并顺利发行。如果我们把好莱坞电影看作一个需要解决的大问题,那么演员和相关摄制工作人员就是问题的组成部分,所有这些组成部分共同协作才能最终解决这个大问题。
模式识别
进行模式识别,可以帮助我们发现和解决与模式相关的问题,因此模式识别作为编程思维的第二步,有助于我们进一步分解问题。举个例子来说,你如果想在某个网站上提交信息,你必须先在某一点上进行模式识别,也就是常说的CAPTCHA(验证码)验证,这种验证方法受到许多网络公司的青睐,用以防止计算机或者自动软件伪装成用户开启别的功能。强迫计算机使用者进行模式对接测试,是目前防止此类软件骚扰的有效办法。在上图的验证码中,我们必须确认所有含有树形的图片而这正是目前计算机所无法自动生成的。你知道吗?其实,只要做些拼图游戏一样简单的事情,就能获得很棒的模式识别技术。
抽象思维
举个例子,我要在星期六下午三点,到朋友亚当家去。我住的地方离他家有7.2英里。星期六早上,我要先给狐猴喂完食,再去游泳。然后,要在下午一点在城北的一家咖啡馆吃午饭,估计两点之前可以吃完。咖啡馆离朋友家还有3.1英里。那么,在两点到三点这一小时内,我得走多远的路呢?使用抽象思维时,我们要剔除那些与手头问题无关的信息。例如,我住的地方离亚当家有多远,这就无关紧要,因为星期六下午,我吃饭的地方离他家更近。至于我要喂食狐猴、去游泳,也都与去亚当家无关。唯一相关的信息只有一个:咖啡馆距亚当家有3.1英里。现在我们回过头来再看看那些好莱坞大片,回顾下这样的场景:在外面观看影片的过程中,脑海中出现了一些令人惊骇的场面,然而屏幕上并未出现那般恐怖的景象。导演有时会花费数百万美元,有意利用镜头,拍摄演员面对屏幕上的怪物而做出惊骇的表情,目的在于制作特效,创造紧张氛围。
算法设计
完成以上步骤后,就是编程思维的最后一步了,将从问题分解、模式识别和抽象思维中提取的问题进行设计、检测。为了更清晰地解释这个步骤,我们去见一见约翰·卡尔·弗里德里希·高斯。会见高斯如果叫你把1~100的所有数字用心算的方法加起来,你能做到吗?如果可以做到的话,你需要花多长时间呢?早在公元1785年,高斯的老师就给学生们出了这道题。正如故事所叙述的那样,高斯的老师给学生出这道题,本希望能多占用一些课堂时间。但是出乎老师的意料,高斯很快给出了案:5050。你知道吗?不要因为没有看出高斯所发现的规律而伤心!高斯可是个数学天才,他一生有很多重大发现。他死后,他的大脑都没有随着身躯一起下葬——他的大脑被送到哥廷根大学去做研究。时至今日他的大脑还在哥廷根大学呢!高斯并不是死板的将这些数字一个个相加(1+2+3+……+98+99+100)。他发现这些数之间有一个规律,就是将这组数首尾相加都会出现相同的结果:1+100=101,2+99=101,3+98=101……一共有50组这样的数字相加。因为1~100中间的数是50,所以高斯只需要计算50×101,最后的答案就是5050。高斯不是计算机方面的专家,在他的时代也没有计算机,他只是个8岁的孩子。但是高斯很聪明,善于创造性地解决问题。他将复杂问题简单化(把大问题简化分解成易于处理的小问题),找出其中的规律性,例如这道题中,每对首尾数字相加,得数相同;采用抽象思维,略去不必要的解题步骤,在这道题目中,并不需要将数字依次相加,而是应该把它转为乘法进行运算。著名的科幻小说作者和未来学家亚瑟·克拉克曾经说过:“科学技术的最高境界无异于魔术。”然而魔术的问题在于,当魔力消失以后,没有人能够使其复原。但是,如果我们学习编程思维,我们就可以把握科技发展的脉搏。