全栈工程师到底有什么用

jopen 10年前
  最近国内外都在流行一个词叫 Full Stack,中文翻译过来叫全栈工程师,也叫全端工程师。微博上很多专业人士都在讨论全端工程师,有赞有毁的。我对全端工程师的定义是:掌握多种技能,并能利用多种技能独立完成产品的人。打外比方,全栈工程师就是一个能独立盖一幢 10 层小洋楼的人,而普通工程师,则是可以和一群人盖一幢摩天大楼的人。至于要掌握哪些技能,我觉得这个要跟从事的行业与技术方向有关,做互联网的和做软件的是不一样的,即使是做互联网的,后端也可以分为很多种技术流派。

  8/2 定律在哪都适用,全栈工程师就是掌握 20% 常用技能的人,但这 20% 的技能会有 80% 的几率被用到,剩下那 80% 不常用的,让我们 Google 吧。

  有人说,全栈工程师在中国已经很多年了,他们叫站长。这个说话有点靠谱但又不那么靠谱,我自己也做过站长,深知作为一名站长需要掌握很多种技术。不靠谱的是,很多站长其实并没有真正写过多少代码,而是熟练利用一些建站软件来建站。

  全栈工程师的价值

  有人说了,你再牛逼,你懂五种技术,你能干五个人的活吗?全栈工程师并不是说一个人能干几个人的活,而是要从多个方面来看这个问题。

  全局性思维

  现代项目的开发,很少说只用到一两种技术的,特别是移动互联网大潮下。随便一个互联网项目中用到的技术,就会需要用到后端开发、前端开发、界面设计、产品设计、数据库、各种移动客户端、三屏兼容、restFul API 设计和 OAuth 等等,一些比较前卫的项目,可能会用到 Single Page Application、Web Socket、HTML5/CSS3 这些技术,还有像第三方开发像微信公众号微博应用等等。

  Web 前端也远远不是从前的切个图用个 jQuery 上个 AJAX 兼容各种浏览器那么简单了。现代的 Web 前端,你需要用到模块化开发、多屏兼容、MVC,各种复杂的交互与优化,甚至你需要用到 Node.js 来协助前端的开发。

  所以说一个现代化的项目,是一个非常复杂的构成,我们需要一个人来掌控全局,他不需要是各种技术的资深专家,但他需要熟悉到各种技术。对于一个团队特别是互联网企业来说,有一个全局性思维的人非常非常重要。

  像如果是我经手的项目,我肯定会注意到网页优化,也会考虑到 API 来兼容各种客户端,更会考虑到三屏兼容的问题。不会说项目中完全使用 AJAX 而不顾 SEO,也不会为了功能性而忽略访问速度,我会很好的把握这个平衡,因为我知道它们的权重与实现成本。

  沟通成本

  项目越大,沟通成本越高,做过项目管理的人都知道,项目中的人力是1+1<2 的,人越多效率越低。因为沟通是需要成本的,不同技术的人各说各话,前端和后端是一定会掐架的。每个人都会为自己的利益而战,毫不为已的人是不存在的。

  而全栈工程师的成本几乎为零,因为各种技术都懂,胸有成竹,一不小心自己就全做了。即使是在团队协作中,与不同技术人员的沟通也会容易得多,你让一个后端和一个前端去沟通,那完全是鸡同鸭讲,更不用说设计师与后端了。但如果有一个人懂产品懂设计懂前端懂后端,那沟通的结果显然不一样,因为他们讲的,彼此都能听得懂。

  创业公司

  对于创业公司来说,全端工程师的价值是非常大的,创业公司不可能像大公司一样,各方面的人才都有。所以我们需要一个多面手,各种活都能一肩挑,独挡多面的万金油。对于创业公司,不可能说 DBA 前端后端客户端各种人才全都备齐了,很多工作请人又不饱和,不请人又没法做,外包又不放心质量,所以全端工程师是省钱的一妙招。虽然说全端工程师工资会比一般的工程师会高很多,但综合下来,成本会低很多。

  全栈工程师的困境

  我讲技术有两个发展方向,一种是纵向一种是横向的,横向的是瑞士军刀,纵向的是削铁如泥的干将莫邪。这两个方向都没有对与错,发展到一定程序都会相互溶合,就好比中国佛家禅修的南顿北渐,其实到了最后,渐悟与顿悟是一样的,顿由渐中来。

  如果一个公司不太懂全栈工程师的价值,那么全栈工程师的地位将会很尴尬,说得不好听一点,全栈工程师就是什么都会,都么都不会。曾经有一次面试,对方问我很基础的问题,我答不上来,我能做出产品,也知道什么是怎么一回事,我也不会犯那些错误,但我就是答不上概念,要考倒我非常容易。所以在应聘面试的时候,有些时候会吃亏,你可能会不如哪些在某一方面钻得很深的人工资拿得高。

  由于经常在各种技术穿梭,我会经常忘记代码的语法和一些 API,所以我经常需要去查 API 甚至查语法,我觉得没有 Google 我几乎没法工作。这在某些人的眼里,是技术不够的表现。我记的只是一个 Key,一个如何找寻答案的索引,而不是全部,人脑不是电脑,我不可能要求我能记下所有的东西。

  有一次面试官问我一个问题,我说我不知道,但我猜大概是如此这般,对方问我,你为什么这么猜,我说凭直觉,对方笑了笑没说话。面试完后我一查,果然和我猜的差不多。没错,我就是凭直觉,但这种直觉和女人的直觉不一样,这种直觉是技术上的直觉,是你过去技术经验累积的一个反射。

  我不是一个非常专业的 Web 前端,也不是一个非常专业的 Node.js 开发工程师,更不是一个非常专业的 iOS 开发工程师。用人单位会问我,你到底是专业做哪一个方面的,我为什么要给你这么高的工资?

  有什么资格来谈全栈工程师

  我应该算是一个全栈型工程师了,行业经验已经超过 10 年。独立做过不少产品,也带过不少项目,经过的产品包括桌面端、Web 产品、移动端产品,Web 端涵盖前端与后端,移动端主要做 iOS 和混合开发。

  熟悉 Web 前端,对 MVC/模块化开发有实战经验,熟悉 CoffeeScript、Grunt、RequireJS、Handlebars 等等,自己写过小型的 Javascript 框架,一个项目中的 JS 代码超过一万行。熟知网页优化,知道如何让网页变得更加快速。也略懂 SEO,知道什么样的 URL 和代码会更讨好 Spider。

  熟悉 Node.js,有几个项目都是基于 Node.js 的,目前发布有开源的 Blog 程序 Purelog,在 NPM 上有多个模块发布。熟悉混合开发,过去我曾经有超过一年的时间是在研究 Hybrid 技术,多个 App 基于混合开发技术,也有开发类似于 PhoneGap 的解决方案。对 HTML5 在手机上的表现颇为熟悉,挖过很多的技术坑,如白屏问题,Sqlite 问题,滚动条问题,硬件动画加速、点击延时问题等等。

  会做设计,熟悉 Photoshop,所有的产品不管是 Logo 还是界面全都是自己做的设计,虽然在资深的设计师眼里不值一提,但在工程师队伍中算是比较另类了。

  熟悉 Objective-C,有两年以上的 iOS 开发经验,在 App Store 上有约十款 App。熟悉服务器的一般性操作,自己有 VPS 并运行多个网站,虽然配置服务器经常要去 Google。

  早年曾经做过一年的 Delphi,也曾做过几年的 ASP.net,虽然这些技术我目前已经放弃,完全转向*nix 平台,但累积下的经验是在的。多年的项目管理经验,曾在三个公司担任过项目经理,累计项目管理经验超过 4 年。在多个科技门户发表过技术和评论文章。

  为什么我会成为全栈工程师

  我相信很多全栈型工程师会和我一样,是因为要创业才成为全栈型工程师的。我有一颗创业和做产品的心,而且我又是一个不愿意麻烦别人的人,有些人擅长整合资源,空手套白狼,但我显然不是这种人,所以我只好自己做了。

  在经历过两次孤独的创业之后,我发现我并不是一个适合独立创业的人,所以,我成为了一个全端工程师。我最初是做 ASP,后来自己创业写客户端用 Delphi,然后写了三年的 ASP.Net,2010 年的时候因为公司需要开始做 iOS 开发。Web 前端是一直自己在做,项目中的的 Javascript 基本都是我自己在做。

  我热爱写代码,热爱重复发明轮子,热爱新技术,我想这也是我成为一个全栈工程师的重要原因。

  于我自己来说,我觉得全端工程师的乐趣要比一般工程师来得多,因为你知道一个产品的形态,你可以去设计一个产品,你是从全局的视野来做事情,你得到的成就感会更多一些。

来自: 涂雅