人工智能
你的错误处理只是安慰剂
Posted by quentin 在 Monday, 27 April 2026打开任何一个前端项目,全局搜索 `catch`,你会看到什么?一大片空荡荡的 catch 块,偶尔跳出几个 `console.error`,再偶尔冒出一行 `message.error('系统异常')`。后端项目也好不到哪去,try-catch 包着业务逻辑,catch 里面的处理方式跟前端如出一辙——记个日志,打个错误码,然后呢?然后什么都没有。
我把这种写法叫"安慰剂错误处理"。它的作用不是解决问题,而是让写代码的人觉得自己处理了问题。就好像感冒的时候吃维C,你做了点什么,但那点什么跟治愈没有关系。
更残酷的事实是:大部分错误处理非但没用,还在制造新的问题。
try-catch 不是错误处理,是错误藏匿
先说一个很多人不愿意承认的事:try-catch 是所有错误处理手段里最廉价的那一种。它的成本最低,所以它的价值也最低。
我见过太多这种代码:一个函数内部包了三层 try-catch,每一层都把异常吞掉,最外层返回一个 `{ success: false, message: '操作失败' }`。调用方拿到这个返回值,判断 `success` 为 false,然后弹个 toast —— "操作失败"。用户看到这四个字,内心毫无波澜,因为他已经见过一千次了。
绩效主义正在杀死工程团队
Posted by quentin 在 Monday, 27 April 2026OpenAI前不久宣布,SWE-bench Verified已经不再适合用来评估前沿编码能力。一个专门为衡量代码能力设计的基准,被AI冲破上限之后反而失去了意义。这件事本身不意外——当某个维度变得可优化,它迟早会被优化到偏离初衷。真正有意思的是,这个逻辑不只适用于AI,它几乎完美地映射了工程团队考核的困局。
我们比历史上任何时期都拥有更多的工程度量手段——代码量、PR数、故事点、交付率、代码覆盖率、线上故障数、响应时长……每个团队都在量,每个管理者都在看,但几乎没有谁敢说,自己的考核体系真的反映了团队的工程能力。
原因很简单:你量的全是噪音。
当度量变成目标
古德哈特定律讲了两百年了,但工程团队似乎永远不会吸取教训。或者更准确地说,不是不懂,是没得选。
AI代码助手的过度编辑:改得越多亏得越多
Posted by quentin 在 Thursday, 23 April 2026我最近注意到一个挺有意思的现象:团队里用AI编程工具最积极的那几个人,代码变更量差不多是其他人的3倍,但需求交付速度并没有快3倍。仔细看了一下,有些人的单个bug修复,diff比需求本身还长。
这不是个例。当你跳出"AI提效"的叙事,认真看AI代码助手在项目中留下的痕迹时,会发现一个被忽略的问题——AI有天然的过度编辑倾向,而且这种倾向正在悄悄地侵蚀代码库的健康度。
AI的"讨好型人格"
先说一个可能很多人没太注意的事:AI代码助手本质上是有讨好倾向的。
你让AI修一个空指针异常,它不光改了那行判空逻辑,还顺手调整了方法签名,给相关变量补了类型注解,甚至把异常处理的模式也给重构了。每一步看起来都合理,每一步单独拎出来都是"改进",但加在一起,你只是为了改一个判空,变了三十行代码。
AI为什么这样?因为它的训练体系中,"提供有价值的回答"是一个核心信号。对AI来说,只改一行和改三十行,哪个更像"用心回答"?更关键的是,你问AI"还有没有可以改进的地方",它几乎不可能说"没有了,当前代码已经很好"——它会找出所有能优化的点,然后一股脑全给你改掉。
前端性能优化的尽头是架构问题
Posted by quentin 在 Thursday, 23 April 2026每次聊性能优化,话题总是很快滑向具体的技术手段:懒加载、代码分割、图片压缩、Tree Shaking、虚拟列表……这些当然有用,但我想说一个可能让不少人不太舒服的判断——当你在做这些"优化"的时候,大概率已经晚了。 真正决定性能天花板的,不是你用了多少优化手段,而是系统架构在最初就给你画了多高的天花板。
性能问题从来不是前端单方面的问题。但很多团队把它当成了前端的问题,于是前端工程师就像一个装修工人,在毛坯房里拼命贴墙纸——墙纸再好看,承重墙没打好,房子一样不牢。
优化手段的天花板
先承认一个事实:常规的性能优化手段确实能解决一部分问题。一个从没做过任何优化的项目,加上代码分割和懒加载,首屏时间砍一半不稀奇。图片做个WebP转换、加个CDN,LCP直接降几百毫秒。这些是低垂的果实,摘了就是摘了,没人否认。
但问题是,这些优化有上限。你的首屏要从3秒优化到1.5秒,代码分割和懒加载就够了。但如果你要从1.5秒到800毫秒,甚至到500毫秒以内,单靠前端手段就力不从心了。因为剩余的耗时大头不在前端——它在网络请求、在服务端处理、在数据组装、在协议开销。
技术课题不是业务时间做的
Posted by quentin 在 Tuesday, 21 April 2026上周一个团队成员找我聊天,提了个问题:"既要做业务,又要做技术课题。但业务开发已经占满我的时间了,技术课题怎么办?"
我当时没有直接回答,而是反问了一句:"你觉得技术课题应该在什么时间做?"
他愣了一下,说:"当然是工作时间啊,不然呢?"
这个对话让我意识到,很多人对"技术课题"这件事的理解,从一开始就错了。
大部分人误解了技术课题的本质
先说结论:技术课题从来不是业务开发的平行任务,而是向上突破的选择题。
很多开发者把技术课题理解成"额外的工作任务",觉得应该和业务开发一样,在8小时工作时间内完成。这种理解有两个致命问题:
第一,技术课题不是分配来的,是争取来的。
在金融团队里,业务开发是职责范围内的工作,做不好要被考核。但技术课题不是——它更像是公司给你的一个额外机会:用时间和精力,换一个证明自己技术能力、拓展技术视野、提升团队影响力的机会。
既然是机会而非义务,凭什么要公司为你的成长买单?
第二,如果技术课题能在业务时间完成,说明它不够有价值。
技术Leader的尴尬时刻
Posted by quentin 在 Tuesday, 21 April 2026做技术管理这些年,我发现一个有趣的现象:越是成功的技术Leader,越不愿意分享自己踩过的坑。大家都在讲"如何打造高效团队"、"OKR落地实践"、"技术人才培养体系",却很少有人聊那些让人坐立不安的尴尬时刻。
但恰恰是那些尴尬时刻,构成了技术管理的真实底色。
当你意识到自己是瓶颈
2019年,我负责的前端团队刚从5人扩到10人。团队扩张后的第三个月,我突然发现一个问题:所有人都在等我review代码。
不是他们不主动,而是我在无意识中给自己设置了一个隐形职责——"技术质量守门人"。每个PR我都要亲自看一遍,每个技术方案我都要参与讨论,每个难题组员都会第一时间找我。
表面上看这是负责任,实际上是灾难。
团队的吞吐量被我一个人的工作时间卡死了。更糟糕的是,我发现自己在培养"等待型工程师"——遇到问题不是先思考,而是先找Leader确认。这不是我想要的团队文化。
那段时间很煎熬。一方面我知道必须放手,另一方面又担心代码质量下滑。最让人尴尬的是,当我试图"授权"时,发现自己根本不知道该怎么做。
过去几年里,我习惯了"事必躬亲就能保证质量"的工作方式。现在要求我"不插手也能保证质量",完全是另一套技能。
TypeScript的代价:为什么严格模式在大型项目中变成了负担
Posted by quentin 在 Monday, 20 April 2026TypeScript这几年几乎成了前端的"标配",不用TypeScript好像就落伍了。但我观察到一个现象:很多团队引入TypeScript后,开发效率反而降低了,尤其是启用了严格模式(`strict: true`)的项目。
这不是TypeScript本身的问题,而是大部分团队高估了自己的类型设计能力,低估了类型系统的复杂度。
类型系统的复杂度被严重低估
大部分人以为TypeScript就是"给变量加个类型",但真正在大型项目中用TypeScript,你会发现类型编程几乎成了一门独立的学科。
看一个真实的例子,金融业务中的表单配置系统:
BFF层的谎言:为什么大部分团队不需要它
Posted by quentin 在 Friday, 17 April 2026最近在和几个技术管理者交流时,发现他们都在规划或已经落地了BFF(Backend for Frontend)架构。问为什么要做BFF,得到的答案惊人地一致:"解耦前后端"、"提升开发效率"、"这是最佳实践"。
但当我问:"你们团队有多少后端开发?前端开发呢?",答案通常是"后端6-8人,前端3-4人"。这让我意识到一个问题:大部分团队上BFF,可能不是因为真的需要,而是因为"别人都在用"。
我想聊聊这个话题,不是要否定BFF的价值,而是想说:很多团队高估了BFF的收益,低估了它的成本。
BFF真正解决的问题
先说清楚,BFF不是伪需求。它在特定场景下确实有价值:
场景一:多端适配。你的后端API是为Web设计的,现在要支持移动端、小程序、IoT设备。不同端的数据需求、交互逻辑差异很大,用一套API很难搞定。这时候BFF可以为每个端定制API,后端保持稳定。
场景二:聚合调用。前端一个页面需要调用5-6个后端服务,串行调用太慢,并行调用又要处理复杂的依赖关系。BFF可以在服务端聚合这些调用,减少前端的复杂度和网络开销。
状态管理的终局:不是Redux,也不是Context
Posted by quentin 在 Thursday, 16 April 2026前端圈对状态管理的执念,可能是过去十年最大的集体焦虑。从Flux到Redux,从MobX到Recoil,从Context API到Zustand,每隔一两年就会冒出一个"更简洁"的方案,然后大家又开始新一轮的重构和争论。
但我越来越怀疑一件事:我们在用前端的方式解决本不该存在的前端问题。
状态管理焦虑的根源
大部分前端开发者第一次接触Redux的时候,都会有类似的困惑:为什么一个简单的计数器需要写这么多代码?action、reducer、dispatch、connect,整整一套ceremony,就为了让组件拿到一个数字。
当时流行的解释是:"这是为了可维护性。" 等项目大了你就懂了。
确实,等项目大了,我懂了。但我懂的不是Redux的好处,而是我们把太多不该放在前端的状态放在了前端。
举个真实场景:用户的投资组合数据。
