关于SO的另一个作业问题。似乎绝大多数学生都不知道调试器是什么或如何使用调试器。我觉得知道如何使用调试器与编程的其他基础几乎一样重要。
- 问题是不应该进行调试吗?如何在编程基础知识的基础上教授现代调试工具的使用方法?如果不是,为什么不呢。
关于SO的另一个作业问题。似乎绝大多数学生都不知道调试器是什么或如何使用调试器。我觉得知道如何使用调试器与编程的其他基础几乎一样重要。
Answers:
并不是必须要教如何使用调试器,而是要介绍更通用的调试技术。这当然将包括教授如何使用调试器,但还将包括各种其他重要技术,例如
另外一个好处是,许多技术也可以应用于编程以外的领域中的问题解决。
关于整个主题,有一本相当不错的书,所有本科生和任何学习编程基础知识的人都应该读这本书:David J Agans的《调试》。
正如您所提到的,专为计算机科学设计的课程旨在教给学生编程基础知识 -这些概念是向学生讲授的,希望他们能够掌握必要的概念并将其应用于更广泛的编程语言和问题集。
另一方面,调试工具是实现区域中的子集-每种工具的每种语言都不同(即使概念相同)。我们接触过调试工具,但从未真正深入了解它们。如果我们在调试工具上花费了一个多星期的时间,事后看来,我会回头,认为这是浪费时间。我宁愿了解BigO表示法或多态性。但是,如果尚未(成功)将调试工具的功能传达给学生,那么这将是不必要的。
在大多数入门编程课程中,程序状态非常简单,您可以使用一些打印语句清除所有错误。可能还存在强迫学生用手做事情的问题,以便他们了解某些类型的错误在代码中的发生方式和位置。如果您不知道在哪里看,那么调试器将毫无用处。
grep
的工作即可。没有步进,没有条件断点-仅grep。
没那么重要。我几乎从未使用过,也从未使用过。调试代码的最佳方法是:
对于许多现代的多线程软件,调试器具有隐藏错误而不是发现错误的作用。而且他们绝对不应该在学位级别上“教”,不如教他们如何使用文字处理器。
应该教授调试,因为学生是人类,人类会犯各种错误,其中一些错误需要在对给定错误的任何启发发生之前获取一些实验数据(调试信息)。
由于存在这样的前提(可能是从数学部门继承来的),即程序在设计上应该是正确的,所以甚至没有证明可以进行调试。因此,学生不应正确地进行编程的“实验”。但是,这忽略了不完美的人类在现实的制造过程中,在日程安排压力等情况下推出软件以更改规格的过程。