复盘时脑子闪过三年前自己写的代码,恨不得穿越回去删库跑路

mysmile 2小时前 产品中心 1 0

老早以前我写代码有个坏毛病,觉得跑通了就是本事。项目一交付,恨不得格式化大脑,下一顿火锅就把之前踩的坑忘得干干净净。直到去年搞一个数据中台,线上服务凌晨三点熔断,我蹲在机房里盯着日志滚屏,突然发现这个报错ID我在三年前另一个电商项目里见过——一模一样的边界值校验缺失。当时只是本地跑测没复现,随口说了句“哦那可能环境问题”,就把它放生了。

那一宿我没咋睡。倒不是修bug累,是那种“跟自己较劲”的累。恁些年自诩技术成长快,结果被三年前埋的雷炸了个底儿掉。从那往后,我开始正儿八经搞个人技术经验总结,不是写那种流水账日报,是真正把脑子里的隐性认知抠出来摊到桌面上。这活儿干了快两年,今儿掏心窝子聊几个真能落地、真让我少吃亏的土方子,没半句虚的。

先说我最早踩的那个误区:总觉着复盘是给领导看的,得写得像毕业论文。实际上最有用的个人技术经验总结,恰恰是“只写给自己看、甚至不怕写得丑”的那种。我现在有个毛病,每修完一个线上bug,第一件事不是写wiki,是打开微信传输助手的对话框,给自己发条语音。就讲三句话:刚才哪儿傻了、根本原因是啥、下次哪儿能提前拦住。你们晓得啵,语音转文字出来的稿子经常错字连篇,什么“缓存击穿”写成“换存急穿”,但恰恰是这种没润色过的记录,情绪还在、细节也鲜活。过两个月翻出来,看到“当时老子居然在这个破if else里蹲了两小时”,自己都觉得好笑,想忘都忘不掉-7

后来我琢磨出一套笨办法,给复盘分了四层,不整那些高大上的PPT话术,就是纯干活逻辑。第一层叫“画鬼打架图”——把整个项目从需求评审到上线的节点全拆开,每个节点写上当时“脑壳里想的啥子”。这招是跟前端老李学的,他特喜欢在代码注释里写“// 这里用setTimeout是因为王产品要的效果chrome不给面子”,以前我觉得这不规范,现在觉得这是真·知识沉淀。第二层是揪“那种问题”——不是所有bug都值得反复盘,得区分是“手滑写错变量名”还是“架构设计时就漏了非功能场景”。我吃过最大的亏,就是把后者当成前者,觉得“下次细心点就行”,结果换个项目、换批人,照样塌房-1

讲到这儿必须提一嘴,我搞个人技术经验总结时发现个特别反直觉的事儿:很多你以为是“技术问题”的东西,剥开皮是“信息差问题”。比如年初我支援一个React Native项目,页面白屏时间老压不下来,新人吭哧吭哧调了三天代码没卵用。我过去瞅了眼,发现他压根不晓得Chrome DevTools的Performance面板能直接录RN的JS线程。这能怪他技术差吗?不能,是团队没人把“调试工具怎么按场景用”这层经验显性化。后来我憋了篇文章,标题就叫《不信你试试:白屏时先点这儿别瞎改代码》,专门写调试工具的断案现场,没讲啥高深算法,就是把实操截图圈红、录成动图。发出去之后好多同事私信说“靠,原来这个钩子藏在这儿”-8

所以你问我啥叫高质量的个人技术经验总结,我觉得不是秀技术肌肉,是把自己犯蠢的过程还原出来,把当时缺失的那个“信息块”补上。哪怕这个块很小,比如“MySQL连串时不要瞎设zeroDateTimeBehavior”,有人记下这一句,可能就少熬一宿。

再聊个更扎心的:技术经验总结写得好不好,直接决定你在团队里是“骨干”还是“堵路”。以前我带实习生,特怕那种闷头猛干、遇到坑自己吭哧吭哧刨三天、最后默默填平的“孤勇者”。你问他咋解决的,他支吾半天,不是不分享,是他自己也说不清当时咋绕出来的。后来我立了个规矩,每个模块上线后必须留一份“验收闯关笔记”,用填空模板写,不用文采,只要三块:1)哪个功能验收时被专家皱眉头了;2)专家当时原话是啥;3)最后咋糊弄……不是,咋解决的。这招是我从知乎上一篇项目验收帖偷师的-10。那个帖子说,别等验收会结束了才憋报告,开会时直接开个腾讯文档,同事记专家建议、你速记关键词,什么“↑50%”表示效率提升、“@王工”表示责任人,符号体系你自己看得懂就成。这法子救活了我们组多少验收意见书,以前总觉得验收是考试,现在整明白了,验收是展示你帮业务方省了啥麻烦,是邀功的好机会啊兄弟们-10

话说回来,搞个人技术经验总结最难的不是写,是坚持。人都有惰性,项目一忙,复盘会第一个被砍。我克服这毛病的法子贼土——搞了个“一句话复盘”仪式。每天晚上下班前,哪怕再累,也在便签上写一句话,比如“今天被DBA怼了才发现,IN查询里塞几千个ID会让索引失效,以后超过200个必须拆批”-7。就这么一句,写到第四个月,攒了小一百条,每周末翻一遍,有的已经内化成肌肉记忆了,就划掉;有的过时了,比如“JDK8的PermGen容易OOM”,现在谁还跑JDK8啊,删掉。这个过程特爽,跟大扫除似的。

再往外走一步,技术经验总结这东西不能只进不出。你得让它流动起来,逼着自己在团队里露怯。上个月我在组会上分享了个“丢人现眼”的案例:搞K8s服务网格,为了炫技硬上了Istio,结果业务流量才几十QPS,徒增运维复杂度,最后灰溜溜拆了。分享完有个老哥凑过来说,其实我们也踩过一样的坑,只是没好意思讲。你看,你不先脱敏,别人也不敢脱敏,那些“隐性失败经验”永远沉在海底,后来人一遍遍重蹈覆辙-1

我还试过把技术复盘写成“伪代码式”的,不啰嗦,直接写逻辑。比如有个模块频繁Full GC,我的复盘笔记是这样的:

if (缓存设计 == “全量数据怼进本地Map”) {
return “年轻人不讲武德”;
} else if (预热策略 == null) {
return “上线即雪崩预定”;
} else {
return “可复用至XX场景”;
}

你别笑,这种格式我同事反而最爱看,因为一眼就抓到决策因子。后来我琢磨通了,所谓的个人技术经验总结,本质就是提炼决策模型,把“当时我脑子的if-else逻辑”画出来。你把这个画明白了,别人不用读你的代码,也能在类似场景下做出不比你差的判断。

最后说个玄乎的。搞技术复盘久了,你会发现最大的变化不是项目bug变少了,是你对自己的认知偏差越来越敏感。以前我特迷信“代码越简洁越牛逼”,恨不得一个lambda套三层stream。直到有个维护任务,我改了自己半年前写的“诗一样”的链式调用,改到一半骂出声来——这他妈是我写的?连个中间变量都不留,后人咋接盘?从此我的复盘清单里多了条自查项:“这代码留给凌晨三点被电话炸醒的兄弟看,他会祝福我还是诅咒我?”-1

咱就是普通人,成不了那种“看一眼架构图就预判三年后性能瓶颈”的神仙。但咱能靠着一篇篇琐碎、土气、甚至带错别字的个人技术经验总结,把自己从同一个坑里反复摔倒的循环里拽出来。这活儿不显功,但真护命。你也甭等啥1024程序员节了,今儿下班前,就给自己发条微信语音,说说今天哪个瞬间让你觉得自己“真蠢”,或者“真牛逼”。攒着,明年这时候回头看,这就是你技术生涯的年轮-1-7

扫描二维码

手机扫一扫添加微信