Я думаю, что мы все видели это. Начинающие задают вопросы о переполнении стека, которые следуют основной схеме ...
Я пытаюсь сделать (очень расплывчатое описание цели), но это не работает / я получаю ошибку / исключение. Пожалуйста помоги!
Не странно ли, что многие из них считают ненужным вставлять сообщение об ошибке?
Интересно, какова психология этого. Что это за сообщения об ошибках, которые заставляют людей изначально предполагать, что они бесполезны и не заслуживают внимания?
Я ищу ответ не «они не понимают сообщение об ошибке». Это не объясняет, почему они не захотят говорить кому-то еще, кто может это понять.
Я думаю, что если это действительно новичок, есть большая вероятность, что они вообще не знают, что есть сообщение об ошибке. Они только знают, что это не работает и что есть ошибка. Например, в Visual Studio они могут не видеть эту часть экрана.
По сути, они не знают, какая часть имеющейся у них информации полезна для выяснения проблемы. Если они это сделают, у них будет больше шансов исправить их самим и не спрашивать об этом.
источник
Я думаю, что задавать вопросы и устранять неполадки - это навык, который необходимо освоить, а для профессиональных разработчиков это важный навык, которому просто не учат достаточно часто.
Точно так же, как код, который вы пишете, когда вы впервые начинаете в этой профессии, будет ужасным по сравнению с кодом, который вы пишете сегодня, вопросы, которые вы задаете, будут ужасны по сравнению с тем, как вы их задаете сегодня.
Когда вы начинаете, легко быть пораженным всей информацией, которую вы изучаете, и когда вещи не собираются планировать, трудно понять, какая информация актуальна, а какая нет. Это большая часть причины, почему новички не могут решить проблему для себя в первую очередь!
источник
Это относится больше к IRC, чем к веб-сайтам, таким как Stack Overflow, что встречается гораздо реже.
Я думаю, что причина этого в том, что люди чувствуют себя лучше, если они знают, что конкретный человек заинтересован в их проблеме и готов помочь им. Поэтому они начинают с того, что говорят, что у них есть проблема, но они не вдавались в подробности, пока кто-то их не спросит, потому что они боятся, что в противном случае они не получат ответ в любом случае.
Иногда (не в случае ошибок компилятора) такое поведение действительно имеет смысл. Если у меня возникнет большая сложная проблема, я сначала сделаю так, чтобы кто-то слушал, прежде чем написать длинное объяснение, которое никто не прочитает.
источник
Потому что ошибки / исключения компилятора требуют, чтобы вы знали, что вы делаете неправильно, чтобы это исправить. Они для программистов, которые упускают из виду вещи, а не для людей, которые их не понимают.
Они также не всегда самые очевидные. Ошибка типа «неожиданно, если» не настолько интуитивна. «Но это, если должно быть там» - ответ новичка. Более опытный программист знает, что это означает, что он забыл точку с запятой в предыдущей строке.
источник
Я не думаю, что это только новички. У меня есть коллеги с многолетним опытом, которые, кажется, смотрят на номер строки только тогда, когда получают ошибку компилятора, а затем пытаются выяснить остальное сами (часто пытаясь voodoo типа «давайте добавим скобки» или «давайте разберем это»). на два утверждения ").
Я подозреваю, что это происходит из-за того, что у нас нет глубокого понимания правил языка, так что в целом плотное описание ошибки не имеет большого значения.
expression must be a modifiable lvalue
кажется довольно бесполезной информацией, если вы действительно не знаете, что такое lvalue .источник
Ну, для меня это был юноша, полон сбойного программного обеспечения Windows 95 с совершенно непроницаемыми сообщениями об ошибках, которые обычно заканчивались приблизительно 150 строками шестнадцатеричных чисел.
Я переживаю один и тот же опыт каждый раз, когда получаю хорошую загадочную трассировку стека Java, которая будет содержать 40 строк дерьма компилятора и ошибок Hibernate, и среди них очень хорошо спрятана фактическая ссылка на то, где в моем приложении находится ошибка.
Причина, по которой люди игнорируют сообщения об ошибках и трассировки стека, часто заключается в том, что сообщения об ошибках и трассировки стека непропорционально сложны по сравнению со сложностью проблемы. Нет смысла проливать 150 строк дерьма через мой экран, когда я пропускаю точку с запятой.
источник
Я преподаю несколько курсов по Linux для младших системных администраторов и программированию на PHP и Mysql. Большинство студентов на PHP знают, что есть ошибка, потому что они видят ужасное сообщение на экране. Но они, кажется, не в состоянии прочитать это. Обычно я захожу к их экрану, когда мне говорят, что что-то не работает, я читаю ошибку на экране, говорю им, чтобы она прочитала, подчеркивая файл и строку, отмеченные в сообщении об ошибке, и советую им посмотреть там. Они исправляют ошибку, но когда появляется другая ошибка, применяется та же процедура ... вздох ...
Для курса Linux иногда они даже не замечают ошибку. Они вводят какую-то команду, некоторые строки появляются на экране и продолжают следующую команду. Когда некоторые команды позже они, наконец, замечают, что что-то не работает, и поднимают руки, я подхожу, прокручиваю консоль и указываю на команду, которая завершилась с ошибкой из-за неверных параметров или чего-то еще. Их лицо: удивление. Поэтому для моих студентов linux было проще сделать так, чтобы они заметили, когда произошла ошибка, используя некоторую модификацию приглашения bash, чтобы она изменилась при появлении ошибки, как эта . Теперь заставьте их прочитать сообщение об ошибке, как только они его увидят, это другая битва (такая же, как у студентов PHP) ...
источник
Я полагаю, что они просто не привыкли думать о кодах ошибок, и к тому времени, когда они достигают места, где они должны дать их, они уже чувствуют, что они полностью объяснили проблему, и поэтому еще менее вероятно остановятся и подумают о том, они должны дать дополнительную информацию.
Задание вопроса включает в себя несколько этапов, и они наиболее логично расположены в следующем порядке:
Сообщение о вскрытии - это то место, где будет сообщение об ошибке, и оно находится в самом конце. К тому времени, когда новички достигают этой точки, они уже в конце умственной задачи объяснить свою проблему и с большей вероятностью что-то упустят (для новичка возникает проблема информационной перегрузки). Кроме того, в этот момент они уже чувствуют, что описали все аспекты проблемы, и у них есть прошлые привычки, которые мешают им помнить о кодах ошибок: в конце концов, другие области жизни не имеют кодов ошибок, поэтому они не используются для думать о них.
Может также случиться так, что даже если они помнят о кодах ошибок, они кажутся слишком загадочными, чтобы их можно было использовать на самом деле. Что такое ошибка 034982? Это действительно что-нибудь значит для кого-нибудь? И действительно ли это что-то добавляет к этому подробному описанию того, что я делал, как я это делал и как это не удавалось? Ужасно эта информация стоит сама за себя.
источник
Потому что для большинства языков большинство сообщений компилятора / среды выполнения не имеют никакого смысла. (C ++ и Java особенно, я смотрю на вас!) Правильный выбор ошибок, как правило, довольно низок в списке приоритетов дизайнера языка. Получение вещей, которые работают правильно, чтобы работать правильно, обычно является большим приоритетом, и большую часть времени они не заботятся о полировке мелких деталей.
Это одна из причин, почему мне нравится работать в Delphi. Весь язык полон внимания к мелочам, включая ошибки. Сообщения компилятора имеют смысл. Сообщения об ошибках во время выполнения имеют смысл. Следы стека имеют смысл. Это одна из вещей, которая делает его, безусловно, самым простым языком для отладки, с которым я когда-либо работал.
источник