四火的唠叨:也谈谈全栈工程师

jopen 10年前

  纵使目标再大,人的精力有限,于我来说,早些时候远大目标隐约是“成功的软件工程师”这个样子,但是目标是需要逐渐细化的。这些年我渐渐对自己的定位和未来有了一个清晰一点的认识。确实我有很强的观点,觉得软件工程师需要有足够的全面性,在《我眼中的工程师文化》中我也说“工程师文化,不是只有权力的一面,它对工程师的要求,是每个人都要足够能干,都要做许多的事”……

  但是,全面性不代表没有专精、没有方向。深度和广度统一的问题已经有许许多多过往的人和我说过了,不存在一个在某一领域精深的牛人但是知识却很 窄,也不存在一个博学大师但是却没有一个自己擅长的领域;而方向更是不可回避的问题,以前和朋友开玩笑总结了几类工程师的发展方向,就像打怪升级一样,有 数据库专精、有前端专精、有语言设计专精、有机器学习领域专精,甚至还有企业流程咨询专精、敏捷实践专精的……领域划分实在是太宽阔了,就看技能点数如何 分配。

  我当然也给自己寻找了方向。在这个网站的右上角我放上了三个关键词,大概是对当前的我一个侧面最粗略的描述:

  • #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,界面,用户体验和理解用户、业务所需。

  在国内,知乎这个帖子应该算是热帖了,每个人都有自己的看法,比如第一条回复就提到了思维方式和学习能力,但是其中有很多观点偏离了“全栈”这个主线,变成了“我心目中的理想工程师”这样的讨论,就不符合初衷了。

  全栈工程师的发展

  在系统、全面的大公司,全栈工程师并没有一个稳定的发展职位。我无比赞同知乎那个帖子里面这样的一句话:

一个真正的全栈工程师,目标只有一个:创业。

  听起来有些悲凉,但事实就是如此。任何一个方向颇具深度的工程师,都有希望为自己在那个特定的领域赢得自己的一席之地,是权威,也是技艺精深的 专家。但是对于所谓的“全栈”而言,很多情况下根本就称不上优势,你会写数门程序语言,会设计 API,会写前端代码,会做手机 APP,甚至会切图,会和用户沟通,但是倘若在这些方向都难说有哪一项足够强大,那全面性又能在大公司的晋升线路上谋得什么?

  但是创业的小公司就完全不是这样了,你不能指望有 DBA、技服、产品经理、美工、前端设计师、服务器工程师、操作系统管理员……无数角色,你只能有那么少得可怜的几个人,每个人都必须是全才,搞得定各种 事情,经验丰富、视野广阔。出了问题,一个人就可以搞定,而每个人,都可以彼此备份。

  这也是“学习能力”在全栈工程师中扮演无比重要角色的原因。毕竟,在全面的工程师,也不可避免地涉足自己不熟悉的领域,快速学习并且把问题搞定,在这样的过程中体现自己的价值。

  全栈工程师拥有更广阔的视野和更广泛的学识。全栈工程师可以从更高的角度去看待问题,这比某个领域的专家,更不容易做出错误的决策。

  事实上,软件工程本来就是一个复杂的事情,需要工程师掌握和学习的知识很多。在我前一家公司,有这样一个故事,好几年前,公司尝试给软件工程师 分档,甚至依此使用不同的雇佣实体:让来自子公司A的最优秀的工程师设计了程序,再让来自子公司B的平庸工程师去实现。最后这个方案彻底失败了,两家子公 司的工程师被迫合并,这也证明了,软件工程是一项复杂的脑力劳动,想像流水线工人那样,把整个环境简单地切分成若干个过程,然后通过简单劳动完成,是不可 能的。你可以举出很多外包、内包公司中上述的例子,但是在我看来,这只是对劳动力的压榨而已,别指望这样的形式能做出什么伟大的产品来。

  “全栈”不等于“全面”

  “Full Stack”,这个词其实在英文中使用很普遍,可以直译为所谓“全面的技术栈”(软件工程中,每个领域都拥有相应的数种不同技术,这就是这个领域的技术 栈),现在人们加入了自己的理解,但无论如何,它绝不等于“comprehensive”。换言之,一个全栈工程师,绝不等于一个全面的工程师。接触多点 领域当然有好处,但是浅尝辄止、仅仅停留在入门级别,那这个领域内,给别人、给项目造成的危害,甚至大过那些一窍不通的人。举例来说,你是愿意去给一坨屎 一样的设计和代码修修补补呢,还是愿意干脆重新弄一个呢?当然,也不要走极端,有一些领域的知识,可以透明,那就透明吧,比如,使用云服务的时候,你可以 对硬件知之甚少,这对工作并无碍。仅仅为了全栈的名号,追求这样的知识储备并无必要。

  “全栈”不等于“全端”

  全栈工程师的划分,绝不止以“互联网应用”的维度,更特别地,绝不止以“互联网网站”的维度。微博上很多人说到全栈,就提“全端”,我认为,这 实在是莫大的误解,二者是严重不等同的。前端+后端,这只是其中一种粗暴的划分方式而已。就像同事中,有对操作系统熟悉的,有对机器学习熟悉的,把他们粗 暴地归结为“后端”工程师,是毫无意义的。即便说到创业,也远远不止互联网领域啊。事实上,要能比较熟悉其中几个领域,就已经是非常难得的人才了。我想不 出还有什么其他行业,会像软件行业这样需要不断地扩充自己。

  最后,我想用一个无比简单的词来描述全栈工程师,肯定不够准确,但也足够直接——

视野

来自: www.raychase.net