技术专精与广博的一些思考
很多童鞋学习工作中,由于所做的任务都是被上级(主管,导师)安排,各种技术都要涉及,导致感觉做了很多事情,但是做啥也不精。也有一些前辈告诫我们,一项技术要把它学好学精通,到哪里都有饭吃,啥都学一点,最后啥都做不好……实际情况是这样吗?今天火哥和大家聊聊这个话题
如何评价一门技术的精通程度
很多前辈告诉我们,技术要学精学专,但是没告诉我们到底学到什么程度才算精和专。
其实,火哥认为技术程度的深浅不是只有1和0两种状态,应该量化得给予评价,比如10分,20分,60分,90分这种,一个3年工作经验的对某项技术,比如音视频解码算法的专精程度一般要比刚毕业的强,但是肯定不如行业大牛,标准制定者,所以专精是相对的,而不是绝对的1和0两种状态。
火哥拿出来评分专精程度的技术,一般是某项工程中业务相关的具体的应用技术,比如音视频编解码,蓝牙,WiFi,HDMI显示,USB技术,网络协议栈,操作系统内存管理,文件系统等,不是指嵌入式,硬件,软件,服务器这种宽泛无边的技术,也不是直接在职场上比较C语言,数据结构,模拟电路,数字电路这些基础性知识(可以打分,但是分数高低对同行评价你的业务精通程度关系不大)。
0分
有相关专业学科背景,但对该技术完全没听过,或知道名词,但是不知道是用在哪里的。
首先要说明的是,不是人人都能拿0分。在电子通信,IT领域的技术,比如FPGA开发,至少你要是学过电子,通信,计算机,自动化,数学等相关理工科专业,才有资格参与打分。可能不是每个学电子通信,计算机,自动化相关专业的都知道FPGA是干嘛的,但是相比文科专业的,以及没有大学文化的人来说,有相关理工科背景的人,是有潜力学习和培养FPGA技术的,而不像纯文科专业完全一窍不通的那种需要花很多年时间从高中数学,物理开始培养(没有黑文科生的意思,单纯就事论事描述文科生要学FPGA技术的难度曲线)。所以0分一般是给那种大一大二在读生,有相关专业背景,但是完全没有接触该技术,但是有潜力学习培养该技术的人。
20分
20分相对于0分来说,听过相关技术的名词,大概知道该项技术可以用在哪里,是干什么的。比如一个自动化专业的,没有学过FPGA,但是他知道FPGA是用HDL语言描述数字电路的一种工具,可以用在芯片设计相关领域,一个搞硬件电路设计工程师,可能没学过过音视频编解码具体的算法,但是知道音视频编解码是用来将原始的音频、视频流压缩,解压,减少传输带宽,同时在芯片里一般是在SOC的IP核里实现相关算法的。这种情况下的技术掌握程度就是20分,他能知道一些名词和用途,甚至能写一些科普文,尽管没有系统学习过相关知识,但是有潜力培养,只不过需要培养起来需要一定时间,一般是1年以上的时间才能熟悉使用。
40分
40分相对于20分的人就有一个跨越性的进步,系统地学过相关知识,但是相对于更高分的人的差别在于,相关知识仅停留在书本理论层面,没有实际应用过相关的知识。比如作为一个嵌入式工程师,学习过数字信号处理技术,知道FFT,汉明窗,各种数字滤波器的相关算法理论,但是没有实际使用调试过数字信号处理相关的算法,因而只能给他40分。但是有了40分,首先在信号处理相关领域,这个嵌入式工程师就不会犯方向性错误,异想天开提出违背奈奎斯特采样定理(也叫香农采样定理)的想法,其次如果给他机会从事数字信号处理相关的算法开发,他拿书温习一下应该就能开干,节约了培养的成本和时间。
50分
相比40分只停留在理论层面,50分的在相关技术领域,不但学习过理论,也动手做过一些小demo,课程设计之类的理论知识应用,但是没有做过该领域真正的项目(包括一些小的开源项目)。比如学习过FPGA技术,用FPGA从零写过一个UART信号收发器,学习过Linux内核驱动,从头实现过一个简单的按键控制花样流水灯模块的驱动,学习过电子电路,emc等硬件相关技术,自己设计原理图,画PCB打板子制作一个小型信号放大器,或者开关电源等等。真正将你学过的理论知识用起来, 做一个小demo,那你就达到50分的水平。如果你是一个应届校招生,能满足公司技术研发岗位稍微培养就能上手干活的要求,可以胜任一般公司相关岗位实习生的职位,在公司很缺人的情况下,是可以考虑招进来继续培养的。当然如果不是缺人,或者竞争对手太多,技术水平比你高的研究生更能满足公司需求的时候,公司还是会优先考虑学历更高,技术更熟练的,尽管50分就已经达到公司稍微培养就能干活的水平线了。
60分
某项技术能达到60分的水平,证明你已经应用该技术参与过一些实际的项目(包括外包项目,开源项目)。你参与的项目规模不一定大,用户规模不一定多,甚至可能没有最终量产,但是毕竟是实际的项目。做过实际的项目和只做过课程设计,demo的差别就在于,实际的项目中有很多需求和功能有不确定性,需要协调一些资源,做tradeoff,会有很多之前考虑不到的问题,会踩很多坑然后从坑中艰难地爬出来等等,这些因素能反复检验你对该项知识的掌握程度,让你更加熟练地应用,知道技术的边界在哪里,应该放弃哪些不现实的需求。而不像课程设计和demo,各种需求都是确定的,也没有什么tradeoff,按照想法去做就行。举个例子,比如你学习了java, J2EE技术,做了一个XX管理系统的项目,尽管不是高并发的,学习了嵌入式Linux技术,做了一套小型非标工控QT操作界面与下位机通信的外包项目等等。
有了这些实际小项目的积累,你的某项技术就到了60分及格的水平,你对该技术底层的原理可能理解的不是很透彻,不能深入定制优化修改底层的东西,但是至少做到会用,出于熟练应用阶段。比如嵌入式Linux技术,可能你对Linux内核里面很多机制,原理不太熟,但基本的内核和应用API都会用,比如音视频编解码,会使用ffmpeg的相关API实现各种功能,但是很多编解码的特性,标准不是很熟,也不会深度定制修改优化ffmpeg里面的编解码器的实现。但是你要能做到self-correct, 能百度,谷歌到的比较浅层应用级的问题,不需要请教资深专家,自己搜索就能看懂,那么你在校招中,基本上能确保拿到相关岗位的offer,社招在公司名额不紧张的情况下,一般也能拿到初级岗位的offer。这意味着,企业招你过来,几乎不需要培养,给你一些时间熟悉公司的环境,各个部门的同事,就能开始干活出成果。
70分
通过3年左右的积累,参与(不要求主导)公司里的和该技能相关的 2-3个正式的要发布给客户的项目,你的该项技术水平也达到了70分的水准。在这个阶段,虽然你不是某项技术行业内权威的专家,对相关的技术标准也有一些盲点和不熟悉的地方,但是该技术的整体大致蓝图和技术边界你已经胸有成竹,能做到独立干活,百度,谷歌搜不到的相关技术问题也能自己解决,比你低级别的工程师像你请教该技术相关的问题,你也基本能给出方向和方法性指导。在70分的精度层面,对你的要求不仅仅是把某项技术框架应用比较熟,对于该框架更底层的原理性的非前沿的问题,你要能做到自己修改和优化,得到更优的解决方案。比如说你做Linux系统的USB驱动开发,不只是会调用USB框架的API,对每个API底层的一些工作要有一定熟悉,不一定知道每个API怎么实现,但是API出问题,百度谷歌搜不到的时候,你要有能力深入API底层去debug,去解决相关的问题,去做WorkAround。比如你做音视频技术,使用ffmpeg库,不仅仅是熟悉API,还要对主流的音视频编解码算法有一定理解,知道各种格式的优劣,懂得做权衡,在实际编解码应用中,如果遇到CPU,,I/O等瓶颈,要有能力使用硬解码插件,多线程,I/O复用,并行浮点计算等方法去优化,遇到ffmpeg本身的问题有能力去做一些WorkAround。
70分的技术人员,在公司里可能不是某项技术最大的专家,但是也一定是技术骨干,是主要的干活者和技术实现者,也是就业市场就业岗位需求最多的。一项技术到了70分,就很容易在各大中小公司找到对口的岗位,薪资也能达到行业中上的水平。
80分
一般某项技术到了80分的水平,在公司或者业内就能冠上技术专家的头衔,比如: 蓝牙专家,WIFI专家,USB专家,摄像头ISP专家,视频编解码专家等等。
作为一项技术的专家,在行业非顶尖的一线二线知名大公司(小米,OPPO,全志,迈瑞,瑞星微)应该能做到一个模块Owner的角色,在公司里面,一般你就算该项技术数一数二的人物(顶尖大厂如华为,Intel,高通等有院士和fellow级人物压阵,技术专家还不能算某领域数一数二),公司技术总监知道相关的模块有bug或者有新需求,一般直接找你,由你评估这项问题,决定自己处理还是分配给下面的技术骨干处理,并且对下面技术骨干提出的已有标准的非前沿性的相关技术问题能做出解答与方向性指导。知名大学相关专业领域的教授也属于80分档次的专家。
作为一门技术的专家,你要能对某项技术的specification非常熟悉,有能力大规模修改重构实现某个技术的大型框架,比如在网络专家在Linux内核网络协议框架基础上实现自己的公司的一套私有协议,音视频专家在ffmpeg中不使用低效率的开源H264编解码器,而是把自己公司的一套高性能编码器IP做成插件集成到ffmpeg里面去。成为一名技术专家,一般需要主导(而不是参与)一项该技术的大型的量产项目,或者在公司从零搭起某项技术框架(比如从头搭建公司的wifi技术框架),这些其实都是可遇不可求的机会。
80分的专家遇到现有标准相关的Bug(比如WIFi标准,H264标准,杜比音效标准), 可以像该标准制定国际组织提交一些patch修正现有问题。但是相比于更高级的90分的专家,80分的专家可能没有足够的技术影响力和威望,没法影响该技术下一代前沿标准的发展趋势。
90分
90分的专家就是行业顶级专家了。这种人才要么是华为,Intel,高通,谷歌这种顶尖公司的大佬,要么就自己创业当老板,在一般的非顶尖大中小公司是很难见到的。这种级别的顶尖专家相比80分的专家,在工作中已经把现有的技术标准使用到极限,发现现有的标准和技术已经无法满足未来业务和市场的需求。这些人具有对行业标准影响力,能参与制定下一代技术的行业标准,比如华为,高通这些公司很多顶尖专家,参与下一代5G移动通信,蓝牙5.x, eMMC 5.x, PCIE 4.x, USB 4.x等新一代前沿技术标准的制定,能给相关标准提出很多新的有影响力的特性。对这种档次的人,火哥也只能知道名字,但是具体工作中就很少接触了,是真正的神级人物。知名大学的知名教授,杰出青年学者等也是90分档次的顶尖专家。
99分
90分的顶级专家已经是神,99分就是仙。技术做到这个水平,一般会有院士或者Fellow的头衔,或者是某些国际知名技术标准和开源框架的发起者与领导人物,比如Linux内核发起者Linus Torvalds, OpenGL标准的制定者,移动通信CDMA标准的制定者等,MIPS指令集的发明者John Hennessy等。对他们的水平,火哥不做评价,只有膜拜,为什么只给99分而不是100分,那是因为技术永无止境,永远没有满分。
技术的学习曲线和回报
有了技术精深程度的评分标准之后,根据经验给出了技术评分提升的时间曲线和技术精深程度与待遇回报曲线
在一个专业领域积累的时间(单位: 年)和技术精深程度的评分曲线一般如下图
图1 积累时间与评分曲线
在一个专业领域钻研的技术评分与月薪(北上深一线城市为标准,不考虑硅谷、香港等地域加成的起薪优势,单位 人民币 K/月)的关系曲线如下
图2 技术评分与收入曲线
两条曲线能反应哪些问题呢?
1. 从技术能力积累提升的时间曲线来看,从有理工科专业背景的小白到能干活的60分水平的初级工程师大概只需要1年时间,只要不是太前沿太理论性的技术,给你一年时间学习积累,一般就能胜任相关领域的初级岗位
2. 电子通信,IT领域达到70分的技术水平,成为企业骨干工程师,一般需要3-5年时间,这也符合网上很多文章所谓的1万小时定律。不过那些认为1万小时就能成为的专家和火哥认同的80分的技术专家还是有差距,火哥认为1万小时成为企业技术骨干还是靠谱一点。
3. 火哥给出的时间积累与技术精深评分成长曲线只是理论上的曲线,实际工作中会有很多因素让你无法成长到对应的高度,技术评分不只是简单的堆时间,付出努力就能达到的。
正常智力,理工科背景,通过学习和工作经验积累,60分水平是肯定能达到的,但是70分水平就除了工作8小时之外,下班之后还得花点时间学习提高,多思考,写技术文章,不能只靠工作8小时,回来就玩游戏。一般3-5年的努力和积累,达到70分也不难。
积累到了70分,技术成长曲线就开始平缓了,这时候选择的重要性开始大于努力了,你需要积累的知识百度和谷歌已经很难再帮你了,首先你要去一家好一点的公司,有技术专家的需求,而不是在各种乱七八糟外包性质和维护现有产品,没有进取创新的中小公司。而且在公司,你要有办法摆脱那些配置环境,解决各种common的小bug的杂活的干扰,能把工作时间和精力都集中在这个相关的技术方向,而且有一个方向相关的由你负责的大项目让你从头开始搭建。这对很多人来说都不具备这个条件了,所以能走到80分的专家已经非常少了。
要成为90分的顶级专家,首先你所在的公司要像华为,高通,Intel有推动人类科技发展的使命感,而不仅仅满足于做好几个产品躺着赚钱。在这种公司相关的工作岗位,你能把现有的技术框架和标准比如Linux内核网络协议栈,文件系统,内存管理,MYSQL关系型数据库, USB 3.2, 4G移动通信标准,蓝牙 5.0, H264编解码等使用到了极限,依然无法满足新的业务需求。因而在公司的支持下,开始向各种技术标准委员会提交新的技术特性,向Linux内核等知名开源项目提交新的技术框架和实现等等。有了这种突破现有标准极限的业务需求和有远见的公司在背后不计成本的投入,加上自己的努力,才有可能达到90分的顶级专家
99分的仙,火哥只能说看命。要成为下一个Linus Torvalds这样的人物,真的是时代和天命所归,非人力所及。
4. 火哥给出的技术评分和薪资的关系曲线,大概估算的是电子信息,IT行业北上深一线主流公司对应技术水平的工程师的一个基本月薪的情况,传统行业可能薪资水平会低一些,这里不包含那种巨额年终奖情况(2-4个月少量年终奖会考虑,但是像华为终端,OPPO这种有巨额年终奖的公司,可能一个70分的骨干工程师的年薪会比中兴亏损部门的80分的技术专家的年薪多很多,所以巨额年终奖除外)。另外80分以上大佬的各种公司股票期权等资本收入或者有些已经成为老板的公司盈利收入也不算,这里只讨论技术打工的月薪情况。
5. 正常情况下,50分的实习生和60分的初级工程师的薪资,其实并不是完全由技术能力决定,和他所在的城市的基本工资和消费水平有关。火哥把深圳60分的初级工程师定价到12K, 55分的实习生定价到7K,因为深圳生存和消费成本高,不管技术再弱,老板给的钱先要能保证基本的生活,不能说55分的实习生技术太弱鸡,创造不了多少价值,只值3k,那就在深圳只给3k,这明显活不下去,别人宁愿在家啃老也不会来倒贴老板。在其他城市,初级和实习的工程师薪资水平根据城市消费生活水平不同而不同。
6. 正常情况下,65分水平15K, 70分水平20K在一线城市应该是可以达到的,但是还要考虑学历,公司背景的因素会有1K-3K偏差,如果你觉得你技术水平能达到这个分数,但是薪资差太远,早点考虑跳槽吧
7. 80分的技术专家,在知名大公司应该能拿到40K以上的月薪,算年薪一般有60万,更土豪一点的公司大概可以达到80万,对标华为17级到18级,阿里P7到P8水平吧,知名大公司薪资的薪资也不是啥秘密。但是对很多小公司来说,工资给到30K对中小公司来说已经快到上限了,35k可能需要老板赏识特批。火哥对30K的定位是75分技术水平,对标华为16级左右,很多小公司花不起高价请40K以上的专家,所以你在小公司很难碰到真正的专家,专家也不意味着一定跳槽机会多。
8. 如果你对某项技术标准已经精通不能再精通,差不多88分水平,但是还是没有机会去用到极限,影响下一代技术标准,没有足够的行业声望,作为打工者,月薪7万,年薪100万到150万真的就是极限了,这可真不像某装逼论坛那么容易各个年薪百万。实际上,很多知名大学的教授,如果不开公司,只靠做学术和接横向项目年收入也不一定能轻松过百万。
9. 关于90分以上的收入,火哥给了个大概的值,这种顶尖人才各有各的生财之道,月薪工资可能只是零花钱,90分的人才,月薪10万以上,年薪200万其实在华为这种大公司也是能见到的。至于99分的仙,有的可能要上胡润或者福布斯了,或者大家可以去同花顺的上市公司高管薪资那边查查这些大佬公开的薪资。印象中Linus Torvalds大概年薪1000万美元,Jeff Dean大概800万美元,John Hennessy 这种穷一点的,好像年薪是1000万人民币左右。
应该精通一项技术还是学习多项技术
最后关于到底要做专精还是多学几项技术火哥有这么几点建议,仅供参考。
1. 如果你没有漂亮的学历和科研经历,没有高人赏识提拔,去不了华为的2012诺亚方舟实验室,AT&T贝尔实验室这种影响世界的大公司预研性部门,基本上不可能做到90分的顶级技术专家(能去华为的人不少,但是能去真正研究前沿技术极限部门的不多,大部分的华为工程师都不能成为顶级专家)。如果真正有志气做到90分的顶级专家,去读个名校的博士可能机会多一些。
2. 70分和80分的差别,有时候真不在于智商和努力,而在于有没有机会,是不是来得刚好,正好负责一个很专业的项目,又没有多少杂活,能专心修炼你的大项目。图1看起来80分需要修炼10年,其实未必。图1曲线考虑到你一毕业,可能去不了大公司最核心的岗位,可能迫于上级的安排要花很多时间做一些非核心技术相关的杂活,要慢慢跳槽转岗才有机会真正专心负责某项技术,并且有权把业务上的杂活甩给其它部门或者其他人。如果一开始就能专心专注的从事某项技术相关的核心工作,而不是花很多时间打杂,5年做到80分的专家也不是不可能。
3. 如果你做得这个技术方向不是特别冷门,外面还有不少公司能用得上,你在的公司也许不是华为2012诺亚方舟这种预研部门,但是也是小米,OPPO,海康,中兴,迈瑞,汇川等一线大公司,如果有机会从头开始做某个专精方向的大项目,火哥建议你还是把这项技术做精做专。这种情况下,虽然可能无法成为业界90分的顶级专家,但是你还是有很大的机会修炼成80分的技术专家,拿到月薪40K,年薪60万以上的薪资。把某项技术修炼到80分层次,觉得90分无望的情况下,可以尝试学习新的热门技术,和原来80分的技术找到结合点,说不定有新的突破。
4. 如果工作所在的部门做的事情很杂(哪怕是知名大公司也有很多打杂部门),或者你的学历背景,工作经历都不好看,很难有机会进入一线大厂的专精部门,负责一个专精大项目,那么你是很难靠自己的努力和自学做积累到80分的技术水平了(其实很多知名外企的员工,有着漂亮的学历和工作背景,但是由于工作部门的限制,也很难做到80分的程度)。这种情况下,火哥建议你先把某项还比较通用流行的技术通过自己努力大概修炼到70分的水平,能保证自己的饭碗,然后在看看最新最热门的方向,寻找和70分的技术的切合点,尝试做复合型人才。如果你一开始修炼的就是非常热门的方向,正好需求也很大(比如17年的AI算法,15年的大数据,13年的Android APP),那么其实修炼到70分就已经可以拿超过40K的薪资了。火哥并不反对追新技术,但是火哥认为一项技术要么就不学,要学就学到70分才能保证肯定能有对口的饭碗。
5. 最后,多和别人交流,了解市场就业情况和热门方向,了解各大中小公司的需求,保持良好心态,不要因为没法修炼到80分,90分就气馁,不要觉得前面有无法超越的牛人就对自己失去信心。某些技术80分的大牛,也可能因为公司业务方向或者组织架构调整而失业,而一旦离开了他的工作岗位,他只有一项80分的技术,其它技术都只有50分,60分的水平,反而出来就业可能还不如有2项70分,3项60分技术的人。在很多中小公司老板看来,这位80分的大佬那项80分的技术公司可能会用不上或者用不了那么深入(比如WIFI或者接入网技术,公司只需要做到100M的带宽就完全满足要求,80分专家有1000M技术相关的经验,但是在中小公司真的用不上),而专家的其它技术又只有50分,60分,老板就不愿意花40K哪怕降薪到25K招一个有很专精但是有用不上的技术的80分专家,往往老板给的面试评价就是这个大佬虽然是某为公司出来的,但是懂的东西太窄了,不适合我们这种公司。而有多项70分和60分技术的你,说不定因为技术面宽,能力全面,得到老板赏识,老板还愿意给你开到30K甚至特批到35K,而且你一旦干得不爽,能跳槽找到的新机会也会比80分大牛多(但是80分大牛找到真正对口的专家岗,待遇应该会比你高)