为什么新程序员似乎忽略编译器错误消息/运行时异常消息?[关闭]


27

我认为我们都已经看到了。初学者在堆栈溢出问题上遵循基本概述...

我正在尝试做(对目标的描述非常模糊),但它不起作用/我收到错误/异常。请帮忙!

如此多的人似乎认为没有必要粘贴错误消息是不是很奇怪?

我不知道这是什么心理。错误消息是什么使人们最初认为他们没有用并且不值得关注?

我要寻找的答案不是 “他们不理解错误消息”。这并不能解释为什么他们不考虑告诉其他可能理解的人。

Answers:


21

我认为真正的原因是普通计算机用户,即使他们应该继续成为程序员,也必须相信他们不能对错误做任何事情。想一想。非程序员类型遇到神秘的错误消息时会做什么?他们可能会读它,但十分之九的人会简单地将其忽略并重试。只有它始终失败,他们才会查找它。

因此,当开始学习如何编程时,人们不会立即意识到他们所得到的错误包含有关如何修复该错误的有用信息;是的,尽管即使是受过训练的专业人员,编译器错误也几乎是无法理解的(我正在看着您,C ++模板元编程),至少它们提供了一个一般的起点,并且一旦您看到相同的错误两次,您将始终知道导致该问题的措施。

*老实说,不过,大多数错误消息看起来像“错误X2412:无法建立起平台间的加密狗:请验证bandersnatch设置或联系系统管理员。”


6
您介意我在软件中使用该错误消息吗?
I.devries 2014年

12

我认为,如果这是一个真正的初学者,则很有可能他们根本不知道错误消息。他们只知道它没有运行并且有错误。例如,在Visual Studio中,他们可能看不到屏幕的该部分。

基本上,他们不知道他们所拥有的信息的哪一部分可以用来找出问题所在。如果他们这样做了,他们将有更好的机会自己修复它,而不是首先询问它。


这是一个很不错的主意,但这真的可以解释大量此类问题吗?
Timwi 2010年

@Timwi:也许它用适当的错误信息解释了相对较少的问题。不良问题的绝对数量与社区规模有关。
Brian R. Bondy 2010年

6

我认为,提出问题和进行故障排除是一项需要学习的技能,而对于专业开发人员来说,这是一项很重要的技能,只是很少被经常学习。

与您今天开始编写的代码相比,您刚开始从事该行业时编写的代码将变得可怕,与您今天所问的方式相比,您所提出的问题也将变得可怕。

当您刚开始时,很容易会被正在学习的所有信息所淹没,并且当事情不计划时,很难知道哪些信息是有意义的而什么是无关紧要的。这是初学者不能一开始就自己解决问题的重要原因!


5

这在IRC上的应用要比在线网站(如Stack Overflow)更多,后者更为罕见。

我认为其背后的原因是,如果人们知道一个人对他们的问题特别感兴趣并且愿意帮助他们,他们就会感觉更好。因此,他们首先说自己有问题,但是在有人问他们之前,他们不会详细介绍,因为他们担心否则他们将始终无法获得答案。

有时(不是在编译器错误的情况下),这种行为实际上是有道理的。如果我遇到一个复杂的大问题,请确保在写一个没人会读的冗长解释之前先有人听。


神,我希望它仍然比SO应用于更多的IRC ...
费利克斯·加侬-格雷尼尔

3

因为编译器错误/异常要求您知道自己在做什么错才能解决。它们是针对那些忽略事物的程序员的,而不是针对不了解它们的人的。

它们也不总是最明显的。诸如“如果发生意外”的错误不是那么直观。新手的回答是“但是应该在那里”。一个更有经验的程序员知道这意味着他已经忘记了前面的分号。


当然-但是认为某些事物是神秘的和认为它没有用之间是有区别的。
David Thornley,

1
@David:隐秘的错误消息有什么用?...不多。
Morgan Herlocker 2011年

1
@Irontool:在询问时引用它。将其剪切并粘贴到网络搜索中。即使您不了解它,它也可以充当魔术Cookie。
David Thornley

2

我不认为这只是新手。我有多年经验的同事,他们似乎只在遇到编译器错误时才查看行号,然后尝试自己找出其余的行(通常通过尝试像“让我们加括号”或“让我们分手”之类的伏都教分为两个陈述”)。

我的怀疑是,这是由于对语言规则的了解不深,因此对错误的一般密集描述没有太多意义。 expression must be a modifiable lvalue如果您真的不知道左值是什么,似乎似乎是无用的信息。


以我的经验,仅查看代码就可以很好地解决语法错误,因为那里的编译器消息通常是由原始错误间接引起的故障。对于您的示例中的语义错误,错误消息通常是必不可少的。
CodesInChaos

1

错误消息是什么使人们最初认为他们没有用并且不值得关注?

好吧,对我来说,这是一个充满崩溃的Windows 95软件的年轻人,它带有完全无法理解的错误消息,通常以大约150行十六进制结尾。

每当我得到一个不错的,隐秘的Java堆栈跟踪(其中包含40行编译器废话和Hibernate错误)时,我都会重获同样的体验,其中隐藏得很好的是对我的应用程序中错误所在的实际引用。

人们忽略错误消息和堆栈跟踪的原因通常是错误消息和堆栈跟踪与问题的复杂性相比异常复杂。当我错过分号时,没有理由在屏幕上冲掉150行废话。


2
隐藏得很好吗?只需扫描您的包裹名称即可。
Bart van Heukelom 2010年

1

我正在为初级系统管理员讲授有关Linux的课程,以及使用PHP和Mysql进行编程的课程。大多数使用PHP的学生都知道有错误,因为他们在屏幕上看到了难看的消息。但是他们似乎无法阅读。通常,当他们告诉我某些内容不起作用时,我会转到他们的屏幕上,我会在屏幕上读取错误,告诉他们读取错误,并强调指出错误的文件和行并告诉他们去那里。他们纠正了该错误,但是当另一个错误出现时,将应用相同的过程。

对于Linux课程,有时他们甚至没有注意到该错误。他们输入一些命令,屏幕上出现一些行,然后继续下一个命令。当后来的一些命令他们最后发现有些东西不起作用并举手时,我上来,向上滚动控制台,并指向由于参数错误或其他原因而错误退出的命令。他们的脸:惊讶。因此,对于我的linux学生来说,最简单的部分是使他们在发生错误时注意到,使用对bash提示符的一些修改以使其在出现错误时有所不同,例如这样。现在,让他们看到错误消息后就开始阅读,这是另一回事(与PHP学生一样)。


0

我相信他们只是不习惯于思考错误代码,而当他们到达应该给他们的地方时,他们已经感觉到他们已经完全解释了问题,因此,甚至不大可能停下来想一想是否他们应该提供其他信息。

提出问题涉及几个阶段,并且按照以下顺序最合理地安排它们:

  1. 你需要描述你在做什么
  2. 您需要描述自己的做法
  3. 您需要描述失败时发生的事情(或失败的方式)
  4. 您需要提供验尸报告

验尸报告是错误消息将在的地方,并且它在最后。当新手到达这一点时,他们正处于解释问题的精神挑战的终点,并且更有可能错过某些东西(对于新手来说,存在信息超载问题)。此外,在这一点上,他们已经感觉到他们已经描述了问题的各个方面,并且过去的习惯使他们无法记住错误代码:毕竟,生活的其他领域都没有错误代码,因此他们不习惯想想他们。

即使他们确实记得错误代码,也似乎太神秘了,无法实际使用。错误034982到底是什么?这真的对任何人都有意义吗?它是否真的对我正在做的事情,如何做以及如何失败的详细说明增加了一些内容?毫无疑问,这些信息本身就是正确的。


您使用的是什么环境/编译器/框架,其纯粹是数字错误代码?oO
Timwi's

我没有使用这样的IDE。错误消息本身可能被认为是含糊的(无用的),或者听起来像是对以上描述的重新表述(不添加信息)。
EpsilonVector 2010年

0

因为对于大多数语言来说,大多数编译器/运行时消息都没有任何意义。(特别是C ++和Java,我在看着您!)在语言设计人员的优先级列表中,正确纠正错误的可能性通常较低。通常,将使工作正常运行的事情放在首位,并且很多时间他们不花心思去细化细节。

这就是我喜欢在Delphi工作的原因之一。整个语言都对包括错误在内的小细节充满了关注。编译器消息很有意义。运行时错误消息很有意义。堆栈跟踪很有意义。到目前为止,这是使它成为我使用过的最简单的调试语言的原因之一。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.