.

全栈工程师为什么越混越困难,看这篇就够了

最近跟朋友聊天,经常聊到全栈工程师,我就问他们为什么要成为全栈工程师?技术派的回答:“全栈工程师,前后端技术都会,感觉很牛!”,职业派的回答:“全栈工程师很多公司都需要,不担心工作找不到,工资也比普通的工程师高。”,跟风派的回答:“我好多朋友都想当全栈工程师,都说全栈工程师很好。”有时候,我就贱贱的问他好在哪里?他当场傻了,回答不上来。

各位小伙伴能看这篇文章,相信要么是全栈工程师,要么对全栈工程师有兴趣,这个问题也问下你:“全栈工程师,好在哪里?”你可以花几秒钟想一下,这样你从这篇文章中收获的价值会更高。

1.什么是全栈工程师

百度百科上对全栈工程师的定义:

全栈工程师是指掌握多种技能,胜任前端与后端,能利用多种技能独立完成产品的人。

这个定义是正确的吗?请你花几秒种想一下,这个非常重要!

这个定义是错误的!

这个定义是错误的!

这个定义是错误的!

重要的事情说三遍,所以才会有百科词条后面讲的困境。

2.Facebook的全栈工程师

Facebook宣称她只招全栈工程师,我们来看下Facebook对全栈工程师的能力要求:

LayersoftheFullStack:1.Server,Network,andHostingEnvironment.2.DataModeling3.BusinessLogic4.APIlayer/ActionLayer/MVC5.UserInterface6.UserExperience7.Understandingwhatthecustomerandthebusinessneed.OtherPiecesofthePuzzle:1.Abilitytowritequalityunittests.Bytheway,evenJavaScriptcanhaveunitteststhesedays.2.Understandingofrepeatableautomatedprocessesforbuildingtheapplication,testingit,documentingit,anddeployingitatscale.3.Anawarenessofsecurityconcernsisimportant,aseachlayerpresentsitsownpossiblevulnerabilities.

按市面上讲的全栈工程师来理解:

1到4点是java(后台)开发人员必备的技能,第5点是web前端工程师的技能。

全栈工程师,就是要掌握1-5点的技能。

第6点用户体验、第7点理解客户和业务需求,这两点不在市面上的全栈工程师的技能范围内。你可能会抱不同的看法,我们来看一些常见的案例。

一.

产品经理来找程序员;“你做的这体验像什么鬼,用起来多不方便。”,

程序员:“现在哪有时间搞这些,项目都延迟这么多了,等有时间再来优化吧!”

二.

产品经理又来找程序员改需求,这是第5次改需求了,于是程序员忍无可忍:“你怎么搞得,能不能想清楚一点,一个需求改五遍了。”

这个是产品经理的问题吗?不是的,是程序员的问题。

案例一,用户体验不是全栈工程师重点考虑的,完成功能才是最重要的。

案例二,一款产品,一般产品经理设计40%,程序员设计20%,其它人设计40%。程序员拿到产品,要搞清楚客户需求、业务逻辑、功能间的关系、数据流和交互方式等,这些是程序员对产品需求的理解,更是对产品功能的细化。如果程序员有做这个步骤,在开发之前,就能找出产品中隐藏的问题和设计上的错误,就不需要产品经理反反复复的过来改需求。理解客户和业务需求不是全栈工程师重点考虑的,在全栈工程师眼里,功能都不是个事,我先做了再好。

全栈工程师的能力水平是高级程序员,高级程序员没有6和7点能力,6和7点是架构师、主管程序员以上级别程序员要掌握的技能。

再看其它拼图中的三个点,就自动化部署因为有框架,有人会做;单元测试、安全,有多少全栈工程师会做?这个不是说我对全栈工程师不尊重,市面上讲的全栈工程师,在公司里面基本上是属骡子的,每天做大量的工作,加班加点赶项目,做完前端做后台,改完后台bug改前端bug。根本就没有时间来考虑这些,更不要说花时间做了。

可见,市面上说的全栈工程师,或者百科词条上定义的全栈工程师,跟实际全栈工程师要掌握的技能不同。

3.全栈工程师,不是你想的那样

为什么会出现这种情况?关键出在前后端分离。这个即是技术进步带来的好处,也是技术进步带来的麻烦。

早些年,我们做开发,都是前后端一起做,只是要自己去设计框架来做前后端隔离。后来有些前端框架出来,我们也会用这些框架,自己做开发。后来慢慢的,就有程序员专门做前端开发,特别是像VUE这类框架出来,前端程序员彻底沦为界面交互工程师。

我分享一个案例:

前两年搭一个新团队,我根据公司方向和产品需求,团队配置是3个java和2个web,我的想法是java负责接口和后台开发,web负责app嵌入页和活动页的开发,这样的配置是合理的。结果在做计划的时候,web就报工作量大,时间内完不成。我就好奇,这怎么可能?

我深入了解了一下,技术经理采用的方案就是前后端分离,java只做接口,后台的页面由web程序员来开发,这就完蛋了,这样的配置用这种方案,肯定不能按时完成工作。这种技术方案,就是java程序员砍掉两只手,只做一块业务,而web程序员沦为界面交互工程师。

我们接着前面的分享,web程序员不甘心局限在界面交互上,想找回自己的价值,就开始学习1-4点的能力,于是全栈工程师就大火起来。

由于一些误导,就变成是:web程序员学习后台开发,成为全栈工程师;java程序员学习web开发,成为全栈工程师;Android/IOSapp端程序员,学习后台,又可以开发app,又可以自己写接口,成为全栈工程师。

加上大众创新,万众创业,很多创业公司招不到合适的程序员,或者是为了省成本,就开始大量的招这种全栈工程师,对公司来说,是花一份的钱做两份的事。这种做法对公司和个人都是没有好处的,对公司有害不在这里讨论,有机会我另外写篇文章分享;对于全栈程序员的伤害,后面二小节分享。

全栈工程师是鬼老提出来的概念,我没有找到是谁提的这个概念,不清楚作者原著是怎么讲的。但是鬼老的书我看的多了,像《**编程思想》、《敏捷开发》、《XP》、《Scrum》、《重构》、《测试驱动开发》......,像这些书都有个特点,比如《重构》,讲的是代码重构,但是它讲了很多设计思维、设计模式、产品理解、用户体验等内容,所以学习这本书的内容,不仅可以写出好的代码,还能成为一个优秀的架构师。再比如《敏捷开发》,它是讲敏捷开发方法,看是讲项目管理,实际它讲了很多技术管理、开发方法,学习这本书,可以成为敏捷开发的项目经理,还可以成为架构师或技术总监。

所以鬼老提出来的概念,它都不是一个单纯的概念,都是让你职业能有成长。我们再看这些书的作者,都是从事这个行业一二十年的时候写的,看介绍都是某科技公司的CEO或技术副总,到这个级别,都很


转载请注明:http://www.abachildren.com/jbzs/3799.html