纵使目标再大,人的精力有限,于我来说,早些时候远大目标隐约是 “成功的软件工程师” 这个样子,但是目标是需要逐渐细化的。这些年我渐渐对自己的定位和未来有了一个清晰一点的认识。确实我有很强的观点,觉得软件工程师需要有足够的全面性,在 《我眼中的工程师文化》中我也说 “工程师文化,不是只有权力的一面,它对工程师的要求,是每个人都要足够能干,都要做许多的事”……
但是,全面性不代表没有专精、没有方向。深度和广度统一的问题已经有许许多多过往的人和我说过了,不存在一个在某一领域精深的牛人但是知识却很窄,也不存在一个博学大师但是却没有一个自己擅长的领域;而方向更是不可回避的问题,以前和朋友开玩笑总结了几类工程师的发展方向,就像打怪升级一样,有数据库专精、有前端专精、有语言设计专精、有机器学习领域专精,甚至还有企业流程咨询专精、敏捷实践专精的……领域划分实在是太宽阔了,就看技能点数如何分配。
我当然也给自己寻找了方向。在这个网站的右上角我放上了三个关键词,大概是对当前的我一个侧面最粗略的描述:
- #Web#是我一直以来感兴趣的领域,早有人说互联网软件的技术和发展甩传统软件好几条大街,尤其在见到很多朋友、牛人投身互联网领域,我更对它充满憧憬;
- #JavaEE#算是我相对熟悉的领域,虽说这几年接触的东西稍微多一些;
- #全栈工程师 #是我的方向之一,粗略地说我现在也已经符合这样的标准,但是仁者见仁智者见智,这是以我的观点而言的,每个人对它有不同的理解,在这里我会说说我的看法。
其他人的理解
关于这个话题,当前颇有争议,虽说大部分工程师表示认可。在 Google 搜索 “Full Stack Developer” 的第一条记录,是 Laurence Gellert(前汤森路透的工程师)写的一篇名为 《What is a Full Stack developer》的文章,这篇文章的观点其实还是非常切合主线的:
To me, a Full Stack Developer is someone with familiarity in each layer, if not mastery in many and a genuine interest in all software technology.
并且罗列了满足 “full stack” 应当掌握的各层技术,包括服务器、网络、主机环境,数据建模,业务逻辑,API 层/Action 层/MVC,界面,用户体验和理解用户、业务所需。
在 Guru99 的文中,也给出了在我看来是偏狭义的定义(但是很具体、很清楚):
A full-stack web developer is a technology expert who can work on both in the front end as well the back-end of any application. The person should be familiar with each layer of a 3-tier model. The 3-tier consists of
The presentation layer ( Main front end portion which deals with the user interface),
Business Logic Layer (back-end portion of any application which deals with data validation)
Database Layer
在国内,知乎这个帖子应该算是热帖了,每个人都有自己的看法,比如第一条回复就提到了思维方式和学习能力,但是其中有很多观点偏离了 “全栈” 这个主线,变成了 “我心目中的理想工程师” 这样的讨论,就不符合初衷了。
全栈工程师的发展
在系统、全面的大公司,全栈工程师并没有一个稳定的发展职位。我无比赞同知乎那个帖子里面这样的一句话:
一个真正的全栈工程师,目标只有一个:创业。
听起来有些悲凉,但事实就是如此。任何一个方向颇具深度的工程师,都有希望为自己在那个特定的领域赢得自己的一席之地,是权威,也是技艺精深的专家。但是对于所谓的 “全栈” 而言,很多情况下根本就称不上优势,你会写数门程序语言,会设计 API,会写前端代码,会做手机 APP,甚至会切图,会和用户沟通,但是倘若在这些方向都难说有哪一项足够强大,那全面性又能在大公司的晋升线路上谋得什么?
但是创业的小公司就完全不是这样了,你不能指望有 DBA、技服、产品经理、美工、前端设计师、服务器工程师、操作系统管理员……无数角色,你只能有那么少得可怜的几个人,每个人都必须是全才,搞得定各种事情,经验丰富、视野广阔。出了问题,一个人就可以搞定,而每个人,都可以彼此备份。
这也是 “学习能力” 在全栈工程师中扮演无比重要角色的原因。毕竟,在全面的工程师,也不可避免地涉足自己不熟悉的领域,快速学习并且把问题搞定,在这样的过程中体现自己的价值。
全栈工程师拥有更广阔的视野和更广泛的学识。全栈工程师可以从更高的角度去看待问题,这比某个领域的专家,更不容易做出错误的决策。
事实上,软件工程本来就是一个复杂的事情,需要工程师掌握和学习的知识很多。在我前一家公司,有这样一个故事,好几年前,公司尝试给软件工程师分档,甚至依此使用不同的雇佣实体:让来自子公司 A 的最优秀的工程师设计了程序,再让来自子公司 B 的平庸工程师去实现。最后这个方案彻底失败了,两家子公司的工程师被迫合并,这也证明了,软件工程是一项复杂的脑力劳动,想像流水线工人那样,把整个环境简单地切分成若干个过程,然后通过简单劳动完成,是不可能的。你可以举出很多外包、内包公司中上述的例子,但是在我看来,这只是对劳动力的压榨而已,别指望这样的形式能做出什么伟大的产品来。
“全栈” 不等于 “全面”
“Full Stack”,这个词其实在英文中使用很普遍,可以直译为所谓 “全面的技术栈”(软件工程中,每个领域都拥有相应的数种不同技术,这就是这个领域的技术栈),现在人们加入了自己的理解,但无论如何,它绝不等于 “comprehensive”。换言之,一个全栈工程师,绝不等于一个全面的工程师。接触多点领域当然有好处,但是浅尝辄止、仅仅停留在入门级别,那这个领域内,给别人、给项目造成的危害,甚至大过那些一窍不通的人。举例来说,你是愿意去给一坨屎一样的设计和代码修修补补呢,还是愿意干脆重新弄一个呢?当然,也不要走极端,有一些领域的知识,可以透明,那就透明吧,比如,使用云服务的时候,你可以对硬件知之甚少,这对工作并无碍。仅仅为了全栈的名号,追求这样的知识储备并无必要。
“全栈” 不等于 “全端”
全栈工程师的划分,绝不止以 “互联网应用” 的维度,更特别地,绝不止以 “互联网网站” 的维度。微博上很多人说到全栈,就提 “全端”,我认为,这实在是莫大的误解,二者是严重不等同的。前端+后端,这只是其中一种粗暴的划分方式而已。就像同事中,有对操作系统熟悉的,有对机器学习熟悉的,把他们粗暴地归结为 “后端” 工程师,是毫无意义的。即便说到创业,也远远不止互联网领域啊。事实上,要能比较熟悉其中几个领域,就已经是非常难得的人才了。我想不出还有什么其他行业,会像软件行业这样需要不断地扩充自己。
最后,我想用一个无比简单的词来描述全栈工程师,肯定不够准确,但也足够直接——
视野
文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》
非常感谢,能看到这么多深度思考的文章,对于晚辈真的是莫大的帮助。已加入收藏夹。
http://blog.csdn.net/BaiHuaXiu123/article/details/51488115
这个哥们明目张胆得抄你的文章, 还搞成原创了.
up
国外的搜索引擎是那样,国内的搜索引擎是这样。
国外叫全栈工程师,国内叫全干工程师。
一堆的项目经理,设计师,产品经理,XXX,看着一个程序员挖坑,谁让你都会干呢。
拥有全栈思想没有错,可以更好的完善自己的思维的全面性。但是如果在实践上面也用瑞士军刀杀敌人的话。。。。。
“ 互联网软件的技术和发展甩传统软件好几条大街”? 你的认知也许只到这个层面吧。
赞同
全栈工程师其实也就是一个软件工匠的标准,这才叫真正的程序员。
做全栈工程师是做架构师直至首席架构师的起点,一个软件工程师如果职业方向是这样那就必须要求自己兼备深度和广度,既需要在自己专注的领域做到深入、精通、思路创新,同时也需要不断学习消除知识盲区,在面对任何问题时能站在全局的高度,系统地进行分析,不一定自己能做出完整的方案,但一定不会搞错方向,知道应该哪些人来共同设计。
完美的定义!共鸣
一个真正的全栈工程师,目标只有一个:创业。
说到心坎上去了
我觉得只能这样了
赞同,一直在为创业准备
视野+10086
我觉得全栈工程师不需要对实现的技术非常熟悉,但是一定要具备如下的两方面知识
1. 能够清楚识别<b>" 这是什么问题”</b>
2. 知道<b> 何种技术</b> 能够解决这类“ 问题”
精辟
赞成