跳转至

2024 秋 · 如何教会同学调试

讨论:

  • 学习调试的难点。强调调试是 "需要实践而非理论讲授"; 同学可能因为不喜欢写码而缺乏动机。
  • 学会调试的难点来自多个方面:不善于使用搜索工具; 缺乏 "找中间状态和预期状态是否一致" 的思路(gdb/printf/dump 本质相同); 本科课程少系统教调试; 写码欲望下降、潜意识想要现成框架,而从零写框架正是珍贵的调试学习机会。也提出了统一工具/GUI 的可能性。
  • 大语言模型能否帮助同学调试:有益还是有害?我们应禁止、鼓励还是引导/规范?对 "摆烂型" 同学可能遇 bug 直接躺平; 或已常驻 copilot/cursor 等工具。要不要把作业出得更难/出 "反大模型" 的作业?以足够大的开源项目为学习材料?
  • 通过作业/文档教会调试的尝试:Stanford CS107e LAB3、清华网络原理调试文档、计算机组成原理错误速查清单、以及数据结构 "调试辅导课"(前半学期每周一次 20-30 分钟,分调试概论、代码风格、测例构造三节,因为线下答疑难以克服代码难读、工具不熟、调出后没建立信心等问题)。
  • "自己从哪里学会调试" 的讨论:分布式/并行系统难以重现、图形学以输出调试为主、硬件调试主要看波形、最小化代码 / minimal working example 复现; 也有人当了助教才自学 gdb。
  • 相关材料:Competitive Debugging (Onward! 2022), RoboBUG (ICER 17); 引用了 Dijkstra 与 Kernighan 关于调试的名言。

⇦ 返回 2024 秋主页