分水岭

两位前端开发人员坐在酒吧里,他们无话可说。

假设前端开发正在发生分化。我感受到了,但这不仅仅是直觉。基于大量开发者情绪的文字表达,我和 Dave Rupert 在 ShopTalk 上进行的采访,以及面对面的讨论,正如他们所说…这是个问题

分化发生在那些自认是(或拥有职位头衔为)前端开发人员,但技能集却截然不同的人群之间。

一方面,一大批开发人员的兴趣、责任和技能集高度围绕 JavaScript 展开。

另一方面,一大批开发人员的兴趣、责任和技能集专注于前端的其他领域,例如 HTML、CSS、设计、交互、模式、可访问性等。

让我们听听那些感受到这种分化的人怎么说。

针对我们发表的帖子,“什么是优秀的前端开发人员?”,Steven Davis 写道

我认为我们需要抛弃这个术语本身。我们应该分成 UX 工程师和 JavaScript 工程师。他们的思维模式不同。大多数人不会同时精通 JavaScript 和 CSS。让 UX 工程师与 UX/设计团队紧密合作,创造出色的设计、交互、原型等,而让 JavaScript 工程师处理所有数据部分。

我已经厌倦了精通 CSS,却不得不被迫学习 JavaScript。我不是程序员!

这种分裂并非悄无声息地发生在我们脚下。是我们自己在要求它。

我在 Vernon Joyce 的文章“前端开发正在经历身份危机吗?”中第一次听到“身份危机”这个词。他指出主要的 JavaScript 框架

像 Angular 这样的框架或像 React 这样的库要求开发人员对编程概念有更深入的了解;这些概念在历史上可能只与后端相关。MVC、函数式编程、高阶函数、提升…如果你之前只接触过 HTML、CSS 和基本的交互式 JavaScript,这些概念很难理解。

这对我的感受来说非常真实。我喜欢使用和阅读现代框架、高级构建工具以及有趣的数据层策略。现在,我享受使用 React 作为 UI 库,使用 Apollo GraphQL 处理数据,使用 Cypress 进行集成测试,以及使用 webpack 作为构建工具。我一直在关注 CSS-in-JS 库。然而,虽然我认为这些东西是前端开发的一部分,但它们感觉与关于可访问性、语义标记、CSS 可能性、UX 考虑因素和 UI 抛光等的文章和讨论相隔甚远。感觉像是两个不同的世界。

当公司发布“前端开发人员”职位时,他们究竟在寻找什么?假设他们真的知道(哈哈),仅仅是“前端开发人员”这个头衔并不能说明问题。更重要的是了解他们需要哪方面的人才。

谁会得到这份工作?谁适合这份工作?这些技能集的薪酬等级是否相同?

我希望解决方案是撰写更具描述性的职位描述。如果对整个行业来说,明确定义和达成共识的职位头衔要求过高(我担心会这样),我们仍然可以使用语言的力量。Corey Ginnivan 说得很好

我希望更多职位描述能够更坦诚和开放 - 让求职者了解你想要实现的目标,具体说明他们将从事的工作内容,但同时将其作为一个双方共同成长的机会。

Job posting for a Front-End Developer that describes the role.
这在 CodePen 对我们来说似乎很有效。我们自己的 Cassidy Williams 说,当 Rachel Smith 将这份描述发送给她以供参考时,她真的很欣赏它。

“前端开发人员”仍然是一个有用的术语。正如 Mina Markham 最近向我们描述的那样,它是指主要与浏览器以及使用浏览器的用户打交道的人。但 Miriam Suzanne 认为这是一个通用的简写

前端开发人员是当细节不重要时的简写。就像在独立摇滚乐队中一样 - 谁知道那是什么,但我经常说。简写很棒,直到你发布职位描述。当细节重要时,我们已经有了更详细的语言 - 我们只需要使用它。

为了更深入地说明这种分化,请考虑 Trey Huffine 的这篇文章,“2018 年前端开发回顾。” 非常棒!它指出了今年的重大时刻,展示了有趣的数据,并对明年可能出现的情况进行了预测。但它完全基于 JavaScript 生态系统。HTML 只在 JavaScript 驱动的静态网站生成器的上下文中提到,CSS 只在 CSS-in-JS 的上下文中提到。这是前端开发,但可能只是其中的一半:JavaScript 部分。如果你读完这份总结后,没有发现任何共鸣,我的建议是

没关系。你仍然可以成为一名前端开发人员。🙏

你可能正在探索布局可能性,构建 CSS 或设计系统,深入研究 UX,构建有趣的动画,深入挖掘可访问性,或其他任何坚实的前端开发工作。足够的工作机会供大家选择。

还记得去年 Frank Chimero 为自己和客户构建了非常棒的网站,但他却对前端开发的发展方向感到 完全困惑吗?概括起来就是

…其他人的工具链从外部来看完全无法理解。即使是入门也是很棘手的。上个月,我必须安装一个包管理器才能安装另一个包管理器。就是在那时,我合上了笔记本电脑,慢慢地退了回来。我们已经远离了我开始时的 CSS Zen Garden 了。

确实走得很远。我可能会说你不必在意。如果你一直并继续以你所知的方式为自身和客户构建网站,万岁!将所有这些新的工具链内容视为完全可选择的协议,它们解决的问题与你的不同。

然而,这种工具链的模糊性甚至困扰着那些必须嵌入其中的人。Dave Rupert 记录了一个真正的错误,它的解决方案深埋其中,以至于能够找到它简直是个奇迹。然后他 感叹道

随着工具链的增长和变得更加复杂,除非你对其非常熟悉,否则很难清楚地了解我们的代码中发生了哪些转换。跟踪输入和输出之间的差异以及代码所经历的过程会令人难以招架。

谁需要这些大型工具链?通常是大型网站。很难确定大型的具体含义,但我敢肯定你对它有很好的直觉。具有讽刺意味的是,虽然大量的工具增加了复杂性,但使用它们的目的是为了应对复杂性。有时感觉就像为了解决蛇的问题而将美洲狮释放到森林中一样。现在你又有了美洲狮的问题。

围绕所有这些最显眼的讨论是由那些在开发这些大型且复杂网站的公司工作的人主导的。Bastian Allgeier 写道

大型团队需要“x”,这就是“x”对所有人来说都是最佳解决方案的原因。我认为这对具有不同要求和对“可维护性”或“可持续性”定义不同的较小团队来说非常有害。我和来自世界各地的许多小型代理商和自由职业者保持联系,有趣的是,他们的工作通常与网络的 VIP 循环完全脱节。

这里究竟发生了什么?发生了什么事?这种分化从何而来?答案对我来说很清楚

JavaScript dun got big.

太大了

  • 它无处不在,遍布网站的前端。主要的 JavaScript 前端框架正在蓬勃发展,并主导着职位发布。这些框架被大量团队使用,为大量网站提供动力。原生 JavaScript 也在快速发展,让许多人感到兴奋。
  • 它也为后端提供动力。你的网站可能是由 Node.js 服务器驱动或涉及 Node.js 服务器。你的构建过程很可能由 JavaScript 驱动。
  • 第三方 JavaScript 为许多前端功能提供动力,从网站的广告网络和分析到像评论、评论和相关内容等完整的功能。
  • 像 Node 驱动的云函数、存储和身份验证等概念,再加上低成本、低成本的可扩展主机,极大地赋能了以 JavaScript 为中心的**前端开发人员**。他们可以使用自己的技能来独立发布整个功能性产品。

如今,拥有强大 JavaScript 技能的前端开发人员拥有强大的力量。我一直称之为无所不能的前端开发人员,我专门做了一个关于它的演讲

在围绕 无服务器 的概念以及预先打包的 UI 框架的所有可能性中,前端开发人员几乎可以构建任何东西,而无需来自其他学科的太多帮助,如果有的话。我发现这令人兴奋和诱人,但也值得暂停。如果你沿着这条道路走下去,你很可能会变得过分依赖框架,从而导致更广泛的问题解决能力下降。我从 Estelle Weyl 那里听到了这种观点,她甚至认为开发人员更像是“框架实现者”,而将“工程师”这个称号保留给工具无关的问题解决者。

这种前端赋能是真实存在的。尤其是在过去几年里,前端开发人员已经变得特别强大。强大到 Michael Scharnagl 说 他已经看到公司将招聘方向转向这一方向

我看到的是,现在许多开发人员完全专注于 JavaScript,我看到一些公司用 JavaScript 开发人员取代了后端开发人员。

有些人可能不理解的是,JavaScript 开发人员本身并不是前端开发人员。JavaScript 开发人员可能不喜欢编写 CSS 或者不关心语义。就像我更不喜欢直接与数据库打交道或配置服务器一样。这没有问题。有问题的是,如果你不想使用某样东西,同时又告诉别人他们所做的事情很简单或没用。更糟糕的是,如果你试图告诉他们所在领域的专家,他们做错了,应该按照你的方式去做。

而 Jay Freestone 尝试解释其中的原因

在过去几年里,我们开始看到前端开发人员角色的重大转变。随着应用程序变得越来越依赖 JavaScript,前端工程师有必要了解和实践传统上属于后端开发人员领域的架构原则,例如 API 设计和数据建模。

即使在我的小型工作中也发生了这种情况。我们正在寻找一名后端 Go 开发人员来帮助我们改进 CodePen 的 Web 服务。当我们没有找到合适的人选时,我们决定改变方向。我们发现我们的技术栈正在演变为对专注于 JavaScript 的前端开发人员非常友好的东西,以至于我们可以轻松地立即让更多前端开发人员投入工作。所以我们就这么做了。

其中可能也存在循环性。我们看到编码学校正在蓬勃发展,并在不到一年的时间内培养出相当有才华的开发人员。这些编码学校的毕业生正在填补劳动力缺口,但更重要的是,正如布拉德·韦斯特福尔告诉我的那样,他们开始领导行业讨论,而不是被动地追随行业讨论。毫无疑问:这些学校正在培养 JavaScript 领域内的开发人员。我见过的每一门编码学校 Web 开发课程都将 HTML/CSS/UI/UX/A11Y 主题视为学生轻松掌握的早期基础知识,或者将这些主题作为 JavaScript 占据课程后半部分时的旁注。你能来给我们学生讲解所有布局概念,而且只用三个小时吗?

当 JavaScript 主导着有关前端的讨论时,就会导致一些开发人员感到力不从心。在罗宾·伦德尔的评论中,“前端开发不是要解决的问题,” 尼尔斯 写道

也许“前端开发人员”这个词需要重新考虑。当我开始工作的时候,前端主要是 HTML、CSS 和一些 JavaScript。一名优秀的开发者需要能够将 Photoshop 布局转换为像素完美的网站。如今,前端远不止于此。如果你想学习前端开发,人们似乎会开始学习 Git、npm、Angular、React、Vue 等等,而所有这些都被称为前端开发。

我是一名设计师,我认为我对 HTML 和 CSS 很擅长,但现在这已经不足以成为一名前端开发人员了

罗宾自己给自己起了个职称,一个对可访问性、CSS 和组件设计过于重视的成年男孩,但他一点也不关心 GraphQL、Rails 或 Redux,不过我确实因为没有关心这些其他东西而感到很糟糕

它也以其他方式让人沮丧。还记得拉拉·申克的 求职面试经历 吗?她符合 90% 的职位要求,但面试却涉及 JavaScript 算法。最终,她没有得到这份工作,因为她没有通过面试。并不是每个人都需要得到他们面试过的每一份工作,但这里的问题是前端开发人员作为一个有效的职位名称并没有传达出它需要传达的信息。

有些日子感觉就像身处另一个世界。

两位“前端 Web 开发人员”可能并肩而立,但他们的技能几乎没有共同点。对我来说,对于一个如此具体且普遍的职位名称来说,这简直是不可思议。我相信“设计师”这个职位名称也已经存在这种情况,但前端 Web 开发人员已经是小众中的小众。

吉娜·安妮 是一位我非常敬佩的前端开发人员和设计师。然而,在她几年前与我一起参加的一个 小组讨论 中,她承认她不把自己归类为前端开发人员。

当我在苹果公司工作时,我刚开始时的职位名称是前端开发人员。我现在会称自己为前端开发人员吗?不会,因为它已经变成了一件截然不同的事情。比如,我学会了 HTML/CSS,但我从未学过 JavaScript,但我懂得如何绕开它。现在——我们正在谈论职位名称——当我听到“前端开发人员”时,我会假设你比我懂得更多。

看起来,当时,缺乏 JavaScript 的经验让吉娜觉得自己没有拥有前端开发人员官方头衔的人技术娴熟。我认为人们拥有吉娜小拇指上的技术都会很幸运,但这只是我个人的想法。最近和吉娜谈话时,她说她仍然刻意回避这个头衔,因为它会导致对她的技能产生错误的假设。

曼迪·迈克尔在她的文章中比任何人都能更好地说明这一点,不会写 JavaScript 的人有价值吗?”

我不理解的是,为什么如果你能“只写 JS”是可以的,但如果你“只写 HTML 和 CSS”就 somehow 不够好。

当互联网上的每个新网站都拥有完美的、语义化的、可访问的 HTML,以及在所有设备和浏览器上都能正常运行的、执行得极其出色的、可访问的 CSS 时,你就可以告诉我这些语言本身没有价值。在此之前,我们需要停止贬低 CSS 和 HTML 的价值。

曼迪利用她的帖子来促进和平。她告诉我们,是的,确实存在分歧,但,两边都没有比另一边更有价值。

另一个令人沮丧的原因是,这种巨大的分歧会导致工艺水平低下。我认为这是导致大多数跨部门嘲笑和挖苦的原因。布拉德·弗罗斯特 指出“全栈开发人员”这个词 有点误导人。

根据我的经验,“全栈开发人员”总是等同于“能够编写前端代码的程序员,因为他们必须编写前端代码,而且编写前端代码‘容易’”。情况永远不会反过来。“全栈开发人员”这个词暗示一名开发人员在前端代码和后端代码方面都同样熟练,但我在我个人的经验中从未见过真正符合这种描述的人。

海顿·皮克林 也表达了类似的观点。当你以这种神话般的较高水平被雇用时,像 HTML 这样的东西就不太可能成为你的强项

… 让全栈开发人员成为所有代码的守门人,最突出的问题之一是 HTML 输出的质量低下。大多数人来自计算机科学背景,文档结构并没有与控制结构一起教授。这不是他们的能力问题,但我们仍然把这项工作交给了他们。

就像配置我们的部署管道和处理我们的数据库扩展可能不是我的工作(如果这项任务落在我身上,我会做得一塌糊涂)一样,也许将 HTML 和 CSS 的工作留给擅长做这件事的人是最合适的。也许更容易说:即使存在分歧,也不能免除我们每个人做好工作。

就像架构和开发人员人体工程学都是我们的工作一样,我们应该将性能、可访问性和用户体验视为我们工作的一部分。如果我们无法很好地完成其中的任何一部分,那就确保有其他人能够完成那部分。没有人被允许做坏事。

值得一提的是,有很多开发人员拥有跨越分歧的技能,并且优雅地做到了。我想到我们自己的莎拉·德拉森,她以出色的动画师、SVG 专家和 Vue 核心团队成员而闻名,她还在微软的 Azure 上工作。名副其实的全栈。

我在最近在 WordCamp US 上发表的另一个演讲中对其中很多主题进行了扩展。

对于工艺水平低下和技能贬值的这些问题,有什么解决办法吗?这些问题是系统性的,根深蒂固,还是表面上的,没有严重的后果?分歧是真实存在的,还是暂时的裂痕?摩擦正在减轻还是加剧?随着时间的推移,前端开发人员的技能范围会扩大还是缩小?让我们继续讨论这个问题!

即使 JavaScript 持续升温,瑞秋·安德鲁告诉我,过去很难填补 CSS 工作坊,但如今大会组织者都在要求举办 CSS 工作坊,因为它们的需求量很大。有一件事是确定的,就像赫拉克利特喜欢说的那样,唯一不变的是变化。

✌️