程序员这条路,技术往深度走还是广度走会比较好?看完这篇文章你就明白了
编程经验
专栏收录该内容
订阅专栏
有人认为程序员应该对自己的技术始终保持忠诚,有人认为集百家武学于一身才是正道,如何权衡技术深度与广度?这是大多数程序员都会面临和思考的问题。
在有限的时间里能学习的东西也是有限的,那么在我们决定去学习之前,就经常会遇到深度和广度的选择问题,尤其是目前所掌握的技能已经足够应对现有工作的时候,纵向深入还是横向拓宽技术,现有工作似乎并不能直接体现出好坏。
比如说现在我是个做前端的,HTML、CSS、JS会了,再加上Vue和React等一些常用的东西已经足够应对目前的工作了,那么我是该往前端的其他技术深入发展,还是往后端横向学习整个web开发?
这个话题我一直有在思考,从我做程序员的两三年后就开始思考并实践自己的想法,回过头来看,自己这些年来所坚持的观点和道路是正确的,虽然在43岁的年纪因为身体实在肝不动了,但也攒足了在家养老的资本。
所以我想把我对于技术深度与广度如何抉择的一些观点,跟大家做一个分享,希望能对大家有所参考。
一、前期以深度优先
对于深度与广度的抉择,可以分为前和中后期两个阶段来做考虑,起码我是这样的。
前期也就是刚开始工作的三五年内,刚从学校出来,身上所掌握的东西还没有完全能跟得上整个公司的脚步,这个时候必然是以深度优先,用自己的技术把岗位的职责做到游刃有余,是大多数新晋开发者都应该追求的境界。
刚好我前段时间和我老许聊天(以前公司的现任技术总监,我们之前共事了七八年了,我退出之后由他来接任整个公司的技术管理),跟他聊天的时候他说到了一个实习生的事情,我觉得在这里很适合去分享一下给大家:
今年六月份的时候正逢大学毕业季,还有一些没找到工作的大学生也不得不进入社会找工作,公司来面试的新人中有两个小伙子比较特殊,都是面试前端开发,两个人是一个宿舍的,结果有1个人面试上了,1个人被PASS了,不是因为名额的原因,当时公司是准备招4个人,所以名额是完全够的.
为什么老许跟我说这个事情呢?因为当时的面试官犯了一个低级错误:人还没走就直接把面试结果告诉那俩人,结果好戏发生了。
没面上的那个小伙子当时就绷不住了,当场就去找人事理论,他觉得他的优势也不比他朋友差,为什么他没被录用?其实这个原因就是我们今天所讲的深度与广度的问题。
这两个小伙子都掌握基本的HTML、CSS和JS,被录用的小伙子除了这些,还掌握更深的前端技术,比如页面加载慢的优化技术、Webpack打包工具以及Vue和React框架,对于新人的要求还是蛮符合的;而另一个没被录用的小伙子呢,在前端方面也仅限于HTML、CSS和JS,不过这小伙子还会做后端,Django和数据库等技术也都会,基本上给一些时间还是能够独立完成简单的前后端开发,看起来技术涉略面更广一些,所以小伙子很不服气。
最后的结果依然没有改变,公司基本不会因为某个人而改变既定的决定,何况你还不是公司的人。
从这个例子可以看出,公司层面对于工作经验还不是很丰富的人的要求,其实是希望你能在某一个岗位把自己的职责做好,什么都会一点有什么用?浅尝辄止的“革命板砖”搬过去也只是累赘。
所以在整个生涯前期的三五年内,把自己所走方向的技术往深学,才会给你带来更大的收益。
二、中后期首先以公司优先
但是不是一直往深学就没错呢?也不见得。
虽然每个行业都需要一直钻研技术深度的人,但那样的人太少了,对于大多数程序员来说,如果你一直在某一门技术上死磕,你可能哪天失业了都还后知后觉。
到了中期我建议以公司优先,原因有2个。
第一,30岁左右的个人情况。到了那个年纪,已经不再像早几年那样“一人吃饱全家不饿”,身上背负了更多的东西,我们看待问题也不再是那么对立,在这个年纪频繁换工作已然不适合,该考虑如何在一个地方打下汗马功劳,为现有公司创造更大的价值,提升自己在公司的地位。
第二,负责人的技术储备。公司盈利少,团队也过的煎熬,技术部门往往首先要做出让公司盈利的产品,而不是一开始就追求技术极致为目的,所以作为公司的老员工或者负责人,奋战在一线是必不可少的,对于技术的把控也是检验你的知识储备,你的决定代表着整个技术部门的方向,这个时候你更需要横向去学习更多的东西,尤其你身处高层时,你老板不一定懂技术,你拍板的事情就意味着这个项目能走多远,你更得为公司为大局着想。
所以此时,以公司优先,你觉得目前的项目缺少什么,你就去往那方面学习是没有错的,而且大多数努力都会给你带来正向反馈。
比如我自己在工作了第五年的时候,开始接手当时的技术部门之后,我一直没有停下自己的技术学习,只是学习的方向改了,我自己本身是做前端出身的,我当时的前端技术算很不错的了,再深入进去也不是不行,但实际上能对工作产生的效益是有限的,于是我开始学习后端,因为当时部门里面的后端技术是跟不上来的,不给力。
于是当时我就自己去学Redis、node.js技术和对应的框架学习后端技术,学到的东西我就会尝试去对现有工作做改变,经过各方面的配合和努力,最终做出来的产品整个部门都挺满意,老板也很认可。
于是从那之后,我想明白了,这个时期的我需要横向地去学习了,得以公司为中心点去提升自己的技术,看看自己手底下的团队缺什么,最好能自己去往那方面去涉足,因为我想对全局做更好的把控。
后面又陆续学了Linux和Docker等等技术,我深知连渗透测试都自己去学,因为公司当时就没这个经费请那么一个人来,特殊时期只能理解,所以就自己上了,慢慢地,每次技术会议的风向标几乎都在我这里,也是从那时候开始,我人生中的”事业春“才刚刚开始。
而相比较于同期毕业的一些同学,以及在职场上认识的一些做前端的朋友,他们要么是一直在深钻自己的领域,要么是得过且过没想那么多,几乎是没有很大的职场突破,所以我很坚定,到了这个时期不是你该学什么,而是公司需要什么。你如果以公司为优先、带着目的性去学习,给你的反馈才是最大的。
三、中后期结合市场趋势
在我开始尝到了横向扩展的甜头之后,我一直在想,我以后一直横向去学习不就可以了?是不是我学得越多懂得越多就越牛逼?
一开始我也不知道答案,我只是在不断地拓展,但后面我发现我所横向去拓展所学的那些东西,有一部分却是在逐渐被淘汰的,比如在年的时候,我自己在空余的时间去自学了Objective-C,想往苹果APP市场涉足,虽然当时我已经看出来了当时刚刚发布的Swift可能是未来的趋势,但我依然觉得Objective-C的三十多年的发展,谁输谁赢还不一定呢。
可以看出来在年的时候,Objective-C还在前三名。
但等我刚精通它的时候,它已经开始下滑了,越来越少的人用了,结果没过几年,在“江湖兵器榜”前20连影子都见不着了,在圈子内一番调查之后,还在用Objective-C的开发者已经是寥寥无几了。
学是学会了,但有什么用呢?我也不敢用一门即将消失的语言去给自己的公司开发产品,所以我在Objective-C这方面是白折腾了。
所以说盲目地去横向扩展也是不可取的,要结合市场趋势去拓宽自己的技术栈。
四、结语
来给大家做一个总结,关于程序员在技术学习上该纵向深入还是横向拓展的选择上,我建议前期以深度优先,不管你后面要往哪发展,都要先做精一个方向,就算要往后端走,那么你也得把你的前端弄精通了再去横向扩展,提升自己在职场的竞争力,去哪都是抢手货。
当你把你所工作的方向学到精通后,以公司优先,逐渐对公司业务的多个技术层面进行学习,同时也要注意趋势,往往不是技术决定工作,而是市场决定工作,避免学了一些即将过时的东西。