Skip to content

四火的唠叨

一个纯正程序员的啰嗦

Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接
Menu

也谈谈全栈工程师

Posted on 03/29/201410/01/2024 by 四火

thinking

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

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

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

  • #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”。换言之,一个全栈工程师,绝不等于一个全面的工程师。接触多点领域当然有好处,但是浅尝辄止、仅仅停留在入门级别,那这个领域内,给别人、给项目造成的危害,甚至大过那些一窍不通的人。举例来说,你是愿意去给一坨屎一样的设计和代码修修补补呢,还是愿意干脆重新弄一个呢?当然,也不要走极端,有一些领域的知识,可以透明,那就透明吧,比如,使用云服务的时候,你可以对硬件知之甚少,这对工作并无碍。仅仅为了全栈的名号,追求这样的知识储备并无必要。

“全栈” 不等于 “全端”

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

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

视野

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》

×Scan to share with WeChat

你可能也喜欢看:

  1. 极客时间上我的专栏《全栈工程师修炼指南》
  2. 由后端来类比前端设计的思考
  3. YQL
  4. 系统设计的典型分层和涉及的知识点
  5. Bootstrap: New Net-volution

16 thoughts on “也谈谈全栈工程师”

  1. 达兴鹏 says:
    03/17/2017 at 11:16 AM

    非常感谢,能看到这么多深度思考的文章,对于晚辈真的是莫大的帮助。已加入收藏夹。

    Reply
  2. 刘玉刚 says:
    05/27/2016 at 3:51 AM

    http://blog.csdn.net/BaiHuaXiu123/article/details/51488115
    这个哥们明目张胆得抄你的文章, 还搞成原创了.

    Reply
    1. 达兴鹏 says:
      03/17/2017 at 11:13 AM

      up

      Reply
  3. 任国强 says:
    05/13/2016 at 2:28 PM

    国外的搜索引擎是那样,国内的搜索引擎是这样。
    国外叫全栈工程师,国内叫全干工程师。
    一堆的项目经理,设计师,产品经理,XXX,看着一个程序员挖坑,谁让你都会干呢。

    Reply
  4. 南楠 says:
    03/22/2016 at 5:56 PM

    拥有全栈思想没有错,可以更好的完善自己的思维的全面性。但是如果在实践上面也用瑞士军刀杀敌人的话。。。。。

    Reply
  5. Anonymous says:
    02/17/2016 at 10:06 AM

    “ 互联网软件的技术和发展甩传统软件好几条大街”? 你的认知也许只到这个层面吧。

    Reply
  6. 杨刚 says:
    09/25/2015 at 11:45 AM

    赞同

    Reply
  7. floe says:
    01/06/2015 at 4:07 PM

    全栈工程师其实也就是一个软件工匠的标准,这才叫真正的程序员。
    做全栈工程师是做架构师直至首席架构师的起点,一个软件工程师如果职业方向是这样那就必须要求自己兼备深度和广度,既需要在自己专注的领域做到深入、精通、思路创新,同时也需要不断学习消除知识盲区,在面对任何问题时能站在全局的高度,系统地进行分析,不一定自己能做出完整的方案,但一定不会搞错方向,知道应该哪些人来共同设计。

    Reply
  8. 达斯特兰斯 says:
    04/21/2014 at 8:49 AM

    完美的定义!共鸣

    Reply
  9. Genius says:
    04/16/2014 at 9:38 AM

    一个真正的全栈工程师,目标只有一个:创业。
     
    说到心坎上去了

    Reply
    1. Anonymous says:
      06/25/2015 at 6:13 PM

      我觉得只能这样了

      Reply
      1. 杨刚 says:
        09/25/2015 at 11:44 AM

        赞同,一直在为创业准备

        Reply
  10. DeepNightTwo says:
    04/02/2014 at 5:59 PM

    视野+10086

    Reply
  11. zhujun says:
    03/30/2014 at 6:21 AM

    我觉得全栈工程师不需要对实现的技术非常熟悉,但是一定要具备如下的两方面知识
    1.   能够清楚识别<b>" 这是什么问题”</b>
    2.   知道<b> 何种技术</b> 能够解决这类“ 问题”
     

    Reply
    1. Anonymous says:
      07/08/2014 at 4:51 PM

      精辟

      Reply
      1. Anonymous says:
        03/23/2015 at 7:51 PM

        赞成

        Reply

Leave a Reply to Anonymous Cancel reply

Your email address will not be published. Required fields are marked *

订阅·联系

四火,啰嗦的程序员一枚,现居西雅图

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Spark 互联网 亚马逊 前端 华为 历史 同步 团队 图解笔记 基础设施 工作 工作流 工具 工程师 应用系统 异步 微博 思考 技术 数据库 曼联 测试 生活 眼界 程序员 管理 系统设计 缓存 编程范型 美股 英语 西雅图 设计 问题 面向对象 面试

分类

  • Algorithm and Data Structure (30)
  • Concurrency and Asynchronization (6)
  • System Architecture and Design (43)
  • Distributed System (18)
  • Tools Frameworks and Libs (13)
  • Storage and Data Access (8)
  • Front-end Development (33)
  • Programming Languages and Paradigms (55)
  • Testing and Quality Assurance (4)
  • Network and Communication (6)
  • Authentication and Authorization (6)
  • Automation and Operation Excellence (13)
  • Machine Learning and Artificial Intelligence (6)
  • Product Design (7)
  • Hiring and Interviews (14)
  • Project and Team Management (14)
  • Engineering Culture (17)
  • Critical Thinking (25)
  • Career Growth (57)
  • Life Experience and Thoughts (45)

推荐文章

  • 聊一聊分布式系统中的时间
  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • RSA 背后的算法
  • 谈谈 Ops(汇总 + 最终篇):工具和实践
  • 不要让业务牵着鼻子走
  • 倔强的程序员
  • 谈谈微信的信息流
  • 评审的艺术——谈谈现实中的代码评审
  • Blog 安全问题小记
  • 求第 K 个数的问题
  • 一些前端框架的比较(下)——Ember.js 和 React
  • 一些前端框架的比较(上)——GWT、AngularJS 和 Backbone.js
  • 工作流系统的设计
  • Spark 的性能调优
  • “残酷” 的事实
  • 七年工作,几个故事
  • 从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)
  • 一道随机数题目的求解
  • 层次
  • Dynamo 的实现技术和去中心化
  • 也谈谈全栈工程师
  • 多重继承的演变
  • 编程范型:工具的选择
  • GWT 初体验
  • java.util.concurrent 并发包诸类概览
  • 从 DCL 的对象安全发布谈起
  • 不同团队的困惑
  • 不适合 Hadoop 解决的问题
  • 留心那些潜在的系统设计问题
  • 再谈大楼扔鸡蛋的问题
  • 几种华丽无比的开发方式
  • 我眼中的工程师文化
  • 观点的碰撞
  • 谈谈盗版软件问题
  • 对几个软件开发传统观点的质疑和反驳
  • MVC 框架的映射和解耦
  • 编程的未来
  • DAO 的演进
  • 致那些自嘲码农的苦逼程序员
  • Java 多线程发展简史
  • 珍爱生命,远离微博
  • 网站性能优化的三重境界
  • OSCache 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • Ticket: TRANSACTION 1.922915 BTC. Go to withdrawal >> https://yandex.com/poll/enter/BXidu5Ewa8hnAFoFznqSi9?hs=20bd550f65c6e03103876b28cabc4da6& on 倔强的程序员
  • panshenlian.com on 初涉 ML Workflow 系统:Kubeflow Pipelines、Flyte 和 Metaflow
  • panzhixiang on 关于近期求职的近况和思考
  • Anonymous on 闲聊投资:亲自体验和护城河
  • 四火 on 关于近期求职的近况和思考
  • YC on 关于近期求职的近况和思考
  • mafulong on 常见分布式基础设施系统设计图解(四):分布式工作流系统
  • 四火 on 常见分布式基础设施系统设计图解(八):分布式键值存储系统
  • Anonymous on 我裸辞了
  • https://umlcn.com on 资源链接
© 2025 四火的唠叨 | Powered by Minimalist Blog WordPress Theme