天问

当我们说全栈工程师的时候,我们究竟在说什么?

年底了,各类规划研讨会依次召开,全栈工程师 (Full Stack Developer) 这个词在规划时被频繁提及,培养全栈工程师似乎成了我们提升效率的银弹。同时,为全栈工程师提供专门的工具装备,为全栈工程师开发适合的工具桌面,也成为研发工具部的目标。

 

误会!这种看法是因为我们没有理解“全栈工程师”而导致的误会。

 

“全栈工程师”的出处应该是 Facebook,在一段时间内,Facebook 宣称他们只招聘全栈工程师。在 Facebook 看来,能够熟练的实现前端、后端代码,还能够搞定运维的工程师,就是他们所要的全栈工程师。

 

在 Quora 上活跃着一批全栈工程师,Quora 有这么一个问题:2015 年,全栈工程师应该掌握什么技术?他们各自给出自己的回答。有一个兄弟 (Renaud Kyokushin) 列出了自己的技术栈:

 

1、前端开发

 

  • HTML、CSS、JavaScript、CSS-precompiler (Less、Sass、Styplus)

 

  • jQuery、TypeScript

 

  • SEO、页面加载性能分析

 

  • 响应式设计

 

2、后端开发

 

  • PHP、Node.js、Go

 

  • Python / Django

 

  • Ruby on Rails

 

  • Java 、.Net

 

  • 了解一下新语言: Elixir/Erlang、Haskell、Rust、Scala、C++

 

  • 数据库 MySQL、MongoDB、ElasticSearch;对应的数据缓存机制

 

3、系统管理

 

  • Unxi/Linux 系统

 

  • Bash 脚本

 

  • Web Server 配置:nginx、Apache

 

  • Cron Jobs

 

  • Catci 等监控工具

 

  • 部署和配置工具,如 Chef、Docker、Ansible、Capistrano 等。

 

这清单里面出现的每一个东西,都够一个人学上好几月的了。

 

在一家运营商公司的网上招聘要求中,他们是这样定义“全栈工程师”的:这些工程师既懂得用户需求沟通和澄清,需求分解分配,还懂得设计,还能够编码实现、测试、发布以及运维。

 

我认为这种对“全栈工程师”的要求完全没有抓到“全栈”的核心,全栈的核心在于“实现”,因为前面提到的这几个要素中,最难的也在于“编码实现”。业界全栈工程师列出的技术栈里面,都是和编码实现强相关的技术。会沟通需求、分解分配、搞搞架设,对一个编码高手而言,完全就是很自然而然的事情,从来就没有纯粹只懂得写代码而不明白如何做设计的程序员,写过几万行代码参加过大型项目开发的程序员,都明白我在说什么。同理,“会测试”也是如此。哪有纯粹的只懂编码不懂得测试的人?我只见过只知道测试不懂得编码的人。会开发就一定会做测试,没有哪个程序员不会做测试。有一种说法是开发人员做不了测试,这简直是胡扯。

 

全栈工程师的概念发源于互联网公司,现在一些传统的设备制造商却试图引入“全栈工程师”。对于这类软件公司,在引进“全栈工程师”这个概念的时候,不妨把我们期望的软件领域的“全栈工程师”的技术栈给一层层的列出来看看。仔细分析一下我们期望工程师究竟掌握哪些技术,是一个不错的方法,比如我试着写一下:

 

BSP、Linux Shell、C、C++、Gcc 编译器、Cmake/Make、VRP、Dorpa、数据库、Ruby(自动化测试用)……

 

各个部门可以根据情况完善这个技术栈,但是绝对不是“设计、开发、测试”这样的维度。

 

最后,非互联网公司是否真的需要“全栈工程师”?

 

一个公司项目组的成员们都是全栈工程师了,效率就得到提高了?回答是否定的。总共 5 人/月的工作量,如果是 5 个在各自领域非常精通的人,每人 1 月,可以完工。但是,如果交给这个全栈工程师,很有可能在 5 个月都无法干完。原因很简单,论熟练和专业程度,所谓的全栈工程师很有可能是比不上那些非全栈但是却单项领域研究非常深入和精通的工程师的。一个全栈牛人,有能力干 5 个不同角色的活,不代表他就有能力把 5 人月的工作量一个人用 1 个月干完。

 

有一种看法认为:初创企业更加需要全栈工程师,但是对一个成熟的组织而言,它更多需要的是具有深入的专注技能工程师。我认为这种说法是很有道理的。

 

最后回到工具领域,有什么特殊的全栈工程师“工作桌面”吗?我认为是没有的,来看看业界的“全栈工程师”用的工具:

 

  • Operating System:Windows 8 + Ubuntu (Dual Boot)

     

  • Text Editor:Sublime Text + Netbeans 8.0.1

     

  • Web Browsers:Google Chrome + Mozilla Firefox

     

  • Version Control:Git command line

     

  • JavaScript Libraries and Tools:AngularJS、JQuery、 Bower

     

  • CSS Frameworks:BootStrap, Foundation (My special blend of both)

     

  • Server Stack:XAMPP on Windows, LAMP on Linux

     

  • Frameworks:CodeIgniter (+ Jamie Rumbelow's MY_Model、MY_Controller、Message Library and Ion Auth)

     

  • Database Software:MySQL Workbench、phpMyAdmin

     

  • Image Manipulation:Photoshop CS6

 

还有一些工程师也列出了他们的工具清单,但是都有一个共同点:那就是开发人员会用到很多工具,各种各样的工具,同时,没有所谓的集大成为一体的桌面。

 

即使真的有所谓的全栈工程师的工作桌面,那也就是所谓的 IDE,比如 Rubymine、Visual Studio、Eclipse 之类了。这些 IDE 集成度比较高,可以完成很多工作。但是,即便如此,也是达不到我们所期待的“在一个工作桌面上完成所有工作”的目标的。

 

我还专门在 Quora 上向几个著名的全栈工程师求助,是否有这样的工作桌面?

 

有一个资深的全栈工程师告诉我:No,全栈工程师都是私人订制他们自己的工具集的。

 

有一个 .net 全栈工程师说:他用 Visual Studio,但是他不需要我说的这种工作桌面,这种东西毫无意义。

 

还是 Renaud Kyokushin 这位老兄,看了我的问题,很困惑的说:“你们究竟要干嘛?解决什么问题?”,他认为根本不需要这样的工作桌面,如果一定要有一个,Windows 或者 Linux 自带的操作系统桌面算是一个。

 

在一个桌面上完成所有工作,避免工具切换带来的开销,完全是我们想当然想出来的伪需求。最后我要强调一点:没有全栈工程师工作桌面这种东西。想当然的东西,是会被一线战士所抛弃的。同时,不要随便去凑业界的热闹,乱赶时髦。

博客地址:http://blog.yoqi.me/?p=968
扫我捐助哦
喜欢 0

这篇文章还没有评论

发表评论