研发协作
从 git 历史中提炼软件工程经验:当你问「这里有什么教训」…
通过分析 git 提交与 diff,从实际代码改动中提炼具体、可落地的软件工程经验教训。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
从 git 历史中提炼软件工程经验:当你通用
解决思路
- 先加载原则参考:阅读 `references/se-principles.md` 以准备好原则目录;如果怀疑改动中包含可改进之处,可选读 `references/anti-patterns.md`;在至少加载 `se-principles.md` 之前不要继续。
- 确定分析范围:询问用户或从上下文推断要分析什么;功能分支用 `git log main..HEAD --oneline` + `git diff main...HEAD`;最近 N 次提交用 `git log --oneline -N` + `git diff HEAD~N..HEAD`;特定提交用 `git show <sha>`;工作区改动用 `git diff` + `git diff --cached`。
- 默认行为:若在功能分支上,分析该分支相对 main 的提交;若在 main 上,分析最近 5 次提交;若用户指定了其他范围,则使用用户指定的范围。
- 收集改动:按确定的范围运行 `git log` 获取提交列表与提交信息;运行 `git diff` 获取完整 diff;若 diff 超过 500 行,先用 `git diff --stat`,再有选择地阅读改动最多的前 3-5 个文件;仔细阅读提交信息,因为其中包含原始 diff 会遗漏的意图;只读被改动的文件,不要读整个仓库。
- 分析改动:找出最具启发性的单一主导模式;关注结构性决策(代码如何组织、为何这样划边界)、所做的权衡(可读性 vs 性能、DRY vs 清晰、速度 vs 正确性)、解决的问题(改动前后对比、为何「后」更好)、被错过的机会(以「下次可以考虑……」的温和方式提出)。
- 将发现映射到 `references/se-principles.md` 中的具体原则;要具体,引用实际代码、实际文件名和行改动。
- 按模板呈现经验:`## Lesson: [Principle Name]`,包含「What happened in the code」(2-3 句,引用文件与提交)、「The principle at work」(1-2 句说明软件工程原则)、「Why it matters」(1-2 句说明实际后果)、「Takeaway for next time」(一句具体可执行的建议)。
- 如有第二条值得注意的经验(最多再补 2 条),用 `### Also worth noting: [Principle Name]`,包含「In the code」1 句、「The principle」1 句、「Takeaway」1 句。
- 避免:罗列所有 vaguely 适用的原则(应只挑最相关的 1-2 条);分析未改动的文件(应紧扣 diff);忽略提交信息(应将其作为主要上下文阅读);脱离代码的抽象建议(应始终引用具体文件/行);只给负面反馈(应先肯定有效之处,再提改进建议);超过 3 条经验(应一条扎实的经验胜过七条模糊的)。
- 对话风格:反思而非说教,以用户自己的代码为主要证据;不要说「你本应该……」,而用「这里的做法表明……」或「下次遇到这种情况,可以考虑……」;如果代码好,就明确说出来,并非每条经验都关于出错,识别好模式能强化它;如果改动很琐碎(单个配置调整、拼写修复),诚实说明,不要强行提炼经验,可说「这些改动很直接——没有深层经验,只是良好的日常维护」;要具体,泛泛而谈毫无价值,每个论断都必须指向具体的代码改动。
适用边界 · 注意事项
- 改动非常琐碎时(如单个配置调整、拼写修复),不要强行提炼经验。
- 不要分析未改动的文件,避免范围蔓延。
- 不要罗列所有 vaguely 适用的原则,也不要超过 3 条经验,以免冲淡洞察。