程序员一定要学大数据吗?最近我听到一些程序员朋友在问我这个问题,也有一些程序员朋友因为考虑转岗而问到我这个问题。我觉得也许是时候说说我对这个问题的一些看法了。
衡量职场发展的指标
很多初学者,对大数据的概念都是模糊不清的,大数据是什么,能做什么,学的时候,该按照什么线路去学习,学完往哪方面发展,想深入了解,想学习的同学欢迎加入大数据学习企鹅群:458345782,有大量干货(零基础以及进阶的经典实战)分享给大家,并且有清华大学毕业的资深大数据讲师给大家免费授课,给大家分享目前国内最完整的大数据高端实战实用学习流程体系
首先,我们都是职场人,在职场中摸爬滚打直到退休。我们都渴望去做有价值的工作,因为工作越有价值,自己的地位越稳固,收入越丰厚,把这个当做追求目标其实无可非议——当然追求其他信仰或情怀的朋友除外。在职场中,我们从年轻的时候开始就有类似的困惑,我们应该做什么好呢?做什么更有利长期发展呢?做什么会让自己工作更稳定呢?究竟什么工种、什么工作能解决我的需求和困扰呢?
从中长期来看,肯定是那些积累性好,或者越老越吃香的工作比较让人心仪,这应该不难理解。什么是积累性好呢?那就是,淘汰慢,经验积累容易形成壁垒,不容易被人轻易赶上。
很多程序员没有安全感的原因很简单,比如Python语言或者Java语言,你工作了10年的Java程序员和一个5年的差距有多大呢?5年和3年的呢?根据我的经验(或许不够全面,但是能说明一定的问题),对于那些工作很努力且舍得动脑子的程序员朋友来说,工作的前一两年的进步速度是最快的,可以说是陡升,这时候的积累主要是对语言功能方面的。语言怎么使用,什么特性,用什么类实现什么功能,这些技巧在这个时间里相对容易积累。3~5年的时候开始偏重架构,怎么设计类的继承关系会让重用更为合理,工程改动量小,维护成本低,执行速度快,资源消耗小……5年往后则是在3~5年的基础上更为熟练,一些更注重架构的人可能会去研究虚拟机的特性,并逐步在很多细节性的问题上有更多的发言权,例如堆栈的分配、线程的调用特点等。
但是我们观察一下不难发现,虽然从时间上看,后面的进步看上去非常牛,非常显档次,但是在具体实际完成功能性任务的时候显然帮不上什么大忙。这样的人才最后会成为金牌架构师的人也比较少。一是因为供需到了这个环节也就进入末端,架构师的需求和程序员的需求显然不是正比关系。二是还需要自己花极大的力气去做修炼,成材率还低,这是阶段个投入产出比不那么诱人的工作。而如果一旦由于主客观原因不能成为架构师,而仍然是一名程序员的话,那再和年轻的小朋友们竞争,就显得有点拙荆见肘了。尤其是在项目上需要用到新的语言或者技术的时候,优势从何而来呢,这个问题就给很多老程序员造成了困扰。
这个问题也并不能说无解,多年的程序员生涯,如果一个人肯动脑子的话,肯定还是能够总结出不少有价值的东西,例如很多有用的代码片段,以及很多有用的设计模式,很多辅助自己工作的工具,很多总结出来的设计技巧等等。这些万变不离其宗的东西会帮助一个程序员在职场竞争中获得一定的优势,但是时间再久一些,比如到了15年或者20年的时候,这些东西是不是还能跟10年经验左右的人抗衡呢?这又是个问题了。
说到这里,我只是想恳切地提醒各位程序员朋友,注意积累的问题,以及注意要给自己积蓄足够的能量让自己蜕变,化茧成蝶。
大数据产业为何让人如此着迷
再回过头来说,程序员究竟要不要学习大数据的事情。我觉得思路和刚才差不多,那就是看看在大数据学习的过程中,能不能给我们带来这种积累性的优势。这种优势越大,我们就越值得学习,反之则不必考虑。那么大数据是这样一种东西吗?
我们说,大数据这种产业之所以让人着迷,之所以被社会所看好,主要的原因是大数据产业最终的目标是为了通过大范围数据的交换与写作分析消除不确定性,减小试错成本——这个才是根本。
大数据相关的工种里面粗分有开发岗、架构岗、分析岗三种。开发岗和其它语言种类的开发岗一样,是对语言工具或者工程性工具的使用,比如Hadoop的使用等。架构岗侧重的是根据项目特性的不同进行性能调优和稳定性调优等工作。分析岗则是注重对数据的分析和解读,以及归纳和预测等。
程序员朋友们在学习大数据的时候,容易迷茫,现在的框架非常多Hadoop、Spark、Storm、Scikit-learn、Mahout、TensorFlow等,究竟应该学哪个才对自己的职业生涯更有价值呢?我认为,在这个里面,除了刚刚我们说的积累性好这个特点我们需要把握以外,还有四个字需要注意,那就是“扬长避短”。
对于这些开源框架,尤其是比较火热的开源框架,是在业界广泛获得认可的,生命周期长,供需旺盛,通常可以作为普通程序员切入的落脚点。对于Hadoop、Spark这些工具的使用,其实已经是在接触大数据开发这一工种了。学好用好一两种流行框架,谋生肯定不是问题了。
对于分析能力比较好的程序员,尤其是数学比较好的程序员,可以考虑去做机器学习、神经网络(深度学习)相关的一些框架和项目,这类项目的积累性比前面工程性的Hadoop和Spark甚至要更好。从中长期来看,在机器学习和神经网络方面的发展是能够作出一个垂直领域的“无人设备”的——凡是“无人”的东西都是改进和发展生产力的,都是会被自己所服务的行业所接纳的东西。
而对于项目管理以及其他更高级别的职场人来说,大数据能够带给你的就是更多的思维层面和辩证看待数据的逻辑,而且在普及性学习的工作中,你会了解到哪些技术能做什么,有什么优势。这样的知识对于一个管理者对当前技术形势作出判断,估算难度和成本,以及开阔创新中的想象力都是大有裨益的,同样是有重要积累意义的东西。