那个把代码写成诗的人
说实话,我第一次听到于永刚这个名字,是在一个技术分享会上,当时台上的哥们儿讲了一个关于Go语言并发模型的故事,说有个叫于永刚的家伙,硬是用三行代码解决了一个困扰团队两周的bug,我那时候还心想:这谁啊?这么牛?
后来我才知道,于永刚不是什么大厂CTO,也不是什么开源界的大佬,他就是个普通的后端开发,在杭州一家中型互联网公司干活,但就是这样一个普通人,愣是靠着“把代码当朋友”的态度,写出了不少让人拍大腿的好东西。
这篇文章,我就想聊聊于永刚这个人,以及他那些看上去不起眼、但细品全是干货的经验,不是那种高高在上的技术布道,就是一个老程序员边撸猫边跟你唠嗑的那种感觉。
于永刚是谁?一个“不务正业”的Gopher
于永刚,1987年生人,毕业于一所普通的二本院校,你说他有多聪明?未必,但你要说他有多能折腾?那绝对服,他2014年开始接触Go语言,那个时候Go还远没现在这么火,用他自己的话说:“当时就想找一个不用写那么多模板代码的语言,结果一头扎进去就出不来了。”
他干过几件挺有意思的事:

- 自己写了一个小型RPC框架——不是为了造轮子,是因为当时公司用的框架太重了,他嫌启动慢
- 用Go重写了公司的日志系统——从Python切到Go,性能提升了将近8倍
- 坚持每周写一篇技术笔记——哪怕就是几句话,也坚持了快5年
这些事儿听起来都不算惊天动地,但你要是细品,会发现于永刚这个人身上有种特质:他不怕做“笨”事,就怕做没价值的事。
于永刚的技术哲学:代码是写给人看的
关于变量命名这件事
有一次于永刚在团队里搞了个代码审查,看到一个同事写的变量名:a、b、c……他当时就笑了,他说:“你这是在写代码,还是在写摩斯密码?”
于永刚坚持一个原则:变量名要能“说话”。
| 不要用 | 建议用 | 原因 |
tmp |
tempFile 或 buffer |
明确临时变量的用途 |
data |
userProfile 或 orderList |
避免模糊的泛称 |
flag |
isActive 或 hasPermission |
布尔值要表达判断含义 |
他说过一句我特别认同的话:“写代码最大的成本,从来不是写,而是读。” 你花5分钟写的一段代码,可能别人要花半小时才能看懂,你多花30秒把变量名起好,就是在帮未来的自己省时间。
关于注释:别把注释当成“事后补”
于永刚的做法很特别:他会在写代码之前,先写注释,对,你没听错,他会先把思路写成注释:
// 先拉取用户信息
// 然后检查用户是否有权限
// 如果有权限,执行操作A
// 如果没有,返回错误
然后再照着注释写代码,这样做的好处是——代码逻辑会更清晰,因为先想清楚了,而且注释和代码是同步的,不会出现“代码改了但注释没改”的尴尬。
他说:“注释不是给机器看的,是给人看的,如果你写出来的注释自己都不想看,那不如不写。”
于永刚的Go语言实战经验
聊了这么多理念,咱们来点实在的。于永刚在Go语言开发上有几招特别实用,我给整理了一下:
第一个:错误处理不要“if err != nil”就完事
很多人写Go,看到错误就写个return err完事。于永刚觉得这样太粗暴,他会在错误里加上上下文信息:
if err != nil {
return fmt.Errorf("拉取用户ID为%d的信息失败:%w", userID, err)
}
这样一来,错误从哪来、出在哪个环节,一目了然,他说:“错误信息是你最好的朋友,别让它呆在冷宫里。”
第二个:接口要小,功能要专
于永刚特别推崇Go的接口设计原则——接口尽量小,他写接口的时候,会在心里默念:“这个接口是不是只干了一件事?如果多干了,拆开它。”
举个例子,他曾经把一个UserService接口拆成了三个:
- UserReader:只负责读用户信息
- UserWriter:只负责写/更新用户信息
- UserValidator:只负责校验用户数据
代码量没变多少,但可读性和可测试性大幅提升。
第三个:并发不是魔法,是工具
于永刚说过一句话让我印象很深:“很多人一用goroutine就觉得牛逼,但99%的场景其实不需要并发,用了反而搞得代码一团糟。”
他的建议是:
- 能用循环解决的问题,别用并发
- 用了并发,一定要控制goroutine的数量,用WaitGroup或者semaphore
- 别忘了处理panic,不然一个goroutine崩了,整个程序跟着凉
他写过一段代码,用sync.WaitGroup加channel做了一个简单的并发工作池,代码干净得像刚洗过的白衬衫。
于永刚踩过的坑,和你一样
于永刚不是神,他也犯过很多低级错误。
- 把环境变量写死在代码里——结果上线的时候炸了,因为测试环境和生产环境的配置不一样
- 忘了在defer之前检查文件是否打开成功——导致nil指针解引用,panic了好几次
- 为了性能优化,搞了一堆复杂的逻辑——结果性能没提升多少,代码倒是没人敢动了
他说:“踩坑不可怕,可怕的是踩完坑不总结,我每次出了问题,都会写个小笔记:今天又学会了一个不犯错的方法。”
他还建了一个“犯错清单”,里面记录了自己犯过的各种错误以及解决办法,不是那种官方文档式的,而是带着自嘲的口吻写的,比如有一条是:“2022年3月15日,又把写成,查了俩小时bug,果然是我智商巅峰。”
你看,大佬也不过如此,我们也一样,谁还没在代码里翻过车呢?
于永刚给你的三个“不成熟”建议
聊到最后,我忍不住问了于永刚一个问题:如果能给刚入行的程序员一个建议,你会说什么?
他想了想,说了三条:
- 别急着学新技术,先把基础打牢。 他说:“很多人一上来就想学Kubernetes、学微服务,结果连Go的slice底层原理都搞不清楚,基础不牢,地动山摇。”
- 多写、多读、多改。 代码写多了,自然就有感觉了,他推荐多看看Go标准库的源码,说那是“最好的教科书”。
- 把自己当成产品的用户。 你写的代码最终是给人用的,包括你自己,如果连你自己都觉得难用,那别人更受不了。
他说这些话的时候,语气很平淡,就像在聊今天吃了什么一样,但你能感觉到,他是真的认真想过这些问题,不是随便说说的。
好了,关于于永刚的故事,今天就聊到这,他还在杭州那家公司干着,每天写代码、改bug、发笔记,没什么特别的,但就是这种“不特别”,让人觉得很真实。
咱们下回见。
本文来自作者[kyadmin]投稿,不代表思利达立场,如若转载,请注明出处:http://yl.c-lida.com/post/71.html
评论列表(4条)
我是思利达的签约作者“kyadmin”!
希望本篇文章《于永刚,一个普通程序员的非典型成长史》能对你有所帮助!
本站[思利达]内容主要涵盖:郑州思利达智能科技有限公司
本文概览:那个把代码写成诗的人说实话,我第一次听到于永刚这个名字,是在一个技术分享会上,当时台上的哥们儿讲了一个关于Go语言并发模型的故事,说...