¿Por qué los nuevos programadores parecen ignorar los mensajes de error del compilador / mensajes de excepción de tiempo de ejecución? [cerrado]


27

Creo que todos hemos visto esto. Los principiantes hacen preguntas sobre Stack Overflow que siguen el esquema básico ...

Estoy tratando de hacerlo (descripción muy vaga del objetivo) pero no funciona / recibo un error / excepción. ¡Por favor ayuda!

¿No es extraño que tantos de ellos parezcan innecesarios pegar el mensaje de error?

Me pregunto cuál es la psicología de esto. ¿Qué tienen los mensajes de error que hacen que las personas inicialmente asuman que son inútiles y que no vale la pena prestarles atención?

La respuesta que estoy buscando no es "no entienden el mensaje de error". Eso no explica por qué no considerarían decirle a nadie más que podría entenderlo.

Respuestas:


21

Creo que la verdadera razón es que los usuarios comunes de computadoras, incluso si deberían convertirse en programadores, están condicionados a creer que no pueden hacer nada al respecto. Piénsalo. ¿Qué hacen los tipos que no son programadores cuando encuentran un mensaje de error críptico *? Puede que lo lean, pero nueve de cada diez veces simplemente lo descartarán e intentarán nuevamente. Solo si falla constantemente lo buscarán.

Por lo tanto, cuando comienzan a aprender a programar, las personas no se dan cuenta de inmediato de que el error que están recibiendo contiene información útil sobre cómo solucionarlo; y sí, aunque los errores del compilador pueden ser casi ilegibles incluso para el profesional capacitado (te estoy mirando, metaprogramación de plantillas C ++), al menos proporcionan un punto de partida general, y una vez que hayas visto el mismo error un par de veces , siempre sabrás lo que has hecho para causarlo.

* Honestamente, sin embargo, la mayoría de los mensajes de error se ven en Joe Average como "Error X2412: No se puede establecer dongledash interplatforming frobnicatory: verifique la configuración de bandersnatch o póngase en contacto con el administrador del sistema".


66
¿Te importa si uso ese mensaje de error en mi software?
I.devries

12

Creo que si es un verdadero principiante, hay muchas posibilidades de que no sepan que hay un mensaje de error. Solo saben que no se ejecuta y que hay un error. Por ejemplo, en Visual Studio, es posible que no vean esa parte de la pantalla.

Básicamente, no saben qué parte de la información que tienen disponible es útil para descubrir cuál es el problema. Si lo hicieran, habría una mejor posibilidad de que pudieran arreglarlo ellos mismos y no preguntar sobre eso en primer lugar.


Esa es una idea justa, pero ¿eso realmente explica el gran volumen de tales preguntas?
Timwi

@Timwi: Tal vez explica el volumen relativamente menor de preguntas con la información de error adecuada. El volumen absoluto de malas preguntas es relativo al tamaño de la comunidad.
Brian R. Bondy

6

Creo que hacer preguntas y solucionar problemas es una habilidad que debe aprenderse, y para los desarrolladores profesionales, es una habilidad importante que simplemente no se enseña con la suficiente frecuencia.

Así como el código que escribes cuando comienzas en esta profesión será horrible en comparación con el código que escribes hoy, las preguntas que hagas serán terribles en comparación con la forma en que las haces hoy.

Cuando comienzas, es fácil sentirse abrumado por toda la información que estás aprendiendo y cuando las cosas no van a planearse, es difícil saber qué información es relevante y qué no. ¡Esta es una gran parte de la razón por la cual los principiantes no pueden resolver el problema por sí mismos en primer lugar!


5

Esto se aplica más en IRC que en sitios web en línea como Stack Overflow, que es mucho más raro.

Creo que el razonamiento detrás de esto es que las personas se sienten mejor si saben que una persona en particular está interesada en su problema y está dispuesta a ayudarla. Entonces comienzan diciendo que tienen un problema, pero no entran en detalles hasta que alguien les pregunte, porque temen que de lo contrario no obtendrán una respuesta de todos modos.

A veces (no en el caso de errores del compilador) este comportamiento realmente tiene sentido. Si tengo un gran problema complicado, me aseguraré de que haya alguien escuchando antes de escribir una larga explicación que nadie leerá.


Dioses, desearía que todavía se aplicara más a IRC que SO ...
Félix Gagnon-Grenier

3

Debido a que los errores / excepciones del compilador requieren que sepa qué está haciendo mal para solucionarlo. Son para programadores que pasan por alto las cosas, no para las personas que no las entienden.

Tampoco son siempre los más obvios. Un error como "inesperado si" no es tan intuitivo. "Pero eso si debería estar allí" es la respuesta de un novato. Un programador más experimentado sabe que eso significa que ha olvidado el punto y coma en la línea anterior .


Claro, pero hay una diferencia entre pensar que algo es críptico y pensar que es inútil.
David Thornley

1
@David: ¿de qué sirve un mensaje de error críptico? ... no mucho.
Morgan Herlocker

1
@Irontool: Cítalo cuando pregunte por SO. Córtalo y pégalo en una búsqueda web. Incluso si no lo entiendes, puede actuar como una galleta mágica.
David Thornley

2

No creo que sean solo novatos. Tengo compañeros de trabajo con años de experiencia que parecen solo mirar el número de línea cuando reciben un error del compilador, luego intentan averiguar el resto ellos mismos (a menudo probando vudú como "agreguemos paréntesis" o "separemos esto" en dos declaraciones ").

Mi sospecha es que esto proviene de no tener una comprensión profunda de las reglas del lenguaje, por lo que la descripción generalmente densa del error no tiene mucho significado. expression must be a modifiable lvalueque parece ser información bastante inútil si realmente no sabe lo que es un valor-I es.


En mi experiencia, solo mirar el código funciona bien para los errores de sintaxis, ya que allí el mensaje del compilador a menudo trata de una falla indirectamente causada por el error original. Para errores semánticos, como en su ejemplo, el mensaje de error suele ser esencial.
CodesInChaos

1

¿Qué tienen los mensajes de error que hacen que las personas inicialmente asuman que son inútiles y que no vale la pena prestarles atención?

Bueno, para mí, era un joven lleno de fallos en el software de Windows 95 con mensajes de error completamente impenetrables que generalmente terminaban con unas 150 líneas de hexadecimales.

Revivo la misma experiencia cada vez que obtengo un buen seguimiento críptico de la pila de Java que contendrá 40 líneas de basura del compilador y errores de Hibernate, y muy oculto entre ellos está la referencia real de dónde está el error en mi aplicación.

La razón por la que las personas ignoran los mensajes de error y los seguimientos de la pila es a menudo los mensajes de error y los seguimientos de la pila son desproporcionadamente complicados en comparación con la complejidad del problema. No hay razón para tirar 150 líneas de basura a través de mi pantalla cuando pierdo un punto y coma.


2
Escondido muy bien? Simplemente busque el nombre de su paquete.
Bart van Heukelom

1

Estoy enseñando algunos cursos en Linux para Junior Sysadmins, y Programando con PHP y Mysql. La mayoría de los estudiantes en PHP saben que hay un error porque ven el mensaje feo en la pantalla. Pero parecen incapaces de leerlo. Por lo general, voy a su pantalla cuando me dicen que algo no funciona, leo el error en la pantalla, les digo que lo lean, enfatizo el archivo y la línea anotados en el error y les digo que miren allí. Corrigen el error, pero cuando aparece otro error, se aplica el mismo procedimiento ... suspiro ...

Para el curso de Linux, a veces ni siquiera notan el error. Ingresan algún comando, aparecen algunas líneas en la pantalla y continúan con el siguiente comando. Cuando algunos comandos luego notan que algo no está funcionando y levanto la mano, subo, desplazo hacia arriba la consola y señalo un comando que salió con un error debido a parámetros incorrectos o lo que sea. Su cara: sorpresa. Entonces, la parte fácil para mis estudiantes de Linux fue hacerles notar cuando ocurre un error, usando alguna modificación del indicador bash para que sea diferente cuando aparece un error, como este . Ahora, pídales que lean el mensaje de error una vez que lo vean, esa es una batalla diferente (igual que con los estudiantes de PHP) ...


0

Creo que simplemente no están acostumbrados a pensar en códigos de error, y para cuando llegan al lugar donde deberían darlos, ya sienten que explicaron completamente el problema y, por lo tanto, es menos probable que se detengan y piensen si deberían dar información adicional.

Hacer una pregunta implica algunas etapas, y están más lógicamente organizadas en este orden:

  1. necesitas describir lo que estabas haciendo
  2. necesitas describir cómo lo estabas haciendo
  3. debe describir qué sucedió cuando falló (o cómo falló)
  4. necesita dar el informe post mortem

El informe post mortem es donde estará el mensaje de error, y está al final. Cuando los novatos llegan a este punto, se encuentran al final del desafío mental de explicar su problema y es más probable que pierdan algo (para un novato, hay un problema de sobrecarga de información). Además, en este punto ya sienten que describieron todos los aspectos del problema y tienen hábitos pasados ​​que les impiden recordar los códigos de error: después de todo, otros campos de la vida no tienen códigos de error, por lo que no están acostumbrados a Piensa en ellos.

También puede ser que incluso si recuerdan los códigos de error, parecen demasiado crípticos para ser de uso real. ¿Qué es el error 034982? ¿Esto realmente significa algo para alguien? ¿Y realmente agrega algo a esa descripción detallada de lo que estaba haciendo, cómo lo estaba haciendo y cómo falló? Surly esta información se destaca por sí misma.


¿Qué entorno / compilador / marco está utilizando que tiene códigos de error puramente numéricos? oO
Timwi

No estoy usando uno de esos IDE. El mensaje de error en sí mismo puede considerarse como críptico (inútil), o puede sonar como una reformulación de la descripción anterior (no agrega información).
EpsilonVector

0

Porque para la mayoría de los idiomas, la mayoría de los mensajes de compilación / tiempo de ejecución no tienen ningún sentido. (C ++ y Java especialmente, ¡te estoy mirando!) Corregir los errores tiende a ser bastante bajo en la lista de prioridades de un diseñador de idiomas. Por lo general, hacer que las cosas funcionen correctamente es una prioridad mayor, y muchas veces no se molestan en pulir los pequeños detalles.

Esa es una de las razones por las que disfruto trabajar en Delphi. Todo el lenguaje está lleno de atención a los pequeños detalles, incluidos los errores. Los mensajes del compilador tienen sentido. Los mensajes de error en tiempo de ejecución tienen sentido. Las huellas de pila tienen sentido. Es una de las cosas que lo convierte, con mucho, en el lenguaje más fácil de depurar con el que he trabajado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.