最近,一位和我参加同一场网络技术会议的开发人员问我这个问题。这位开发人员遇到了许多新朋友,他们都以“全栈开发者”的身份介绍自己,有点像《办公室》里“鲍勃·万斯,万斯制冷”那样,只是变成了“托尼·弗兰克,全栈开发者”。
我猜问这个问题的开发人员(从这篇文章的标题可以看出)已经了解了人们所指的“全栈开发者”的基本概念,但想知道这到底是怎么回事。这个问题中带有一种语气,一种暗示他并不完全喜欢这个词的语气。
最近,一位和我参加同一场网络技术会议的开发人员问我这个问题。这位开发人员遇到了许多新朋友,他们都以“全栈开发者”的身份介绍自己,有点像《办公室》里“鲍勃·万斯,万斯制冷”那样,只是变成了“托尼·弗兰克,全栈开发者”。
我猜问这个问题的开发人员(从这篇文章的标题可以看出)已经了解了人们所指的“全栈开发者”的基本概念,但想知道这到底是怎么回事。这个问题中带有一种语气,一种暗示他并不完全喜欢这个词的语气。
多年来,一些堆栈已经获得了很高的知名度。你可能听说过LAMP堆栈吗?
一个全栈开发者在这个堆栈上意味着你了解Linux、Apache、MySQL和PHP。(抽象地说:服务器软件、Web服务器、数据库、后端语言。)这个网站就是在这个堆栈上运行的,而我独自负责它的开发,所以从某种意义上说,我是一个全栈开发者。
但“松散”是一种仁慈的解释。我对Linux一无所知,除了它运行我的Web服务器。我对Apache也不了解,只是有时会使用HTAccess指令来做一些事情。我可以数出我写过的MySQL查询的数量,我的两只手就够了,而且我只在WordPress的背景下了解PHP。
从这个角度来看,我几乎算不上一个开发者。另一方面,全栈通常是指将前端任务也加入进来,而我在这个领域足够熟练,我的前端技能本身就让我在职业生涯中构建了数十甚至数百个网站。总之,足够“全栈”了。
还有很多其他的堆栈。
LAMP对如何构建前端并没有特别的规定。它来自于一个时代,人们认为你会构建一个后端来输出HTML,这就是你的前端。
自JavaScript的盛大到来以来,另一个声名大噪的堆栈是MEAN堆栈。
完全可以用新的技术来替换堆栈的某些部分。也许你会用Nginx代替Apache,或者在其他情况下使用PostgreSQL代替MySQL,这就是LAMP堆栈。MEAN的显著之处在于它用新技术替换了堆栈的每一层。Node将JavaScript带到了后端,它可以为Web服务器提供动力,处理路由,连接数据源,运行构建流程,编译代码等等。
在这个世界里,一个全栈开发者几乎用JavaScript编写所有内容。难怪越来越多的人认为自己是“全栈”开发者。像JavaScript这样既可以在浏览器中运行,又是重要的前端技术的单一语言,是一种广泛可转移的技能。
MEAN堆栈的各层也可以像LAMP一样轻松地进行替换。也许你会使用Fauna或Firebase这样的数据存储。也许你会使用Vue或React而不是Angular。也许你不需要Express,因为你可以将你的路由交给框架或在客户端进行处理。
Shawn Wang称另一个流行的堆栈为STAR
从头到尾都是JavaScript。
值得注意的是,虽然我们仍然将它视为一个堆栈,但我们对服务器和服务器软件的关注越来越少,以至于它们不再是堆栈的关键部分。并非开发者和公司不重视它,而是它比以往更加抽象了。我将无服务器的世界作为典型案例。问题不在于我们的服务器应该使用什么操作系统,而在于哪个平台是最经济高效的运行我们的JavaScript函数的平台。
因此,堆栈随着时间的推移而不断发展。但它不仅包括它们使用的技术,还包括我们甚至将哪些技术视为堆栈的一部分。全栈的含义随着时间的推移而改变。现在,了解JavaScript可以让你获得全栈荣誉徽章。你可以使用客户端网站框架,设计组件并将它们组合在一起构建整个前端。你可以编写Web服务器。你可以编写与API交互的后端代码。你可以进行所有你需要的状态管理。你可以构建构建流程和部署管道。如果你愿意,你甚至可以将CSS引入JavaScript。
即使你主要专注于JavaScript,人们的技能集通常比这更广。加上一些HTML和CSS的熟练程度,Git技能,以及一些DevOps爱好,你就是一个真正的网络大牛。你可以做任何事!一个文艺复兴时期的人!七国之主!
我认为这实际上很酷。它真正赋予了开发者力量。虽然值得考虑前端开发的门槛在哪里,但考虑一下这个门槛降低了多少地方,也很有趣。看到前端开发不断发展,几乎吞噬了整个堆栈,这对我来说尤其酷。无所不能的前端开发者,就像那样。
它让我想起了做WordPress网站的感觉有多强大。你可以做很多事情,即使你不深入了解每一个细节。
我的会议朋友接着说:
为什么有些开发者如此自豪地成为全栈开发者?他们中的许多人都会带着自豪的笑容说出来。出于某种原因,他们在介绍自己时,会强调“全栈”。
我猜这正是:自豪感。
自豪感是一件很微妙的事情。当我父母不断告诉我他们为我或者我所做的事情而感到自豪时,这对我来说意义重大。对双方来说都是一件好事。但奇怪的是,自豪感也是七宗罪之一,正如他们所说,它可能是所有其他罪恶的根源。我不想夸大其词,但我认为两者之间存在某种联系。成为一个充满力量,感觉强大和有能力的人是一回事,但炫耀并且意识不到自己能力的边缘是另一回事。
我们都有很多边缘,尤其是在做好工作与仅仅完成工作之间。在当今社会脱颖而出需要做到出色。你的视觉设计技能如何?你是在构建设计系统,还是在实现现有的设计系统?你维护系统多少年了?你对最痛苦的技术债务类型有敏锐的洞察力吗?你如何帮助同事取得成功?你能主持用户测试会议吗?你诊断性能瓶颈的能力如何?如果遇到严重的服务器问题怎么办?你的全栈称号能帮助你理解服务器日志吗?你熟悉无障碍测试吗?你有没有处理过棘手的关系数据和缓慢的查询?
我并不是想说服任何人他们不是全栈开发者,或者他们不配得到那个特殊的荣誉徽章——只是说网络是一个巨大的地方,它有不同的需求和不断变化的堆栈,所有这些都需要不同的技能组合。如果你正在面试一个要求全栈开发者的职位,一定要告诉他们你是多么全栈。
我想我也是一个全栈开发者……但由于在一些特定主题上的专业知识不足,我无法说出来。我在HTML、Sass、jQuery等基础知识方面非常擅长,在使用Symfony、MySql的PHP方面也很擅长,但我对React一无所知。
我很想听听你对使用“软件工程师”和“Web开发者”的看法。我看到很多招聘信息现在都使用“工程师”这个词。
我对“全栈”这个头衔的担忧更多的是与许多公司对它的期望有关——他们可以雇佣一个人来做所有事情。我担心这会为Web开发者,尤其是新入行的Web开发者设置一个非常令人担忧的标准。我在这里更深入地探讨了这种担忧。
说得好,没有过于偏向任何一方。理应如此。
对我个人来说,我认为有两点非常重要,即所谓的“软技能”,这些技能不是指在命名堆栈中积累的知识或经验,而是指进行面试的人的胜任程度(我们的知识在测试中体现)。
感谢你的文章。
有“全栈”这个词,然后还有“全栈独角兽”。区别在于,有些人技术上可以做所有事,但没有一项特别精通(或者只有一项精通),而另一些人则可以在特定技术栈上精通所有事。我讨厌很多高薪工作,除非你自称是“独角兽”,否则根本不给你机会,而实际上,真正能做到的人并不多。将工作分成前端和后端应该是理所当然的。在我看来,没有人应该被要求精通所有东西。“全栈”的傲慢应该结束,因为我还没遇到过真正精通所有领域的全栈开发者(虽然我知道有些人存在,只是非常罕见)。
好文章。职位只是职位。你是什么样的人(希望如此)不应该取决于你的职位头衔。
当我刚入行的时候,我认为“全栈”指的是经验丰富的开发者,可以在应用的各个方面都胜任。
随着时间的推移,我意识到“全栈”更多的是一种偏好表达,而不是其他。我遇到过的所有全栈开发者,都只是选择了拓宽他们的技能范围,而不是深挖某个领域。这没什么不好,只是跟“前端”开发人员可能习惯的模式不同。
有趣的是,我听说很多全栈开发者转行的人说,他们只是决定给自己贴上“全栈”的标签,这在心理上对他们产生了巨大的影响。当你称自己为“全栈”时,你就有效地跳出了自己的局限,“后端”变得更容易接近。
我现在所在的公司(主要是全栈)正在寻找“初级全栈开发者”。
我上个月爱上了编程,我搜索了一些东西,然后看到了CSS-tricks页面,写了我的第一个程序,是一个导航栏。这个网站太棒了,你们做得很好。这个网站帮助我学了很多编程知识。我每天都阅读文章,这增加了我的知识储备。我在学习了HTML和CSS之后,就发布了我的网站。
而CSS-TRICKS在我的学习中贡献了90%。现在它帮助我提升了我的知识水平。
谢谢Chris和CSS-TRICKS
对我来说,全栈意味着了解从上到下的标准和一些技术,从Web服务器(代理、缓存)到API(SQL、NoSQL、REST),以及带有DOM、HTML、CSS的浏览器……当然还有JS,以及Lua、Python、Go……最重要的是HTTP(请求、响应头:协商、缓存、安全、报告、策略、cookie……)、加密和身份验证(SSL、RSA、JWT)。这只是一个快速列表。
很难定义自己是什么。我想自称是前端开发者,但我可以写Node,做一些DevOps,搭建服务器等等。有时候我也做设计,阅读关于设计和所有我遇到的东西的信息。
Web世界很大,你肯定需要了解很多小东西才能开始。即使是所谓的“前端开发者”有时也不是JavaScript老手,但抽象让我们能够掌控一切。之前我买了一个关于原生NodeJS的教程,因为我读过一篇关于Node的文章,我什么都不懂,但我写过Node。我认为我学习的是库,而不是Node本身。这是否归结于了解基础知识,或者你对所声称了解的知识有多么深入?我不确定。但我只是头疼得不行,想要找到一个来定义我的“名字”。我到底是工程师还是开发者,甚至设计师吗?
当我写C#时,我觉得也存在同样的问题——.NET开发者、C#开发者、Windows开发者、微软开发者。即使在大型公司,似乎一切都井井有条,给人们贴标签也可能很困难。
我认为知识是分散的,每个人都要学习很多相关的东西才能完成工作。但你对基础知识了解得有多深入,或者你对高级知识了解得有多深。每次我试图根据我的工作来解释我是谁的时候,我认为我随时可以做前端工作,因为我发现自己90%的时间都在做前端工作,但在我刚入职的第一周,当我需要后端开发人员,而他不在的时候,我自己写了Node。我认为我就是一个Web开发者,在云端。
是的,我听说过有人以自己是全栈开发者而自豪。是的,看到他们在工作中很酷。我正在努力成为全栈开发者(MERN)。
都是一些词语而已。只是花哨的称号,“废话宾果”或者营销口号,很不具体。所以如果你得到一个全栈开发的职位,不要惊讶你会遇到你不喜欢的任务,或者作为一个雇主,你的员工可能不是你期望的那样精通你所期望的领域。
我建议跳过职位头衔,直接说你做什么,或者你想做什么。例如:“我构建网站。”然后根据需要详细说明。听起来很简单吧?也许在其他网站构建人员的耳中不太花哨,但他们为什么要在乎呢?而且它总是比所有那些头衔更准确。
如果你必须与那些用头衔思考的人打交道,那就随机使用那些头衔,也许发明一些听起来更花哨的新头衔。对那些人来说,这会留下最深刻的印象。;
所以,今天我是一名“多栈工程师”,明天是一名“全栈架构师”,后天是一名“栈设计教皇”。
从长远来看,在我们用随机的职位头衔淹没整个领域之后,它们最终会失去所有的效果,我们可以重新回到真正讨论我们正在做的事情。;
所以……你称Linux - Nginx/OpenResty - Tarantool - Fengari技术栈是什么?“潮人栈”?
我爱上了这个网站的设计。
全栈开发者确实存在,但雇主应该明白,他们得到的是一个“万金油”,而不是“大师”。
有趣文章,非常感谢
我从未真正把自己归类为全栈开发者,因为我知道我有很多东西不懂。但我同时也意识到,与很多人相比,我的专业知识范围很广。不过,这取决于技术栈、任务、需要完成的工作。而且我在UX和前端比在后端和服务器更熟练,所以……
看你能走到哪里,积累经验,并在需要的时候请教专家。
而且,Web开发中的职位头衔只有一年的价值……技术发展太快了
我的一点想法
这就像问“在快车道加油站做汽车维修工作,能让你成为汽车修理工吗?”
汽车修理工吗?
一个真正的全栈开发者可以从一个空箱子开始,创建一个完全功能的、相关的、符合时代潮流的Web应用程序。这意味着安装和加固操作系统(例如Linux服务器);安装和配置HTTP服务,包括解释器、缓存等(例如Apache、PHP、Memcache等);安装和配置数据库服务器(MySQL或其他);编码和维护后端,包括SQL;设计和编码前端(HTML、JS、CSS等)。这听起来可能很死板,但最终,有些人会知道其中的区别。你女朋友/男朋友的父亲可能不知道其中的区别,但未来的同事、客户、老板等就不一样了。