Un cúmulo de incertezas
Imagínese esta misteriosa escena: sentado frente a un ordenador intentando aprender un nuevo lenguaje de programación. Uno que solo lo conoce de nombre. Uno que solo un pésimo amigo le habría atrevido a recomendar —en modo de venganza camuflada—. Comienza ver códigos de ejemplos —el típico «hola mundo»—, acaso se podría parecer en su sintaxis a algo que haya programado antes. ¿En qué momento puede decidir si le gusta?
Lo desconocido crea ansiedad, aunque, menos cuando te has encontrado con algo similar antes. La cara de una conocida, de una amiga, de una pareja, me agrada mucho más que la de alguien que no conozco. Nos evoca gratos recuerdos.
No hay lenguaje de programación que comience de cero, ni que tenga una sintaxis totalmente nueva, ni una semántica. Todos derivan, en mayor o menor medida, de uno anterior.
Conocer lenguajes antiguos y nuevos es aprender de historia de la informática. Aunque de manera indirecta: una cosa es conocer la herramienta y otra es conocer cómo se originó y se desarrolló. Ambas son distintas. Es común ver a informáticos que no saben nada de la herramienta que usan, a saber, ¿por qué se originó? ¿Quién la creo? Estas preguntas que pudieran parecer irrelevantes dan un sentido a lo que usamos. Más que mal sirven de algo. Incluso el menos optimista las podría encontrar útiles y usar en sus charlas a modo de anécdota.
Cuando la computación es diferente puede ser complicado aprender un nuevo lenguaje. Con «computación» me refiero a la estrategia que usa el lenguaje para realizar el cómputo. (Paradigma, aunque esta palabra no me gusta por su carga ambigua.) Sería normal que si aprendió a programar con C, luego conoció PHP y continúo con JavaScript, le cuesten entender un lenguaje como OCaml o Racket.
Esto quiere decir que no es lo mismo un lenguaje imperativo como C que otro funcional como Haskell. Su sintaxis difieren sustancialmente en todo: incluso en su forma de realizar pequeños cálculos. Esto se remonta a los modelos teóricos de la computación. Desde los clásicos como la máquina de Turing y el cálculo lambda. Aunque equivalentes, el modo de representar la computación no es igual.
La incertidumbre es la única certeza que existe, y saber cómo vivir con la inseguridad es la única seguridad.
John Allen Paulos
A lo que quiero llegar es que, aunque los lenguajes de programación son herramientas, no deja de existir una afinidad. Que puede verse plasmada en la historia que tuvimos al aprender programación por primera vez, quizá quién nos enseñó, quién nos inspiró e influencio, ejerzan, en forma soterrada una influencia sobre nosotros. Yo creo que todas estas cuestiones cuentan.
Si nos gustan los lenguajes imperativos —por dar un mal ejemplo— y nos sentimos cómodos programando en ellos, es difícil concebir un cambio a lenguajes funcionales, abandonando a los que te sentiste tan a gusto.
¿Si una herramienta que estamos aprendiendo nos gusta o, en cambio, la aborrecemos, estamos siendo justos o estamos sesgados por nuestra «historia»?