Todavía recuerdo aquella sensación de frustración la primera vez que desmontando un juguete llegué a mi primera cucaracha de patas metálicas (un chip para los amigos), aquel componente del juguete no era descifrable a simple vista pero lo que fuera que hubiera en su interior hacía que mi juguete grabará voz, rebotase en las paredes, encendiera luces en forma de sonrisa y otras muchas funciones complejas.

Recuerdo una larga conversación con mi padre acerca de como unas personas, los programadores, habían escrito alguna clase de código que le decía al robot como hacer todas aquellas cosas que a mi en ese momento se me antojaban mágicas. Ese código que vivía en el chip me obsesionó y mi padre prometió comprarme un libro de programación. Cumplió su promesa y recibí aquella semana mi primer libro de JAVA, por supuesto, estaba en inglés.

En mi post anterior hablaba de la capacidad de resilencia de los makers, para mi este es el primer caso que recuerdo de un fracaso estrepitoso y constante, sin avances literalmente durante meses. No tenía el nivel de inglés necesario y descargar en aquella época con un router de 56kbps la versión correcta del JRE (Java runtime environment) y el SDK (Software development kit) de JAVA era en si mismo un reto.

Sin embargo, un día todo estaba configurado, entendía el compilador y tenía la versión adecuada del JRE y el SDK, durante meses había intentado ejecutar ese código de ejemplo “javac Test.java” (javac es el compilador de JAVA) y luego “java Test” para ejecutar el programa ya compilado.

Eureka, desde ese momento era un programador mi primer programa se había ejecutado con éxito su única y extremadamente sencilla tarea imprimir por pantalla “Hola Mundo”, el primer ejemplo de cada lenguaje de programación para millares de desarrolladores de todo el mundo, estaba enganchado.

En unos pocos días resolvía tablas de multiplicar que se imprimían por mi pantalla de fósforo verde, las guardaba a un archivo de texto, las imprimía, después vendrían los primeros juegos conversaciones que obligaba a jugar a mi familia, y muchos otros lenguajes entre ellos las versiones primigenias de HTML y Javascript que hoy son el día a día en mi empresa.

Pero, ¿qué valor tenía todo aquello? tardé años en entenderlo pero aprender a programar cambio mi manera de pensar y resolver problemas.

Aquí están algunos de los muebles que llegaron a mi cabeza en esa época:

  1. Existen infinitas soluciones en el mundo del software para resolver un problema dado, sin embargo, un subconjunto muy pequeño de ellas es eficiente, es legible por otros y es hasta elegante. Con frecuencia oirás a programadores hablar de su código con términos que pueden sorprenderte bonito, feo, frustrante, anticuado. Mi primera lección fue que incluso algo tan técnico tenía mucho de arte y otro mucho de ciencia. Además me enseñó a buscar no sólo una solución sino una solución bonita en ese y otros ámbitos de la vida.
  2. La fría lógica. Análisis y cálculo. Compilar un programa grande lleva tiempo y si tu código es feo esto es doblemente cierto, una habilidad que en lenguajes compilados tiene mucho valor es saber que hará tu código antes de ejecutarlo eso te convierte esencialmente en un interprete continuo de lo que escribes a ser capaz de ejecutar comandos en tu cabeza. Igual que el ajedrecista piensa en sus siguiente jugadas el programador entiende de antemano lo que hará su programa. Este mueble fue una potente calculadora que todavía uso cuando juego al ajedrez, hago cálculo mental o desarrollo mi actividad profesional.
  3. Divide y vencerás. El mundo real es tremendamente complejo, es por eso que para que los ordenadores nos ayuden a resolver los problemas reales debemos codificarlo de una manera simplificada. Uno de los mejores paradigmas para ello, es la llamada “orientación a objetos”. Esencialmente en lugar de escribir largos fragmentos de código que describen o predicen la compleja realidad partimos esa realidad en objetos más manejables que modelamos y hacemos actuar en relación a otros. La orientación a objetos tiene en si mismo dos lecciones, cómo en el punto 1, la elección de cómo partimos nuestra realidad en objetos programables cambiará la “calidad” de la solución y la segunda lección es el hecho de que pocos problemas se resisten a la subdivisión de su complejidad hasta el punto de ser capaces de solventarlo. Una auténtica lección de vida.
  4. El código está en TODAS partes. Cuando uno entiende cómo se programa empieza a ver a su alrededor como las máquinas y procesos que inundan nuestras vidas funcionan en su interior. De niño recuerdo pensar embobado las cientos o miles de líneas de código que había en mi consola, en el salpicadero electrónico de nuestro nuevo coche o en una nave de una misión Apollo. Entender la programación es hoy en día una forma de entender e interesarse por el mundo. En un futuro no muy lejano el analfabetismo será no saber leer o escribir código. Créeme tu hijo quiere estar en el lado adecuado de la llamada “brecha digital”.
  5. Nada hay más práctico ni gratificante que enseñarte a ti mismo, la forma en que me vi obligado a aprender a programar me hizo un autodidacta eficiente y pragmático para frustración de muchos profesores de mi vida.¿Y tú? ¿eres programador? ¿qué muebles aportó a tu cabeza aprender a programar?