“全栈”意味着什么?

Chris Coyier - 2019年5月21日

最近,一位和我参加同一场网络技术会议的开发人员问我这个问题。这位开发人员遇到了许多新朋友,他们都以“全栈开发者”的身份介绍自己,有点像《办公室》里“鲍勃·万斯,万斯制冷”那样,只是变成了“托尼·弗兰克,全栈开发者”。

我猜问这个问题的开发人员(从这篇文章的标题可以看出)已经了解了人们所指的“全栈开发者”的基本概念,但想知道这到底是怎么回事。这个问题中带有一种语气,一种暗示他并不完全喜欢这个词的语气。

如今,可能还需要进行一些DevOps工作(例如Git、测试和将网站投入生产环境)。“堆栈”是所有这些东西的组合,因此全栈开发者是一个简写,意思是:在网站构建方面,我可以做任何事情。

多年来,一些堆栈已经获得了很高的知名度。你可能听说过LAMP堆栈吗?

Linux Apache MySQL PHP

一个全栈开发者在这个堆栈上意味着你了解Linux、Apache、MySQL和PHP。(抽象地说:服务器软件、Web服务器、数据库、后端语言。)这个网站就是在这个堆栈上运行的,而我独自负责它的开发,所以从某种意义上说,我是一个全栈开发者。

但“松散”是一种仁慈的解释。我对Linux一无所知,除了它运行我的Web服务器。我对Apache也不了解,只是有时会使用HTAccess指令来做一些事情。我可以数出我写过的MySQL查询的数量,我的两只手就够了,而且我只在WordPress的背景下了解PHP。

从这个角度来看,我几乎算不上一个开发者。另一方面,全栈通常是指将前端任务也加入进来,而我在这个领域足够熟练,我的前端技能本身就让我在职业生涯中构建了数十甚至数百个网站。总之,足够“全栈”了。

还有很多其他的堆栈。

LAMP对如何构建前端并没有特别的规定。它来自于一个时代,人们认为你会构建一个后端来输出HTML,这就是你的前端。

JavaScript的盛大到来以来,另一个声名大噪的堆栈是MEAN堆栈。

MongoDB Express Angular Node

完全可以用新的技术来替换堆栈的某些部分。也许你会用Nginx代替Apache,或者在其他情况下使用PostgreSQL代替MySQL,这就是LAMP堆栈。MEAN的显著之处在于它用新技术替换了堆栈的每一层。Node将JavaScript带到了后端,它可以为Web服务器提供动力,处理路由,连接数据源,运行构建流程,编译代码等等。

在这个世界里,一个全栈开发者几乎用JavaScript编写所有内容。难怪越来越多的人认为自己是“全栈”开发者。像JavaScript这样既可以在浏览器中运行,又是重要的前端技术的单一语言,是一种广泛可转移的技能。

MEAN堆栈的各层也可以像LAMP一样轻松地进行替换。也许你会使用Fauna或Firebase这样的数据存储。也许你会使用Vue或React而不是Angular。也许你不需要Express,因为你可以将你的路由交给框架或在客户端进行处理。

Shawn Wang称另一个流行的堆栈为STAR

设计System TypeScript Apollo React

从头到尾都是JavaScript。

值得注意的是,虽然我们仍然将它视为一个堆栈,但我们对服务器和服务器软件的关注越来越少,以至于它们不再是堆栈的关键部分。并非开发者和公司不重视它,而是它比以往更加抽象了。我将无服务器的世界作为典型案例。问题不在于我们的服务器应该使用什么操作系统,而在于哪个平台是最经济高效的运行我们的JavaScript函数的平台。

因此,堆栈随着时间的推移而不断发展。但它不仅包括它们使用的技术,还包括我们甚至将哪些技术视为堆栈的一部分。全栈的含义随着时间的推移而改变。现在,了解JavaScript可以让你获得全栈荣誉徽章。你可以使用客户端网站框架,设计组件并将它们组合在一起构建整个前端。你可以编写Web服务器。你可以编写与API交互的后端代码。你可以进行所有你需要的状态管理。你可以构建构建流程和部署管道。如果你愿意,你甚至可以将CSS引入JavaScript

即使你主要专注于JavaScript,人们的技能集通常比这更广。加上一些HTML和CSS的熟练程度,Git技能,以及一些DevOps爱好,你就是一个真正的网络大牛。你可以做任何事!一个文艺复兴时期的人!七国之主!

我认为这实际上很酷。它真正赋予了开发者力量。虽然值得考虑前端开发的门槛在哪里,但考虑一下这个门槛降低了多少地方,也很有趣。看到前端开发不断发展,几乎吞噬了整个堆栈,这对我来说尤其酷。无所不能的前端开发者,就像那样。

它让我想起了做WordPress网站的感觉有多强大。你可以做很多事情,即使你不深入了解每一个细节。

我的会议朋友接着说:

为什么有些开发者如此自豪地成为全栈开发者?他们中的许多人都会带着自豪的笑容说出来。出于某种原因,他们在介绍自己时,会强调“全栈”。

我猜这正是:自豪感。

自豪感是一件很微妙的事情。当我父母不断告诉我他们为我或者我所做的事情而感到自豪时,这对我来说意义重大。对双方来说都是一件好事。但奇怪的是,自豪感也是七宗罪之一,正如他们所说,它可能是所有其他罪恶的根源。我不想夸大其词,但我认为两者之间存在某种联系。成为一个充满力量,感觉强大和有能力的人是一回事,但炫耀并且意识不到自己能力的边缘是另一回事。

我们都有很多边缘,尤其是在做好工作与仅仅完成工作之间。在当今社会脱颖而出需要做到出色。你的视觉设计技能如何?你是在构建设计系统,还是在实现现有的设计系统?你维护系统多少年了?你对最痛苦的技术债务类型有敏锐的洞察力吗?你如何帮助同事取得成功?你能主持用户测试会议吗?你诊断性能瓶颈的能力如何?如果遇到严重的服务器问题怎么办?你的全栈称号能帮助你理解服务器日志吗?你熟悉无障碍测试吗?你有没有处理过棘手的关系数据和缓慢的查询?

我并不是想说服任何人他们不是全栈开发者,或者他们不配得到那个特殊的荣誉徽章——只是说网络是一个巨大的地方,它有不同的需求和不断变化的堆栈,所有这些都需要不同的技能组合。如果你正在面试一个要求全栈开发者的职位,一定要告诉他们你是多么全栈。