现代 Web 开发中的超专业化困境 - Rant

这不仅是我自己的困境,而且在很多方面,我感觉我们已经倒退了,作为一个行业,我们把很多事情视为理所当然。

我真的非常怀念与通才和非常精通某些技术或程序的人交谈的日子。如今,解决问题的讨论往往归结为“是的,这里是 x,那里是 y”——很少进行观察、同行编程、实验、持续改进和突破现有可实现的界限,我担心零利率政策时期的 VC 资金在这种构建文化中发挥了非常重要的作用。

最重要的是,随着人工智能领域的发展,我怀疑我们是否再也不会回到那个地方,部分原因是某个领域的人才过剩,但也有金钱因素,Web 2.0 的功能几乎齐全,我们就快到了。

介绍

如今,炒作和观点似乎成了新的王者——或许这只是社交媒体和到处宣扬的假大师所形成的泡沫。

在当今的技术环境中,开发人员和工程师常常感觉被推入越来越狭窄的专业领域,特别是随着云服务及其大量包装器的激增。

我到处都观察到了这种情况——从科技推特上的数百条个人帖子和回复,到本世纪后半叶美国和欧盟大多数相关网站上的数百条招聘信息。

在这篇文章中,我将重点讨论我最近注意到的一个反复出现的行业综合症——过度专业化。

请允许我明确表示:我欣赏并承认,对超专业化角色的需求永远存在,这就是行业的运作方式。

行业越来越倾向于这种高度专业化,公司寻求的开发人员不仅要熟悉 AWS 等云平台,还要熟悉基于这些平台的特定服务和框架。我怀疑这主要是基于炒作,随着技术 Twitter 的兴起而兴起。

这种专业化的趋势有时就像一把双刃剑:一方面,它为深厚的专业知识创造了机会;另一方面,它可能会将开发人员困在孤立的技能组合中,使其难以适应科技世界的更广泛变化。

举例来说,目前云平台正在大力推行“全栈”开发,开发人员不仅需要了解编程和软件架构的核心概念,还需要了解 AWS Lambda、S3、DynamoDB 和许多其他服务的复杂性。

似乎这还不够,对于抽象这些服务的框架和工具的熟练程度的需求也在不断增长 - 例如无服务器框架、AWS Amplify 和 CDK(云开发工具包)等包装器。

这种高度专业化有时会让人感到难以承受,因为“开发人员”和“云架构师”之间的界限变得模糊,迫使开发人员不断追求新的认证和技能。

让我们讨论一个真实的例子——React 和 Next.js 的案例

更具体地说,我选择了两种流行的技术来构建复杂的 Web 应用程序:Next.js 和 React。

在这种趋势下,仍有一些技术可以连接传统的开发范式和现代的以云为中心的方法。Next.js 就是这样一种技术,它是一个基于 React 构建的框架,可以简化现代 Web 应用程序的开发,同时还提供服务器端渲染、静态站点生成和 API 路由等强大功能。

对于精通 React 的开发人员来说,过渡到 Next.js 可以提供大量可转移的知识,并且新概念的学习曲线适中。

React 和 Next.js 之间的可转移知识

使 React 开发人员精通的很大一部分内容仍然直接适用于 Next.js。组件、状态管理、JSX 语法以及“useState”和“useEffect”等钩子等核心概念是这两个框架的基础。

这些基础知识大约占有效使用 Next.js 所需知识的 70% 到 80%。

例如,当您迁移到 Next.js 时,在 React 中构建组件、传递 props 和管理状态的方式不会改变。这种连续性为开发人员提供了一条舒适的过渡路径,减少了采用 Next.js 时的初始摩擦。

React 核心功能

  • 核心 React 概念:组件:类组件和功能组件,以及 useState、useEffect 等钩子。Props 和 State:处理组件输入和内部状态。组件生命周期:了解组件如何挂载、更新和卸载。事件处理:使用用户事件和处理程序。JSX 语法:编写 UI 组件的语法。
  • 状态管理:上下文 API:用于管理整个应用程序的全局状态。第三方状态库:Redux、MobX 或 Zustand 等库可在两种环境中使用。
  • 样式:CSS、SCSS、CSS 模块:样式技术保持不变。CSS-in-JS 库:styled-components、Emotion 等库。
  • 组件库:任何基于 React 的 UI 组件库(例如 Material-UI、Ant Design)都可以在 React 和 Next.js 中使用。
  • 开发工具:DevTools:React 开发者工具、Redux DevTools 和其他调试工具。测试:使用 Jest 和 React 测试库进行单元测试。
  • Next.js 特有的功能

  • 基于文件的路由
  • 服务器端渲染 (SSR) 和静态站点生成 (SSG)
  • API 路由
  • 图像优化
  • 内置 CSS 和 JavaScript 优化
  • 国际化(i18n)
  • 中间件和边缘功能
  • 部署注意事项:了解部署模型,包括使用 Vercel(与 Next.js 由同一团队创建的平台)、无服务器功能和其他托管注意事项。
  • 这些 Next.js 特定的功能代表了 React 开发人员需要获取的知识库的剩余 20% 到 30%。

    虽然这看起来似乎有一个陡峭的学习曲线,但对于 Next.js 提供的显著性能和开发速度优势而言,这只是一项相对较小的投资。

    有更好的选择吗?

    尽管 Next.js 提供了一种方便的方式来处理路由、SSR、SSG 和 API 路由,但它也带有某些设计决策和抽象,可能并不符合每个开发人员的偏好。一些开发人员可能会发现围绕数据获取方法的固执己见的结构或与 Vercel 集成以进行部署的限制。他们可能更喜欢对服务器设置、构建流程或数据层进行更多的控制,而 Next.js 则将其抽象化。

    对于那些寻求具有更多灵活性或不同范式的类似全栈体验的人来说,探索基于 Rust 的替代方案可能会很有吸引力:

  • Leptos:基于 Rust 的 Web 框架,可作为 Next.js 的替代方案,提供基于组件的架构并利用 WebAssembly 提高前端性能。它提供现代 Web 开发功能,如反应式编程、SSR 和 SSG,所有这些都在 Rust 生态系统中。Leptos 支持全栈 Rust 开发,允许开发人员用 Rust 编写客户端和服务器端代码,从而受益于其强大的类型系统、性能和安全保障。
  • Yew:一个现代 Rust 框架,用于使用 WebAssembly 创建多线程前端 Web 应用程序。它提供类似于 React 的基于组件的模型,允许开发人员编写高性能且安全的 Web 应用程序。Yew 的强类型系统和 Rust 对内存安全的保证使其成为构建可靠应用程序的理想选择。
  • Actix Web:对于那些希望更好地控制服务器端方面的人来说,Actix Web 是一个功能强大的基于 Actor 的 Rust 框架,用于构建 Web 服务。它提供高性能和灵活性,允许开发人员构建从简单 API 到复杂的多线程 Web 服务器的所有内容。Actix Web 可以与 Yew 等前端框架结合使用,以构建全栈 Rust 应用程序。
  • 如你所见,有一些不错的替代方案,而且在我看来,它们至少在服务器端比任何花哨的 JS/React 包装器做得更好。

    框架高度专业化的利与弊

    超专业化的趋势,尤其是框架和工具,有其自身的优点和缺点。

    优点

  • 职业优势:对特定技术有深入了解的开发人员对于寻求专业技能的雇主来说非常有价值。例如,在 Next.js 等特定框架或具有特定工具的云平台上投入大量资金的公司通常会寻找能够立即上手的专家。
  • 更高的薪水:随着开发人员成为特定技术的首选资源,专业知识可以带来更高的薪水和更清晰的职业发展轨迹。
  • 高效解决问题:专家更有可能了解他们所擅长的框架的最佳实践和细微差别。
  • 缺点

  • 过时的风险:科技行业的框架和工具发展迅速。如果某项技术变得不再那么重要,那么过于专注于某项特定技术可能会让开发人员面临风险。
  • 职业缺乏灵活性:过于专注于特定框架的开发人员可能会发现很难转换到需要更广泛技能的不同角色或行业。
  • 狭隘的视角:过度专业化会限制开发人员应用更广泛的软件工程原理和适应不同项目需求的能力。
  • 创新减少:过于狭隘地关注某一特定技术可能会抑制创造力和创新,因为开发人员可能不太愿意探索新想法或质疑既定的方法。
  • 过度专业化:创造力杀手?

    除了实际考虑之外,过度专业化可能会扼杀创造力和创新。当开发人员过于狭隘地关注特定技术或框架时,他们可能不太愿意探索新想法或质疑既定方法。这种狭隘的视野可能会限制他们跳出固有思维模式并促进突破性创新的能力。

    发表在《科学》杂志上的一项研究发现,跨职能经验而非深度专业化与技术密集型行业的创新绩效呈正相关。这表明,接触更广泛的技术和方法可以培养创造性思维和解决问题的能力。

    此外,一份报告强调,过度专业化可能导致认知固着,即个人过于习惯于特定的思维和工作方式,以至于抵制变革和新想法。这种现象在医学和学术等各个领域都有发现。

    报告表明,虽然专业知识很有价值,但在解决复杂问题时,兼顾通才技能往往能取得更好的结果。在软件开发中,这意味着虽然彻底了解 Next.js 之类的框架是有益的,但保持学习其他技术和方法的开放态度也同样重要。

    结论

    在上面的例子中,我们看到了像 Next.js 这样具有大量抽象的简单框架如何为 React 开发人员提供了一条无需从头开始扩展技能的良好途径,以及仅仅这个决定就可能让你陷入困境——并不是说它会。

    肯定有新知识需要掌握,与 React 的显著重叠意味着开发人员可以利用他们现有的专业知识并逐步学习新概念。

    对专业知识的追求,尤其是云服务领域的知识,并非毫无价值。

    然而——我再怎么强调也不为过——对于工程师和开发人员来说,保持平衡非常重要,确保他们保持多功能性和适应性。

    过度专业化可以带来职业优势,并带来深厚的技术专长,但也带来风险,包括职业缺乏灵活性和快速过时的可能性。开发人员和公司都必须仔细权衡这些利弊。

    对于开发人员来说,在专业化的同时培养广泛的技能可以为创造力和职业发展开辟新的途径。

    对于组织而言,培养一种重视多元化技能和观点的文化可以打造更具创新性和韧性的团队。

    随着行业的不断发展,驾驭和整合新框架和技术的能力仍将是一项关键资产,确保开发人员能够适应不断变化的技术格局。

    不要忘记,触摸一下草地(Linux 的终端有时不会咬人),你以后就会感谢你自己。

    ⚠️ 免责声明

    我写这篇文章是为了回应去年大规模裁员及其后果之后我所看到的情况,因为我了解到很多优秀人才只是因为流行语而被忽略,而这些人才本来可以成功(根据过去的绩效指标、已完成的项目和相关经验)