先别急着怀疑教程写错了。更常见的顺序是:先把教程里每一步在你自己环境中的实际输出记下来,找出第一个与教程不一致的节点;这个节点之前的部分通常属于环境差异,之后的部分才更可能是步骤执行差异。换句话说,复现失败不是要你一次搞清所有原因,而是先把分界点找出来。
不要拿整个项目去对照。选教程里最小的一个可交付结果,比如“一个页面能打开并显示指定文字”或“一条数据能写入后读出来”。把它写成一句可核对的话:输入是什么、执行什么动作、期望看到什么。以读者手中正在跟做的那份教程为例,如果它讲的是本地起一个站点,那么最小对象就是“本机某个地址能返回一段固定文字”,而不是整套主题、插件、缓存和部署一起上。
这一步的动作是缩小对照范围,结果是后面每次只改一个变量,不会因为同时改了三处而无法判断谁起了作用。
从教程第一步开始逐条执行,每条都记录三件事:命令或操作、实际输出、与教程描述是否一致。遇到第一个不一致就停下,不要继续往下做。此时有两种解释:
区分它们的证据是:把同一条操作放到一个干净、与教程声明条件一致的环境里再跑一次。如果一致了,问题在环境;如果仍然不一致,问题更可能在步骤或教程本身。注意,某条命令报错并不自动说明是环境问题,也可能只是拼写错误,所以要看报错内容指向的是“找不到某物”还是“参数不合法”。
假设教程要求用某个版本的工具生成一个配置文件,你执行后文件内容与教程截图不同。不要同时升级工具又改路径。先只改版本,保持路径和参数不变,再对比输出。如果输出变得一致,说明版本是分界点;如果仍不一致,再把路径改成与教程相同,继续对比。
这个动作的结果会直接影响下一步:一旦定位到某个变量是关键,你就能判断是应该调整自己的环境去贴近教程,还是接受差异并手动修正后续步骤。前者适合教程仍在维护、且你打算继续跟完;后者适合教程已明显滞后,你只需要它的思路而非逐字照做。
定位之后,按下面三种情况分别处理:
无论哪种情况,都建议保留一份“不一致清单”:哪一步、什么输出、当时假设的原因、验证后是否成立。这份清单比记住结论更有用,因为下次换一份教程时,你可以先拿它去核对新教程的声明条件。
如果一份教程依赖的软件、服务或界面已经无法获得,或者你连续在三个不同节点上都遇到无法解释的差异,继续逐条复现的收益会迅速下降。此时更合理的做法是换一份声明条件更明确的资料,或者只提取其中的概念部分,用自己的方式重新实现。判断依据不是“教程看起来旧”,而是“你能否用可核对的输出证明它在你的条件下仍然成立”。