<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Yenpo 文章</title><description>用可以自己运行的小例子学读代码。</description><link>https://yenpo.app/</link><language>zh-CN</language><item><title>AI 生成的代码看不懂？用预测、手改和运行学会一条规则</title><link>https://yenpo.app/zh/blog/learn-from-ai-generated-code/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/learn-from-ai-generated-code/</guid><description>Vibe coding 做出的功能能跑，却解释不清？用一个可运行的筛选练习，先预测三个结果，再亲手改一条规则，检查哪些行为改变、哪些保持不变。</description><pubDate>Sat, 17 Oct 2026 00:00:00 GMT</pubDate></item><item><title>如何验证 AI 代码解释：追出一次隐藏的数据修改</title><link>https://yenpo.app/zh/blog/verify-ai-code-explanation/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/verify-ai-code-explanation/</guid><description>浅复制创建了新的外层对象，为什么改 label 还是影响原数据？沿调用方检查引用，再运行测试，找出 AI 解释漏掉的修改。</description><pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Git diff 怎么看：用一个完整例子审查 AI 代码改动</title><link>https://yenpo.app/zh/blog/read-git-diff/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/read-git-diff/</guid><description>选对 Git 比较基准，读懂 hunk 行号与增删标记，找出补丁里没显示的未跟踪文件，再运行一个具体行为测试。</description><pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate></item><item><title>从 JavaScript 错误堆栈和 Error.cause 追到出错输入</title><link>https://yenpo.app/zh/blog/read-javascript-stack-trace/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/read-javascript-stack-trace/</guid><description>从 Import failed 外层错误找到解析器和坏 JSON，对照保留与丢失 cause 的结果，再用 Node.js 验证修正后的输入。</description><pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate></item><item><title>让 AI 重构之前，先用行为刻画测试读懂未测试代码</title><link>https://yenpo.app/zh/blog/characterization-tests-before-ai-refactoring/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/characterization-tests-before-ai-refactoring/</guid><description>观察一个小型格式化器，固定时钟与环境输入，把意外的现有行为保存为测试。实跑保持行为的重构和两处预期失败，再单独决定是否改变需求。</description><pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate></item><item><title>改一个函数会影响哪里？用调用方和测试做变更影响分析</title><link>https://yenpo.app/zh/blog/code-change-impact-analysis/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/code-change-impact-analysis/</guid><description>把返回毫秒的函数改成返回秒，为什么刷新判断坏了、排序没变、动态选中的 CSV 导出器又除了一次？用同一组测试复现三种结果。</description><pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AI 把测试改绿了，原来的断言还在吗？</title><link>https://yenpo.app/zh/blog/review-ai-generated-tests/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/review-ai-generated-tests/</guid><description>只剩三个名额却成功预订了四个，测试仍然全绿。对照实现与测试的 diff，追到未修改的调用方，再用同一组反例跑出被掩盖的回归。</description><pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate></item><item><title>沿着 HTTP 请求读代码：从路由追到数据查询</title><link>https://yenpo.app/zh/blog/trace-http-request-through-code/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/trace-http-request-through-code/</guid><description>顺着一个 HTTP 请求读路由、身份认证、中间件和数据查询，找出成员检查通过却返回其他工作区文档的原因。附无依赖 Node.js 案例与回归测试。</description><pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate></item><item><title>这段代码为什么存在？用 git blame 和 git log 追溯历史</title><link>https://yenpo.app/zh/blog/why-code-exists-git-history/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/why-code-exists-git-history/</guid><description>用 git blame、git log -S 和 -L 穿过格式改动与文件重命名，找到校验逻辑的原始修复。附可重建的 Git 历史、回归测试和预期结果。</description><pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate></item><item><title>审查一段 AI 写的 Promise 缓存</title><link>https://yenpo.app/zh/blog/review-ai-generated-code/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/review-ai-generated-code/</guid><description>AI 写的缓存补丁看起来没问题，常规测试也能过。这篇找出让它出错的调用顺序，给出修复，再用测试把这个顺序固定下来。</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate></item><item><title>修复 JavaScript 异步竞态：让界面保留最新选择</title><link>https://yenpo.app/zh/blog/trace-a-function-call/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/trace-a-function-call/</guid><description>防止旧的异步响应覆盖最新选择。不用定时器复现 JavaScript 竞态，用请求序号保护正文、错误提示和加载状态，并运行测试验证修复。</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate></item><item><title>读陌生代码：先找入口，再追一个配置值</title><link>https://yenpo.app/zh/blog/understand-an-unfamiliar-codebase/</link><guid isPermaLink="true">https://yenpo.app/zh/blog/understand-an-unfamiliar-codebase/</guid><description>从终端命令、输出文字、测试名或配置名找到入口，再追踪报表条数的优先级、校验和输出。附可运行的小项目，区分函数测试与真实命令。</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate></item></channel></rss>