阅读视图

发现新文章,点击刷新页面。

前端资质越高,越来越不敢随便升级框架?

上个星期五下午,临近下班,组里一个刚入职不久、技术热情极高的小伙子,给我提了个极具分量的 PR。

他跑到我工位旁,眼里闪着光:老大,我把咱们那个核心中后台项目的 React 从 17 直接升到 19 了,顺便把 Webpack 换成了 Rsbuildrelease note 说性能提升了将近 40%,我本地跑了一下,秒开!

看着他求表扬的神情,我的心却瞬间沉到了谷底。

我点开 package.json 的 diff,好家伙,红绿相间的变动多达七十多处。除了 React 自身的跨代大版本,连带着状态管理、路由、甚至底下好几个用来处理复杂 Excel 导出的老旧插件,全被强行 npm update 到了最新版。

65f2e014-3840-4833-8131-25faeed66fb9.png

我深吸了一口气,默默把他的 PR 关了,并告诉他:本地跑通不算通。这个合并如果今天发到线上,明晚咱们整个组大概率都要在 P0 故障复盘会上做检讨。😖

很多年轻前端可能觉得我太保守,甚至有点老顽固。 技术社区里天天都在吹 Vue 3.x 又出了什么革命性宏,React 19 的 Server Components 有多颠覆,Vite 又把构建速度压缩了多少毫秒等等。

在他们眼里,升级框架就像给手机系统点一下更新那么简单,不仅能提效,写进简历里还能多一句---主导项目底层技术栈升级。

但在前端领域摸爬滚打了很多年、背过无数次线上事故的锅之后,我慢慢明白了一个极其骨感的现实告诉你:前端资质越高,越不敢随便升级框架。


升级其实没那么简单

年轻时总有一种错觉,以为升级框架就是改一下 package.json 里的数字,然后顺着终端里的 warning 把废弃的 API 替换掉就完事了。

但真实的业务工程,是一个由无数个三方库、内部包、魔改组件和历史妥协交织而成的巨大复杂度。

就拿上面那个小伙子强升 React 19 来说。他只看到了 React 19 把 forwardRef 废弃了,直接把 ref 当 prop 传就行,代码看起来确实优雅了。

但他没看到的是,咱们项目里深埋着一个 4 年前离职前辈写的、极其复杂的虚拟滚动表格组件。当年为了在老版本里拿到底层 DOM,前辈用了极其 Hack 的方式去代理 ref

// 离职前辈留下的祖传代码
// 强行拦截并劫持了内部的 ref 实例,用来做复杂的聚焦与按键接管
const ComplexTable = React.forwardRef((props, ref) => {
  const internalRef = useRef();
  
  useImperativeHandle(ref, () => ({
    forceScroll: (y) => {
      // 依赖了早期版本某 UI 库极其脆弱的内部结构
      internalRef.current.querySelector('.ant-table-body').scrollTop = y;
    },
    // ... 其他 20 个不知道哪里会调用的这些方法
  }));

  return <Table ref={internalRef} {...props} />;
});

当你兴冲冲地把大版本一升,底层的渲染时机变了,或者旧版 UI 库的 DOM 结构因为不兼容而错位了。本地跑的时候,页面确实渲染出来了。

但等到下周一,财务部门的同事在处理每个月一万条数据的工资单,习惯性地按下回车键想要让表格自动滚动到下一行时——整个页面直接白屏崩溃😢。

这种深水区的依赖断裂,TypeScript 查不出来,E2E 测试如果没有覆盖到这一步也抓不到。最后买单的,就是签字同意合入代码的技术负责人。

牵一发而动全身。在没有 100% 自动化测试覆盖率的团队里,升级底层框架不叫重构,那叫排雷🤷‍♂️。


技术自嗨?

很多程序员在谈论框架升级时,往往会陷入一种技术自嗨的盲区。

你看,新的打包工具让首屏渲染快了 0.5 秒!

确实很棒。但然后呢?

站在业务视角的逻辑是极其冰冷的:如果一个系统目前运行稳定,没有遇到致命的性能瓶颈,也没有阻碍新需求的迭代,那么动它的底层,就是典型的 ROI(投资回报率)倒挂。

你花了两周时间解决各种依赖冲突,把 Vue 2 强行拔高到了 Vue 3,把 Options API 费劲巴拉地重构成了 Composition API。

如果升级成功了呢, 业务侧毫无感知,产品经理不会多给你发一毛钱奖金,老板甚至觉得你这两周业务产出为零😖。

升级失败了(或者带入了暗病):阻断了核心业务流程,造成客户流失,你就是那个没事找事、搞出 P0 事故的千古罪人。

这不是叫你摆烂,而是工程学里一条极其重要的铁律:If it ain't broke, don't fix it.(只要没坏,就别瞎修。)

我们写代码是为了解决业务问题,而不是为了满足自己对时髦技术的热爱。把屎山代码翻新成现代化技术栈,它依旧可能是一座逻辑混乱的屎山,只不过现在是一座编译速度更快的屎山罢了😒。


什么时候才该升?

那难道我们就永远守着老旧的版本,在历史包袱里等死吗? 当然不是。

高级前端和初级前端的区别就在于:初级前端为了新而升级,高级前端为了解决痛点而升级。

遇到以下三种情况,哪怕风险再大,我也一定带着团队往上升:

如果触及了不可逾越的性能天花板。 比如旧版框架的 Virtual DOM 算法在十万级数据渲染时已经彻底锁死主线程,而新版的并发特性或细粒度更新能从底层解决这个问题。

安全漏洞与 LTS(长期支持)结束。 底层依赖被扫出高危漏洞,且官方不再为老版本提供补丁,如果不升,过不了公司的内部安全红线。

生态彻底断裂。 现有的技术栈已经古老到找不到能兼容的周边库了,新招来的员工看这代码像看甲骨文,维护成本已经远超升级成本。

而且,真正老道的升级,绝不是开个新分支一把梭。 那是细致入微的依赖盘点、是灰度发布、是双栈运行、是哪怕天塌下来也能在 5 分钟内切回老代码的降级预案。


前几天我在社区看到一句话,深以为然:每一个看似极其保守的技术决策背后,都站着一个曾经被线上 Bug 毒打得死去活来的灵魂😁。

所以,当你的组长拒绝你那份华丽的底层升级改造方案时,别急着在心里骂他老土。他不是不懂新技术,他只是比你更懂那条在深夜里突然响起的线上报警短信,有多么让人绝望😒。

对于一线开发者来说,关注前沿技术、保持对框架底层演进的好奇心,绝对是好事。它能保持你的敏锐度,让你在写新项目时拥有更好的技术选型视野。

但在一个沉淀了无数业务逻辑的历史工程面前,请保持谨慎。

真正的技术大佬,不是那个天天在项目里倒腾最新框架的极客。而是那个哪怕手握一大把老旧框架,也能稳稳当当把复杂的业务需求切得明明白白,让系统稳如老狗的架构师。

对此大家怎么看?

下班啦下班啦下班啦下班啦下班啦下班啦1,下班啦下班啦下班啦下班啦.gif

王自如公开招聘全栈前端,要求有多离谱?

上上周在我们前端组的群里,有个年轻小伙甩了张截图进来,并且艾特了我说:老大,你看看现在这招聘要求,我感觉我可以直接提离职去送外卖了😁。

image.png

我点开一看,是最近网上疯传的那张 王自如 招聘 01 号全栈前端员工 的 JD。

image.png

image.png

耐着性子把那长长的一串要求看完,我的第一反应不是这要求有多高,而是一股在职场混了 9 年后,极其熟悉的窒息感扑面而来😖。

不是因为这些技术学不会,也不是因为多难。

而是我发现:自从大模型普及之后,有些老板,是真的越来越不把程序员当人了。😒


这是确定是在招人?

咱们平时招个全栈,懂点 React 加 Node.js,能连个数据库写写 CRUD,这很正常。但你仔细品品这份 JD 里的清单:

常规操作覆盖前端、后端 API、数据库建模。

搞定 Docker,懂 Postgres 的并发、迁移、软删除,还得熟悉 K8S 和 Grafana 监控报警。

懂 iOS / WKWebView 交互,能边做边学把 Swift / SwiftUI 顺手改了。

理解结构化输出、Agent 工具调用,还要“长期订阅” Claude / ChatGPT 等工具(估计还是得员工自己掏钱)。

在技术圈摸爬滚打了 9 年,我面过的候选人没有五百也有三百了🤷‍♂️。

我可以极其直白地说:这根本不叫招聘。这叫一个低成本、全时段、无限并发、最好还能自我迭代系统😒

以前,如果一个老板要求你同时包揽前端、后端、DBA、运维工程师和 iOS 开发的活儿,大家一眼就能看透本质——这公司没钱,想白嫖!!!

但现在,有了 AI 这个遮羞布,这种极其离谱的岗位要求,居然被包装成了一种 前沿、先进、拥抱未来的精英气质。


消失的岗位边界

这几年带团队,我感触最深的一点就是:老板们对 AI 提效的理解,往往和一线工程师存在着巨大的错位。

在有些老板的逻辑里,现在的世界是这样的:

  • 你不会写 Swift?没关系啊,你问 Claude 啊!
  • 你不懂 K8S 部署排障?没关系啊,你把报错贴给 ChatGPT 啊!
  • 你觉得一个人干五个人的活儿干不完?怎么可能,现在不是有 AI 帮你提效 300% 吗?
  • 无力吐槽.....

这套逻辑最恶毒的地方在于,它故意把 工具能加快代码生成速度 和 人可以无限承担责任边界 这两件事混为一谈。

做过真实线上复杂项目的人都知道,写代码从来只占工作的 30%。 真正折磨人的是什么?

是你上午在查 PostgreSQL 的慢查询锁表;中午连饭都没吃完,被叫去对齐 iOS WebView 的桥接通信 Bug;下午切回主干分支改 React 的复杂状态机;到了晚上十一点,K8S 节点 OOM 报警了,你还得爬起来看日志排查内存泄漏😖。

AI 能帮你写正则,能帮你写个 Python 脚本,但 AI 不能替你承担上下文频繁切换带来的大脑宕机,更不能在业务出 P0 级线上事故时替你背锅。

人的精力、耐心、注意力和抗压能力是物理极限。当老板把 有了 AI 作为默认前提时,你做得慢,就是你不够聪明;你扛不住,就是你没有 拥抱变化。一切组织架构上的残缺,最后全变成了你个人的能力不行。

这种精神内耗,才是最阴冷的🤷‍♂️。


压榨最狠的劳动力?

你再去细读那份 JD 里的词:不排斥跨层工作具备快速学习能力边做边补

这些话写得真漂亮。如果在面试里听到,你甚至会觉得这公司扁平、开放、给你试错的空间。

但作为一个老油条,我给你翻译翻译这几句话的潜台词:

不排斥跨层 = 我们连明确的研发流程都没有,哪里缺人你顶哪里?

具备快速学习能力 = 我们没有时间给你培训,也没有资深大佬带你,你自己晚上熬夜看文档把坑填了?

长期订阅 AI 工具作为常态化工作 = 我们希望你主动掏钱、掏业余时间,把自己改造成一个高压生产单元,来证明你配得上这份工资😖。

技术人其实是最不排斥新工具的群体。这几天我们团队自己也在搞 Agent 工作流,大家都玩得很嗨。

但真正让人心寒的,是你的技术热情,正在被当成理所当然的消耗品。你会得越多,老板觉得你理所应当地该干得更多。最后往往是团队里技术最好、最愿意兜底的那个人,被这种 无边界 的期待活活抽干。


如果我全能,凭什么给你打工?

这种招聘风气,正在慢慢改变行业的心理预期。

它会让很多明明已经很优秀、技术底子很扎实的年轻前端产生严重的自我怀疑:我是不是太菜了?别人都能一个人扛一条链路,为什么我还在讲究工程边界?

别怀疑自己。这不是你的问题,是这套标准本身就是反人类的。

一个成熟的研发团队,哪怕只有三五个人,也应该因为工具的进化,而更合理地切分模块、更注重代码的可维护性、更尊重工程师的专注力。而不是借着 AI 的名义,把团队缺口全塞进一个人的身体里。

最后,作为一个敲了 9 年代码、修过无数福报的老兵,我想对抛出这种 JD 的老板们说一句实在话:

如果有一个候选人,他懂现代前端工程体系,能手撕 Node.js 后端,精通数据库并发与事务,能手搭 K8S 运维体系,懂 iOS 桥接,精通 AI Agent 开发链路,而且还具备极强的自我驱动力和产品思维……

这样的人,在 AI 时代,我们称之为 超级个体🤷‍♂️。

但一个真正的超级个体,他的认知和杠杆率是极高的。

当他手握着 AI 赋予的庞大生产力,一个人就能拉起一支满编的数字化军队时,他看到的就不再是一个月薪几万的打工机会,而是更广阔的商业边界与创造自由😒。


所以So...

看到这种 JD,大可不必焦虑,更无需自我怀疑😖。

AI 的浪潮确实在重塑我们的行业,技术栈的融合也是不可逆的趋势。

但我们要时刻清醒地认识到:技术进步的终极目的,是让人工作得更体面、更有创造力,而不是顺手把人的尊严和精力一起优化掉。

守好你的工程底线,把精力花在真正能沉淀护城河的底层逻辑上。

共勉🙌

谢谢大家.gif

❌