📄 一句话概括
接手一个陌生项目,最值钱的三个问题固定不变:它怎么跑起来、这个函数谁在调、我改这里会影响谁;第三个最容易被跳过,也最贵。
📝 本节和前面几节的关系
上一节讲它问你,这一节反过来:你问它。这是本章最实用的一节。
一、第一个问题:这个项目怎么跑起来
这是第一个必问的。跑不起来,后面所有问题都白搭。 而且这个问题只有一个它能给:你这套环境是怎么装的。 问它比自己翻文档快十倍——它能一次扫完所有配置文件。
二、第二个问题:这个函数是谁调的
接手陌生代码,第一件事是找到被用得最多的地方——那是这个项目的重心。 本节的演示用一份调用清单真算了一遍:被调 21 次的那个,通常就是主干。 记住这个数很省事:哪里被调得多,哪里改动影响就大。
三、第三个问题:我要改这里,会影响谁
这是最容易被跳过,也最贵的一个问题。 改一个函数,先看谁在调它、它又调了谁——这一步花五分钟,能省下一次事故。 这一问和第 4.2 节的红灯逻辑是同一件事的两种问法:边界不清就别动手。
四、把它当向导,而不是当枪手
向导的价值是在你动手之前告诉你坑在哪儿。 所以提问的时机是动手之前——等改完了再问,等于事后诸葛。 一个简单的习惯:每个新项目,先花十分钟问这三个问题。
五、动手 Demo:把它当资深向导——先问哪三个问题
下面用一份调用清单真算一遍,看被调用次数如何暴露重心。
calls = [(u"登录校验", 3), (u"订单查询", 8), (u"日志打印", 21),
(u"日期格式化", 12), (u"权限判断", 5)]
for name, n in sorted(calls, key=lambda x: -x[1]):
T([u"%d 次" % n, name, u"是,它像核心" if n >= 10 else u"可以往后放"], [12, 24, 32])
实跑输出:
--------------------------------------------------------------------
把它当资深向导——先问哪三个问题
--------------------------------------------------------------------
接手一个陌生项目,最值钱的三个问题固定不变。下面用一份调用清单真算一遍:
被调用次数 这是什么 该先看它吗
-------------------------------------------
21 次 日志打印 是,它像核心
12 次 日期格式化 是,它像核心
8 次 订单查询 可以往后放
5 次 权限判断 可以往后放
3 次 登录校验 可以往后放
五个函数共被调 49 次,其中【日志打印】占了 43%。
这三个问题是:
1. 这个项目怎么跑起来?(先要一个能跑的环境)
2. 这个函数是谁调的?(找核心,先看被用得最多的)
3. 我要改这里,会影响谁?(找边界,别踩别人的地盘)
被调 21 次的【日志打印】占了全部调用的四成多——它就是项目的重心。 这个数在你打开陌生项目时很难一眼看出来,但让它算一次就有了。
30 秒实验
- 对你现在手上那个陌生项目,问它这三个问题。
- 尤其是第三个:你要改的那个地方,谁在调它?
常见误区
- 一上手就改。先问三个问题再动手,这是本节唯一要记住的事。
- 只问第一个问题。【怎么跑起来】解决了效率,【改这里影响谁】解决的是安全。
自测三问(点开对答案)
1. 接手陌生项目最该问的三个问题是什么? —— 它怎么跑起来、这个函数谁在调、我改这里会影响谁。 2. 为什么被调用次数能暴露项目重心? —— 被用得最多的地方就是主干,改动影响也最大。 3. 第三个问题为什么最贵? —— 改一个函数前不看清谁在调它,可能引发连锁问题——边界不清就别动手。- ☐ 下一节(6.5 多轮对话策略:如何在对话中持续推进任务)
相关笔记
- 💻 计算机是怎样跑起来的 · 索引 — 从程序员角度看一个陌生代码库
- 🧡 Claude Code橙皮书 · 索引