Glean 拾遗
日刊 · 时间线

每天拾几条。

2026-09-16 · 周三 3 条
← 09-15
日历 ▾
2026 · 09
MoTuWeThFrSaSu ·123456789101112131415161718192021222324252627282930
有日刊 今天
06:00

antirez 拆解 Redis 源码:代码注释的九种类型

antirez on code comments: a nine-part taxonomy from Redis

antirez 以 Redis unstable 分支(32e0d237)源码为例,把代码注释拆成九类:function、design、why、teacher、checklist、guide 六类有益,trivial、debt、backup 三类可疑。他反驳“代码够好就不需要注释”的常见观点,理由有两条:注释不是在复述代码做了什么,而是补上单读局部代码拿不到的信息(为什么这样做、为什么不选看起来更自然的写法);注释也是降低读者认知负荷的工具,scripting.c 里逐行标注 Lua 栈布局即是例证。文中逐类给出判定标准与取舍:design 注释让简化方案显得出于考量而非偷懒;teacher 注释扩大能读懂这段代码的人群;checklist 注释源于 4 bit type 这类无法中心化的设计;debt 注释(TODO/FIXME)应尽量挪到文件顶部或当场修掉;backup 注释在 Git 时代没有存在理由。适合长期维护大型系统代码库的工程师。

antirez.com · 31 min · Code Comments · Code Readability · Redis · Software Engineering · Writing
06:00

好代码容易删掉,而不是容易扩展

Write code that is easy to delete, not easy to extend.

作者主张把代码行数视为“花掉的行数”而非“产出的行数”:每行代码都要持续支付维护成本,而为提高复用率构建的抽象会把调用方绑死在实现的显式与隐式行为上,让后续变更代价更高。因此目标应是可删除(disposable),而非可复用、可扩展。文中给出递进策略:能不写就不写;先复制粘贴几次再提取函数;把无状态、与应用无关的代码放进 util 并一工具一文件;接受 boilerplate 换来的灵活性;像 requests 包住 urllib3 那样把 policy 与 protocol 分层;允许业务逻辑先做成一坨泥巴;按“不与谁共享”而非功能拆分模块;用统一接口、HTTP 缓存与 CDN、feature flag 制造可替换点;错误处理放在端到端的最外层,如同 Erlang 监督树用 fail-fast 重启替代就地恢复。适合维护长期演进代码库的工程师与设计者。

programmingisterrible.com · 20 min · API Design · Code · Essay · Software Engineering
06:00

提问的技术:先说清你已知什么,再问可回答的事实

How to ask good questions about software

Julia Evans 认为提问是一项可以练出来的工程技能,并把方法拆成可操作的几步:先陈述自己对主题的现有理解,再问『这样对吗』;把『SQL join 怎么工作』这类宽泛问题改写成答案明确的事实问题(例如 join N 与 M 两张表的时间复杂度是 O(NM) 还是 O(NlogN)+O(MlogM),MySQL 是否先排序 join 列)。她给出的实例包括:在 rkt-dev mailing list 上先写清 rkt 与 Docker 在磁盘上存容器镜像的差异,再问为什么这样设计;入职数据团队时给 Hadoop、Scalding、Hive、Impala、HDFS 等术语建了一份词典。文中还讨论了如何选人提问(对方答一题 5 分钟、能省自己 2 小时才划算;不必事事找最资深的人)以及提问者与回答者共同承担的责任。作者明确表示问『笨问题』无妨,也批评 ESR《提问的智慧》把全部成本压给提问者。适合正在 ramp-up 的一线工程师与需要跨团队取信息的人。