全部文章

锤言锤语

本文另有英文译文 · 阅读英文版 →

你有多久没在天黑前吃上一口热饭了?

你有没有把 Redis 缓存调得飞快,却连自己下一顿吃什么都懒得缓存?

你是不是常常调度 Kubernetes,很少调度肠胃;对项目上线一丝不苟,对外卖凑合能吃就行?

程序员是这个世界上最擅长“构建系统”的人,却也是最容易忽视“日常运行环境”的人。尤其是一日三餐。

生活在国内的小伙伴:外卖、速食、冰美式、功能饮料,还能构建你胃里的混沌架构。墨尔本的小伙伴们,一不小心错过时间,连外卖都没得点,只能打开冰箱,喝几口冰牛奶。

没有文档、没有指标、没有容灾机制。吃的不是饭,是延迟;胃痛不是 bug,是宕机预警。

这时候,如果你打开了一个叫 HowToCook (https://github.com/Anduin2017/HowToCook)的 GitHub 项目,你会觉得为什么会有人这么懂你的需求!

做饭 = 另一种编程

这个项目不谈诗和远方,不卖情怀,它只是写了一堆菜谱,每道菜都是一个 Markdown 文件,像你熟悉的 API 文档,输入:番茄+鸡蛋,输出:光盘行动+稳定幸福。

而更打动我的,是它传递出一种认知颠覆:

做饭不是灵感,是可执行逻辑;
一顿饭,不是消耗,而是一次系统恢复。

类比一下我们就到

编程概念 烹饪对应 为啥呢?
变量初始化 切菜备料 明确资源清单,减少临时调用
单元测试 尝咸淡 提前发现异常,避免整锅翻车
熔断机制 炒糊了立刻关火 防止灾难扩散
并发控制 煮饭炒菜同步进行 提升效率,防止锅具死锁
灰度发布 新菜先做小份试吃 先验证再全面上线,降低失败成本
日志监控 锅边嗞啦声 可观测性保障

看看这样一份严谨的西红柿炒鸡蛋的菜谱,咱就说,是个成年人就应该能跟着做下来吧?(如果你像我第一次开煤气灶都能被吓跑,那只需要多练几次😄)

GitHub 上西红柿炒鸡蛋菜谱的结构化步骤

这哪里是烹饪啊,根本就是生活的最小可行性产品(MVP)啊!

真正的生活重构,从一口热饭开始

我自己照 HowToCook 做红烧肉,debug 过程堪称真实:

  • 第一次:水放太少,相当于没设连接超时,锅底烧糊(HTTP internal error)

  • 第二次:酱油过量,像日志打印失控,成品黑如炭(内存溢出了)

  • 第三次:按文档严格配比,掌握火候,肉质软烂、成功收汁(请求成功返回)

更别提土澳的程序员妈妈们,每天过的不是日常,是“生活 CI/CD”流水线啊:接娃 → 买菜 → 洗菜 → 做饭 → 打包便当 → 清理现场 → 第二天早上准备娃儿的lunchbox  → 送娃  → 上班开工。有这样的how to cook的项目,能拯救多少安排每日饮食死掉的脑细胞啊!

项目交付是老板看见,热饭上桌是一家人的温饱。

一日三餐,其实是人生的 DevOps

把一日三餐比作 DevOps 循环的示意图

程序员最懂闭环,也最容易忘记自己身体也是个系统。

  • 早餐是 cold start,别跳过

  • 午餐是负载均衡,别边吃边写代码

  • 晚餐是每日收敛,别拿泡面当热部署

  • 宵夜?不建议,容易 OOM(Out of Memory 内存泄漏)

每一顿饭的质量,都会反馈到第二天的性能上。

别让“生活上线失败”成为咱们的常态。

程序员不是不会生活,只是太擅长将就。

咱们不需要成为厨神,也不用每顿饭都三菜一汤,但我们每个人都值得,为自己写一次热饭上线的脚本。

不是所有系统都能重启,但我们的一日三餐,可以!

周末了,不妨试试锤子我从母上大人那里学到的新疆手抓饭,也有清晰的步骤,当房间里飘满饭菜的香味,这样的人间真的值得。

制作新疆手抓饭:准备食材

制作新疆手抓饭:处理羊肉与配菜

制作新疆手抓饭:食材下锅翻炒

制作新疆手抓饭:加入米饭与水

制作新疆手抓饭:焖煮完成

盛盘后的新疆手抓饭