¿Nuevo en programación? Aquí se explica cómo analizar mejor los resultados de buscar en Google sus mensajes de error

Pasando a la programación desde un campo en el que mi trabajo consistía en ser una biblioteca de recursos humanos (para proporcionar respuestas a preguntas que la gente aún no se había dado cuenta de que tenían que hacer), fue un gran cambio para mí confiar tanto en Google, ya que hacemos. Especialmente en los primeros días, a menudo deseaba una guía para analizar los resultados de búsqueda que intentaba registrar ... et voilà!

http://www.systemcomic.com/2014/03/14/the-system-711-how-to-become-a-web-developer/

Bien, entonces has escrito una función / programa / sitio web, y no funciona. Con suerte, le dará un mensaje de error en alguna parte: su entorno de prueba, su terminal, la consola del navegador. Copias y pegas esto en Google, y haces clic ciegamente en los resultados, pero todos son completamente oscuros para ti o bastante específicos y no son lo que necesitas. ¿Ahora que?

https://github.com/thepracticaldev/orly-full-res

Primero: ¿vale la pena buscar en Google?

Algunos errores nunca arrojarán resultados de búsqueda útiles, especialmente si está escribiendo para una prueba, como lo hice en las primeras semanas de mi codificación bootcamp y pre-bootcamp. Una lista no exhaustiva de "errores" que son pruebas técnicamente más fallidas:

  • Error: se esperaba que 32 fuera igual a 173— Nadie más trabajará con su misma función. Su función está devolviendo datos; solo está devolviendo los datos incorrectos. Ese es un punto de partida desde el que debería poder depurar (si no, consulte la siguiente sección).
  • Error: se espera que sea indefinido para igualar 173: aún no es digno de Google, pero ahora puede ver que su función no devuelve nada. ¿Te falta una declaración de devolución? ¿Usa un forEach cuando necesita un mapa?
  • SyntaxError: homeworkFunction no está definido: esta es realmente una buena noticia; no es difícil declarar una función (al menos en JavaScript), por lo que si sabe que lo hizo correctamente, este error significa que tiene un error de sintaxis simple en alguna parte. Cuente sus llaves, corchetes, paréntesis, comillas ...
  • TypeError: no se puede leer la propiedad ‘keyName’ de undefined - cuidado, este producirá resultados de Google; probablemente no sean relevantes para usted en esta etapa. Tenga en cuenta que la propiedad nombrada es casi siempre la clave de un objeto; ¡su problema, entonces, no es con la clave sino con el objeto mismo! Tenga esto en cuenta mientras revisa su código.

Su mejor opción para errores como estos es probablemente identificar dónde está realmente el problema y / o leer cuidadosamente el problema / especificaciones, prestando especial atención a lo que realmente le está diciendo a la computadora que haga, no a lo que pretende que haga. .

https://xkcd.com/319/

¿Cómo puedo analizar mis errores antes de llegar a Google?

Sitios como PythonTutor lo llevan a través de su función paso a paso, visualizando cómo la máquina lee su entrada; la depuración del pato de goma también es sorprendentemente útil, especialmente para los indefinidos.

¿Su error contiene algún número al final de la línea, como (22:14)? ¡Estos lo dirigen directamente a la fuente del problema! No tiene que resolverlo usted mismo; en este ejemplo, solo dirígete a la línea 22 y mira el carácter 14, y listo: lo que sea que haya allí es lo que la máquina no puede leer.

¿Qué pasa con esas 8+ líneas anidadas debajo de su propio error? Puede ser inmensamente útil aprender a leer el rastro de la pila, a tiempo, pero por ahora podemos tamizarlo para obtener la información más útil de inmediato. La mayoría de las líneas en el seguimiento de la pila pueden referirse a archivos que no creó (node_modules o algo incorporado, por ejemplo), pero generalmente hay al menos una línea donde el nombre de archivo es algún archivo en el que realmente ha trabajado. el nombre de archivo terminará en un número de línea, que le dará un puntero exacto a dónde está el problema, o, al menos, a la primera vez que su programa lo solucionó.

https://imgur.com/jacoj

No tengo mensaje de error; que busco

Si no puede llegar a la raíz del problema, todavía tiene dos herramientas muy poderosas a su disposición: console.log * y el depurador.

  • Console.log ('cadena explicativa', variable): rociarlos en lugares relevantes en su código puede ser una excelente manera de probar 1) cómo se ven los datos en el medio de la función, 2) si una parte de la función es incluso en ejecución, 3) si los datos que se devuelven son del mismo tipo que se supone que son, ¡y mucho más! Me encanta este método para identificar exactamente dónde y cómo mis programas van mal. Sin embargo, pueden volverse difíciles de manejar rápidamente, especialmente si no están etiquetados o si quedan en el código después de que se resuelve el error. Y no hay nada peor que los registros de la consola de otra persona que quedan en el código compartido.
  • Depurador: cada consola del navegador tiene una función de depurador, al igual que cada IDE (y PythonTutor hace algo similar). Estos le permiten observar, paso a paso, cómo la computadora ejecuta su función, demostrando claramente en qué paso se está rompiendo su función, y qué valor está recibiendo la computadora para cada variable en lugar de lo que debería estar recibiendo. Es imprescindible para el kit de detección de errores de cada programador.

* Cada idioma tiene estos, con un nombre u otro: imprimir, poner ... el punto es que envía datos a la consola para que el desarrollador los lea, detrás de escena. Espero que ya conozca el comando relevante en su idioma de elección.

https://xkcd.com/1163/

¿Estamos finalmente listos para buscar todavía?

De acuerdo, después de que haya agotado razonablemente sus opciones más básicas, o si se siente flojo y elige omitir algunas de ellas (no juzgo; simplemente no garantizo la relevancia de los resultados en ese caso) - Estamos listos para Google. Pero hagamos esto de manera eficiente; ¿Cuál es la mejor manera de mostrar resultados relevantes en la primera página?

https://github.com/thepracticaldev/orly-full-res
  • Limite el alcance de su búsqueda: ¿Qué puede averiguar sobre la raíz del problema? Frase que de manera concisa, tan genéricamente como sea posible, con la jerga apropiada.
  • ¡Agregue el nombre del idioma y / o la tecnología con la que está trabajando a sus términos de búsqueda! Las soluciones pueden ser las mismas en principio, ya sea que esté trabajando en JavaScript, Python o Ruby, pero hasta que tenga la experiencia suficiente para traducir, descanse y busque lo que le es familiar.
  • Los resultados parecen obsoletos? (Más información sobre cómo decir esto a continuación.) Agregue @ 2019 a su cadena de búsqueda para priorizar resultados recientes (o lo que sea el año actual: hola lectores del futuro; me siento halagado de que todavía encuentre esto útil).
  • Antes de buscar ingenuamente su mensaje de error, elimine sus nombres de archivo y nombres de variables, o reemplácelos con *. Esto es especialmente importante (el *) si decide incluir parte o la totalidad del error entre comillas.

Genial, estamos en donde comencé antes de leer esto, gracias

Bueno, si te sientes tan impaciente, ¡espero que te hayas saltado los bits de arriba! (Pero hablaremos de desnatar en un momento). Ahora veamos en qué resultados hacer clic y cómo averiguar rápidamente si tienen algo que ofrecerle.

Ocasionalmente, puede descubrir algo simplemente mirando su lista de resultados, ¡incluso antes de tener que hacer clic en ninguno! Por lo general, esa conclusión es solo que sus términos de búsqueda no fueron útiles, ya sea demasiado estrechos o demasiado amplios. (Ver la siguiente sección).

La sabiduría convencional sugiere la siguiente jerarquía de sitios web de programación:

  1. Documentación oficial del idioma / biblioteca / lo que sea
  2. Desbordamiento de pila
  3. Medio, github gists (empate)
  4. Reddit, otros blogs (empate)

Así que echemos un vistazo a estos. Donde quiera que vaya, es tentador abrir una página y comenzar a leer, ¡pero podemos ser más eficientes que eso! Es completamente posible que sus términos de búsqueda no aparezcan de manera relevante en ninguna parte de la página. Entonces, un buen primer paso es siempre hacer una búsqueda simple (cmd-F / ctrl-F) para algunos de ellos. ¡Esto no siempre indica que has encontrado un ganador, pero es genial para eliminar limones bastante rápido!

https://xkcd.com/722/

Documentación oficial

Esto varía enormemente según el idioma, la biblioteca y la tecnología que esté utilizando. Los excelentes documentos de Mozilla para JavaScript se consideran el estándar de la industria para JS, y la documentación oficial de React también es extremadamente exhaustiva y fácil de navegar.

Por otro lado, los documentos para Sequelize, a pesar de parecer extensos, son tan inútiles que mi campo de entrenamiento realmente me recomendó que usemos una alternativa. Para mirar a una categoría diferente, la API de Spotify también proporciona documentación que es lamentablemente inadecuada para la gigantesca tarea de trabajar con ella.

Por lo tanto, siempre es una buena idea comenzar aquí (posiblemente incluso antes de llegar a Google), pero si se queda corto, sepa que no es solo usted.

Desbordamiento de pila

Stack Overflow diseñó su sitio para tener las mejores respuestas a cada pregunta de programación (un modelo tan efectivo que lo clonaron para muchos otros temas). Para gestionar esto, sus hilos son menos conversacionales y más orientados a las respuestas, y los usuarios votan para que las respuestas útiles lleguen a la cima. También se esfuerzan por evitar repetir preguntas sobre el mismo tema, lo que significa que las preguntas alojadas allí tienden a ser muy específicas.

¡No sé cuántas veces intenté laboriosamente descifrar más de 50 líneas de código antes de descubrir que el problema del póster original no se parecía al mío! No recomiendo leer la publicación detenidamente, excepto tal vez si ya ha determinado que será útil.

En cambio, dirígete directamente a los comentarios. ¡Recuerde que OP está allí en primer lugar porque su código tiene errores! La verdadera carne está en las respuestas; Después de tener una idea potencialmente útil a partir de ahí, puede hojear la publicación original para el contexto.

Medio

Medium tiene muchos centros tecnológicos, pero no necesita buscar uno de ellos para confirmar que el contenido de una publicación es confiable. Lo que puede confiar en un artículo medio es una alta proporción de palabras para codificar. Entonces, si aprende bien al hacer que alguien le cuente dónde fue y cómo llegó allí, Medium siempre será un buen sitio para favorecer.

Github

Github es conocido principalmente por sus repositorios de código (❤ control de versiones), pero también tiene aspectos esenciales, que son repositorios de una sola página, con funcionalidad de comentarios, que pueden contener desde un breve fragmento de código hasta un código completo de artículo y explicaciones. . En la práctica, he encontrado que la mayoría de los resultados de búsqueda de Github son elementos esenciales que funcionan más bien como preguntas de desbordamiento de pila no moderadas.

Reddit

Realmente esperaba que reddit fuera un recurso brillante para codificar preguntas, siendo un punto de acceso nerd; y de hecho hay muchos subreddits de programación, pero parece que la mayoría de los redditors saltan a algún lugar como Stack Overflow una vez que es hora de hacer o responder una pregunta complicada.

Otros blogs y sitios web

¡Internet es un gran lugar! Contiene otros blogs tecnológicos, otros foros, pero los patrones son los mismos que ya hemos visto aquí. Sin embargo, he encontrado que es sorprendentemente razonable confiar en lo que sea que esté leyendo en un sitio web aleatorio. Si está buscando algo tan técnico, es muy probable que el autor ya lo considere "uno de nosotros" y esté más interesado en ayudarlo que en engañarlo. (Por supuesto, pueden tener sus propios errores en el código, pero ¿cómo podemos aprender?)

http://turnoff.us/geek/death-and-the-programmer/

¡Pero nada de eso lo hizo! Refinando o reorientando una búsqueda

A veces está claro cómo refinar una búsqueda: si aparecen errores similares (pero no lo suficientemente similares como para ser relevantes para usted), ponga la parte más específica de sus términos de búsqueda entre comillas; si las respuestas que regresan se dirigen a React solo, por ejemplo, pero necesita que aborden React y Redux trabajando juntos, agregue redux a sus términos de búsqueda. Si no está claro, vea si alguno de los consejos anteriores parece razonable, con el nuevo contexto de la búsqueda que acaba de terminar.

¿Sin resultados o muy pocos? Elimine las comillas o agregue términos y vea si eso cambia las cosas. De lo contrario, podría estar atrapado en el peor de los casos:

https://xkcd.com/979/

Una excepción notable: ¿Estás tratando de resolver un problema o confusión con Git, y los resultados de búsqueda simplemente no lo están eliminando? ¿Hay alguna forma de guardar su trabajo en su sistema de archivos local y la fuerza bruta lo reintegra? Esto no suena ideal, pero es una práctica excepcionalmente común, especialmente para los comandos git más inusuales.

https://xkcd.com/1597/

Algunas notas finales

¡Espero que haya ayudado! Ahora, por supuesto, hacer que el código funcione es solo la mitad de la batalla (incluso si muchos codificadores tienden a detenerse allí). Comprender por qué puede ahorrarle exactamente el mismo estrés de búsqueda en el futuro. (Mantengo una lista de lecciones que aprendí de errores particularmente espinosos).

https://github.com/thepracticaldev/orly-full-res

A veces, incluso Google no proporcionará respuestas útiles, momento en el que estoy muy agradecido de que el software sea una comunidad tan social. Comuníquese con un amigo o compañero de trabajo, o (si comprende su error con suficiente detalle) incluso pregunte a Stack Overflow.

¡Y no te preocupes! Recuerde que, en este campo, todo el mundo siempre está aprendiendo, por lo que siempre habrá nuevos y extraños mensajes de error para usted en Google, ¡sin importar cuán habilidoso sea!

http://phdcomics.com/comics/archive.php?comicid=946