在各个技术社区或者技术上,我们总是喜欢谈论一些高大上的话题,比如高可用架构、人工智能、云原生应用、跨平台框架、区块链。虽然这些时髦的词代表着行业的趋势,但也在无形之间给我们传递着焦虑,我们不知道怎么才能快速掌握这些新技能,以跟上时代发展。
事实上,回答这个复杂问题的答案也很简单,那就是“专注于学习那些不变的底层知识”。曾经认识一位在硅谷工作了 8 年多的工程师,他从事的是前端方面的开发工作,但后来自己却创业做了 AI 相关的产品。
让人惊讶地是,他仅仅用了半个月时间就掌握了机器学习、深度学习相关的知识,并且成为了一名熟练工。可能你会像我一样问他:你是半个月时间不吃饭不睡觉地学习吗?他说,其实,AI 对于他来说,并不陌生,虽然这个词比较新,但是当他深入进去学习的时候,发现全都是他在之前工作中擅长的那些知识。比如数学、数据结构与算法、计算机组成原理…
所以不得不感叹,“任他东南西北风,我们都要持续专注于学习那些不变的底层知识”。
从这个角度,我们也就不难理解为什么那些大公司面试的时候都喜欢问算法类的题目了。但理解归理解,当大家真正学习算法的时候,又是另外一番景象,因为真正基础、真正核心的东西肯定是个硬骨头,学习的难度也相对会高。这也是很多人不愿意深耕基础知识的原因所在。
那么人人都说“难”的算法,到底应该怎么学呢?
涛哥给你推荐一个人——覃超。他从美国顶尖学府卡内基梅隆大学计算机专业毕业,曾经在 Facebook 工作三年,作为 Facebook Messenger Tech Lead,参与了 Facebook App、Facebook Messenger、Facebook Phone 等产品的研发工作。
覃超在 Facebook 期间面试过很多人,也面对面教过很多人学习算法的朋友交流,他分享给我几点自己总结的经验:
知道分子,一无是处,专业和熟练才是关键。面试的时候,他喜欢问候选人动态规划类型的题目,很多人审完题之后都能大概知道考点是动态规划,但是再让候选人往下说,就会卡壳。这样的状态很多人都经历过,本质还是不熟练,所以说你想成为顶尖选手,前提条件就是应该专业,应该熟练,只是知道这件事情其实并没有价值。
刻意练习,持续刻意练习。如果想要深耕,我们就要成为“熟练工”,那怎么成为熟练工呢?诀窍就是刻意练习,比如你对二分法不熟悉,那就每天都做一些二分法的题目,然后总结出一些适合自己记忆和理解的解题方法,让这个知识点能真正融入到你的知识体系中。
锻炼分析、解决问题的能力。我们学习基础知识,我们刷算法题,本质上都是希望能够提升自己解决问题的能力,要不然,做再多的“刻意练习”都是徒劳。在学习类似算法这样的基础知识的时候,我们一定要心中有数,知道终局是“解决问题”。这就要求你能够有抽象问题、分析问题的能力。
最近,得知他跟极客时间合作,推出了一门与众不同的高强度训练课程——算法训练营,我第一时间看了课程的整体安排。不得不说,这个训练营非常适合不同基础的软件工程师,系统的精进算法能力、构建知识体系。
它不仅涵盖常见的算法面试题精讲,还包括数据结构和算法的理论知识的讲解,以及算法在实际工程上的应用,一次性将数据结构和算法的方方面面讲透;同时训练营设计了一套有效的学习机制,帮助大家克服学习的种种障碍。这个训练营能够让你在有限的时间内,实现算法学习的突破。