Para algunas personas, aprender un nuevo lenguaje de programación es un exceso que es mejor evitar. ¿Por qué, oh por qué, argumentan, necesitamos otro idioma?

¿No tenemos suficiente ya?

¿Las herramientas existentes no están haciendo el trabajo?

Y luego están esos buscadores incansables que aprovechan la oportunidad de probar cosas nuevas y tropezar con gemas. El aprendizaje es un fin en sí mismo, y no necesitan mucho convencimiento para quemar sus fines de semana construyendo un juego de cartas basado en consola en ese idioma nuevo y oscuro.

No importa a qué campo pertenezca, hay algo más allá del debate: todos queremos dedicar tiempo a algo que tendrá un futuro brillante.

Para las personas en el campo del legado, su idioma existente favorito ya tiene mucho impulso y seguirá teniendo un futuro brillante. A ellos, debo recordarles que su cadena de herramientas de desarrollo preferida ahora madura fue una vez «kool-aid» que muchos se negaron a beber. Y así es hoy; se agregan nuevas tecnologías para resolver nuevos problemas o para aliviar el dolor del desarrollo.

Si algo hace esto de manera suficientemente radical, es probable que continúe arrebatando la atención y llegue a la cima. Cuando eso sucede, no querrás quedarte atrás. 🙂

Y para aquellos a los que les gusta correr con cosas brillantes, una advertencia: divertirse es fundamental como programador, pero debemos tener cuidado de no desperdiciar nuestras energías sin rumbo fijo.

Por supuesto, mierda de cerebro es un pequeño idioma increíblemente retorcido, parecido a un rompecabezas y divertido, pero es poco probable que te beneficies si lo sigues con seriedad. Quiere algo que sea nuevo, sensato y que tenga una base sólida.

Cómo se seleccionaron estos idiomas

La selección de idiomas es un trabajo intimidante, especialmente cuando se están considerando nuevos idiomas para beneficios futuros en el empleo y la satisfacción. Todos los autores de idiomas están firmemente convencidos de que han creado el idioma perfecto posible y han resuelto todos los problemas que hay que resolver. ¿Cómo, entonces, se corta?

Para esta publicación, me concentré en algunos parámetros para mantener mi búsqueda dentro de límites razonables.

Fecha de lanzamiento

Específicamente evité lenguajes que son muy, muy nuevos.

Nuevo, me refiero a idiomas de menos de 5-6 años al momento de escribir, y especialmente aquellos que no han alcanzado la estabilidad (es decir, la versión 1.0). Esto, desafortunadamente, descarta algunas gemas reales como Cristal, Pero espero volver a esto y escribir sobre su éxito algún día. 🙂

Un fragmento de código en Crystal («Rápido como C, Slick como Ruby»)

Para mí, 5-12 años es el punto óptimo, que es cuando un idioma se ha estabilizado y se están resolviendo más refinamientos. Ahora, por supuesto, hay excepciones a esta regla, y estas se considerarán cuando corresponda.

Este es una obviedad, pero a menudo se ignora cuando nos entusiasmamos con algo nuevo. Ahora bien, para muchas personas el respaldo de una gran empresa es suficiente precedente para el éxito, pero no siempre es así.

Sí, Objective-C de Apple y ahora Swift prosperaron porque eran las únicas opciones en un ecosistema altamente controlado, pero Facebook D y Cortar a tajos (una versión fea de un lenguaje ya feo, en mi opinión) siguen siendo poco más que experimentos.

La combinación ideal sería un lenguaje respaldado por una empresa grande y estable y con una popularidad explosiva (como React).

Pero el meollo del asunto sigue siendo la comunidad. Si un idioma no está generando entusiasmo y no hay suficientes desarrolladores para educar y popularizar, no va a salir de su tumba en GitHub.

Para mí, esto descarta lenguajes maduros y fascinantes como Raqueta y Erlangya que se han mantenido planos en la curva de crecimiento.

USP enfocado y bien definido

Lo tercero que busco es un objetivo claro para el idioma. Por ejemplo, una mejor versión de PHP que corrige problemas de nombres y compila a PHP nativo no funciona para mí.

Los beneficios son demasiado pequeños para justificar las grietas si todos intentan moverse hacia él. Con este criterio, no puedo evitar descartar intentos como CaféScripty muchos otros lenguajes similares de compilación a JavaScript.

Honestamente, estoy obligado a descartar las mejoras solo de sintaxis de inmediato. La historia ha demostrado que la utilidad supera a la amabilidad cuando se trata de idiomas, por lo que si todos los idiomas nuevos se enfocan en una experiencia más placentera, me temo que no estará en esta lista.

Sintaxis clara y consistente

Sí, lo sé. Acabo de decir que la sintaxis no importa. Bueno, para ser precisos, dije que las «mejoras solo de sintaxis» no importan. Pero dicho esto, la sintaxis sigue siendo uno de los factores importantes en la productividad y la capacidad de mantenimiento del programador, por lo que es algo que seguramente aparecerá en mis cálculos aquí.

Junto con la sintaxis viene la idea de consistencia. La denominación de funciones, la estructuración de módulos, etc., son cosas clave que un lenguaje no puede permitirse equivocarse. Es 2018, por el amor de Dios, y otro diseño de lenguaje similar a PHP sería una pena para todos nosotros. Entonces, sin más preámbulos, comencemos con nuestras cinco recomendaciones principales.

1. Julia

Para la gente del MIT, los lenguajes disponibles para la ciencia de datos eran, en el mejor de los casos, un compromiso. Python, con toda su claridad y popularidad, carecía de construcciones nativas para tratar con objetos de datos. Además, al ser un lenguaje interpretado, Python fue lento para ellos (no las bibliotecas, eso sí, ya que en su mayoría están escritas en C).

Pero quizás el mayor inconveniente fue el modelo de concurrencia torpe y la falta de un modelo de computación paralela, el último de los cuales es un elemento básico en la supercomputación.

Como resultado, julia nació.

Julia alcanzó su lanzamiento estable el 29 de septiembre de 2018, apenas unos días antes de que se escribiera este artículo (¡hablando de tiempo!). Esto es lo que el sitio web oficial tiene que decir sobre sus capacidades:

Julia sobresale en computación numérica. Su sintaxis es excelente para las matemáticas, se admiten muchos tipos de datos numéricos y el paralelismo está disponible de forma inmediata. El despacho múltiple de Julia es un ajuste natural para definir tipos de datos tipo matriz y números.

En cuanto a la sintaxis, Julia puede verse como una combinación de Python y C. Sí, es probable que sea la primera vez que un lenguaje apunta a estas dos cualidades y lo logra.

Para simplificar las cosas, Julia es ultrarrápida y no impone una escritura estricta. Aquí hay algunos puntos de referencia:

Los puntos de referencia oficiales de Julia

Como puede ver, Julia es un poco peor que C pero supera a Java y Python. ¿Y qué tipo de atractivo visual ofrece Julia?

Bueno, aquí está la implementación de una función para calcular la hipotenusa de un triángulo rectángulo:

Finalmente, mientras que la mayoría de los Julia ecosistema está fuertemente inclinado hacia el trabajo matemático, creo que tiene un futuro brillante de propósito general.

Es el primer lenguaje, que yo sepa, que tiene soporte de primera clase para la computación paralela, por lo que no será una sorpresa que gane más popularidad en los dominios web e IoT.

2. óxido

Si ha probado las nuevas versiones del navegador Firefox, sabe que finalmente, después de años de trabajo, parece que podrían quitarle parte del mercado a Chrome.

Si el navegador se siente liviano y ágil y se procesa rápidamente, todo es gracias al lenguaje especialmente desarrollado por Mozilla: Óxido.

Decir que Rust tiene un futuro brillante sería una mentira; el lenguaje ya es un gran éxito, y si aún no has oído hablar de él, es porque su área de aplicación es especializada y su objetivo aterrador: ¡reemplazar a C++! Sí, finalmente tenemos un lenguaje que no solo es capaz de hacer esto sino que ya lo está haciendo.

Para las personas frustradas con el diseño sobrecargado y los desafíos de administración de memoria de C++, Rust es una bocanada de aire fresco.

Así es como se ve un programa Rust:

Conciso y elegante, en mi opinión. Rust sigue el enfoque de programación funcional, lo que hace que su código sea más componible y no hay jerarquías orientadas a objetos con las que luchar.

Entonces, ¿qué le da a Rust el coraje de ir tras C++? Es el nuevo modelo de memoria. En lugar de confiar en el antiguo baile new()/delete(), Rust introduce la idea de propiedad.

En lugar de asignar y acceder a la memoria directamente, las variables de Rust «toman prestadas» unas de otras, con restricciones estrictas impuestas por el compilador. El concepto general es demasiado complicado para explicarlo en pocas palabras, así que siéntete libre de revisar el documentos oficiales aprender más.

El punto es que esto da como resultado una seguridad de memoria del 100% sin la necesidad de un recolector de basura, lo cual es un gran problema.

Rust ha conquistado el mundo de la programación de sistemas. Ya es compatible con algunas plataformas, potencia los navegadores y los motores de renderizado están reemplazando rápidamente el código C/C++ en los sistemas de producción y se está utilizando para escribir sistemas operativos.

Claro, no es una taza de té para todos crear otro navegador o controlador de dispositivo, pero Rust ya se está extendiendo a otros dominios. Ya tenemos varios marcos web completamente funcionales y ridículamente rápidos en Rust, y se están desarrollando cada vez más bibliotecas de aplicaciones.

Honestamente, si está interesado en un futuro emocionante, Rust es el lenguaje perfecto y ahora es el momento perfecto. ¡Rust es un avión que ha despegado, pero todavía hay tiempo para subir a bordo mientras se dirige a las estrellas!

Aprender Óxido de Dmitri Nesteruk.

3. Elixir

Entre los lenguajes que se enfocan en la felicidad del desarrollador, el primer lugar ha sido permanentemente reservado para Ruby. Es un lenguaje que se lee como poesía y tiene suficientes atajos para reducir la fricción mental en un orden de magnitud.

No es de extrañar, entonces, que el marco Rails continúe dominando el desarrollo de pila completa para desarrolladores serios y nuevas empresas. Pero no todos estaban contentos con Rails, especialmente uno de sus principales desarrolladores: José Valim. Creo que el propio creador explica mejor la génesis de este lenguaje en un entrevista:

Es una larga historia, pero intentaré que sea corta y agradable. En 2010, estaba trabajando para mejorar el rendimiento de Rails cuando trabajaba con sistemas de múltiples núcleos, ya que nuestras máquinas y sistemas de producción se envían con más y más núcleos. Sin embargo, toda la experiencia fue bastante frustrante ya que Ruby no proporciona la herramienta adecuada para resolver problemas de concurrencia. Fue entonces cuando comencé a buscar otras tecnologías y finalmente me enamoré de la máquina virtual de Erlang.

Empecé a usar Erlang cada vez más y, con la experiencia, me di cuenta de que me faltaban algunas construcciones disponibles en muchos otros idiomas, incluidos los funcionales. Fue entonces cuando decidí crear Elixir, como un intento de traer diferentes construcciones y herramientas excelentes sobre la VM de Erlang.

Y he aquí, Elixir ¡nació!

Al igual que Scala mejora el lenguaje Java pero apunta a la misma máquina virtual subyacente (la JVM), Elixir aprovecha la máquina virtual Erlang de décadas de antigüedad y probada en batalla.

Ahora, una discusión sobre Erlang está más allá del alcance de este artículo, pero lo mínimo que debe saber es que es el secreto mejor guardado de la industria de las telecomunicaciones: si nuestras redes telefónicas son mucho más confiables que nuestros sistemas basados ​​en la Web, es todo gracias a Erlang.

En términos aún más simples, lo que significa es esto. Si está creando un sistema en tiempo real como el chat, Elixir requiere mucha menos memoria RAM y es más estable que Ruby (o PHP, Python y Java, para el caso).

¡Una máquina que ejecuta Ruby y alcanza un máximo de 10 000 conexiones simultáneas puede manejar fácilmente 200 000 cuando usa Elixir y todavía tiene suficiente RAM para ejecutar juegos 2D!

Fragmento de código de elixir

En cuanto a la sintaxis, Elixir copia descaradamente a Ruby, y su framework web dominante, Phoenix, copia descaradamente a Rails. Diría que eso también es algo bueno, porque junto con Laravel, Grails, Masonite, etc., estamos llegando a un punto en el que todos los lenguajes tienen estructuras similares a Rails que pueden facilitar la transición. Algunos pueden burlarse de la «falta de originalidad», pero al menos no me quejo.

Finalmente, Elixir es una de esas tecnologías que son refrescantes, agradables y condenadamente prácticas. Varias tiendas Ruby (e incluso otras que no lo son) se están mudando a Elixir, y grandes empresas como Pinterest lo están usando en producción con resultados extremadamente satisfactorios.

Mucha gente piensa que Node.js fue un intento improvisado de concurrencia y que pronto sería reemplazado por Elixir. Tengo que decir que estoy de acuerdo con ellos. 🙂

4. Kotlin

En 2017 I/O, Google desató una bomba sobre la multitud desprevenida. La empresa anunció formalmente kotlin como el idioma principal para el desarrollo de Android, enviando ondas de choque a través de la industria.

Ahora, que Google haya estado buscando activamente reemplazar a Java no sorprende después de haber sido mordido por una demanda de Oracle; sin embargo, la adopción de Kotlin fue algo inesperada, y todavía hay una buena posibilidad de que Google presente pronto su máquina virtual. Sin embargo, por el momento, Kotlin está disfrutando de un aumento.

Kotlin fue desarrollado por JetBrains, una empresa mejor conocida por su conjunto de editores de código increíblemente buenos. Uno de ellos, IntelliJ IDEA, constituye la base de Android Studio. Los objetivos de diseño de Kotlin son la seguridad, la concisión y el 100 % de interoperabilidad con Java.

Más que nada, el compilador de Kotlin trabaja muy duro para eliminar las excepciones de puntero nulo que son tan comunes en el mundo de Java. También elimina bastante la verbosidad proverbial de Java, lo que será un alivio para muchos.

Aquí hay una maravillosa comparación de código entre Java y Kotlin:

Crédito de la imagen: hype.codes

El código de Kotlin es significativamente más corto y tiene mucha menos sobrecarga cognitiva para atravesar.

Pero aclaremos una cosa: es muy poco probable que Kotlin reemplace a Java, aunque se está convirtiendo rápidamente en un favorito. Creo que dentro de diez años, los equipos pequeños y medianos no buscarán más allá de Kotlin, mientras que los grupos grandes seguirán usando Java simplemente por motivos heredados.

Dicho esto, Kotlin tiene un futuro extremadamente brillante ya que hace todo lo que hace Java, puede fusionarse con código Java sin que nadie lo note, ¡y es mucho más agradable!

5. Mecanografiado

¡Dios sabe que tuve que contenerme para este lugar! Todo dentro de mí gritaba “¡Olmo! ¡Elm!”, pero no importa cuán revolucionarias sean sus ideas o cuán divina la sintaxis, Elm aún no se ve como una alternativa principal para el trabajo de front-end. 🙁 De todos modos, pasemos a lo que es convencional: TypeScript.

JavaScript es como las bayas silvestres: feo y desagradable, pero tienes que aguantarlo si deseas sobrevivir en la jungla del desarrollo front-end. Se hicieron muchos intentos para reemplazarlo (y lo más probable es que el nuevo estándar WebAssembly tenga éxito), pero lo que realmente llamó la atención de todos fue el superconjunto desarrollado por Microsoft.

Hay excelentes posibilidades de que haya oído hablar de Mecanografiado: Angular fue el primer framework en adoptarlo desde la versión 2 en adelante, y la gente se apresuró a tomar nota. Esto se debe a que TypeScript agrega superpoderes fantásticos y muy necesarios al lenguaje de programación más famoso del mundo.

¡Sí, finalmente es posible escribir código JavaScript nativo sin sufrir y maldecir el propio nacimiento!

Aquí están las mejoras que TypeScript trae a la mesa:

✓ Tipificación fuerte: finalmente, una cadena no es un número, y un número no es un objeto, ¡lo cual no es una matriz vacía!

✓ Verificación de tipo en tiempo de compilación: si su código se compila correctamente, está más o menos garantizado que estará libre de las verrugas del tiempo de ejecución de JavaScript.

✓ Clases y módulos: sí, las clases son estándar en ES6, pero también están incluidas en TypeScript, además de un sistema de módulos ordenado.

✓ Inferencia de tipo: para tipos complejos, el compilador puede averiguar fácilmente el tipo, ahorrándole algunos dolores de cabeza.

✓ Async/await: las palabras clave y los patrones async/await son fundamentales, ¡así que ya no tendrá que perder el tiempo con promesas y devoluciones de llamada!

Espacios de nombres, genéricos, tuplas. . . Podría seguir y seguir, pero debería ser suficiente decir que TypeScript convierte una de las peores experiencias de desarrollo en una de las mejores.

Fragmento de código TypeScript

No se puede negar el impacto de TypeScript. Empujó intentos similares como Dart de Google fuera del campo (aunque está intentando regresar a través de Flutter, un marco de desarrollo móvil) y abrió los ojos de los desarrolladores de JS a los beneficios de tipos más fuertes.

Como resultado, bibliotecas importantes como React, D3, Vue (¡incluso jQuery!) Ahora tienen una versión de TypeScript, y en las mejores tiendas de software del mundo, todo el código JavaScript se escribe como código TypeScript. Los encabezados de TypeScript ahora también están disponibles para Node.js (honestamente, si un nodo puede mejorar su historia de concurrencia y reparar su pésima administración de memoria, durará para siempre).

Puede que te sorprenda saber que el creador de Node.js, después de publicar lamentando su creación, está trabajando en un nuevo tiempo de ejecución (no hay un sitio web oficial en este momento, solo el repositorio de GitHub) que tiene TypeScript como su idioma principal.

¿La mejor noticia? TypeScript es un pequeño idioma para aprender con beneficios considerables en el futuro. Si es un desarrollador intermedio de JavaScript, obtendrá suficiente TypeScript en dos días para transferir todo su código existente.

Conclusión y descargo de responsabilidad

Los idiomas específicos están ganando tanta popularidad como los de este artículo, pero no se han incluido en la lista por varias razones. Aquí hay un vistazo rápido:

  • Golang: ya establecido como un idioma convencional, aunque no muy popular. Creo que en este punto, Golang tiene varios competidores que mantendrán baja su participación de mercado.
  • R: R ya está de moda entre los científicos de datos y es poco probable que atraiga mucho a los desarrolladores de aplicaciones. Además, no debemos olvidar que las bibliotecas de aprendizaje automático se están abriendo paso lentamente en todos los idiomas principales (¡por el amor de Dios, incluso PHP las tiene ahora!), por lo que todo lo que necesita hacer es esperar un poco. 🙂
  • Swift: Apple tiene un control férreo sobre su ecosistema, y ​​Swift es el único idioma disponible allí. Anteriormente, el Objective C estaba de moda, como ahora lo está Swift. Lo considero una trampa y me niego a incluirlo aquí. 😀

El futuro siempre es incierto, y una forma de continuar con su carrera es ceñirse a lo que ya funciona y negarse a «distraerse». Si hace eso, Java, PHP, Python, Ruby, etc., son excelentes lenguajes para seguir. Sin embargo, para algunos de nosotros, la norma no es suficiente. Quieren salir a explorar y apostar fuerte por el futuro. Si cae en el último campo, uno de estos cinco idiomas debería estar en la parte superior de su lista de tareas pendientes.

Finalmente, cuando intente evaluar un idioma, no deje que el esfuerzo lo abrume porque no es mucho. Si ya conoce algunos lenguajes de programación, puede aprender cualquiera de estos en un máximo de dos meses, dedicando de 5 a 6 horas a la semana. Mientras que la felicidad y los rendimientos monetarios que se pueden generar en el futuro serán varias veces mayores.

¿Me perdí algo de lenguaje crítico aquí? ¿O tal vez tengo algo mal con los idiomas enumerados aquí? Si es así, déjame un comentario y ayúdame a mejorar. 🙂