1、重视底层基础能力
总理今年在记者会上谈起基础研究问题时说到 " 不管你将来从事什么职业,有什么样的志向,一定要注意加强基础知识的学习,打牢基本功和培育创新能力是并行不悖的"。这句话在 IT 行业尤其适用, 不管是不是科班出身,每一个程序员都应该花时间了解和学习计算机科学相关的基础知识。
你是不是也曾觉得数据结构和算法,跟操作系统、计算机网络一样,是脱离实际工作的知识?可能除了面试,这辈子也用不着?我曾经也这么想过,因为在未真正走出社会之前,思想一直处于封闭的状态。后来阅读了很多别人写的文章,才猛然发现这种想法是错误的。
我举一个大多数学生都会经历的一个例子,校招的时候,参加面试的学生通常没有实际项目经验,公司只能考察他们的基础知识是否牢固。社招就更不用说了,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。相比短期能力,他们更看中你的长期潜力。
近几年很多公司发展得异常的迅猛,以字节跳动为例,更是时不时开放大量hc,有的热门岗位缺人,招实习生不要求有任何的技能,进去直接一对一有导师帮你带你,招聘需求只有一个,有扎实的计算机基础。
再举一个小争哥在《数据结构与算法之美》中谈到过的一个例子。一个 腾讯 T4 的技术大牛,在区块链大潮之前,他在腾讯工作了 10 多年,长期负责手机 QQ 后台整体建设。他经历了手机 QQ 从诞生到亿级用户在线的整个过程。后来他去了微众银行,有一天老板让他去做区块链。他用了不到半年时间,就把区块链的整个技术脉络摸清楚了。 现在,他是微众银行的区块链负责人,微众科技创新产品部的老总。你说厉害不?你可以花半年时间就能精通一个新的领域吗?为什么他就可以做到?
最重要的就是基础足够扎实。他曾经跟我说,像区块链、人工智能这些看似很新的技术,其实一点儿都不“新”。最初学编程的时候,他就把那些基础的知识都学透了。当面临行业变动、新技术更迭的时候,他不断发现,那些所谓的新技术,核心和本质的东西其实就是当初学的那些知识。掌握了这个“规律”之后,他学任何东西都很快,任何新技术都能快速迎头赶上。这就是他快速学习并且获得成功的秘诀。
基础知识就像是一座大楼的地基,它决定了我们的技术高度,而要想快速做出点事情,前提条件一定是基础能力过硬,“内功”到位。在这一点结束再送给大家一句很扎心,同时也很现实的话:“技术宽度决定了你是否能够进入一家公司,技术深度这决定了你offer的等级”,这也就不难解释了为什么我们的同学能找到工作,但薪资却不是很高的原因了。所以,同学们,请务必重视底层基础能力!!!
2、学会打造自己的知识体系
大数据发展至今,早已不是一个新兴的词语,大数据的应用已经无处不在。
在学校学习的时候,我眼中的大数据仅仅只是对“大数据生态圈”中的一些常用组件的理解和使用,对于“大数据”究竟在企业中是如何发挥作用的,也只停留在一些不成熟的“企业项目”上。以前,我知道 Hadoop在广义上指一个生态圈,泛指大数据技术相关的开源组件或产品,如 Hbase,Hive,Spark,Zookeeper,Kafka,flume… 出来工作之后,随着不断深入的了解,我才发现原来大数据的世界远比我想象中的要精彩。被阿里一手在国内带火的实时流处理引擎 Flink,Fackbook开源的分布式SQL查询引擎 Presto,第一个由国人主导的Apache顶级项目“Kylin”,高性能实时分析数据库 Druid,还有很多Kudu,Iceberg,ClickHouse,Hudi,Cancal 等等就不一一列举了。总之,给我的感觉就是很多技术在不断的迭代更新,你必须保持敏锐的嗅觉,并及时跟进学习,才不至于落后太多。
而这么多技术,对于像我这样的初学者,肯定是没法瞬间消化的。那我是如何学习的呢,这里边用到了我小标题所谈到的“学会打造自己的知识体系”。
先来介绍一下什么是“知识体系”?
所谓“知识体系”,指的就是把大量却不同知识点,系统、有序、指向性明确地组合成某种类型的知识架构。
通过这个知识架构,我们可以更好地理解某些问题,解决某些问题。而与之相对的,则是碎片化的知识点。
也就是说,“知识体系”好像蜘蛛网那样,能把不同的知识点,有规则地串联起来,从而塑造出我们看到问题、理解问题的思维模式;就算把其中一些知识忘掉,我们因此拥有的独立思考能力,也得以帮助自己继续工作和生活。而碎片化知识,只能“头疼医头脚痛医脚”那样,一旦脱离具体的应用环境,就毫无用处了。
你可能看到这里还是一头雾水,那是因为我没有告诉你如何落实下来去做这件事情。
比如你想学习数据结构与算法,你就可以在一开始的时候,先明确自己学习的目的是什么,是找为了应付面试,还是只是想单纯提升自己的算法能力,那么你可能在查找各种资料之后,画出了下面这一张图 。
但后面你转念一想,自己作为初学者或者非算法工程师,没必要学习所有的数据结构和算法。在询问了学长学姐如何应对BAT的算法笔试题,决定掌握这个10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。然后有目的,有针对性的去学习,这就是属于你搭建自己知识体系的过程。
当然,建议“知识体系”的这个过程并不简单,一般都需要经历以下六步,这里就不一一展开,想要更加深入了解可以自己去做进一步的了解。



