最近公司有小伙伴向我反馈,说自己好像跟不上,感觉拖后腿了。希望我能够帮忙指点下迷津。他的问题是主管交给他的任务,他都能理解。但是就是自己动手写程序的时候,发现很多问题解决不了,很慢。
针对他这种情况,我指出了他的可能存在的一些问题。其中比较主要的一点,是思维能力还比较欠缺。当然思维能力是一个宽泛的概念,具体到某个行业,它的要求会不一样。但是,基本的规律还是有些通用的地方。
基础知识是思维能力的基础
不管如何,工作中涉及到的基本知识,是思维能力不可缺少的远程来。基础掌握的扎实程度,会影响到你的思考能力。这个基础知识包括基本的技术知识,一些开发经验。如果是项目,也包括对于项目需求的理解程度。
这些没有捷径,只能靠自己多学习。学习学习在学习。 不要幻想自己有天赋,不用学,不存在的。
养成多思考的习惯
所谓学而不思则罔,思而不学则殆。平时在工作中,需要养成多思考的习惯。而且要多多深入的思考,在工作、编程的过程中,对于需求、代码的简单架构、相关的技术做更多的思考。思考很多时候,是让人感觉没有成就的事情,相比之下写几行代码,更让人觉得有成效。但是,养成多思考的习惯,对于解决问题的能力有长足的推进作用。
另外在学习知识技能的时候,也需要多思考。不要知其然不知其所以然。最好的方式是多问几个为什么,并主动践行。慵懒的浅层面的学习没有任何价值。
复盘与反思
围棋大师们,都有复盘的习惯。就是在和人对弈的之后,不管输赢,都会把对弈的过程重新复演一遍,并思考总结哪些地方做的好,哪些地方做的不好,应该如何改进。复盘是一个很好的锻炼思维能力的方式。对于程序员来说,你可以把自己成功完成的代码进行复盘,思考哪些地方做的好哪些地方可以改进,都是一个很好的锻炼方式。而另外一种复盘,就是读别人代码,思考别人的思路。 特别重要的是,一个问题,如果你不知道如何解决;而你的主管或者其他同事解决了,这是你一个极好的锻炼思维的机会。你应该好好的复盘一下他人的解决方案,为什么用这种解决方案,技术支撑是啥。不仅仅要学习解决方案的本身,还要思考为什么自己没有思考到,而人家思考到了,自己需要如何改进自己的思考方式才能思考到,人家用了什么样的思考方式和思考方法,是我没有的,这些都值得好好总结下。
复盘的过程,其实就是反思的过程,没有反思就没有进步。
比如,有时候给小伙伴指导一些问题的时候,我会自己亲自上去在小伙伴的工位上写代码。在这个过程中,我就会把解决问题的思路,以及我是如何思考,如何调试、如何查找资料的思路告诉对方,并最终写出解决方案的代码。但是,最终我都会删除我自己写的代码。其实这个时候,我就是给小伙伴一个复盘的机会,好好思考下。
解决问题前先整理思路,分解问题
在遇到实际的问题的时候,可以先思考。而不是先动手。比如可以用思维导图(或者你喜欢的工具,文档也可以,用笔在纸上画也可以)先把思路整理出来。 庖丁解牛,把一个问题分解成很多个问题。这个过程,本身也会帮助你思考。同时,在你把思路整理清晰之后,做的东西也就比较清晰了。 比如我写代码的习惯,就是先把相关的类写好,然后把类里面的相关函数写好。然后就是开始一个一个的填写了。其实类和函数的整理,也是一种思路的整理。当你有了这种好的思路之后,你也方便和其他人交流和请教问题。这种情况下,你也很明白自己什么地方不懂,也方便别人了解你哪些地方不懂。
进行一些思维的练习
在网上会有一些思维训练的问题。可以自己多尝试练习。其中发散思维、逻辑思维和想象力是需要重点训练的。发散思维可以培养你的思维的开阔度,在遇到问题的时候,可以想到更多的方法。而逻辑思维可以增加你的判断力。
多读书
多读书刻意开阔自己的视野,并间接影响自己的思维能力。
写笔记
所谓 好记性不如烂笔头。我一直强调,要自己多总结,多写点笔记,记录下自己的一些训练,思考的东西。 这个记录的过程,也是整理你自己思路的过程。多写写,不会有坏处。
分享和讨论
同时,还可以把自己写的笔记分享出来,可以找人多讨论交流,碰撞思路。吸收更多人的想法和思维。
总结自己的方法体系
说说我学数学的经历。我小学,初中,高中,数学都是我的最好的一门学科。为什么特别好,就是自己对此很有兴趣。前面说到的一些方面:
- 比如深入思考,我会对于一个问题寻找多个解方法,并看这个问题是否可以引申,扩展,并寻找规律。 比如高中的时候我就发现了海伦公式的引申:圆内接四边形的求和公式和海伦公式及其类似。另外我还发现任意奇数阶幻方的快速填写规律。还有就是完全数的一个数学规律,具体啥规律我其实忘记了,当时的笔记本也丢了。(完全数是啥?完全数,又称完美数或完备数,是一些特殊的自然数:它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身,比如6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1)。 另外,我自己把所有的三角形函数公式全部自己推导了一遍,而不是死记硬背。等等
当然我当时的性格属于比较封闭,这些东西并没有发表。 不然我想怎么着也可以上一个中学生数理化的杂志吧。
- 比如复盘,如果一道题我没有做出来,老师给了答案,我就一定要把这道题的解答想清楚。不只是想清楚这道题本身的解答方案,因为以我当时的数学能力,老师一提点,我基本就想清楚了解答方案。但是,我思考的是,为什么我没有想到,我欠缺了哪些东西,基础知识,还是思维角度等等。如果是思维角度的问题,我就会丰富自己的思维角度。
- 比如说总结归纳以及发散思维,其实在深入思考的部分,本身也是一个总结的过程,还涉及到就是把思考的东西笔记记录下来。另外也涉及到发散思维,因为没有发散,就没有延伸和规律的发现。
说这个,不是显得自己多厉害。其实主要是自己有兴趣去做这样的事情,自然就能够达到不错的效果。我不是有什么天赋,也算不上特别聪明。只是喜欢锻炼自己的思维能力。而在这个数学的学习过程中,我锻炼了自己的归纳,抽象,发散等等各方面的思维能力。
而且也形成了一套自己的方法体系:
比如数学归纳法,边界判断法,排除法,见微知著法,枚举法,差异法等等。
这些方法都是自己在不断学习 锤炼数学思维过程中总结出来的。可能现在想想那个时候学的数学,好像没有多少用。但是这种思维能力其实一直到现在对我都还有帮助。当然,当时数学学习锻炼的思维能力和总结的方法体系,对于我学习其他课程,也起到了积极作用。
解决问题的方法体系,其实是很有作用的。比如归纳法。我记得中学的时候一个同学有了一个诺基亚的手机,当时手机里面有一个游戏(现在知道:其实就是汉诺塔,但是当时是不知道的,具体细节不解释了,不知道的自己去搜索吧)。很多同学都玩不出来,我看了一下,几分钟完成了。其实并不是我多聪明,而正是运用了数学归纳法。另外一道题,我在大学刚毕业的时候,在武汉找工作,看到了一份医院杂志,全部都是 X科 和Y科的广告(你懂的)。最后一页,有一些智力题,其中一道题是这样的,我当时也是运用归纳法秒解出来。
有个岛上住着一群人,有一天来了个游客,定了一条奇怪的规矩:所有蓝眼睛的人都必须尽快离开这个岛。每晚8点会有一个航班离岛。每个人都看得见别人眼睛的颜色,但不知道自己的(别人也不可以告知)。此外,他们不知道岛上到底有多少人是蓝眼睛的,只知道至少有一个人的眼睛是蓝色的。所有蓝眼睛的人要花几天才能离开这个岛?假定所有人都很聪明,并且每个人都知道别人很聪明。
嘘,到公司面试过的人都知道,这是一道面试题。
所以,在工作过程中,如果你发现自己的思维能力不够,就需要运用各种方法来锤炼自己的思维,并总结自己的解决问题的方法体系,不断积累丰富自己解决问题的方法体系,当然有的人并没有刻意的总结,但是他们其实在不自觉间总结了,自己不知道而已。
最后还的说坚持。
提高思维能力这种事情,需要刻意练习,也是一个长期的过程。 但凡需要刻意练习的事情,一般都比较枯燥。就像跑步健身一样,谁都知道跑步有益身心健康,能坚持下来的没几个。由于是一个长期的过程,所以也并不能再短期获得好的成效,所以往往难坚持下去。
这其实和人脑喜欢及时回馈有关系。人脑喜欢让自己快乐的东西,不喜欢让自己痛苦的东西。而付出脑力和体力都不是人脑的喜欢。但是如果一定要付出,那么人脑喜欢及时回馈的东西。这其实是人的动物属性。就比如马戏团的猴子,完成动作后,就会马上有奖励。所以它总是愿意去做哪些动作。人在这方面其实不必动物高级多少。很多人终其一生也无法摆脱及时回馈的诱惑。
曾经看了一本书,书中讲了一个故事, 一些古巴比伦的一些人,哪怕最终会沦为奴隶,也要借债消费。其实就是一个短期诱惑战神长期痛苦的例子。
如何改变。方法就是改变自己的信仰,大脑认为什么是痛苦的,什么是快乐的,其实很大程度决定于你的信仰。
那么应该有什么样的信仰。 对于坚持这件事,虽然你暂时看不到成效,但是要相信老天在偷偷的给你积分。正所谓:
坚持的人,如春园之草,不见其长,但日有所增;懈怠之人,如磨刀之石,不见其损,日有所亏。