网易首页 > 网易号 > 正文 申请入驻

谷歌工程师花3年重构代码,最后发现「优雅」才是最大坑

0
分享至


2019年,Google内部有个团队花了18个月重写了一套推荐算法。新代码比旧版快40%,内存占用减半,注释详尽、设计模式用得炉火纯青——堪称教科书级别的「优雅代码」。上线三个月后,原团队全员转岗,接手的人花了6周才看懂一个核心函数,最后不得不整体回滚。

这个案例被写进了Google的工程博客,标题很直白:「我们过度优化了可读性」。项目负责人后来承认,他们当时追求的是一种「让同行 impressed 的代码」,而不是「让同事能改的代码」。

「优雅」正在成为技术债的伪装

国内某头部云厂商的资深架构师李牧(化名)跟我聊过类似的事。他们团队2021年重构了一个支付网关,核心模块用上了函数式编程+响应式架构,代码行数压缩了60%。「当时觉得特别爽,像解了一道奥数题。」

结果第二年监管要求接入新的风控接口,团队里三个高级工程师围着那段「优雅代码」看了两天,没人敢动手改。「变量名是单字母,函数嵌了四层回调,注释写的是'参考论文[7]'——那篇论文是2015年的预印本,链接已经404了。」

最后方案是:在旧网关外面包一层适配器,新代码变成「优雅代码」调用「屎山代码」再调用「优雅代码」的三明治结构。李牧的原话:「我们现在宁可招写代码像写说明书的人,也不要写代码像写诗的人。」

这种现象有个数据佐证。GitHub 2023年的调研显示,开发者每周平均花费17.3小时在阅读和理解他人代码上,其中62%的人表示「代码风格过于精巧」是主要障碍。Stack Overflow的年度调查更直接:「维护遗留系统」连续五年力压「学习新技术」成为开发者最头疼的事。

可维护性的三个反直觉指标

原文作者提的几条建议——命名规范、模块化、避免硬编码——属于基本功。但想真正衡量可维护性,得看几个更隐蔽的指标。

第一,「陌生人上手时间」。

Netflix内部有个测试:随机抽一个非本团队的工程师,给他一台新电脑、一个代码仓库、一份需求文档,看多久能提交第一个有效PR(Pull Request,代码合并请求)。他们的中位数目标是4小时。如果超过8小时,这段代码会被标记为「需重构」。


这个指标残酷的地方在于,它惩罚一切「需要上下文才能理解」的设计。比如你用了一个内部DSL(领域特定语言)来简化配置,很酷——但如果新人需要读200页文档才能改一行参数,这就是维护成本。

第二,「回滚成功率」。

不是看能不能回滚,而是看回滚需要多少人参与、多少部门协调。某电商大厂2022年的一次事故很有代表性:一个促销活动的配置错误,理论上只需要改个JSON文件,但因为代码里硬编码了五个下游服务的调用顺序,回滚需要同时协调推荐、搜索、库存三个团队。最终故障持续了47分钟,损失按秒计费。

事后复盘,那段代码的作者已经离职三年,留下的注释是:「此处有魔法,勿动」。

第三,「注释的半衰期」。

好的注释解释「为什么」,坏的注释解释「是什么」。但最危险的注释是「过时但看起来还合理」的那种。微软研究院2018年做过一个实验:随机抽取100个开源项目的commit历史,发现代码与注释不一致的比例高达31%,而其中只有7%的注释被明确标记为「已废弃」。

换句话说,三分之一的注释在撒谎,而且你分不清哪些在撒谎。

性能优化与可维护性的真实博弈

原文提到「有时牺牲性能换可维护性」,这句话在业务代码里基本成立,但在基础设施层会触发更复杂的权衡。

字节跳动2020年开源的ByteDance Monoio是一个例子。这是一个基于io_uring的Rust异步运行时,为了追求极致性能,大量使用了unsafe代码和内存手动管理。维护者在README里写得很坦诚:「本项目不适合初学者阅读,贡献者需要对Linux内核有深入理解。」

这算可维护吗?看场景。它的目标用户是写存储引擎、网络代理的那批人,这个群体本来就预期要啃硬骨头。但如果一个CRUD业务系统照搬这套风格,就是灾难。


关键区分在于「变更频率」。Google的SRE手册里有个公式:优化收益 = 性能提升 × 调用频次 × 预期生命周期。一个每天调用十亿次、预计跑五年的模块,值得投入人力做深度优化;一个每周改三次需求、明年可能下线的功能,「够用就好」是最优策略。

国内某AI独角兽的工程VP跟我算过一笔账:他们团队把模型推理服务的P99延迟从120ms优化到80ms,花了3个人月;同样的资源如果投入到日志结构化改造,能让on-call(值班处理故障)的响应时间从平均45分钟降到12分钟。「后者每年省下的加班费,够招两个算法工程师。」

代码评审里的权力博弈

可维护性不只是技术问题,更是组织问题。

蚂蚁集团2021年推行的「代码可读性认证」制度值得参考。工程师要晋升到P7,必须提交一段被评审委员会认定为「易维护」的代码样本。评审标准里有一条很细:「如果这段代码需要你在会议上解释超过3分钟,它就不合格。」

这个设计的意图是倒逼作者站在读者视角写作。但执行中也出现了变形:有人为了通过评审,把简单逻辑拆成七八个文件,每个函数不超过5行,美其名曰「单一职责」。结果代码像被切碎的拼图,阅读时需要同时在八个tab之间跳转。

评审委员会后来补了一条补丁:「修改一个需求时,需要打开的文件数」也纳入评分。这算是用指标对抗指标。

更隐蔽的问题是「优雅代码」的社交货币属性。GitHub上高星项目往往有强烈的个人风格,这是作者的技术名片。但企业代码库是集体资产,「让人一眼看出是谁写的」反而是负面特征。Stripe的工程文化里有个说法:「最好的代码提交后,blame(查看作者)功能应该显得多余。」

国内某开源社区的维护者跟我吐槽,他们拒绝过一些「过于精巧」的PR:「有个贡献者用宏系统实现了一套编译期状态机,代码量少了40%,但除了他自己没人能修bug。我们宁愿要200行if-else,至少下个实习生能看懂。」

回到开头Google那个案例。项目负责人在博客结尾写了一段话,被很多团队打印贴在工位上:「我们优化代码是为了让机器跑得更快,还是为了让下一个凌晨三点被叫起来修bug的人少骂两句脏话?这两个目标不总是重合的。」

你们团队的代码评审里,有没有出现过「这代码太丑了」和「这代码我看不懂」之间的争论?最后谁说了算?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
中国人寿第四季度亏损近150亿敲警钟 险企大举押宝股市风险隐现

中国人寿第四季度亏损近150亿敲警钟 险企大举押宝股市风险隐现

新浪财经
2026-04-01 19:35:21
美国国防部长:考虑到部分盟友拒绝提供帮助,特朗普将在对伊朗军事行动结束后就北约的未来作出决定

美国国防部长:考虑到部分盟友拒绝提供帮助,特朗普将在对伊朗军事行动结束后就北约的未来作出决定

潇湘晨报
2026-03-31 21:53:15
卡塔尔:拦截两枚伊朗导弹 第三枚击中油轮

卡塔尔:拦截两枚伊朗导弹 第三枚击中油轮

新华社
2026-04-01 16:05:06
比亚迪新车预告!二季度超6款新车将上市

比亚迪新车预告!二季度超6款新车将上市

新浪财经
2026-04-01 20:41:12
向太也没想到,自己那指望不上的儿子向佐,如今竟把老脸都丢光了

向太也没想到,自己那指望不上的儿子向佐,如今竟把老脸都丢光了

顾史
2026-03-31 20:58:46
“后坐力”太大!道歉不到24小时宋宁峰再曝2大猛料 陈赫也不无辜

“后坐力”太大!道歉不到24小时宋宁峰再曝2大猛料 陈赫也不无辜

揽星河的笔记
2026-04-01 16:03:36
Shams:开拓者因在选秀前非法接触杨瀚森被罚款10万美元

Shams:开拓者因在选秀前非法接触杨瀚森被罚款10万美元

懂球帝
2026-04-02 07:57:19
《浪姐7》网络人气排名:前3名姐姐很意外,初舞台淘汰开始

《浪姐7》网络人气排名:前3名姐姐很意外,初舞台淘汰开始

音乐钢琴娱乐咖
2026-04-01 12:00:32
4月2日,烟台新辟130路

4月2日,烟台新辟130路

烟台广播电视台
2026-04-02 08:48:54
大鱼来了!广东最适合的大外援曝光,这才是杜锋的内线答案?

大鱼来了!广东最适合的大外援曝光,这才是杜锋的内线答案?

绯雨儿
2026-04-02 08:38:58
51岁孔令辉:为生活奔波,与刘国梁9年未见面,一个电话让他落泪

51岁孔令辉:为生活奔波,与刘国梁9年未见面,一个电话让他落泪

梦史
2026-03-25 11:33:08
惊人!53岁陈慧琳穿三角裤开唱,遭骂博眼球,网友:前卫到看不懂

惊人!53岁陈慧琳穿三角裤开唱,遭骂博眼球,网友:前卫到看不懂

一盅情怀
2026-03-30 15:22:32
梅西独造3球!赛后获9分全场最高,38岁仍9次突破13次对抗

梅西独造3球!赛后获9分全场最高,38岁仍9次突破13次对抗

奥拜尔
2026-04-01 09:46:20
李湘母女现身韶山献花,瘦了得有20斤大变样,两人关系变冷没互动

李湘母女现身韶山献花,瘦了得有20斤大变样,两人关系变冷没互动

林雁飞
2026-03-31 18:33:32
微软在干嘛:Linux打游戏反超Windows!没有原生版依然乱杀

微软在干嘛:Linux打游戏反超Windows!没有原生版依然乱杀

快科技
2026-04-01 15:14:12
意媒:那不勒斯与卢卡库彻底决裂,不排除直接解约的可能性

意媒:那不勒斯与卢卡库彻底决裂,不排除直接解约的可能性

懂球帝
2026-04-01 16:50:16
如果祖国统一了,谁最后有可能当省长,这5位候选人你最中意谁?

如果祖国统一了,谁最后有可能当省长,这5位候选人你最中意谁?

原来仙女不讲理
2026-02-13 12:37:30
民进党,极有可能在下一届台湾地区选举后,成为长期一家独大政党

民进党,极有可能在下一届台湾地区选举后,成为长期一家独大政党

共工之锚
2026-03-31 00:27:37
舆论翻车,非洲来治病的男孩被大肆报道,网友质疑不断,细节曝光

舆论翻车,非洲来治病的男孩被大肆报道,网友质疑不断,细节曝光

眼光很亮
2026-04-02 08:31:21
汪峰女友终于不装了,森林北的真实身份曝光,原来我们都猜错了

汪峰女友终于不装了,森林北的真实身份曝光,原来我们都猜错了

舍长阿爷谈事
2026-03-30 20:56:49
2026-04-02 09:35:00
固件更新中
固件更新中
有态度网友ytd
1020文章数 6关注度
往期回顾 全部

科技要闻

SpaceX秘密申报IPO,估值冲刺12万亿

头条要闻

伊朗最高领袖首次讲话 伊方披露其健康状况

头条要闻

伊朗最高领袖首次讲话 伊方披露其健康状况

体育要闻

NBA扩军,和篮球无关?

娱乐要闻

张婉婷已决定离婚 找律师讨论婚变事宜

财经要闻

电商售械三水光针 机构倒货or假货猖獗?

汽车要闻

三电可靠 用料下本 百万公里的蔚来ES6 拆开看

态度原创

旅游
健康
数码
艺术
公开课

旅游要闻

让蜀道再次“C”位出道丨21城开局问答·对话

干细胞抗衰4大误区,90%的人都中招

数码要闻

开发者为苹果AirPort Time Capsule路由器备份功能续命

艺术要闻

齐白石这两幅梅花,绝了!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版