一 抽象
世界是复杂的,复杂到我们大脑反应不过来,所以进化出来一个很重要的能力就是抽象。
记得在一个小品节目中看到一个笑话,“问,把大象装到冰箱里面,一共需要多少步?” 答:“一共需要三步,第一步把冰箱门打开,第二步把大象放进去,第三步把冰箱门关上” 。虽然是个笑话,却也告速我们看待问题的层次很重要,也就是要学会抽象,在普通人看来,大象放冰箱里面是个非常复杂的事情,划分成多少步几乎是个无解的问题,却通过高度的抽象,把问题简化到最简,问题就迎刃而解了。所以遇到几乎无解的问题,就把视线拔高,从更高的层次去看代问题,做各种各样的简化,最终将大事化小事,小事化成可以真正执行的步骤。
二 层次化思维
抽象是一种层次化思维,就拿我们程序员来说吧,如果新开发的程序发现一个bug,你是个程序员,这个bug是你开发引入的,需要你来解决,但是折腾了几天了还是毫无头绪,各种沮丧的情绪好像世界末日(不知道开发朋友有同感嘛?:))。
这时候视角在这个bug上,确实是很大的问题;如果把视线拔高从整个程序角度来看,这个bug存在,是否整个程序不能用,还是这部分功能不能用,如果只是部分功能不能用,那我们是不是可以把这个功能暂时砍了去,程序还是正常运行;如果再次把视线拔高,也许这个产品只是个实验性的产品,整个产品都砍下去,对公司影响都很小,何况是这个bug;
对个人来说,解决不了这个bug,只能算找bug这种能力有待提高,但是作为一个程序员,不光需要编码能力,从高一些的层次来说,还需要架构设计能力,编码能力,基础能力等必须技能;但是从更高一些的层次来说,以上所说的能力,只能算软件编码设计能力,还需要沟通能力,协调能力,表达能力,视觉越高,bug这个问题的影响就越小;就算编码设计能力一无是处,离开了软件开发这个行业,仍然有很多行业选择。这些是从行业的角度,如果再高一个层次,除了工作,还有生活,所以同一个问题,在不同的维度看来就会越来越小。bug是这样,其他的事情也一样,除了生命,一切都是小事。
这种高层次的抽象思维很重要,比如在做规划的时候,是将整个人生做规划,所以不是仅仅规划今年完成几样工作,而且是要将个人健康,生活,以及工作都综合考虑进去,这其实是对人生的几个事情做了抽象,无论哪个主题扩展开来都会有很多内容;通过高度抽象,从而做到简化的目的,
简化是为了好把握,大脑对于复杂的事情,很头疼,简化了抽象了,使我们考虑问题的时候,更综合,更立体了,确保没有遗漏大方向。
三 抽象优点
像上面所说的,抽象高层次看待问题,可以简化问题,可以将问题考虑地更加全面。抽象简化了问题之后,让我们可以从更高角度来考虑问题,从而设计出更复杂的东西。就好比用乐高积木来拼个城堡,感觉很复杂,那么我们把城堡先看成一个个房屋组成,而房屋又是由 门,墙壁,屋顶这基本组成,而门,墙壁,屋顶这些还可以继续分下去,这样我们通过这种多层次的层层抽象,简化,最终拼成很复杂的成本。
这也类似于软件设计里面的模块化思维,任何复杂的软件都是由一个个模块组成,模块再细分为一个个类,类再细分出成员变量和函数,函数再分成一行行普普通通的代码。阅读一个软件的源码不能上来就看代码,最好的办法,先了解功能,知道可以划分成多少个模块,然后再分析每个模块涉及到哪些接口,哪些类,重点分析模块之间的交互,相当于先把大架子在心中还原出来,再去了解感兴趣的细节。
网友评论