现代 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 核心功能
Next.js 特有的功能
这些 Next.js 特定的功能代表了 React 开发人员需要获取的知识库的剩余 20% 到 30%。
虽然这看起来似乎有一个陡峭的学习曲线,但对于 Next.js 提供的显著性能和开发速度优势而言,这只是一项相对较小的投资。
有更好的选择吗?
尽管 Next.js 提供了一种方便的方式来处理路由、SSR、SSG 和 API 路由,但它也带有某些设计决策和抽象,可能并不符合每个开发人员的偏好。一些开发人员可能会发现围绕数据获取方法的固执己见的结构或与 Vercel 集成以进行部署的限制。他们可能更喜欢对服务器设置、构建流程或数据层进行更多的控制,而 Next.js 则将其抽象化。
对于那些寻求具有更多灵活性或不同范式的类似全栈体验的人来说,探索基于 Rust 的替代方案可能会很有吸引力:
如你所见,有一些不错的替代方案,而且在我看来,它们至少在服务器端比任何花哨的 JS/React 包装器做得更好。
框架高度专业化的利与弊
超专业化的趋势,尤其是框架和工具,有其自身的优点和缺点。
优点
缺点
过度专业化:创造力杀手?
除了实际考虑之外,过度专业化可能会扼杀创造力和创新。当开发人员过于狭隘地关注特定技术或框架时,他们可能不太愿意探索新想法或质疑既定方法。这种狭隘的视野可能会限制他们跳出固有思维模式并促进突破性创新的能力。
发表在《科学》杂志上的一项研究发现,跨职能经验而非深度专业化与技术密集型行业的创新绩效呈正相关。这表明,接触更广泛的技术和方法可以培养创造性思维和解决问题的能力。
此外,一份报告强调,过度专业化可能导致认知固着,即个人过于习惯于特定的思维和工作方式,以至于抵制变革和新想法。这种现象在医学和学术等各个领域都有发现。
报告表明,虽然专业知识很有价值,但在解决复杂问题时,兼顾通才技能往往能取得更好的结果。在软件开发中,这意味着虽然彻底了解 Next.js 之类的框架是有益的,但保持学习其他技术和方法的开放态度也同样重要。
结论
在上面的例子中,我们看到了像 Next.js 这样具有大量抽象的简单框架如何为 React 开发人员提供了一条无需从头开始扩展技能的良好途径,以及仅仅这个决定就可能让你陷入困境——并不是说它会。
肯定有新知识需要掌握,与 React 的显著重叠意味着开发人员可以利用他们现有的专业知识并逐步学习新概念。
对专业知识的追求,尤其是云服务领域的知识,并非毫无价值。
然而——我再怎么强调也不为过——对于工程师和开发人员来说,保持平衡非常重要,确保他们保持多功能性和适应性。
过度专业化可以带来职业优势,并带来深厚的技术专长,但也带来风险,包括职业缺乏灵活性和快速过时的可能性。开发人员和公司都必须仔细权衡这些利弊。
对于开发人员来说,在专业化的同时培养广泛的技能可以为创造力和职业发展开辟新的途径。
对于组织而言,培养一种重视多元化技能和观点的文化可以打造更具创新性和韧性的团队。
随着行业的不断发展,驾驭和整合新框架和技术的能力仍将是一项关键资产,确保开发人员能够适应不断变化的技术格局。
不要忘记,触摸一下草地(Linux 的终端有时不会咬人),你以后就会感谢你自己。
⚠️ 免责声明
我写这篇文章是为了回应去年大规模裁员及其后果之后我所看到的情况,因为我了解到很多优秀人才只是因为流行语而被忽略,而这些人才本来可以成功(根据过去的绩效指标、已完成的项目和相关经验)