程序员下厨记:用做菜的方式理解软件工程
发布日期:2026-04-12
你有没有发现,做菜和写代码其实是一回事?
都需要把原材料(食材/需求)通过一系列步骤(烹饪/编码)转化为最终产品(菜肴/软件)。都讲究火候(时机),都需要调试(调味),都追求用户体验(口感)。
自从我开始认真做菜之后,这种类比越来越深刻。

缘起
程序员加班是常态,点外卖更是日常。但长期的外卖饮食让我的身体发出了抗议——体重增加、肠胃不适、精力下降。
某个周末,我决定自己做一顿饭。打开冰箱,发现只有几个鸡蛋和一些青菜。于是做了一份最简单的番茄炒蛋。
那是我人生中做的第一道菜(不算泡面的话)。鸡蛋炒老了,番茄没炒出汁,盐放多了。但不知为什么,吃起来比外卖好吃太多了。
从那天起,我开始了「程序员下厨」的旅程。
做菜与软件工程的类比
1. 需求分析 = 选择菜谱
做菜的第一步不是洗菜切菜,而是决定「做什么」。这就像软件开发中的需求分析。
新手的错误:打开冰箱看有什么就做什么(没有需求就写代码)
正确的做法:
- 确定目标(今晚想吃什么?健康还是解馋?)
- 评估资源(冰箱里有什么食材?缺什么需要买?)
- 选择方案(从已有食材出发,找到最合适的菜谱)
- 准备工作(买菜、备料、准备调料)
2. 架构设计 = Mise en Place
法餐中有一个概念叫 Mise en Place(一切就绪),意思是在正式烹饪之前,把所有食材清洗、切好、量好,按顺序摆放整齐。
这不就是软件架构设计吗?在写代码之前:
- 设计好数据结构(食材分类)
- 定义好接口(调料配比)
- 规划好执行顺序(烹饪步骤)
- 准备好工具(锅碗瓢盆 = IDE + 框架)
一个反直觉的真理:准备工作做得越充分,实际执行就越顺畅。很多人觉得准备工作「浪费时间」,但它能避免执行中的大量返工。
3. 编码实现 = 烹饪过程
真正上手做菜(写代码)时,火候和时机至关重要:
做一道鱼香肉丝的「伪代码」:
function 鱼香肉丝(猪肉, 木耳, 胡萝卜, 笋) {
// 1. 预处理(数据清洗)
const 肉丝 = 切丝(猪肉).腌制(盐, 料酒, 淀粉)
const 配菜 = [切丝(木耳), 切丝(胡萝卜), 切丝(笋)]
// 2. 准备调味汁(配置文件)
const 鱼香汁 = 混合(醋, 酱油, 糖, 盐, 淀粉, 水)
// 3. 主流程
热锅(中火)
加入(油)
炒香(豆瓣酱, 姜蒜末) // 底层框架初始化
滑炒(肉丝) // 核心业务逻辑
加入(配菜) // 集成外部模块
倒入(鱼香汁) // 配置注入
翻炒均匀() // 最终整合
return 装盘(成品)
}4. 测试 = 试味
做菜时的「试味」就是软件测试:
- 单元测试:分别尝一下盐、糖、醋的量是否合适
- 集成测试:混合后的整体味道是否协调
- 用户测试:端上桌,家人/朋友的反馈
5. 部署上线 = 上桌
一道菜的最终评判标准不是厨师觉得好不好,而是吃的人觉得好不好。
同理,软件的成功标准不是代码写得多优雅,而是用户体验好不好。
我学会的几道菜
经过半年的练习,我现在能稳定输出以下几道菜:
可乐鸡翅(入门级)
食材:鸡翅 500g,可乐 1 罐
调料:生抽 2 勺,老抽 1 勺,姜片,八角
步骤:
1. 鸡翅划刀,冷水下锅焯水
2. 热锅凉油,煎至两面金黄
3. 加入姜片、八角炒香
4. 倒入可乐,没过鸡翅
5. 加生抽、老抽
6. 大火烧开,小火炖 20 分钟
7. 大火收汁,完成番茄牛腩(进阶级)
这道菜需要 2 小时的慢炖,但等待的过程本身就是一种享受。牛腩在番茄的酸甜中慢慢变得软烂,整个厨房弥漫着温暖的香气。
蒜蓉粉丝蒸虾(装逼级)
这道菜看起来很高级,但实际操作并不复杂。关键是蒜蓉油的制作——小火慢慢把蒜末炸至金黄,激发出最浓郁的蒜香。
做菜带给我的改变
1. 学会了耐心
炖一锅好的牛腩需要 2 小时。在这 2 小时里,你不能加快火候,不能跳过步骤,只能等待。
这种「等待的艺术」也影响了我的编程习惯。遇到复杂的 Bug,不再急于找到答案,而是耐心地排查、验证、思考。
2. 学会了生活
做菜让我重新建立了与生活的连接。去菜市场挑选食材、在厨房里忙碌、看到家人吃到好菜时的笑容——这些都是坐在电脑前体验不到的快乐。
3. 学会了创造
做菜和写代码一样,都是一种创造活动。你把一堆原材料变成了一道美味的菜肴,这种成就感和写出一段优雅代码的感觉是一样的。
给想开始做菜的程序员
- 从简单开始:先学会煮面、炒蛋、煎牛排这些基础操作
- 遵循「菜谱」:就像学编程要先跟教程一样,做菜先严格按菜谱来
- 记录参数:记下每次使用的调料量和火候,方便下次复现
- 不怕失败:翻车是正常的,每次失败都是学习的机会
- 享受过程:做菜不是任务,是生活的一部分
今晚打算做什么?打开冰箱看看,也许灵感就在那里。