最近跟朋友聊天,常常聊到全栈工程师,我就问他们为何要成为全栈工程师?技术派的回答:“全栈工程师,先后端技术都会,感受很牛!”,职业派的回答:“全栈工程师不少公司都须要,不担忧工做找不到,工资也比普通的工程师高。”,跟风派的回答:“我好多朋友都想当全栈工程师,都说全栈工程师很好。” 有时候,我就贱贱的问他好在哪里?他当场傻了,回答不上来。php
各位小伙伴能看这篇文章,相信要么是全栈工程师,要么对全栈工程师有兴趣,这个问题也问下你:“全栈工程师,好在哪里?”你能够花几秒钟想一下,这样你从这篇文章中收获的价值会更高。前端
百度百科上对全栈工程师的定义:java
全栈工程师是指掌握多种技能,胜任前端与后端,能利用多种技能独立完成产品的人。android
这个定义是正确的吗?请你花几秒种想一下,这个很是重要!程序员
这个定义是错误的!web
这个定义是错误的!面试
这个定义是错误的!数据库
重要的事情说三遍,因此才会有百科词条后面讲的困境。编程
Facebook 宣称她只招全栈工程师,咱们来看下Facebook对全栈工程师的能力要求:后端
Layers of the Full Stack:
1. Server, Network, and Hosting Environment.
2. Data Modeling
3. Business Logic
4. API layer / Action Layer / MVC
5. User Interface
6. User Experience
7. Understanding what the customer and the business need.
Other Pieces of the Puzzle:
1. Ability to write quality unit tests. By the way, even JavaScript can have unit tests these days.
2. Understanding of repeatable automated processes for building the application, testing it, documenting it, and deploying it at scale.
3. An awareness of security concerns is important, as each layer presents its own possible vulnerabilities.
按市面上讲的全栈工程师来理解:
1到4点是java(后台)开发人员必备的技能,第5点是web前端工程师的技能。
全栈工程师,就是要掌握1-5点的技能。
第6点用户体验、第7点理解客户和业务需求,这两点不在市面上的全栈工程师的技能范围内。你可能会抱不一样的见解,咱们来看一些常见的案例。
一.
产品经理来找程序员;“你作的这体验像什么鬼,用起来多不方便。”,
程序员:“如今哪有时间搞这些,项目都延迟这么多了,等有时间再来优化吧!”
二.
产品经理又来找程序员改需求,这是第5次改需求了,因而程序员忍无可忍:“你怎么搞得,能不能想清楚一点,一个需求改五遍了。”
这个是产品经理的问题吗?不是的,是程序员的问题。
案例一,用户体验不是全栈工程师重点考虑的,完成功能才是最重要的。
案例二,一款产品,通常产品经理设计40%,程序员设计20%,其它人设计40%。程序员拿到产品,要搞清楚客户需求、业务逻辑、功能间的关系、数据流和交互方式等,这些是程序员对产品需求的理解,更是对产品功能的细化。若是程序员有作这个步骤,在开发以前,就能找出产品中隐藏的问题和设计上的错误,就不须要产品经理反反复复的过来改需求。理解客户和业务需求不是全栈工程师重点考虑的,在全栈工程师眼里,功能都不是个事,我先作了再好。
全栈工程师的能力水平是高级程序员,高级程序员没有6和7点能力,6和7点是架构师、主管程序员以上级别程序员要掌握的技能。
再看其它拼图中的三个点,就自动化部署由于有框架,有人会作;单元测试、安全,有多少全栈工程师会作?这个不是说我对全栈工程师不尊重,市面上讲的全栈工程师,在公司里面基本上是属骡子的,天天作大量的工做,加班加点赶项目,作完前端作后台,改完后台bug改前端bug。根本就没有时间来考虑这些,更不要说花时间作了。
可见,市面上说的全栈工程师,或者百科词条上定义的全栈工程师,跟实际全栈工程师要掌握的技能不一样。
为何会出现这种状况?关键出在先后端分离。这个便是技术进步带来的好处,也是技术进步带来的麻烦。
早些年,咱们作开发,都是先后端一块儿作,只是要本身去设计框架来作先后端隔离。后来有些前端框架出来,咱们也会用这些框架,本身作开发。后来慢慢的,就有程序员专门作前端开发,特别是像VUE这类框架出来,前端程序员完全沦为界面交互工程师。
我分享一个案例:
前两年搭一个新团队,我根据公司方向和产品需求,团队配置是3个java和2个web,个人想法是java负责接口和后台开发,web负责app嵌入页和活动页的开发,这样的配置是合理的。结果在作计划的时候,web就报工做量大,时间内完不成。我就好奇,这怎么可能?
我深刻了解了一下,技术经理采用的方案就是先后端分离,java只作接口,后台的页面由web程序员来开发,这就完蛋了,这样的配置用这种方案,确定不能按时完成工做。这种技术方案,就是java程序员砍掉两只手,只作一块业务,而web程序员沦为界面交互工程师。
咱们接着前面的分享,web程序员不甘心局限在界面交互上,想找回本身的价值,就开始学习1-4点的能力,因而全栈工程师就大火起来。
因为一些误导,就变成是:web程序员学习后台开发,成为全栈工程师;java程序员学习web开发,成为全栈工程师;Android/IOS app端程序员,学习后台,又能够开发app,又能够本身写接口,成为全栈工程师。
加上大众创新,万众创业,不少创业公司招不到合适的程序员,或者是为了省成本,就开始大量的招这种全栈工程师,对公司来讲,是花一份的钱作两份的事。这种作法对公司和我的都是没有好处的,对公司有害不在这里讨论,有机会我另外写篇文章分享;对于全栈程序员的伤害,后面二小节分享。
全栈工程师是鬼老提出来的概念,我没有找到是谁提的这个概念,不清楚做者原著是怎么讲的。可是鬼老的书我看的多了,像《**编程思想》、《敏捷开发》、《XP》、《Scrum》、《重构》、《测试驱动开发》... ... ,像这些书都有个特色,好比《重构》,讲的是代码重构,可是它讲了不少设计思惟、设计模式、产品理解、用户体验等内容,因此学习这本书的内容,不只能够写出好的代码,还能成为一个优秀的架构师。再好比《敏捷开发》,它是讲敏捷开发方法,看是讲项目管理,实际它讲了不少技术管理、开发方法,学习这本书,能够成为敏捷开发的项目经理,还能够成为架构师或技术总监。
因此鬼老提出来的概念,它都不是一个单纯的概念,都是让你职业能有成长。咱们再看这些书的做者,都是从事这个行业一二十年的时候写的,看介绍都是某科技公司的CEO或技术副总,到这个级别,都很关注程序员的成长,而不只仅只是传授一个技能。
咱们回到facebook全栈能力要求第六、7点,这个是架构师的能力,因此成为全栈工程师,这7点掌握了,能够达到架构师,或者主管程序员以上。其它三个点是技术总监要掌握的能力,若是掌握这三个点,有可能成为技术总监。
真正的全栈工程师,是让你职业向上成长的概念,简单的说,是让你成为高富帅;不是让你掌握更多开发语言,往旁边成长,这样只会成为一个大胖子,互联网行业发展这么快,大胖子是跟不上节奏的,会带来职业生涯的灾难。
若是你对不一样级别程序员须要掌握哪些技能不熟悉,你能够搜我写的“程序员职业次第”的内容。
4. 高级程序员往全栈工程师发展的后果
百度百科对全栈工程师“困境”的描述:
技术有两个发展方向,一种是纵向一种是横向的,横向的是瑞士军刀,纵向的是削铁如泥的干将莫邪。这两个方向都没有对与错,发展到必定程度都会相互融合,就比如中国佛家禅修的南顿北渐,其实到了最后,渐悟与顿悟是同样的,顿由渐中来。能够说全栈什么都会,但又什么都不会。
若是一个公司不太懂全栈工程师的价值,那么全栈工程师的地位将会很尴尬,说得很差听一点,全栈工程师就是什么都会,什么都不会。曾经有一次面试,对方问很基础的问题,他答不上来,但他能作出产品,也知道什么是怎么一回事,他也不会犯那些错误,可他就是答不上概念,要考倒他很是容易。因此在应聘面试的时候,有些时候会吃亏,他可能会不如那些在某一方面钻得很深的人工资拿得高。
因为常常在各类技术穿梭,他会常常忘记代码的语法和一些API,因此他常常须要去查API甚至查语法,他以为没有Google我几乎无法工做。这在某些人的眼里,是技术不够的表现。他记的只是一个Key,一个如何找寻答案的索引,而不是所有,人脑不是电脑,他不可能能记下全部的东西。
百度百科对全栈工程师价值的描述:
对于创业公司来讲,全栈工程师的价值是很是大的,创业公司不可能像大公司同样,各方面的人才都有。因此须要一个多面手,各类活都能一肩挑,独挡多面的万金油。对于创业公司,不可能说DBA前端后端客户端各类人才全都备齐了,不少工做请人又不饱和,不请人又无法作,外包又不放心质量,因此全栈工程师是省钱的一妙招。虽说全栈工程师工资会比通常的工程师会高不少,但综合下来,成本会低不少。
全栈工程师的因果
咱们结合价值和困境,来作下分析:全栈工程师是多面手、万金油,哪些方面都会一点,都不精,能体现价值的地方是创业公司,大公司面试通不过。在一家人员不齐的公司上班,你说项目进行能顺畅吗?晚上加班到十点以后是否是情理之中的事?因此你选择当全栈工程师,你是否是已经决定了之后只在创业公司混,天天要加班到晚上十点以后,一周要上六天班?
如今创业公司一年半内倒闭的几率是97%,也就是说,选择了全栈工程师,你基本上就选择了每年左右要换份工做。你想在一家公司稳定的工做,好好的发展,基本上是奢望。
全栈工程师应该都有个感受,刚开始的时候,面试很顺利,很容易就被录用,随着年限的增长,面试会愈来愈困难。这个是为何呢?
刚成为全栈工程师的时候,还有一门语言精通,因此面试的时候,面试官看你一门语言精通,还会其它的语言,因此很容易就面试上了。可是,全栈工程师大量的时间都花在赶项目、加班和解决各类语言的问题上,随着年限的增长,这门精通的语言,也不精通了,愈来愈依赖百度或谷歌。面试的时候,面试官一问三不知,想找份工做就困难了。
而难找工做的这个时间点是何时呢?咱们来算一下,22岁毕业,3-4年成长到高级程序员,成为全栈工程师,差很少要通过3年,就能够成长到只能靠百度或谷歌来工做了。这个时候差很少29或30岁。
咱们再往下聊,三十岁以后,体力还跟的上这种强度的工做吗?这个时候不少人刚有小孩,这个阶段的小孩是最闹腾的,你多多少少都要照顾下小孩子,天天只能睡两三个小时,顶得住吗?因此如今不少公司不要三十岁以后的工程师,是有道理的,你只能当个万金油,能力跟不上公司要求,加班又加不太小年轻,工资又比小年轻高不少,公司不炒你炒谁?
相信有很多小伙伴这段看得不寒而栗,这就是互联网行业,咱们行业全部的麻烦都是自找的。这篇文章分享的观点,成为真正意义的全栈工程师,是能够避开这个因果的。
原本,全栈工程师是由于高级程序员升不到架构师或部门经理,退而求其次,经过学习更多语言来提高本身价值,提高本身薪资的手段。不知不觉,在行业中就变成是仅次于架构师的职位。
因此,不少程序员立志成为全栈工程师,这种思想已经延伸到中级程序员,我甚至听到初级程序员讲他要成为全栈工程师,这太离谱了。咱们来聊聊中级程序员成为全栈工程师会有什么后果。
咱们来看个案例:
Android中级程序员,学习后台语言,打通先后台成为全栈工程师。
中级程序员的能力范围是什么呢?中级程序员只能负责模块,对完整的项目玩法是搞不清楚的,搞定完整项目是高级程序员的能力范围。Android程序员,在APP开发团队中,只能负责项目中的模块,后台缺人,把这个程序员拉到后台帮忙开发接口,后台他也只能写点接口,最可能是负责到模块。你看他到哪里都是负责模块,只能在中级程序员水平。并且这种人好用啊,在公司会很吃香,项目组都想要他。他一下子负责android,一下子负责后台接口,他永远都不可能完整的搞定项目,无论是android,仍是后台。
像这个中级程序员,刚成为全栈工程师的时候,工资会比一样岗位的程序员高,由于他能够作比别人多的事。可是,他只要作一两年,换工做就麻烦了,原本以他的年限,应该是高级程序员水平,面试官按高级程序员来面试,确定是蒙的,若是按中级程序员来面试,他基本上也只能回答些key,因此面试效果确定通常,就算过了技术面试,谈薪也会出问题,这种水平的薪资是中级偏下,而他当全栈工程师时,已经拿了接近高级程序员的薪资,本身不肯意接受降薪入职,因此,他的职业发展就差很少了。
经过前面的分析,咱们知道,全栈工程师,它不是指掌握多种技能,胜任前端与后端,能利用多种技能独立完成产品的人。
它是指全面掌握某个技术栈的人。
咱们以facebook的全栈技能为例,全栈工程师是有层次的,掌握1-5点是优秀的高级程序员;掌握1-7点,能够成长为架构师或主管程序员;掌握其它拼图的技能,能够成长为技术总监。咱们文章开头说不少公司想要全栈工程师,那是由于他有更高的技能,能够承载更高的职位;由于有更高的职位,因此全栈工程师的工资更高。固然,这个是老外公司的想法,国内创业公司招全栈工程师,仍是由于一我的能当两我的用,能够给公司省成本。
我写这篇文章,不是打击你们成为全栈工程师,而是但愿你们能关注本身的职业成长,成为真正的全栈工程师。
java程序员,会web开发是理所应当的,这个是成为合格的java程序员必备的技能,若是公司的人员配备,有专人来作H5开发,那就由专人来作,本身有这个技能不用就好了。偶尔出现web人力不足,就帮个忙分担些工做量;或者是有小项目,一我的能完成的,就本身把先后端一块儿担起来就能够了。
web程序员,学习后台语言,职业才能走的更远。若是只是作界面的交互开发,工做2年和工做5年的能力差很少吧,薪资差一倍,你说工做5年的这位职业是否是很危险。并且《web前端开发》等级考试,它就要考java和php等内容。
市面上讲的全栈工程师,只是掌握全栈工程师技术部分,而全栈工程师,要全面掌握技术栈,即包括开发前的客户和业务理解能力,产品分析和设计能力,开发过程当中的系统架构能力、代码开发能力、数据库能力、单元测试能力、部署能力等,开发后的运维、安全、性能提高等能力。这个是职业成长的路径,是职业成长之道。
这篇文章的观点是我首次提出来的,网上也没有找到相似的观点,准确性你本身把握,但愿对你有帮助。若是你有不同的见解,咱们能够一块儿讨论。若是对你有帮助,请关注我,我按期会分享程序员相关的话题。若是你有须要我分享的知识点或困惑的地方,能够给我留言,我在下一次作针对性的分享。
做者介绍
陈华祥
18年全栈工程师,8年集团公司CTO;
项目管理、职业成长、研发系统建设专家;
《艾米视频聊天》,装机量3亿,注册用户4000万;
腾讯学院《腾学汇》项目负责人;
锐思克网络创始人
项目管理、程序员职业成长企业内训讲师和教练;
《程序员职场第1课》、《职业规划:程序员百万年薪修炼之道》、《高级程序员进阶修炼》、《项目管理从入门到精通》,做者、讲师。