我今年大四,大二的时候先后在厦门的两家小公司实习 Java,大三的时候在 Apche Kylin 的贡献团队 Kyligence 实习,现在在一家西班牙集团就职大数据开发。
由于一路都是自己摸爬滚打过来的,而我又是一个喜欢总结且善于总结,喜欢分享且善于抽象事物的人,所以分享一些学习路线、面试经验、学习资料以及我在实习过程中总结的一些东西。
01
为什么要学习大数据?
在我第一份实习的时候,忘记在什么场景下我 leader 突然说了一句:「干 Java 不就是增删改查嘛」,而恰好那时候知乎都是「干了3年Java,还是只会增删改查,迷茫」等问题 ,我听完 leader 那句话就心里一颤。
因为这句话,我又一次的陷入迷茫,我不清楚自己是不是应该继续的Java,所以那段时间我干过爬虫,也撸了一阵子的西瓜书和统计学什么的。在知乎上所有相关的问题和答案我都看了,也在知乎付费咨询了很多前辈。最后觉得爬虫工作不好找,机器学习门槛太高,然后折中学了大数据。
上面只是我的初步动机,但后面一年多的接触,让我有了更多的理由对大数据不抛弃不放弃。
1.门槛。它比 Java 高一点,因为除了对数据库的操作之外,要学习大数据生态的东西,需要会分布式、数仓、中间件等知识。它比机器学习低一些,不需要你会很多的机器学习算法和数学知识,而像机器学习算法和数学知识是需要长时间的磨练和沉淀,所以做这块的研究生和博士居多。
因为它的学习门槛比 Java 高,所以市场上缺失这方面的培训机构,因为投入和回报不成正比,而现有的培训机构大部分都是糊弄的,让你学学 Python 爬爬数据然后自称大数据培训。
再就是高校专业的设立。无论是哪个学校的计算机专业,Java、数据、C、C++什么的都会接触到,但是大数据呢?第一批大数据专业的学生现在大二,所以现有的大数据岗位的人都是自学的,谈不上对口不对口,对口更多的指计算机基础。但是再过两年就不一定了,所以「早,就是优势」。
2.薪资高。这个估计才是吸引大部分人学习的原因。同一家公司同一级别,普通开发岗和大数据开发薪资还是会差一个档次的,具体多少视公司而定。
3.积累性和挑战性。在我学习群里面,不乏一些在传统企业或者国企的资深开发者,但是他们对自己的职业也迷茫和担忧,在群里经常讨论一些分布式,Redis、Zookeeper等知识的时候,他们显的格格不入。因为他们长期在企业里 CRUD(增删改查),与现在互联网技术发展产生隔阂了,既憧憬又畏惧。
为什么说大数据开发是积累性又有挑战性的呢?
了解过大数据的应该知道大数据的「4V理论」,随着时间的发展,企业产生的数据量肯定越来越大。在以前,我们对数据是不重视的,但是随着机器学习的发展,数据是越来越重要的。了解机器学习应该都知道,训练模型之前都会有一个特征工程的步骤,特征工程就是来处理数据的,然后喂给模型。又好又多质量又高的数据会让这个模型更聪明和健壮,相当于燃料,模型才能更好地自我训练,然后才有现在的「推荐喜欢」和「全民抖音」。想系统学习大数据的话,可以加入大数据技术学习扣扣君羊:522189307
如果你只是进行一些数据库的增删该查或者一些页面展示什么的,这些套路都是可复用的,讲究能用就行。但是大数据不一样,无论你是做平台的建设,数仓,计算等,一些场景一些机制都是需要你去思考的。
我面试的时候被面试官问到一个问题:「你为什么不做 Java,要去做大数据?」
我回答的是:「如果这个 Java 岗位能涉及到中间件的开发,而不只是做 CRM,ERP 等数据的 CRUD,那我是可以接受的。而大数据的话无论你是哪个方向,都会面临着一些挑战性,工作也更有难度一些。」
4.推动你现有岗位的发展。很多人问过,我从事前端的学大数据有什么用?我从事运维,学大数据能帮我什么?等等。
大数据+现有岗位是一个趋势。大数据来临的时候,你前端不用做一些静态化,或者一些缓存机制吗?会一些 Hive、Hadoop,做可视化或和后端对接的时候是不是更有优势呢?后端学一些大数据的觉得是必要的,例如Kafka、Zookeeper等分布式、缓存相关的数据存储和传输是进阶 Java 必会的,让你在现有企业需要转型的时候可以直接就上。而运维呢?分布式集群运维,各个大数据平台上的节点运维,这不是一个趋势吗?
什么都不学,认为现在的公司用不到,等公司要用到的时候,你会,可能就是一个负责人或者给你升职加薪巴结你试试,因为这样成本小,知根知底。不会呢,就直接招会的人过来了,而你就危险了。
5.过渡到机器学习人工智能的捷径。随着科技的进步,包括硬件和软件,机器学习的使用门槛会越来越低,为什么这里强调使用。因为研究部门在每一家公司都是极少数的,更多的是在调库,调参。而随着硬件的进步,很多算法都是封装好的,可以进行傻瓜化操作,我们只需要给他喂数据。
02
学习大数据门槛
上面提到了门槛,处于普通开发和机器学习之间。经常有人问我做大数据说需不需要很好的英语,很扎实的数学功底。
无论什么岗位,英语好和数据学能摸到的天花板更高。但是大数据开发不像机器学习,日常阅读国外 paper 和对模型算法进行调优,不要求你去读西瓜书和统计学去弄懂线性回归等数学知识。
有些人可能说我智商不行,别人记住一个知识点要10分钟,我要一个小时。有些人会反驳「你的努力还谈不上比智商」。这边说一下我对「智商」的看法:智商其中是一个很广的东西,有些人学习上比你好,但生活上不一定比你聪明。我们不可否认初高中的时候,有些学霸没怎么读书就可以考的很好,有些人很努力但也没那么好。无法否认,这就是天赋。有些人天生逻辑思维好,对数学或者知识的抽象能力很厉害,能摸到的天花板更高。我们定位好自己就是了,智商高而且在顶层的总是那么几个人,而更多的是在中间那一层,而那一层拼的不仅仅智商,智商高的也不一定写代码写的比你好,所以百分之 98 的人的智商拿来开发够用了。
所以大数据开发是一个既有门槛但又不是门槛特别高的方向,正常人只要找到适合自己的路线和找对学习方法都可以的。
03
学习路线
我是大二自学的 Java,然后在实习结束后四个月的学习转到了大数据,然后现在也接触大数据一年多了。我这个学习路线是根据我自己学习的,我面试反馈的,还有我那帮学习群的兄弟反复锤炼出来的,应该是很有借鉴意义啊。毕竟一个群几百个人,什么情况的都有,成功了总结经验,失败了找原因然后调整一下不怂再干。希望这个学习路线能帮你少走点弯路,这些资源也能帮到你。
首先学大数据分为两种,学生和在职,请对号入座。
学生:
1.首先要知道一点,只要你是在校生,无论你是不是科班,差别都不会很大。科班的意义是基础扎实,但是你看现在计算机专业的,哪几个扎实了。反而是非科班的,会意识到这一点,然后去补缺补漏。
2.如果你还是大一大二的话,可以扎实地补补基础。如果静不下心学基础的话,可以做做项目,然后赶紧去找实习。而且我也建议以找实习为目的进行学习,不然很容易迷茫和漫无目的地学习,最终学了什么自己都不知道,以目的为导向进行学习很重要。
3.如果你是大三大四,该准备春秋招了,大三的春季实习招聘要好好把握,这时如果找到一份大厂实习,那秋招就没什么压力。大四的春招也很重要,因为这是最后一次学生身份参加招聘,门槛还是低一下。
4.在校生的面试,无论大厂还是小厂都有一套方法论。首先要书写一份好的简历,防止卡在简历这关。简历的话我一直都有在帮我群里那帮兄弟参考,效果都很明显,因为这块不算今天的内容里面,有需要帮忙看的朋友可以加文章末的好友细聊。
5.小公司注重项目,基础要求相对不高;大公司除了要求项目,还需要你基础够好。
6.在校生要学大数据的话,建议先找份Java的实习,然后再跳到大数据岗位,因为大数据也是需要Java知识,这样一个过渡比较好。
学习路线:
1.Javase和项目我是建议同步进行,因为你想要完全学好一门语言再去接触项目,看似可行,实则不太好。反而是两者相辅相成,利于及时调整。
2.当能把项目写在简历上的时候就去投,去面试,面试可以收获非常多东西。因为这时候JVM和多线程还不会,所以只能去投一些小公司。当后面把JVM和多线程补起来的时候可以进军大公司。
3.数据结构和算法需要贯穿整个个学习周期。提高算法前期以刷剑指offer这本书为主,刷到能手写代码。建议先在大三找份Java实习,然后找到实习之后接着学大数据知识,这样既完成了阶段性目的,也为了下一阶段做准备。
在职:
在职的分为开发的在职以及要转行的在职。
1.首先,不建议裸辞,除非你经济上无任何负担以及做好了各种准备。要转行的建议业余先抽时间出来了解了解,看自己是否真的想从事这个行业。
2.如果你之前已经是Java开发,那很好,要过渡到大数据先看看上面的8天Hadoop入门,或者直接看 Hadoop 权威指南都可以。然后结合我的面经学学一些理论知识,还有一些实战面试题,再做个项目就可以马上去面试了。学的差不多就可以投了,一定不要拖太久,越拖会越没信心。
3.如果你之前是 PHP 开发,或者DBA 什么的,建议重新回顾下Java。因为大数据目前还是以Java为主要开发语言,回顾完Java基础之后,可以直接看8天 Hadoop入门,然后做项目,除了大数据项目之外,建议补一到两个技术栈比较好的项目,不然简历面不好过
4.如果你是零基础想转行的话,建议先找份Java开发,零基础一下子跨越到大数据有点大。建议先踏入编程这个行业,然后再去转大数据,过程会比较有反馈。零基础的话不建议一上来就算法什么计算机基础,先直接学Java,可以看看Java的基础视频,然后自己鼓捣几个项目,去找个小公司。这样周期会比较快,然后在这家公司快速学习,可以补补基础,或者学习学习大数据。