Cada uno de estos lenguajes se divide en 3 capítulos, con deberes de investigación sobre los mismos y ejercicios, que van desde algo fácil, hasta algunos verdaderos quebraderos de cabeza. El autor Bruce Tate ni siquiera se para a explicarnos como instalar el entorno de cada lenguaje, sino que va directamente al grano.
En cada capítulo hay una mini-historia del lenguaje y una entrevista al creador o a alguna persona influyente en el proyecto. Y al final de estos, se resumen las fortalezas y debilidades de cada uno.
Ten en cuenta que no es para nada una guía de programación, sino una guía de estudio de cada uno de estos maravillosos y algunas veces desesperantes lenguajes de programación.
Una de las cosas que más me ha gustado de este libro es el sentido del humor del autor. Esta escrito de una forma muy amena y por cada lenguaje busca una figura de ciencia ficción o fantasía a la que se pueda asemejar para que te identifiques más con él y puedas comprenderlo, como puede ser el comandante Spock con Haskell, Eduardo Manos-Tijeras con Scala o Mary Poppins con Ruby. Por supuesto con sus ejemplos y definiciones de por qué se parecen a esos personajes, y desde mi punto de vista, acierta bastante
El libro descubre nuevas ideas a los programadores que estén acostumbrados a trabajar con lenguajes orientados a objetos, enseñando los distintos paradigmas que existen dentro de otros mundos, como la programación funcional o la lógica. Te obliga a salir de tu acostumbrada forma de pensar y le da la vuelta a todo para que tengas que forzarte a olvidar el como programas en el día a día, enseñándote un nuevo camino a la hora de organizar y construir programas. Con él aprendes el estado del arte dentro del mundo de la programación y los diferentes paradigmas que existen en este mundillo cada vez más amplio.
Paradigmas:
1º Orientación a Objetos (Ruby, Scala)
Este paradigma de programación es el más conocido y en el que se encuentran el groso de los programadores. El libro empieza con él para que te sientas a gusto y te acomodes a la forma de trabajar. En él practicamos con las 3 bases, encapsulación, polimorfismo y herencia.
Con Ruby experimentamos la potencia del “Dynamic duck typing” y la Metaprogramación, después pasando por Scala y introduciendonos en otro paradigma la “Programación funcional”.
Ambos lenguajes se utilizan en aplicaciones generalizadas y ambos presentan avances significativos en el diseño de lenguajes con respecto a los lenguajes principales como Java.
Esta familia de lenguajes incluye JavaScript e IO entre otros. Brutalmente simple y expresivo IO tiene la capacidad de poder adaptarlo totalmente y definir nuestro propios DSLs, también parece que sirve muy bien para crear interfaces, aunque no es el lenguaje más desarrollado de los que nos encontramos en el libro.
Cuando el problema se ajusta a unas reglas lógicas, Prolog es capaz de conseguir resultados en muy pocas lineas de código que en cualquier otro lenguaje llevaría cientos de ellas y horas de comeduras de cabeza por parte del programador.
Estos lenguajes se utilizan en ámbitos como el control de tráfico aéreo o de trenes, casualmente en mi empresa se utiliza justo para el cálculo de rutas para trenes de cercanías
La programación funcional se basa en funciones matemáticas, las cuales da igual las veces que las llamemos que darán exactamente los mismo resultados, sin influir en otras o tener efectos secundarios. Estos lenguajes son muy expresivos y normalmente necesitan menos lineas de código que los lenguajes orientados a objetos para resolver problemas. Al tratar varios lenguajes, aprendemos que diferentes grados de pureza, nos ofrecen diferentes series de ventajas y desventajas.
Al eliminar los efectos secundarios se puede entender y predecir el comportamiento de un programa, esta es una de las principales ventajas que nos da el utilizar la programación funcional.