miércoles, 12 de octubre de 2016

Lenguajes modernos y por qué aprender.

En la reunión anterior, comentaba que estamos viviendo una época en la que recibimos una nueva generación de lenguajes de programación. Los lenguajes de programación son muy nuevos cuando no pasan de los 10 años, basta con pensar que Ruby cumplirá este año 21 años y se inició hace 23; Python tiene ya 25 años.

Ruby, Python y contemporáneos, representaron una nueva forma de diseñar lenguajes de programación, fue un momento en el que la preocupación fue la productividad, era lógico pensando que, considerando los precios actuales, el costo de hardware es barato pero el de un programador no. Esta generación de lenguajes sacrificó parte del performance en pro de crear lenguajes amigables, que más allá de ser fáciles, son productivos, lo que significa que puedes desarrollar x tarea en pocas líneas de código, o poco tiempo.

El límite de estos lenguajes
La generación de lenguajes productivos y dinámicos no está para nada mal, hay que recordar que las tecnologías de desarrollo son herramientas, algunas son buenas para algunos casos, y otras para otros. Por ejemplo, si necesitas desarrollar un MVP para mostrar tu idea, definitivamente un lenguaje dinámico es la mejor herramienta, de hecho, la mayoría de las aplicaciones (90% del internet probablemente) funciona perfectamente bien con las pequeñas limitaciones de los lenguajes dinámicos, así que no nos volemos las cabezas y pensemos que es la muerte de ningún lenguaje, siguen siendo excelentes opciones para muchas tareas.

El asterisco de estos lenguajes es que en la actualidad, la mayoría de las aplicaciones se comunican en tiempo real, los usuarios esperan tiempo de respuesta inmediatos y algunas aplicaciones reciben visitas con números de 6 dígitos. En estos casos, el tiempo de ejecución es crítico, normalmente cada milisegundo, cada porcentaje del CPU y cada MB de la RAM cuentan.

Los lenguajes evolucionan, y aunque la generación anterior sigue siendo muy buena y muy útil, hay nuevos desafíos que se busca resolver.

La nueva generación
Los lenguajes de nueva generación están diseñados para mantener la expresividad de la generación pasada (dentro de lo posible) y además ofrecer el performance necesario para los desafíos modernos. Estas son las características que en mi opinión tienen los lenguajes modernos:

Concurrencia, los lenguajes dinámicos e interpretados, no suelen tener buena fama en este apartado; los lenguajes modernos están diseñados para funcionar concurrentemente utilizando hilos o procesos.
Paralelismo: Al buen entendedor pocas palabras:
Compilan a lenguaje máquina o byte code. La generación anterior es de lenguajes, normalmente, interpretados.
Recolectores de basura más eficientes o de plano utilizan otras formas de manejar la memoria sin que el usuario tenga que hacerlo.
Manejo óptimo de la memoria, este caso es particularmente notorio en versiones iniciales de Ruby que se comían la memoria de la misma forma que Google Chrome :3
Particularmente la concurrencia es muy útil en situaciones de tiempo real, varios lenguajes anteriores manejan concurrencia, los lenguajes basados en la JVM son un buen ejemplo, sin embargo, los lenguajes modernos hacen que manejar múltiples ejecuciones de tu código sea más fácil, (cough... Go... cough).

Que sean compilados optimiza el performance y además hace que el deploying de aplicaciones sea más fácil, no tienes que instalar nada en el servidor (a menos que el código corra en una máquina virtual), solo subes el binario y listo.

¿Quiénes son?
4 ejemplos de lenguajes nuevos que pueden cumplir alguna o varias de las características mencionadas antes son:

Go - (Curso Go)
Swift - (Curso Swift)
Rust - (Más información)
Elixir - (Más información)
Aprende alguno de ellos, en serio, mi opinión es que lo que significó para muchos aprender Ruby, javaScript o Python hace 5 o 10 años, lo es para nosotros aprender uno de estos lenguajes.

¿No sabes con cuál de ellos empezar? Crea un hola mundo con alguno de ellos (o una estructura de datos o un algoritmo de ordenación, son súper buenos para probar lenguajes), y decide por ti mismo cuál te gusta más. De hecho, ni siquiera necesitas instalar nada para iniciar con estos lenguajes, varios de ellos tienen versiones para programar alguna que otra línea de código en el navegador, y si no, puedes usar CodePicnic.

Pero en serio, no dejes pasar el tiempo.Compilan a lenguaje máquina o byte code. La generación anterior es de lenguajes, normalmente, interpretados.
Recolectores de basura más eficientes o de plano utilizan otras formas de manejar la memoria sin que el usuario tenga que hacerlo.
Manejo óptimo de la memoria, este caso es particularmente notorio en versiones iniciales de Ruby que se comían la memoria de la misma forma que Google Chrome :3
Particularmente la concurrencia es muy útil en situaciones de tiempo real, varios lenguajes anteriores manejan concurrencia, los lenguajes basados en la JVM son un buen ejemplo, sin embargo, los lenguajes modernos hacen que manejar múltiples ejecuciones de tu código sea más fácil, (cough... Go... cough).

Que sean compilados optimiza el performance y además hace que el deploying de aplicaciones sea más fácil, no tienes que instalar nada en el servidor (a menos que el código corra en una máquina virtual), solo subes el binario y listo.

¿Quiénes son?
4 ejemplos de lenguajes nuevos que pueden cumplir alguna o varias de las características mencionadas antes son:

Go - (Curso Go)
Swift - (Curso Swift)
Rust - (Más información)
Elixir - (Más información)
Aprende alguno de ellos, en serio, mi opinión es que lo que significó para muchos aprender Ruby, javaScript o Python hace 5 o 10 años, lo es para nosotros aprender uno de estos lenguajes.

¿No sabes con cuál de ellos empezar? Crea un hola mundo con alguno de ellos (o una estructura de datos o un algoritmo de ordenación, son súper buenos para probar lenguajes), y decide por ti mismo cuál te gusta más. De hecho, ni siquiera necesitas instalar nada para iniciar con estos lenguajes, varios de ellos tienen versiones para programar alguna que otra línea de código en el navegador, y si no, puedes usar CodePicnic.

Pero en serio, no dejes pasar el tiempo.
Final
¿Sigues aquí? Pensé que habíamos dicho que no dejaras pasar el tiempo >.< !! Jaja, ok... antes de irte, no olvides dejar un comentario en el box de discusión en la parte de abajo del artículo.

Nos ayudas infinitamente compartiendo el post. Así que no lo dudes, da click en compartir :)