0%

什么是全栈工程师?

谈一下我理解的全栈工程师和为什么我希望成为全栈工程师。

什么是全栈工程师?

源于 Facebook

Quora 上有一个答案:

1
2
3
4
5
6
7
A full stack developer is capable of performing tasks at any level of the technical stack in which they reside. It means:

Working with systems infrastructure (knowing what hardware to ask for , what OS to install, how to prepare the system and dependencies for all software)
Understanding, creating, manipulating, and querying databases
API / back-end code in one or more languages, e.g. Ruby, Java, Python, etc.
Front-end code in one or more languages, e.g. HTML, JavaScript, Java, etc.
Project management / client work, e.g. gathering requirements, creating technical specifications and architecture documents, creating good documentation, managing a project timeline (e.g., someone who knows Agile/SCRUM/Kanban)

全栈工程师是指能在任何能在一个技术栈的任何层次完成工作的工程师。

  • 知道计算机操作系统的基本运行原理
  • 知道如何操作数据库
  • 用一种语言写后端的 API 代码
  • 前端合适的技术可以实现业务逻辑
  • 工程管理,包括不限于需求分析、敏捷开发、文档管理等等

这种说法最开始源于 Facebook,“Nothing at Facebook is Somebody Else’s Problem”,换句话说,有问题就马上评估是否值得解决。如果值得解决,你就应该着手去解决,而不是假设别人比你更合适解决这个问题。

Why?

举个例子,你原本是一个后端工程师,在做响应时间的调优,初期后端上改进很大,后期效果已经不明显,但是你发现网络传输和前端有很大空间。假设现在前端的工程师对这两块也不是很了解,这个时候怎么办?

  • 顺其自然,不了了之。
  • 从外面招一个会的工程师。
  • 自己学相关知识然后直接去调整。

Facebook 之所以选择第三种,有这么几点理由:

  • 本身的挑战已经非常大了,极大的用户量带来极大的问题,很难从市面上直接找一个能解决问题的人。
  • 如果解决掉新发现的一个问题大于手里正在做的事情,哪怕它不是自己擅长的,也应该自己去把它做好。
  • 真正高素质的人不仅仅是掌握知识,而是拥有学习知识的知识,也就是学习能力。有了学习能力,具体的知识总能学会。
  • 每个技术都有自己的背景和优势劣势。有时候强行规定使用的技术反而会限制大家的产出。倒不如根据需求去选择合适的技术。
  • 关注整个公司的产出和效率。大部分提升效率的地方往往来源于别人没有思考过的问题,不如谁发现,谁解决。

外行看把式,内行看门道

并不是深究技术不重要,顺着业务的发展,技术的难度和深度会自然而然的增加。但是,过分在某一种技术实现方案上过分深究是没有必要的,工程师应该去深度研究计算机工程学的基本原理,以解决问题的心态来选择合适的技术。在现有方案都不完美的情况下,甚至可以自己造轮子。好的开发者,即使不是全栈,也要融会贯通多种技术。学习门道需要充分研究各种把式,不可能凭空学。

回到刚才的话题,Facebook鼓励的是刚毕业不太久的这群人全栈,面向产品快速迭代,面向价值产出效率的提升,技术上追求的是切实解决问题,而不是局限于自己原有的技术知识。到了一定的阶段,工程师自然而然地在在某些方面变得资深。

为什么在国内会招黑?

仔细想想,其实全栈工程师也可以分为这几种类型。

装逼型

连栈是啥玩意儿都没明白,自称”全栈工程师”比较高端。

不招黑才怪。

菜鸟型

追求『 ▇ 』 型人才是好事,但是一个普通智商的人能做到『 T 』型人才就很牛逼了,实在不行也可以做『 l 』型人才。

但是一个 『一』型的跑过来说自己是 ▇ 不被黑才怪。

创业型

在互联网早期,程序员基本都是『全栈』。

全民创业的背景下,这种全栈工程师也称为demo工程师

还有一类,可以别称“因为老板加不了钱请不起人所以全部得干的加班狗”

前端型

原来搞 H5 的人,研究了一下 nodejs。

这种至少好于前三种,是对于技术场景的自然延伸。为了适应网络特点,而使用更先进的架构,让服务端处理更多的数据,减小客户端尤其是移动端的计算压力。

前端工程师一直处于鄙视链的底端。这么几个原因:

  • 很多H5工程师是培训班出来的,素质堪忧,基本上只会做一做简单的交互。
  • 相比于其他工种,前端工程的发展时间相对较短【06年左右,前端工程真正开始发展以XHR纳入 W3c 为标志,而后端是1996年左右就开始发展了】,这里的原理和这句话一样:“震惊!九零后程序员竟然无一人超过三十岁!”。
  • 前端这三四年很乱,天天有人造轮子。WEB发展早期有各大语言框架之争,而前端是 JavaScript 一统天下,自然而然会涌现出各种框架。

鄙视链如此,前端级别不太高的工程师想往全栈发展的特别多。

如同俄国是资本主义的薄弱环节,十月革命从俄国发起。前端是计算机工程的薄弱环节,全栈的风潮是从前端发起。

但是,个人觉得全栈应该从“后端”学起。

架构型

这个级别的人都是全栈工程师。知识太局限的人无法成为重要项目的负责人,也无法创造业界影响力。

关注了很久的一个有趣的问题:腾讯T4专家工程师是什么水平?

比如滴滴在业务暴增期用了腾讯云的业务,这时候会找一些T4资深的架构师来 review,目的就是规避不可预知的风险。

试问,怎样才能规避海量流量接入的系统风险?没有各个层面的知识能做到么?

极客型

Twitter 早期创业使用的 RoR 框架,一种开发非常高效的 MVC 框架,用极短的时间可以做出非常多的事情,采访Ruby语言创始人松本行弘

Instagram 在被 Facebook 10亿美金收购的时候,整个公司团队有惊人的13个,怎么做到的?使用的框架是 Django,一个类似 RoR 的高效全家桶WEB开发框架。Instagram的技术架构

不错的互联网公司人均产值是百万美金,腾讯阿里级别的生态公司一般是1000万美金,而Instagram的早期,直接接近亿级别。

国外很多的小公司使用 RoR,国内更多的是 Python 系的人。然后就是黑客与画家的作者极度推崇 Lisp,也是这种风格的语言。

结论

招黑的是前三类和第四类的一部分人。

工程师分级

摘录自吴军博士《硅谷之谜》的等级划分,非常有意思。

第五等工程师

第五等工程师,是能够独立设计和实现一项功能的人。这是对工程师的基本要求,如果一个人只是懂一点工程实现的手段,需要别人告诉他怎么做,那最多算是助理工程师或技工。

第四等工程师

第四等的工程师就需要有点产品头脑了,也就是说他们在做一件事之前,要知道所作出来的东西是否有用、易用,是否便于维护,是否性能稳定,等等。除了要具备产品设计方面的基本知识,还要具有一定的领导才能,能在整个产品的生命周期从头到尾将一个产品负责到底。这在很多硅谷的公司里,基本上是一个高级工程师所应有的基本素质,对大部分工程师来讲,这些素质不是一个工学院能培养出来的,而是需要在工业界实际锻炼三四年甚至更长的时间。当然,个别天赋很好的年轻人在学校里就具备了这种素质,但这是可遇不可求的。

第三等工程师

第三等的工程师可以做出行业里最好的产品。他们与第四等工程师有着质的区别,这不仅反映在技术水平、对市场的了解、对用户心理的了解以及组织能力等诸多方面,而且也反应在悟性的差异上。当然,这种悟性很多是后天培养出来的,但这就需要更长的时间了。有些人从工作一开始,可能需要十年八年,经过多次失败,不断总结,终于在某个时间点豁然开朗。而另一些人可能非常幸运,在一开始就有幸和最优秀的人一起工作,加上善于学习,五六年下来就能达到第三等的水平。在硅谷,有极少数工程师只花了五六年时间就达到了这个水平。但是,即使一个人再聪明,基础再好,也需要在工程上花足够的时间才能达到这个水平,一个年轻人工作了四五年就开始做行政管理工作,基础上就和这个水平无缘了。

第二等工程师

第二等的工程师是那些可以给世界带来惊喜的人,比如实现第一台实用化个人计算机的沃兹尼亚克、DSL之父约翰·西奥菲、iPhone和Google Glass的总设计师,以及开发Android系统的如宾等等。他们与第三四五等工程师的差别在于其工作的原创性以及对世界的影响力。当然,他们的工作不是科学研究,这一点和科学家毕竟不同。

第一等工程师

第一等的工程师是开创一个全新行业的人,历史上有爱迪生、特斯拉、福特,二战后有保时捷博士、本田宗一郎和硅谷的诺伊斯等人。这些工程师不仅在技术和产品等各个方面上与第二等的工程师有了质的差别,而且在经验和管理上也是好手,他们通常也是企业家,并通过自己的产品改变了世界。这一类人常常是可遇不可求的,正如朗道列出的第一等物理学家只有个位数一样,第一等的工程师也是如此。朗道认为每一等物理学家之间的贡献相差十倍,每一等工程师的差距也是这么大。

感想

工程师不应该束缚自己,不应该固定方向。

工程师应该动用一切可以用的资源,造出好用的东西。

伟大的工程师要能发现并解决有十倍百倍增长空间的事情。

保三争二学一。

我的理解

逛 github 的时候发现一个毕业还只有三年,但知识结构很完整的哥们 phodal’s Github,知识结构在创业公司里面会非常有用。虽说感觉这哥们在性能调优方面理解不是很到位,但是综合实力应该碾压绝大多数毕业三年左右的本科生。

往小了说,WEB 技术栈是一个技能集,往大了说,WEB 技术栈是一个知识树:

WEB 技术栈

  • 熟悉*nix操作系统命令行和脚本
  • 熟悉常见开源数据库的使用
  • 熟悉主流的几种编程语言
  • 熟悉一种后端框架
  • 熟悉一种前端框架
  • 熟悉各种缓存策略
  • 熟悉一种数据分析工具
  • 熟悉如何给产品加跟踪器
  • 熟悉如何部署代码
  • 了解前后端分离技术
  • 了解基本的虚拟机和容器技术
  • 了解 CDN 技术
  • 了解基本的队列技术
  • 了解基本的微服务、混合云技术

WEB 知识栈

程序编码

  • 语言语法
  • 数据结构
  • 基本算法
  • 设计模式

体系结构

  • 操作系统原理
  • 数据库原理
  • 计算机网络原理
  • 编译原理

软件工程

  • 测试开发
  • 持续集成
  • 部署和运维
  • 工程架构
  • 性能调优
  • 自动化处理琐事

编码效率

  • IDE 使用配置
  • 版本管理
  • 重构技巧
  • 会逛github

宽广的知识面

  • UX 入门
  • SEO 入门
  • 经济学原理入门
  • 商业知识入门
  • 数据分析入门
  • 公司运作的原理
  • 行业趋势的认知
  • 文史知识
  • 讲故事的能力

END

不知道我理解的全栈和你理解的是不是一个东西?
是与不是都欢迎交流。