Esto se lo acabo de mandar a Alfonso que hace un par de años se puso a aprender y ya está cerca de graduarse y cambiar su vida, y lo comparto con ustedes también sean o no desarrolladores. Creo que les va a gustar porque estoy seguro de que entenderán por qué variantes de esta misma idea se pueden aplicar a muchas otras cosas en general, y seríamos todos más felices. Vamos allá.
Una vez, cuando era niño y estudiaba séptimo de primaria, estaba aprendiendo sistemas de ecuaciones y no me entraban: me estaba empezando a desesperar y, aunque mi padre se había puesto a explicármelos, yo estaba ya en un punto en que solo veía una montaña de números, letras y operaciones. Lo veía todo negro hasta que el tipo hizo una pausa, apartó los papeles, y me dijo estas palabras: "mira, las matemáticas parecen complicadas cuando ves el problema completo: pero al final todo se reduce a un montón de sumas, restas, multiplicaciones y divisiones. Tú crees que todo esto es demasiado porque lo ves entero y es mucho, pero al final si te pones a ver de qué está hecho te encuentras con que aquí hay una suma, aquí hay una resta, y demás. Tú sabes sumar y restar, ¿verdad? Es decir, tú ya con lo que sabes ya eres capaz de resolver cada trozo por separado; o sea que, aunque a ti te parece que el conjunto es demasiado grande y no puedes con él, si te pones a solucionar trozo a trozo que son las operaciones sencillas que tú ya sabes, cuando te des cuenta ya no habrá más trozos y el problema estará resuelto".
Mi padre por supuesto no tenía ni idea en ese momento de la influencia que iban a tener esas palabras en mi vida, pero créanme que la cambiaron por completo y no hablo de matemáticas. Después de escucharlas me quedé unos momentos asombrándome de la luz que acababa de descubrir, volví a los sistemas de ecuaciones, por supuesto pude con ellos sin ningún problema más, y desde aquel día jamás he encontrado nada que haya vuelto a bloquearme mentalmente. He pasado por cosas chungas, superchungas y chunguísimas, por supuesto, he sufrido derrotas tremendas como todo el mundo, pero jamás me he sentido personalmente superado por las circunstancias por malas que fueran. Nunca he encontrado un problema que, aunque aparentemente me viniera muy grande, cuando me ponía a analizarlo en serio no pudiera desmenuzarlo en objetivos que sí pudiera conseguir.
Cuando empiezas con la programación es súper habitual que haya momentos en que te veas abrumado porque solo ves variables, funciones, letras, símbolos... Se te satura la cabeza y dices "no puedo con esto". Tú no lo sabes pero sí puedes: lo que te pasa en realidad es que aún no has aprendido a pensar como un programador. Programar no es escribir código raro: programar es pensar. Y tú aún no has aprendido a pensar porque estás todavía peleándote con el código, es decir estás perdido tropezándote con los árboles y aún no te has dado cuenta de que puedes volar y mirar el bosque desde arriba para entender dónde estás en realidad y a dónde quieres ir.
La imagen que tienen ahí arriba es una función súper simple, que viene a ser como cuando un obrero va al encargado del almacén a pedirle las herramientas que va a necesitar para hacer su trabajo del día. El obrero tiene que enseñarle al encargado del almacén su identificación de empleado, y el encargado comprueba que sea correcta y si es así le pide a un mozo que le traiga sus herramientas. El mozo (otra función que no está ahí) ya se encargará de internarse por el almacén para traerle al encargado lo que ha pedido, o bien si no ha sido posible le dirá que ha habido un problema y le dará una explicación de lo que ha pasado; y entonces el encargado del almacén le dará al obrero sus herramientas o bien, si no ha podido ser así, le transmitirá la explicación del mozo. Como ven en este párrafo hay cero código y cero palabras técnicas, el procedimiento se entiende sin saber nada de informática ni de programación. Programar es pensar.
El código de la función todavía no está hecho: pero una cosa que aprendí cuando empezaba y me puse a ver cursos hechos por desarrolladores senior es que muchos de ellos siempre, antes de entrar con eso, empleaban un momentito en ver qué tenían que hacer y escribir los pasos aunque fueran al nivel más simple. Es decir, antes de ponerse con cada árbol en concreto subían para ver el trozo del bosque sobre el que iban a trabajar, pensaban en qué árboles iban a tocar, y entonces volvían a bajar y lo hacían.
Esta función en concreto es una chorrada y no necesitaría perder ese minuto en escribir lo que voy a hacer; pero esa no es la cuestión aquí. Desde hace años (cuando se lo vi hacer a los buenos) me he acostumbrado a no dar ni un solo paso sin planificación, y ya es una rutina que me lo pone todo infinitamente más fácil y mi código al final resulta más sólido y más limpio para producir y para mantener. Es un nivel más profundo de lo que hice con mi padre, porque al escribir cada pasito por fácil que sea siempre puedo darme cuenta de algo o se me puede ocurrir alguna mejora; pero al final lo que importa aquí no es escribirlo, sino pensarlo. Cuando la función esté programada me tomaré otro minuto para borrar los comentarios (un buen código se comenta solo) o dejar solo lo que sea realmente necesario, y con la experiencia que tengo ya tengo más que claro que esos dos minutos algún día podrán ser una gran inversión.