Answers:
我认为真正的原因是普通计算机用户,即使他们应该继续成为程序员,也必须相信他们不能对错误做任何事情。想一想。非程序员类型遇到神秘的错误消息时会做什么?他们可能会读它,但十分之九的人会简单地将其忽略并重试。只有它始终失败,他们才会查找它。
因此,当开始学习如何编程时,人们不会立即意识到他们所得到的错误包含有关如何修复该错误的有用信息;是的,尽管即使是受过训练的专业人员,编译器错误也几乎是无法理解的(我正在看着您,C ++模板元编程),至少它们提供了一个一般的起点,并且一旦您看到相同的错误两次,您将始终知道导致该问题的措施。
*老实说,不过,大多数错误消息看起来像“错误X2412:无法建立起平台间的加密狗:请验证bandersnatch设置或联系系统管理员。”
我认为,如果这是一个真正的初学者,则很有可能他们根本不知道错误消息。他们只知道它没有运行并且有错误。例如,在Visual Studio中,他们可能看不到屏幕的该部分。
基本上,他们不知道他们所拥有的信息的哪一部分可以用来找出问题所在。如果他们这样做了,他们将有更好的机会自己修复它,而不是首先询问它。
我认为,提出问题和进行故障排除是一项需要学习的技能,而对于专业开发人员来说,这是一项很重要的技能,只是很少被经常学习。
与您今天开始编写的代码相比,您刚开始从事该行业时编写的代码将变得可怕,与您今天所问的方式相比,您所提出的问题也将变得可怕。
当您刚开始时,很容易会被正在学习的所有信息所淹没,并且当事情不计划时,很难知道哪些信息是有意义的而什么是无关紧要的。这是初学者不能一开始就自己解决问题的重要原因!
这在IRC上的应用要比在线网站(如Stack Overflow)更多,后者更为罕见。
我认为其背后的原因是,如果人们知道一个人对他们的问题特别感兴趣并且愿意帮助他们,他们就会感觉更好。因此,他们首先说自己有问题,但是在有人问他们之前,他们不会详细介绍,因为他们担心否则他们将始终无法获得答案。
有时(不是在编译器错误的情况下),这种行为实际上是有道理的。如果我遇到一个复杂的大问题,请确保在写一个没人会读的冗长解释之前先有人听。
因为编译器错误/异常要求您知道自己在做什么错才能解决。它们是针对那些忽略事物的程序员的,而不是针对不了解它们的人的。
它们也不总是最明显的。诸如“如果发生意外”的错误不是那么直观。新手的回答是“但是应该在那里”。一个更有经验的程序员知道这意味着他已经忘记了前面的分号。
我不认为这只是新手。我有多年经验的同事,他们似乎只在遇到编译器错误时才查看行号,然后尝试自己找出其余的行(通常通过尝试像“让我们加括号”或“让我们分手”之类的伏都教分为两个陈述”)。
我的怀疑是,这是由于对语言规则的了解不深,因此对错误的一般密集描述没有太多意义。 expression must be a modifiable lvalue
如果您真的不知道左值是什么,似乎似乎是无用的信息。
错误消息是什么使人们最初认为他们没有用并且不值得关注?
好吧,对我来说,这是一个充满崩溃的Windows 95软件的年轻人,它带有完全无法理解的错误消息,通常以大约150行十六进制结尾。
每当我得到一个不错的,隐秘的Java堆栈跟踪(其中包含40行编译器废话和Hibernate错误)时,我都会重获同样的体验,其中隐藏得很好的是对我的应用程序中错误所在的实际引用。
人们忽略错误消息和堆栈跟踪的原因通常是错误消息和堆栈跟踪与问题的复杂性相比异常复杂。当我错过分号时,没有理由在屏幕上冲掉150行废话。
我正在为初级系统管理员讲授有关Linux的课程,以及使用PHP和Mysql进行编程的课程。大多数使用PHP的学生都知道有错误,因为他们在屏幕上看到了难看的消息。但是他们似乎无法阅读。通常,当他们告诉我某些内容不起作用时,我会转到他们的屏幕上,我会在屏幕上读取错误,告诉他们读取错误,并强调指出错误的文件和行并告诉他们去那里。他们纠正了该错误,但是当另一个错误出现时,将应用相同的过程。
对于Linux课程,有时他们甚至没有注意到该错误。他们输入一些命令,屏幕上出现一些行,然后继续下一个命令。当后来的一些命令他们最后发现有些东西不起作用并举手时,我上来,向上滚动控制台,并指向由于参数错误或其他原因而错误退出的命令。他们的脸:惊讶。因此,对于我的linux学生来说,最简单的部分是使他们在发生错误时注意到,使用对bash提示符的一些修改以使其在出现错误时有所不同,例如这样。现在,让他们看到错误消息后就开始阅读,这是另一回事(与PHP学生一样)。
我相信他们只是不习惯于思考错误代码,而当他们到达应该给他们的地方时,他们已经感觉到他们已经完全解释了问题,因此,甚至不大可能停下来想一想是否他们应该提供其他信息。
提出问题涉及几个阶段,并且按照以下顺序最合理地安排它们:
验尸报告是错误消息将在的地方,并且它在最后。当新手到达这一点时,他们正处于解释问题的精神挑战的终点,并且更有可能错过某些东西(对于新手来说,存在信息超载问题)。此外,在这一点上,他们已经感觉到他们已经描述了问题的各个方面,并且过去的习惯使他们无法记住错误代码:毕竟,生活的其他领域都没有错误代码,因此他们不习惯想想他们。
即使他们确实记得错误代码,也似乎太神秘了,无法实际使用。错误034982到底是什么?这真的对任何人都有意义吗?它是否真的对我正在做的事情,如何做以及如何失败的详细说明增加了一些内容?毫无疑问,这些信息本身就是正确的。