Tras ver el video de LinuxChad sobre Lisp, sentí que me había llegado la hora… la hora de dejar de postergar mi encuentro con este legendario lenguaje. Durante años, escuché referencias a Lisp: en la universidad, los investigadores de posgrado insistían en sus virtudes, pero mi preferencia por Python me mantuvo distante de esta joya de la programación.
Mi trayectoria profesional no ha sido ajena a la experimentación con lenguajes. Desarrollé mi propio lenguaje de programación utilizando yacc y flex, e incluso implementé una máquina virtual para simular programación orientada a objetos. Sin embargo, fue al adquirir el SICP (Structure and Interpretation of Computer Programs), conocido cariñosamente como “El libro del mago”, y complementarlo con los videos de las clases de 1986 (remasterizados en 2005), cuando realmente comprendí la profundidad de Lisp.
Aunque Lisp puede aprenderse con relativa rapidez, su verdadera esencia radica en los fundamentos que representa y en el potencial que desbloquea. De esta experiencia, extraje varias enseñanzas fundamentales:
-
La importancia del lenguaje adecuado: Para expresar las ideas que concebimos, necesitamos un lenguaje poderoso y apropiado que nos permita encontrar soluciones para clases específicas de problemas. Mientras algunos pensarán en DSLs (Lenguajes específicos de dominio), es importante reconocer que herramientas como Python tienen su lugar, aunque en ciertos contextos pueden introducir complejidad innecesaria.
-
Los tres pilares de un lenguaje efectivo:
- Primitivas: Las funciones fundamentales con las que nace el sistema, como los operadores básicos “+”, “-” o “print”.
- Medios de combinación: Los mecanismos que permiten operar con diversos tipos de datos, desde enteros y flotantes hasta estructuras más complejas.
- Medios de abstracción: Las herramientas que nos permiten construir sistemas complejos a partir de componentes más simples.
-
El poder de la nomenclatura: Si puedes nombrar algo, puedes controlarlo.
-
La unificación de código y datos: En Lisp, la distinción entre datos y procedimientos se desvanece, revelando una elegante simetría.
Me he divertido bastante aprendiendo lisp y siguiendo el curso, la ingeniería de software no se trata tanto de escribir programas como de crear lenguajes que permitan expresar soluciones con claridad.
Para poder hacer varios de los ejercicios use un interprete llamado Steel (Opensource)
Dejo a continuación algunos de los recursos: