全栈开发人员是个神话
我们都见过这样的招聘启事:“招聘全栈开发工程师,精通 React、Vue、Angular、Node.js、Python、Django、Ruby on Rails、PostgreSQL、MongoDB、Redis、Docker、Kubernetes、AWS、Azure、GCP、CI/CD、微服务架构,哦对了——还会用 Figma 设计?必须拥有十年以上使用三年前发明的技术的经验。”
坦白说,真正精通整个现代技术栈是个神话。我们该停止自欺欺人了。皇帝的新衣其实并不完整,只是我们都碍于礼貌不好意思说出来。
🪢 复杂性的爆炸
二十年前,成为一名“全栈”开发者意味着掌握 HTML、CSS、JavaScript、PHP 和 MySQL。几年时间就能熟练掌握这套技术栈。当时的技术栈就像一个简单的三明治,简单易懂,开发者们也乐在其中。那时,Webpack 还无人知晓。
如今?单是前端就已发展成一个规模堪比漫威电影宇宙的完整宇宙,剧情线多到无人能够全部掌握:
- 框架:React、Vue、Angular、Svelte、Solid、Qwik(以及在你读到这句话时发布的另外三个框架)
- 元框架:Next.js、Nuxt、Remix、SvelteKit、Astro(因为现在框架似乎也需要框架了)
- 状态管理:Redux、Zustand、Jotai、MobX、XState、TanStack Query(因为
useState这还不够让人困惑) - 样式:CSS-in-JS、Tailwind、CSS Modules、Styled Components、Emotion(50 种让按钮变成蓝色的方法)
- 构建工具:Webpack、Vite、Turbopack、esbuild、Rollup(每个都号称“速度极快”⚡)
- 测试工具:Jest、Vitest、Playwright、Cypress、Testing Library(用于测试你的理智)
而这仅仅是前端的冰山一角。我们甚至还没涉及到后端框架、数据库、DevOps、云平台,以及其他如雨后春笋般涌现的数十种专业领域。这些领域如同雨后春笋般涌现,却又极其昂贵和复杂。
📚 深度与广度的问题
残酷的现实是:你可以对万事万物略知一二,也可以精通某一方面——但二者不可兼得。这就像试图精通47种语言一样。当然,你可以用所有语言说“你好”和“洗手间在哪儿?”,但想用任何一种语言讨论哲学,恐怕都难上加难。
真正的精通需要深入、专注的学习。这意味着不仅要了解如何使用工具,还要理解它为何有效、何时失效,以及如何构建可扩展的系统。这意味着要从生产事故中汲取经验,并在凌晨三点一边质疑自己的职业选择一边修复故障的过程中获得智慧。
思考一下真正的“精通”意味着什么:
- 前端高手了解浏览器渲染引擎、性能优化、无障碍标准,并且能够调试复杂的 React 代码协调问题(而不会崩溃)。
- 后端技术专家了解数据库查询优化、分布式系统理论、缓存策略,并且能够设计容错架构(同时解释为什么“在我的机器上运行正常”不是一种部署策略)。
- DevOps高手了解基础设施即代码、容器编排、安全加固和大规模监控(并且对 YAML 文件中的制表符和空格有很强的看法)。
这些领域都需要数年才能精通。认为一个人可以同时精通所有这些领域,还能跟上瞬息万变的步伐,这不仅是乐观,简直是天方夜谭。
👺 “全栈”的暴政
“全栈工程师”这个标签已经变成了一种负担,与其说是“荣誉勋章”,不如说是“耻辱的烙印”:
- 冒名顶替综合症盛行,因为没有人能够真正达到理想化的“全栈”开发人员的标准(他们似乎从不睡觉、不会变老,也不需要上网搜索)。
- 企业设定不切实际的期望,寻找根本不存在的独角兽企业(即使存在,价格也可能过高)。
- 开发人员分散精力,结果在很多方面都平庸,而不是在少数几方面做到卓越(样样通,样样松,但却被期望样样精通)。
- 职业发展会受到影响,因为当你不断转向下一个热门框架时,没有一条通往深度专业知识的清晰路径。
我见过很多才华横溢的开发者因为试图面面俱到而精疲力竭。他们像打了鸡血的松鼠一样在各种技术领域间跳来跳去,从来没有在一个领域停留足够长的时间去真正精通它,总是感觉自己落后于人。剧透一下:终点线一直在移动,因为根本没有终点线。
👨💻 全栈开发人员的真正职责(以及应有的素质)
说实话,大多数“全栈”开发人员并不是精通从像素到数据包每一层的博学家。
他们是通才,能够胜任技术栈的各个环节,但能力水平参差不齐。他们拥有广泛的知识,能够理解各个部分是如何协同工作的,但通常只在一两个领域拥有真正的专长。至于其他方面?他们能以惊人的速度和自信搜索到答案。
那不是弱点——而是一种超能力。
具备以下能力:
-
了解前端性能如何影响后端负载(不仅仅是“速度慢,修复它”)。
-
在不同的架构方法之间做出明智的权衡(而不是仅仅选择 Hacker News 上流行的那些)。
-
能够有效地与各个专业团队沟通(例如,能够准确地将“按钮不起作用”和“事件处理程序中未捕获的 Promise 拒绝”等问题进行翻译)。
-
独立完成所有功能的原型设计(即使你花了 2 个小时在 CSS 居中上)
这些都是至关重要的技能。但它们并不等同于精通——更像是见多识广的游客和知道哪些小巷应该避开的当地人之间的区别。
那么,见多识广的游客和真正的全栈工程师之间究竟有什么区别呢?
真正的全栈开发人员理解超越框架的基本原理。
他们知道:
-
数据如何从用户输入流向数据库,然后再返回——请求-响应循环不会消失。
-
为什么事情进展缓慢以及如何加快速度——性能原则永不过时
-
如何跨层调试——因为 bug 总是隐藏在你最意想不到的层中
-
何时该增加复杂性,何时该保持简单——剧透一下:通常是保持简单。
-
每一层都影响着其他层——更改 API,前端就会崩溃;这真是亘古不变的故事。
技术栈会变,但问题不会变。
用户依然需要快速可靠的应用程序。数据库仍然需要高效的查询。代码仍然需要易于维护。安全性仍然至关重要。这些真理与框架无关,并且会超越本周推特上的热门话题而长存。
真正掌握 HTTP、数据库、算法和系统设计的开发者,无论身处哪个时代,无论使用何种技术栈,都能取得成功。他们能够适应变化,因为他们理解事物运作的原理,而不仅仅是从 Stack Overflow 上复制粘贴(虽然说实话,我们也会这么做)。
真正的全栈技能不是了解所有的框架,而是懂得如何学习。
不是死记硬背API接口,而是深入理解问题,从而选择合适的工具来完成任务。
🦖 现实:T型开发者
更准确的模型是T 型开发者(不,不是指摆出 T 字姿势,虽然那样会显得很有支配力):
- 竖线表示你在一到两个领域拥有深厚的专业知识(当出现问题时,人们会在 Slack 上找你)。
- 水平条代表在整个技术栈中拥有广泛的知识(你具备足够的实力去发挥作用)。
你或许是一位前端专家,对后端概念也了如指掌,足以设计出优秀的 API;又或许是一位后端专家,能够构建功能完善的 UI,而不会让设计师们抓狂;再或许是一位数据库高手,精通缓存技术,能够防止同事们误操作导致服务器 DDoS 攻击。
这不仅更现实,也更有价值。T型开发人员是专业团队之间的桥梁,是技术术语的翻译者,也是能够以足够的权威性说出“实际上,这是一个前端问题”的人。
🗺️我们应该怎么做?
致开发者:
- 不要试图精通所有领域。选择你的主要领域并深入钻研(成为真正会阅读文档的人)。
- 培养全栈的广泛能力,但也要重视自己的专长(坦诚地说“我不是 DevOps 工程师”是可以的,不必感到羞耻)。
- 在面试和简历中要诚实地描述自己的优势(谎报 Kubernetes 经验只会带来麻烦)。
对于企业而言:
- 别再寻找独角兽了。应该聘请技能互补的T型开发人员(组建一支复仇者联盟团队,而不是让一个人包揽所有人的工作,却只拿更少的钱)。
- 要认识到“全栈”意味着“能够胜任整个技术栈的工作”,而不是“精通所有领域”或“愿意拿一份薪水做三份工作”。
- 组建团队,让团队成员的知识深度相互补充(新颖的概念:协作!)
对于行业而言:
- 我们需要更贴近现实的术语(我建议用“具备相当能力的通才”)。
- 我们应该推崇专精,而不是要求不可能的广度(精通一门远胜于样样平庸)。
- 要认识到技术的复杂性已经超过了个人的掌握能力(摩尔定律也适用于困惑)。
🔚 结论
全栈开发者并非虚构——它只是一个早已过时的神话,就像“更加努力工作”或“这次会议完全可以用邮件解决”一样。如今,仅 JavaScript 生态系统每年就会发布数百次重大更新(而且几乎每个月都会导致你的构建崩溃),真正掌握整个技术栈不仅困难重重,而且在数学上根本不可能。你需要把醒着的每一分钟都投入到学习中,即便如此,到了周二你仍然会落后于人。
是时候放下幻想,拥抱更真实的现实了:我们都是各自领域的专家,努力保持对相关领域的实用知识。我们只是在努力维持足够的平衡,以便在不出现问题的情况下交付功能。这不仅可以接受,而且是唯一可持续的发展道路,不会导致精疲力竭、需要心理治疗,或者干脆转行去养羊。
我们越早接受这一点,就能越早建立更健康的职业生涯,设定切合实际的期望,并通过深度专家之间的协作来创造更好的软件,而不是通过疲惫不堪的通才之间的协作来创造更好的软件,后者随时可能因为一个 webpack 错误而崩溃。
此外,如果有人真的精通了整套现代技术栈,他们大概会升华到更高的境界。而我们需要他们来修复我们的持续集成/持续交付(CI/CD)流水线。
文章来源:https://dev.to/adamthedeveloper/a-full-stack-developer-is-a-myth-3bmk