为什么你不需要做一名全栈工程师?

jopen 9年前

原文  http://developer.51cto.com/art/201507/486125.htm


对所有技术浅尝辄止的所谓「全栈工程师」已经OUT,那么现在,我们需要怎样的跨领域技术综合者呢?

我敢打赌,没有人可以凭借一己之力掌握下图这些领域不断更新的先进知识。单单是紧跟每个类别中的进化和新的编程接口,就几乎是一个全职的工作量。

为什么你不需要做一名全栈工程师?

在Web 2.0时代,全栈工程师是可能的,但是随着新一代创业公司的兴起,推动了各种技术的边际突破。从机器智能到数据分析、再到可穿戴/移动设备,让一个程序员个体实现跨全栈编程实际上变得不现实了。

在还没有移动和Web的上世纪七十年代后期,通常是一个人从头到尾写全部的程序,在程序员和硬件之间并没有很多其他的软件层。8位处理器和内存非常有限的机器,迫使程序员使用规范的汇编语言。

随 着上世纪80年代末和90年代初客户机/服务器处理(client/server computing)的演进,以及90年代末20世纪初互联网浪潮的来临,编程应用很快成为一项团队行为。新技术的每一面都是如此复杂,以至于需要专门的 专家,即一个人精通好几层(如前端/数据库/应用服务器等)。维护一个商业网站成为一门专业,包括操作网络设备(e.g.路由器和负载平衡器等),调整 Java虚拟机,以及使用各种数据库索引机制。

到了21世纪中期,创造几乎任何东西,从简单的网站到下一代SaaS服务,都十分地昂贵。上 涨的费用直接与从各个层相关的许多个人之间的开销通信(并且经常错过通信),以及在一层级联到其它层和成部署参数的改变有关。正如Marc Andreessen(网景创始人,现风投)在推ter上刷屏讨论烧钱问题时说: 「大量员工将使通信效率呈指数式下降,导致所有一切速度放慢。」 (More people multiplies communication overhead exponentially, slows everything down.)

另 一方面,创造新一代Web 2.0网站的技术越来越精简和简化。程序员从使用复杂的企业级Java堆栈和数据库(e.g.Oracle),切换到更直接的LAMP组合(Linux操 作系统,Apache,MySQL和PHP/ Python/Perl)。新的语言和框架(e.g.Diango和Ruby on Rails)使得网站和数据库之间的层自动化。前端框架(e.g.jQuery)帮助简化了不同浏览器之间错综复杂的关系。云服务(e.g.Amazon Web Services)简化了部署,提供了钥匙网络。

到21世纪后期,对许多程序员来说,提供一个完整的消费者或SaaS的网站成为 可能,包括一个动态的Web客户端,服务器端的业务逻辑,一个可伸缩的数据库,部署和运营支持。这种新品种的全栈工程师可以和一支团队一样完成整个任务的 环。当这个项目做大了,全栈工程师可以实现一个人在应用的所有层加一个功能,这样就减少了和不同层的人沟通的通信成本,从而加速功能交付。

为什么你不需要做一名全栈工程师?

如果你建的网站是上面这样的全栈模型,找到全栈工程师可以有效地解决问题。但是现如今,我认为,这并不是够格的全栈工程师。第一张图才是更全面的全栈。

我 们正处在向更多复杂科技迅速转型的中期,随着时间的流逝,在每一层都需要专家。开发优秀的iOS和Android应用需要理解这些平台错综复杂的专家。在 实际操作中,转向新的数据库,比如MongoDB,需要不断的关注和调整。在云服务(e.g.Amazon)上运行一个应用需要了解它的各种服务的细节, 以及如何实现跨区域故障转移的专业知识。即便是古老的Web前端,现在都演变成CSS4、JSON和JavaScript的MVC框架,比如 Angular.js和Backbone.js。

在这个全新的世界中,关键是至少有这样一个人:对每一个部件都至少有功能性的了解,同时可 以把不同的层连接起来,和不同领域的专家一起合作,从而最终实现某个功能。在这种意义上,这些连接层、建桥的软件工程师,即精通某一层或好几层的专家,就 是比全栈工程师少一点,比全栈综合者(Full Stack Integrator)多一点儿的人。

总之,「全栈工程师」,可以安息了。在无限广阔的未来,我们欢迎在某一特定领域有深入技术见解的「全栈综合者」!

100offer的用户是怎样看「全栈」的?

用户背景

周 瑾(化名),7年以上开发经验,国内一本毕业,BAT资深研发工程师,具备多个大型平台前端架构设计开发经验,有iOS、MAC开发经验,有移动Web开 发经验,精通NodeJS,熟悉后端开发的流程和技术面,具备全栈开发能力。团队管理经验丰富。在5月第3期拍卖中收获37个面试机会,现已入职北京某创 业公司。

100offer:普通程序员如何向全栈发展?

周瑾:我认为工程师可以分为两 种:一种喜欢钻细一个东西,然后以此为生;还有一种喜欢不断折腾,需要去满足自己了解未知的欲望。拿我自己来说,我属于后者。我有创业经历,也做过大公司 的螺丝钉。螺丝钉其实满足不了我对技术的兴趣,所以在工作过程中我在不断寻找自己的技术边界,并试图打破它。就这样,技术开始变得一点点全面起来。

全栈绝对是自我驱动的一个过程,我其实是在不知不觉中会了这么点东西,变成了所谓的「全栈」似的。业界的高手多得很啊^^

100offer:全栈工程师适合创业公司,还是大公司?

周瑾:创业公司比较喜欢招全栈,这和创业公司的需求有关系,因为创业初期的公司可能需要一个人做几个人的活。另外,可能老板是技术出身,了解部门之间衔接所需要付出的巨大沟通成本,所以倾向于更少的沟通单位。

其 实大公司也不错,大公司有更人性化的工作时间,且稳定,一般情况下是不会让员工的工作饱和到满(当然有些个别组很过分)。在大公司的时候,我完成了自己的 工作,喜欢折腾什么就折腾什么,然后你觉得自己可以了就可以申请转岗成其他职位(当然这里也要自己承担角色转换带来KPI问题,毕竟换了领域就是一个新兵 了嘛)。

总之,全栈不应该是对所有技术浅尝辄止,而是一专多能或多专多能。无论是自己去创业,还是放到固定岗位上都能大放异彩。

100offer:全栈工程师有什么优势呢?

周瑾:我其实不怎么觉得全栈有优势,我只能说能看到这种人身上的一点点共性。视野,思维和学习能力确实有点优势,但我认为共性是性格上的。我接触到的在互联网行业跨领域性的人,其实都比较单纯,或者说编程对于这类人来说不是一种谋生途径而是一种个人兴趣。

我觉得全栈更多的是自己对纯技术的渴求,深入任何一个技术领域都是很细致的一件事,全栈与否更多的是一种经验上量变到质变的过程。