Почему новые программисты, кажется, игнорируют сообщения об ошибках компилятора / сообщения об исключительной ситуации во время выполнения? [закрыто]

27

Я думаю, что мы все видели это. Начинающие задают вопросы о переполнении стека, которые следуют основной схеме ...

Я пытаюсь сделать (очень расплывчатое описание цели), но это не работает / я получаю ошибку / исключение. Пожалуйста помоги!

Не странно ли, что многие из них считают ненужным вставлять сообщение об ошибке?

Интересно, какова психология этого. Что это за сообщения об ошибках, которые заставляют людей изначально предполагать, что они бесполезны и не заслуживают внимания?

Я ищу ответ не «они не понимают сообщение об ошибке». Это не объясняет, почему они не захотят говорить кому-то еще, кто может это понять.

Timwi
источник

Ответы:

21

Я думаю, что настоящая причина в том, что обычные пользователи компьютеров, даже если им стоит стать программистами, должны быть уверены, что они ничего не могут сделать с ошибками. Думаю об этом. Что делают непрограммистские типы, когда они сталкиваются с загадочным сообщением об ошибке *? Они могли бы прочитать это, но девять раз из десяти они просто отклонят это и попробуют снова. Только если он постоянно терпит неудачу, они будут искать его.

Поэтому, когда начинают изучать программирование, люди не сразу понимают, что полученная ошибка содержит полезную информацию о том, как ее исправить; и да, хотя ошибки компилятора могут быть почти нечитаемыми даже для обученного специалиста (я смотрю на вас, метапрограммирование шаблонов C ++), по крайней мере, они обеспечивают общую отправную точку, и как только вы видели ту же ошибку пару раз , вы всегда будете знать, что вы сделали, чтобы вызвать это.

* Честно, однако, большинство сообщений об ошибках выглядят для Joe Average как «Ошибка X2412: не удалось установить фробникаторное межплатформенное dongledash: пожалуйста, проверьте настройки bandersnatch или обратитесь к системному администратору».

Джон Перди
источник
6
Вы не возражаете, если я использую это сообщение об ошибке в моем программном обеспечении?
I.devries
12

Я думаю, что если это действительно новичок, есть большая вероятность, что они вообще не знают, что есть сообщение об ошибке. Они только знают, что это не работает и что есть ошибка. Например, в Visual Studio они могут не видеть эту часть экрана.

По сути, они не знают, какая часть имеющейся у них информации полезна для выяснения проблемы. Если они это сделают, у них будет больше шансов исправить их самим и не спрашивать об этом.

Брайан Р. Бонди
источник
Это справедливая идея, но действительно ли это объясняет большой объем таких вопросов?
Тимви
@Timwi: Возможно, это объясняет относительно небольшой объем вопросов правильной информацией об ошибках. Абсолютный объем плохих вопросов зависит от размера сообщества.
Брайан Р. Бонди
6

Я думаю, что задавать вопросы и устранять неполадки - это навык, который необходимо освоить, а для профессиональных разработчиков это важный навык, которому просто не учат достаточно часто.

Точно так же, как код, который вы пишете, когда вы впервые начинаете в этой профессии, будет ужасным по сравнению с кодом, который вы пишете сегодня, вопросы, которые вы задаете, будут ужасны по сравнению с тем, как вы их задаете сегодня.

Когда вы начинаете, легко быть пораженным всей информацией, которую вы изучаете, и когда вещи не собираются планировать, трудно понять, какая информация актуальна, а какая нет. Это большая часть причины, почему новички не могут решить проблему для себя в первую очередь!

Paddyslacker
источник
5

Это относится больше к IRC, чем к веб-сайтам, таким как Stack Overflow, что встречается гораздо реже.

Я думаю, что причина этого в том, что люди чувствуют себя лучше, если они знают, что конкретный человек заинтересован в их проблеме и готов помочь им. Поэтому они начинают с того, что говорят, что у них есть проблема, но они не вдавались в подробности, пока кто-то их не спросит, потому что они боятся, что в противном случае они не получат ответ в любом случае.

Иногда (не в случае ошибок компилятора) такое поведение действительно имеет смысл. Если у меня возникнет большая сложная проблема, я сначала сделаю так, чтобы кто-то слушал, прежде чем написать длинное объяснение, которое никто не прочитает.

Томас Бонини
источник
Боги, я бы хотел, чтобы это все еще относилось к IRC больше, чем к SO ...
Феликс Ганьон-Гренье
3

Потому что ошибки / исключения компилятора требуют, чтобы вы знали, что вы делаете неправильно, чтобы это исправить. Они для программистов, которые упускают из виду вещи, а не для людей, которые их не понимают.

Они также не всегда самые очевидные. Ошибка типа «неожиданно, если» не настолько интуитивна. «Но это, если должно быть там» - ответ новичка. Более опытный программист знает, что это означает, что он забыл точку с запятой в предыдущей строке.

Мача
источник
Конечно, но есть разница между тем, чтобы думать что-то загадочное и думать, что это бесполезно.
Дэвид Торнли
1
@ Дэвид: какая польза от загадочных сообщений об ошибках? ... не так много.
Морган Херлокер
1
@Irontool: Цитируйте это, когда спрашиваете об этом. Вырежьте и вставьте его в веб-поиск. Даже если вы этого не понимаете, оно может действовать как волшебное печенье.
Дэвид Торнли
2

Я не думаю, что это только новички. У меня есть коллеги с многолетним опытом, которые, кажется, смотрят на номер строки только тогда, когда получают ошибку компилятора, а затем пытаются выяснить остальное сами (часто пытаясь voodoo типа «давайте добавим скобки» или «давайте разберем это»). на два утверждения ").

Я подозреваю, что это происходит из-за того, что у нас нет глубокого понимания правил языка, так что в целом плотное описание ошибки не имеет большого значения. expression must be a modifiable lvalueкажется довольно бесполезной информацией, если вы действительно не знаете, что такое lvalue .

AShelly
источник
По моему опыту, просто посмотреть на код хорошо работает для синтаксических ошибок, так как там сообщение компилятора часто о сбое, которое косвенно вызвано исходной ошибкой. Для семантических ошибок, как в вашем примере, сообщение об ошибке обычно является существенным.
CodesInChaos
1

Что это за сообщения об ошибках, которые заставляют людей изначально предполагать, что они бесполезны и не заслуживают внимания?

Ну, для меня это был юноша, полон сбойного программного обеспечения Windows 95 с совершенно непроницаемыми сообщениями об ошибках, которые обычно заканчивались приблизительно 150 строками шестнадцатеричных чисел.

Я переживаю один и тот же опыт каждый раз, когда получаю хорошую загадочную трассировку стека Java, которая будет содержать 40 строк дерьма компилятора и ошибок Hibernate, и среди них очень хорошо спрятана фактическая ссылка на то, где в моем приложении находится ошибка.

Причина, по которой люди игнорируют сообщения об ошибках и трассировки стека, часто заключается в том, что сообщения об ошибках и трассировки стека непропорционально сложны по сравнению со сложностью проблемы. Нет смысла проливать 150 строк дерьма через мой экран, когда я пропускаю точку с запятой.

Том Моррис
источник
2
Очень хорошо спрятан? Просто отсканируйте имя вашего пакета.
Барт ван Хейкелом
1

Я преподаю несколько курсов по Linux для младших системных администраторов и программированию на PHP и Mysql. Большинство студентов на PHP знают, что есть ошибка, потому что они видят ужасное сообщение на экране. Но они, кажется, не в состоянии прочитать это. Обычно я захожу к их экрану, когда мне говорят, что что-то не работает, я читаю ошибку на экране, говорю им, чтобы она прочитала, подчеркивая файл и строку, отмеченные в сообщении об ошибке, и советую им посмотреть там. Они исправляют ошибку, но когда появляется другая ошибка, применяется та же процедура ... вздох ...

Для курса Linux иногда они даже не замечают ошибку. Они вводят какую-то команду, некоторые строки появляются на экране и продолжают следующую команду. Когда некоторые команды позже они, наконец, замечают, что что-то не работает, и поднимают руки, я подхожу, прокручиваю консоль и указываю на команду, которая завершилась с ошибкой из-за неверных параметров или чего-то еще. Их лицо: удивление. Поэтому для моих студентов linux было проще сделать так, чтобы они заметили, когда произошла ошибка, используя некоторую модификацию приглашения bash, чтобы она изменилась при появлении ошибки, как эта . Теперь заставьте их прочитать сообщение об ошибке, как только они его увидят, это другая битва (такая же, как у студентов PHP) ...

Карлос Кампдеррос
источник
0

Я полагаю, что они просто не привыкли думать о кодах ошибок, и к тому времени, когда они достигают места, где они должны дать их, они уже чувствуют, что они полностью объяснили проблему, и поэтому еще менее вероятно остановятся и подумают о том, они должны дать дополнительную информацию.

Задание вопроса включает в себя несколько этапов, и они наиболее логично расположены в следующем порядке:

  1. вам нужно описать что вы делали
  2. вам нужно описать, как вы это делали
  3. вам нужно описать, что произошло, когда это не удалось (или как это не удалось)
  4. Вы должны дать отчет о вскрытии

Сообщение о вскрытии - это то место, где будет сообщение об ошибке, и оно находится в самом конце. К тому времени, когда новички достигают этой точки, они уже в конце умственной задачи объяснить свою проблему и с большей вероятностью что-то упустят (для новичка возникает проблема информационной перегрузки). Кроме того, в этот момент они уже чувствуют, что описали все аспекты проблемы, и у них есть прошлые привычки, которые мешают им помнить о кодах ошибок: в конце концов, другие области жизни не имеют кодов ошибок, поэтому они не используются для думать о них.

Может также случиться так, что даже если они помнят о кодах ошибок, они кажутся слишком загадочными, чтобы их можно было использовать на самом деле. Что такое ошибка 034982? Это действительно что-нибудь значит для кого-нибудь? И действительно ли это что-то добавляет к этому подробному описанию того, что я делал, как я это делал и как это не удавалось? Ужасно эта информация стоит сама за себя.

EpsilonVector
источник
В какой среде / компиляторе / фреймворке вы используете чисто числовые коды ошибок? oO
Тимви
Я не использую одну такую ​​IDE. Само сообщение об ошибке может считаться загадочным (бесполезным) или звучать как перефразирование приведенного выше описания (не добавляет информации).
EpsilonVector
0

Потому что для большинства языков большинство сообщений компилятора / среды выполнения не имеют никакого смысла. (C ++ и Java особенно, я смотрю на вас!) Правильный выбор ошибок, как правило, довольно низок в списке приоритетов дизайнера языка. Получение вещей, которые работают правильно, чтобы работать правильно, обычно является большим приоритетом, и большую часть времени они не заботятся о полировке мелких деталей.

Это одна из причин, почему мне нравится работать в Delphi. Весь язык полон внимания к мелочам, включая ошибки. Сообщения компилятора имеют смысл. Сообщения об ошибках во время выполнения имеют смысл. Следы стека имеют смысл. Это одна из вещей, которая делает его, безусловно, самым простым языком для отладки, с которым я когда-либо работал.

Мейсон Уилер
источник