Las pruebas no son para principiantes

Soy un gran fanático de las pruebas. Escribo sobre eso en mi blog y lista de correo, lo discuto con otros desarrolladores en mi tiempo libre, incluso llegué a crear un curso de capacitación sobre pruebas en Go.

Pero a pesar de todo mi amor por las pruebas, no lo recomiendo a los principiantes.

Suena salvaje, ¿verdad? En este artículo, voy a aclarar mi punto de vista con más detalle, pero todo el punto, al final, se reduce a dos puntos:

  1. Los principiantes no tienen suficiente conocimiento para escribir otra cosa que no sean las pruebas más simples. Esto inevitablemente lleva al siguiente punto ...
  2. Intentar entrenar las habilidades necesarias para escribir pruebas realistas mientras se aprende la programación es extremadamente difícil

Entiendo que este es, en principio, un punto. En cualquier caso, lo dividí en dos para que sea más fácil de entender.

Sé que muchos de ustedes no estarán de acuerdo conmigo, pero por favor lean el artículo, y si después de leer no están convencidos, estaré encantado de discutir esto con ustedes. Al final, estoy aquí para estudiar.

Los principiantes carecen de conocimiento para escribir otra cosa que no sean las pruebas más simples


Cada vez que un novato escribe código, su propósito principal no es descomponer tareas, evitar variables globales o escribir código de prueba. Honestamente, la mayoría de los principiantes probablemente tienen poca idea de qué es todo esto. De hecho, su objetivo principal es simple: hacer que esta maldita cosa funcione. Eso es todo.

Confirmando que es poco probable que esto requiera algún esfuerzo, solo mira el código escrito por el novato.

Ir a la aplicación web? Seguramente escriben consultas SQL en todas partes y en todas partes del código, y la conexión a la base de datos está casi garantizada para ser almacenada en una variable global.

Aplicación de rieles? Seguramente verá la lógica de negocios en las vistas y toneladas de atascos de lógica en los controladores.

Aplicación web PHP? No me sorprenderá si TODA la lógica está en un solo archivo php: análisis de formularios, interacción con la base de datos, etc.

Incluso si tomamos algo elemental, digamos, una calculadora con funcionalidad limitada, todavía encontramos ejemplos como los que describí. Esto no se debe en absoluto al hecho de que a los principiantes no les importa, simplemente todavía no saben cómo hacerlo mejor.

Los principiantes no saben qué es la inyección de dependencia, no entienden cómo las variables globales complican las pruebas, lo más probable es que no sepan qué es el simulacro, por lo que es bastante ridículo esperar que comprendan cómo diseñar un código fácil de codificar.

Como resultado, para un principiante, solo las pruebas más simples como estas tienen sentido:

func Add(a, b int) int { return a+b } // And a test... func TestAdd(t *testing.T) { got := Add(2, 4) want := 6 if got != want { t.Errorf("Add() = %d; want %d", got, want) } } 

Aunque no tengo ningún problema para mostrarles esto a los principiantes y darles una idea de lo que son las pruebas, creo que es bastante ridículo mostrarles este código y pretender que es algo así como una prueba real.

Al final, esto lleva al hecho de que comenzamos a enseñarles más. Estamos tratando de explicar qué es la inyección de dependencia, por qué las variables globales complican las pruebas, como time.Now () puede dificultar la verificación de casos límite. Y en este lugar empiezo a preocuparme porque ya no enseñamos al principiante cómo escribir código. En este momento le enseñamos cómo escribir código y CÓMO PRUEBA al mismo tiempo. Y eso me lleva al segundo punto ...

Intentar entrenar las habilidades necesarias para escribir pruebas realistas mientras se aprende la programación es extremadamente difícil


Como antes, quiero que pienses en el código escrito por el novato, pero esta vez quiero que recuerdes algunos de los primeros programas que escribiste.

Si fueras como yo, tu primera aplicación web podría verse así:

 <p> <?php // This may not work. I don't know PHP anymore. $name = $_GET['name']; echo "Hello, " . $name; ?> </p> 

Una obra de arte, ¿verdad?

Ahora imagine que acaba de escribir este código por primera vez y alguien le dice que debe probarlo. Y tienes que usar React. Y el marco. Ah, y no estaría de más modificar la base de datos y posiblemente GraphQL para trabajar con ella.

No sé por qué, pero los desarrolladores tenemos la costumbre de usar las habilidades adquiridas durante muchos años de experiencia y práctica, y esperamos que otros, especialmente los principiantes, hagan lo mismo . ¡Esto es simplemente ridículo! Es de esperar que alguien entienda las matemáticas solo porque usted mismo ya estudió trigonometría, álgebra y mucho más, y puede usar las matemáticas para resolver problemas específicos.

Si algo funciona bien para usted, no significa que sea adecuado para principiantes. Pueden estar fuera de contexto, sin la experiencia y la práctica necesarias para beneficiarse de lo que usa. O quizás los problemas con los que están luchando son en realidad demasiado simples para usar todas estas soluciones complejas.

Es como si hubiéramos olvidado cómo estudiamos paso a paso cómo funcionan las solicitudes HTTP. Cómo funcionan los encabezados. Cookies Formas ¿Cómo funciona una solicitud POST al servidor? O incluso si hay métodos HTTP EXTREMADAMENTE diferentes. Y aprendimos todo esto con el viejo método de prueba y error.

En realidad, no creo que las pruebas sean las culpables, el verdadero problema es que creemos firmemente que debe aprender programación, pruebas, creación de sitios web y un millón de otras cosas al mismo tiempo. Realmente no sé cómo sucedió esto, pero sospecho que parte del problema es que no nos molestamos en pensar en lo que costará estudiar todo esto. Un principiante pregunta "¿qué debo aprender?" y comenzamos a "aprender a probar, reaccionar, graphql y listo, pero usar solo la biblioteca estándar ..."

No, no, y de nuevo no. Solo detente.



Esto es ridículo, ya que en otras condiciones lo absurdo de tal enfoque es obvio. Si quieres enseñarle a alguien cómo jugar al fútbol, ​​comenzarás con lo básico como empacar y regatear. No comenzará diciendo "Así es como lo hacen los profesionales", encienda el video de Ronaldo y salga. Entonces, ¿qué demonios estamos haciendo con los recién llegados a la programación?

Tratamos de justificarnos diciendo: "Bueno, por supuesto que entienden que es imposible aprender todo esto al mismo tiempo", ¡pero no entienden! La situación se ve agravada por el hecho de que los desarrolladores novatos, cayendo en esta trampa, se sienten como una mierda debido a estar atascados. Les parece que simplemente no tienen lo que se necesita para convertirse en desarrolladores y es una pena para usted y para mí, porque a muchos de ellos les encantaría programar si no se estrellaran contra esta pared de ladrillos.

Y esto me lleva a lo que realmente quería decir: muchos de nosotros estudiamos mejor si nos centramos en estudiar varias cosas a la vez. Queremos nuevos desafíos, queremos probar cosas nuevas, pero no queremos confundirnos y caer en el estupor. Aprender sobre las pruebas y cualquier otra cosa, por ejemplo, cómo crear una aplicación web, cómo funciona http, cookie, etc., es una manera fácil de caer en esta trampa. Y como resultado, generalmente recomiendo que estudies el resto primero y que pruebes al final. Siempre puede volver a sus proyectos anteriores y ver cómo los reconstruiría ahora, cuando estudió las pruebas, pero esto es posible solo si no está sobrecargado, molesto y, al final, no ha abandonado este negocio.

¿Pero qué pasa si quiero aprender a hacer la prueba? (y un millón de otros "y si")


Genial adelante! Por supuesto, primero puede estudiar las pruebas, y solo luego el desarrollo web o algún otro tema. Estoy seguro de que algunos lo hicieron y es posible que te guste más. Cuando digo que las pruebas no son para principiantes, no digo que este sea un mal tema para estudiar, quiero decir que tratar de aprender las pruebas más cualquier otra cosa es un error.

La mayoría de la gente quiere aprender cómo crear aplicaciones web o algo visual primero, pero esto no significa que deba comenzar con esto, puede comenzar con las pruebas. Probablemente no comenzarás a entender nada hasta que tengas los golpes, pero no dejes que te impida aprender lo que quieres.

Tampoco significa que no puedas estudiar durante la programación de pares o algo así. Con un mentor, puedes aprender muchas cosas al mismo tiempo y soportar con éxito esta carga, porque tienes a alguien que te guiará a través de todo esto. En esta situación, si te pierdes, no entrarás en un callejón sin salida y no te sentirás como un fracaso, porque habrá alguien que diga: "Estás bien, es demasiado difícil por ahora". ¡La próxima vez prueba X e Y! ” En pocas palabras, en este escenario, no se sentirá confundido, decepcionado ni renunciará.

Source: https://habr.com/ru/post/451118/


All Articles