我们所接受的教育要求我们最大化知识获取速率,无论是文科还是理科,我们都需要在短的时间内掌握尽可能多的知识,而当我们对知识追求的“功利心”过强的时候,我们只停留在“知道”的层面,而忽略“理解”的重要性。
而编程的核心恰恰是建立在理解的基础上解决问题的思维能力,卡耐基梅隆大学
的一名华裔教授将这样的思维定义为“[编程思维
用经典的打印99乘法表作为案例为大家详细解析编程思维。
1、Decomposition,拆分
**。**将问题/需求拆分为更易理解和执行的小步骤。
首先明确我们的需求:打印99乘法表。然后我们会面临一个问题:机器并不懂什么是99乘法表,我们要把我们达成共识的乘法表进行梳理拆分,转译成它能理解的语言,即1乘以19,2乘以29……从1到9分别相乘
并显示运算结果。
我们在拆分-梳理-转译
的过程,其实也是我们理清解决问题的一个过程,在现实生活,每一个复杂问题,也都是基于解决一个个被拆分的小问题而被解决的。
2、Pattern Recognition,模式识别
**。**找到问题的规律与特征与已有知识建立联系。
现在我们可以开始打印乘法表了。
1*1=1 1*2=2 1*3=3……
2*2=4 2*3=6……
…
虽然我们可以依次这样手动打印,但是这费时费力还容易出错,对计算机也是大材小用,我们需要找到它的内部规律与特征:这是依次递增
,重复进行乘法运算的模式。
**3、Abstraction,抽象。**根据规律和特征提炼聚焦关键信息,忽略无用细节。
比如,当我们看到这一房子,我们看到的是:
但在建筑师的眼中,它可能是这样的:
回到案例,在我们进行编程的时候,我们也需要把这45格的99乘法表
进行提炼。
我们可以把乘法表提炼出两个1~9的数列,以横向来看当乘数与被乘数相等时,停止打印,即当出现1*1,2*2,3*3…时后停止。
这是一个提炼过滤
的过程,整个过程你要聚焦重要的关键信息,忽视无用细节,这样才能通过认知问题的核心本质,帮助我们形成解决问题的构想。
4、Algorithms,算法
**。**根据前三步的分析成果,找到对应的算法解决问题。
只有在这最后一步,我们认为代表编程的代码和算法才发挥了作用。
我们觉得编程的难是因为我们过于强调工具本身的重要性,而轻视了建立在理解基础上解决问题的思维能力。只有当我们突破了惯有的认知模式,才算真正开始学习编程。
就像很多刚刚出国读书
的孩子,常常在面对外国老师问出「why」的问题时,马上一种惊慌失措的表情,满脑子想着自己是不是又说错答案了,不知道老师这样问仅仅是为了引导他们拓展思维。
我们真实的社会和生活也是不易的,它们没有标准答案,许多人终其一生没有追寻问题的能力,无法理解世界的复杂。
而编程,是你找出解决方法的能力,把现实问题转换为代码逻辑的能力。只有认清这一点,你才能更好地攻克它