前端开发是否存在身份危机?
图片来源:Adobe Stock
我们所知的前端开发是否仍然存在?还是它已经演变成我们不再认识的样子?如同自然界的进化一样,“前端”的演变也导致了几种截然不同的风格——在我看来——一场身份危机。
前端开发人员到底是什么?
传统意义上,前端可以定义为应用程序的用户界面 (UI),即面向客户端的部分。然而,近年来,这一定义似乎有所转变,因为雇主希望你拥有更丰富的经验、掌握更多编程语言、能够部署到更多平台,并且通常拥有“相关的计算机科学或工程学位”。
像 Angular 这样的框架或像 React 这样的库要求开发人员对编程概念有更深入的理解;这些概念过去可能只与后端相关。MVC、函数式编程、高阶函数、提升……如果你的背景是 HTML、CSS 和基本的交互式 JavaScript,那么这些概念很难掌握。
这给开发者带来了不公平的压力。他们经常会辞职,或者觉得只懂 CSS 和 HTML 毫无价值。诚然,技术在不断发展,或许仅仅了解 CSS 和 HTML 已经不够了;但我们必须停下来问问自己,成为一名前端开发者究竟意味着什么。
作为一名设计师,我经常觉得自己的技术知识不够用。在一次前端职位的技术面试中,当我被问到什么是 SSL 证书时,我回答“它可以保护 HTTP 请求和响应”似乎不够充分。别误会,这些主题很重要,但这些技术细节真的和这个职位相关吗?
从现在开始,我将偶尔将前端开发称为 FED。
问题
这场身份危机由各方共同引发:组织机构、招聘人员和开发人员。由于职责层级各异、薪资水平波动,以及行业内缺乏标准化的职位规范,该职位的定位变得模糊不清。
纵观就业市场,你可能会发现,很多公司都希望员工能成为独角兽,身兼数职。招聘人员也可能对职位抱有不切实际的期望,而这些职位通常由人力资源部门提供,而人力资源部门对招聘的要求却知之甚少。最后,开发人员自身也加剧了这个问题:他们接受技术面试,即使得到了这份工作,我们也会给自己施加不必要的压力,去学习缺失的技能,而不是去挑战招聘人员和公司,让他们了解前端开发人员的真正意义。
比较一下 LinkedIn 上以下两个职位,标题均为“前端开发人员”。这两个职位的职责截然不同:一方面,开发人员需要了解 Flux 架构和单元测试;另一方面,开发人员则需要了解 Java 和 MongoDB。
比较 LinkedIn 上的两个职位,均标记为“前端开发人员”
这两个角色有很大不同;并且显然缺乏明确的范围或角色。
为什么标准化角色很重要
- 平衡薪酬等级:前端工程师不会获得FED应得的薪酬,反之亦然。
- 减轻压力;使开发人员可以专注于工程产品或创建丰富的交互式 Web 体验
- 它创造了专家;真正擅长 CSS、HTML 和交互式 JavaScript 的开发人员
- 减轻求职过程中的技术面试和职位要求压力
关注点分离
为了定义角色,我们必须剔除所有可能超出FED职责范围的角色。例如,Web 开发人员的角色不应与FED角色混淆,因为一个负责构建应用程序,另一个负责构建体验。其他示例包括前端设计师、Web 工程师、后端 Web 开发人员等。
为了区分这些角色,我们可以考虑四个标准:
开发人员的画布
如果我们假设前端的主要环境是浏览器——那么 PHP 或 C# 开发人员又该处于哪个阶段呢?PHP 就是一个很好的例子;没错,它运行在服务器上,但最终还是会将数据传递给 UI(也就是浏览器)。JavaScript 和 PHP 都是不需要编译的脚本语言。那么,PHP 开发人员应该被归类为前端开发人员还是后端开发人员呢?
像 Github 的 Electron 这样的工具允许开发者使用 HTML、CSS 和 JavaScript 构建跨平台桌面应用。类似地,像 Adobe Phonegap 这样的工具可以将包含 JavaScript 的 HTML 页面编译成原生移动应用。这实际上使中级前端开发者能够构建和发布移动或桌面应用。那么,应用开发是否可以纳入前端开发者的职责范围呢?
从 JQuery 到 Node,后端和前端之间的界限变得模糊,从那时起,人们通常要求前端开发人员了解 Node 及其配套的软件包,例如 Express。这些显然是后端技术,那么我们为什么要将它们添加到FED 的职位规范中呢?
在标准化角色之前,我们必须就前端开发人员的职责范围达成一致。在我看来,这仅限于应用程序的 UI,并且主要在浏览器中运行——该角色不应该关心构建任何服务器端功能。
所选语言
第二个需要考虑的标准可能是开发人员选择的编程语言。用 Python 和 C# 等语言构建网站基础设施是可能的,这又引出了一个与之前相同的问题——Python、PHP 和 C# 可以被视为前端语言吗?
下面的示例要求开发人员具备 PHP 技能,而另一个示例则要求开发人员了解 TypeScript。
比较 LinkedIn 上两个职位所需的技能,均标记为“前端开发人员”
JavaScript 现在可以完成 PHP 和 Python 的大部分功能;像 TensorFlow 这样的流行库也已向 JS 开发者开放。另一个例子是 TypeScript(如上所述),它将静态类型从 Java 等语言引入到 JavaScript 中。那么,我们该如何定义前端语言或框架呢?
如果我们排除 PHP、C#、Java 等,那么哪些框架或库应该成为该角色范围的一部分?例如,JQuery 是构建 Web 交互性的完美工具,大多数前端开发人员可能会认为学习 Vue 更好。
另一方面,像 React 这样的库要求开发人员学习一些传统上与前端无关的概念:设置 webpack 和编译、部署流程、理解高阶组件,甚至可能为了好玩而加入使用 Redux 进行状态管理。这样的概念列表很快就会增长;尽管所有这些都使用 JavaScript 作为语言,但随之而来的理解往往截然不同。
很多后端开发者告诉我,他们觉得 CSS 很难,我完全同意——CSS 确实很难!我们原谅后端开发者不懂 CSS 和交互式 JavaScript;那么,为什么还要要求前端开发者了解后端技术呢?
我们最终应该问的问题是,前端开发人员应该处理函数式组件还是数据驱动组件。在我看来,该职位的语言选择应该仅限于 HTML、CSS 和 JavaScript(仅限于前端库),主要用于构建交互式组件或 Web 项目,并在必要时从服务中获取数据。
技能水平
前端开发人员何时转型为全栈开发人员或 Web 开发人员?
如果考虑到画布和所选语言,区分起来就变得非常容易。全栈开发人员是指同时了解前端和后端(即处理多个画布)的开发人员。Web开发人员是指能够使用多种框架、库和语言构建富数据驱动应用程序的开发人员。大多数FED很可能会从中级FED角色晋升为高级全栈工程师等角色。
那么,从我们目前的角色定义来看,高级前端开发人员是否可能成为呢?我的答案是肯定的。只要看看Awwwards上任何一个获奖网站,你就会很快同意,这种级别的交互需要对 DOM 以及通过 JavaScript 操作 DOM 有非常深入的理解。FED也有机会专注于学习构建交互功能的库(例如 HTML Canvas、WebGL),而不是学习那些让他们远离最初成为 FED 的后端库或框架。
其他专业
最后要考虑的因素是前端职位带来的各种额外要求。我之所以认为这些要求是“负担”,主要是因为这些要求经常被临时性地塞进去。
MongoDB 就是一个很好的例子(这是前面提到的清单中的一项要求)。以前,数据库管理或架构本身就是一个职位,那么为什么现在我们要求财务执行官 (FED)除了掌握这些技能之外,还要掌握其他技能呢?
另一个例子是之前截图中列出的图形设计要求。我个人非常提倡开发人员了解设计,但期望他们在其他FED技能之外再掌握一项设计技能,会让他们的角色变成其他角色(也许是前端设计师或全栈设计师)。
当我们考虑到掌握所有这些知识所带来的额外责任时,我们必须扪心自问,将这些知识融入到团队中是否只会让情况变得更加复杂。如果今天我决定将 React 引入我的组织,那么他们选择接替我的开发人员也必须了解 React。如果新的开发人员决定将 Redux 添加到团队中……你就能理解接下来会发生什么。更糟糕的是,他们会继续招聘前端开发人员,无论他们使用什么技术,因为这是部门所需的职位。
能力越大,责任越大,最终还是要由我们开发者来负责任地使用技术。请考虑技术栈变更对运维的影响,并理解这可能会使现有问题持续存在。
定义角色
现在我们已经了解了前端开发人员的含义,我们可以写出以下职位描述:
前端开发人员负责使用 HTML、CSS 和 JavaScript 为 Web 构建交互式用户界面或体验。
简单来说——FED不需要理解函数式编程或 SSL 在微观技术层面的工作原理。这并不是说他们不应该学习这些概念;但至少不应该被要求学习。
我认为,通过帮助下一代前端开发人员理解FED的含义,我们可以共同解决开发社区中围绕角色的困惑,这一点很重要。
本文纯粹基于我的个人经历和偏见——我很乐意在评论中听到您的观点。
弗农·乔伊斯 (Vernon Joyce),一位全栈独角兽。