在我学习JVM的时候,有一个5~6年开发经验的coder说:学习这个有什么用啊,在工作中又用不到,还这么难。
这句话引起了我的思考,这个问题和我今天想说的,为什么要学习算法其实是同一个问题,也是不少IT从业者不解的问题。
对于很多程序员来说,可能在工作中不会写出比冒泡排序更复杂的算法了,还有必要去花时间去学习吗?先不急着回答这个问题,我们继续看看那个coder是怎么学习的。他说:他在工作的时候遇到不会的东西才会去学习,他认为学习是用来解决问题的,不应该与实际脱节,要学以致用,这样学的话掌握的比较牢固,也不会浪费不必要的时间。
乍一听这个观点也挺对的,生活中也有不少人是这么做的。但是仔细想想,这是一种事件驱动的学习方式,这样学习下去导致的必然结果就是
- 基础不牢
- 视野不够开阔
- 知识面狭隘
- 解决问题的效率低,解决的并不完美,甚至解决不了
关于上面这些结论,我建议大家仔细琢磨一下,看看是不是这样的。
上面说了这么多,我想大家对这类问题有了一个初步的认识,下面回到我们的议题,为什么要学习算法。其实学算法的目的,不是让我们用这些算法去解决生活中的问题,因为问题各种各样,绝大多数都不能套用现有的算法来解决或者说解决的并不完美。学习算法更重要的目的是培养我们解题的思路,遇到类似的问题能够类比去解决,或者自己能够分析出解题方案。学习数学,科学等学科的目的也在于此,不是让你去用这个解决问题,而是让你有解决问题的能力,也能让你清楚现在技术的边界在哪儿,优化点在哪儿。
我问过不少在阿里的大佬,阿里招人最注重什么,他们无一例外,都回答到了一点:潜力。什么是潜力?我想了很久,最后得出的结论是:学习能力。在未来,在智能时代,或许我们现有的知识都会过时,这就需要我们不断的去学习,能否快速的学会新知识,运用新知识,挖掘新知识是衡量一个人才的重要标准。学习能力是什么?我总结了以下几点:
- 基础
- 认知的高度
- 知识的广度
- 智力
- 情商
任何复杂的事物都是由基础构成的,把基础掌握牢,有高于一般人的认知水平,能够类比别的领域的相似事物去学习,拥有不错的智力,学习能力自然就强了。最后是情商,这一点我想重点的说一下,学习不是一个闭门造车的过程,只有交流才能让你学的更好,才能让你理解的更为透彻,所以和人打交道所需要的情商也是很重要的。
最后让我们看看今天的议题:为什么要学习算法?算法是基础,算法能够提升智力,我想这两点就值得我们花时间去学习了。