
De un traductor: esta publicación es una traducción ligeramente abreviada del
artículo original de Gal Schlesinger, un desarrollador frontend experimentado. Realmente le gusta la programación, y su pasatiempo es estudiar varios lenguajes de programación (ya veces muy inesperados) tanto para fines laborales como para sus propios proyectos favoritos. Gal también habla sobre las ventajas y desventajas de varios de ellos en este material.
A pesar de que en el trabajo con mayor frecuencia trabajo con Java, JS y Ruby, me gusta aprender nuevos lenguajes y marcos. Me parece que la capacitación continua ayuda a formar nuevas ideas interesantes que pueden usarse, si es necesario, para resolver un problema específico. Además, la programación funcional ayuda a comprender más acerca de la programación orientada a objetos, y el trabajo constante con Rails le permite aprender muchos de los matices de las pruebas (por supuesto, si practica). El problema es que, tarde o temprano, en el proceso de aprender otros idiomas, comienzas a preguntarte: ¿existe un ideal entre ellos, donde se recopilarían todas las funciones útiles que encontraste en otros?
Skillbox recomienda: Curso práctico "Mobile Developer PRO" .
Le recordamos: para todos los lectores de "Habr": un descuento de 10.000 rublos al registrarse en cualquier curso de Skillbox con el código de promoción "Habr".
Quiero agregar: mis preferencias en lenguajes de programación pueden no coincidir con las suyas. En este artículo describo mi experiencia adquirida en los últimos meses en el trabajo de proyectos importantes y los que creo en mi tiempo libre.
Rubí
Empecé a aprender Ruby solo porque su comunidad repite constantemente la idea de que todo aquí es diferente de Java, con el que trabajé antes. Realmente me gusta Ruby. Este es un gran lenguaje con una gran cantidad de bibliotecas listas para usar (las llamamos gemas, gemas), lo que le permite desarrollar y poner en práctica rápidamente una nueva aplicación. Rieles: lo que se puede llamar "se sentó y se fue".
Ruby es un lenguaje orientado a objetos, por lo que todo el código tendrá aproximadamente el mismo estilo, sin importar qué biblioteca decida elegir. La comunidad aquí es muy poderosa: los programadores prefieren modificar las bibliotecas existentes en lugar de crear una nueva cada vez (ActiveRecord y Sequel como ejemplo). Esta característica le permite hacer su vida más fácil.
Es cierto que Ruby no es lo suficientemente rápido en lo que respecta al rendimiento. Los componentes suelen ser "pesados" y tardan mucho en cargarse. Practicar con Rails es divertido, pero ejecutar aplicaciones significa gastar tiempo y dinero. Heroku y AWS ECS son ejemplos de esto: tendrá que pagar por RAM, espacio de archivos, tráfico y tiempo de actividad. Además, debe tenerse en cuenta que el tiempo de inicio estimado para una aplicación de tamaño promedio es de 5-10 segundos.
Javascript
Me encanta JavaScript La mayoría de mis proyectos frontend son para la web, ya que ahora cualquiera tiene acceso al navegador. Este es un lenguaje relativamente fácil de aprender, es muy común, el umbral de entrada es bajo. Las herramientas de desarrollo son bastante buenas, implementar prototipos usando JavaScript es solo un sueño. La comunidad también tiene muchos miembros que prestan mucha atención a mejorar los componentes.
JS tiene muchos defectos. Una de las principales es la división de la comunidad en varias áreas del desarrollo del lenguaje de acuerdo con sus preferencias. Por lo tanto, la diferenciación principal se basa en los sistemas de tipos (Flow vs. TS), y los enfoques para usar bibliotecas y todo lo demás difieren. Como resultado, muchos desarrollos, los módulos son simplemente "en bruto".
Veloz
Después de trabajar con los dos idiomas anteriores, comencé a aprender Swift. Necesitaba el lenguaje para avanzar en mi "juego del desarrollador". Inicialmente, estaba en el nivel cero, porque solo sabía cómo crear aplicaciones con Native React. En principio, eso fue suficiente, pero quería aprender más.
Swift es un lenguaje de tipo estático. Inicialmente, se creó para desarrollar aplicaciones en el ecosistema de Apple, pero luego se convirtió en código abierto, por lo que ahora trabajan con él para crear aplicaciones para Linux. La ventaja del lenguaje es que las aplicaciones escritas en él se cargan rápidamente, y el proceso de compilación es claro, por lo que la cantidad de errores de tiempo de ejecución se minimiza gradualmente.
La sintaxis del lenguaje es interesante y no es demasiado difícil de aprender, algunas funciones ayudan a evitar errores y problemas. Por ejemplo, si parte del código "espera" una cadena, no se permite la transmisión errónea de un número entero. Esto le permite detectar y corregir errores en la etapa más temprana del proceso de desarrollo.
¿Por qué Swift no es mi héroe? El hecho es que no es tan fácil escribir en Swift en editores que no sean Xcode. Usualmente uso Vim, otros editores son más lentos. De alguna manera probé VSCode y Atom, pero realmente no me gustaron. Quizás al final me centre en la CLI de Swift, que le permitirá crear complementos para el editor, pero no ahora. Swift tampoco tiene una compilación estática, por lo que para usar la CLI deberá configurar su entorno con Swift. Esto es normal para las aplicaciones de Mac, pero los servidores son Linux.
ReasonML
Estoy muy satisfecho con esta nueva sintaxis y kit de herramientas para Ocaml desarrollado por Facebook. El tulkit es bastante maduro, le da muchas funciones. Los buenos son OPAM, el administrador de paquetes, así como Merlin y OCaml / Reason. Todo esto funciona bien con Vim. E incluso si no menciona el motor de autocompletar y otras funciones. Las herramientas de desarrollador aquí son muy buenas.
Reason se puede compilar en JS utilizando BuckleScript, que genera JS ejecutable a partir del código Reason / OCaml. Esto es sorprendente, porque en este caso obtenemos sistemas completamente tipados con excelente interacción JS, y también podemos usar las bibliotecas necesarias.
Lo único que no me gusta es que tengo que crear muchas definiciones de tipo solo para uso de dependencia. Pero esto no es nada, porque no necesitamos ensamblar todo el módulo, sino solo la entrada / salida de la función / clase / método específico que usamos. Todo esto funciona muy rápido y sin problemas.
La dificultad para crear una aplicación Reason nativa resultó ser el uso de algunas bibliotecas. Esto es principalmente OCaml, pero como OCaml y Reason son intercambiables, utilicé la extensión de Chrome para trabajar con el código Reason. El problema resultó ser que hay un código OCaml que no se puede convertir a Reason, posiblemente debido a la falta de PPX en la extensión de Chrome. PPX, según tengo entendido, una extensión de sintaxis es una macro que convierte el código. Este es un complemento de Babel.
Por cierto, Reason / Ocaml no admite multi-core, hay Lwt para esto. ¡Pero para esta biblioteca todavía no hay manuales inteligibles!
El umbral de entrada para OCaml / Reason es muy alto, lo cual es un poco frustrante. La comunidad no está demasiado desarrollada y pocas personas explican bien cosas extrañas. Quizás esto cambie con el tiempo.
Golang
Solo un lenguaje fantástico. Es fácil de aprender, el código se compila y se ejecuta sin problemas. Hay soporte para sistemas multi-core y muchas otras características útiles. La comunidad está bastante desarrollada, con una gran cantidad de especialistas.
El hecho de que haya muchos módulos y aplicaciones potentes escritos en Go, como Docker, Kubernetes, CockroachDB, significa que puede crear una infraestructura binaria para, por ejemplo, Raspberry pi dentro de su aplicación.
La falta de genéricos (que se pueden agregar en una de las próximas versiones) es extraña porque existen dificultades "estructurales" al usar gráficos, árboles y algoritmos. Preferiría que el compilador hiciera todo por mí.
Además, el problema para mí no es un sistema modular VGO muy claro. Con el tiempo, aprenderemos más al respecto, ya que la comunidad se está desarrollando gradualmente, pero hasta ahora hay poca información. El lenguaje en sí es bastante complejo. Esta no es una razón para no usarlo, pero por ahora estoy evitando el trabajo a tiempo completo con Golang. Él es, por así decirlo, aburrido. Quizás con el tiempo reconsidere mis puntos de vista.
Cristal
Comenzamos con Ruby, así que sugiero terminar Crystal.
Este es uno de los nuevos idiomas, todavía no llega a la versión 1.0, que se parece casi a Ruby, ¡pero está estáticamente escrito y rápido! Ofrece a los desarrolladores una gran cantidad de funciones, incluidos tipos opcionales, CSP y mucho más. Hay un par de nuevos marcos web de Crystal como Lucky y Amber. Está Kemal, que es como Sinatra, pero para Crystal, además, hay ORM.
Pero, dado que el lenguaje aún es joven, aún no está listo para su uso activo. Por ejemplo, me gustaría que Crystal use todos los núcleos, como Go. Un editor con autocompletado y sugerencias de tipos durante el desplazamiento tampoco sería superfluo. Estoy un poco preocupado por la idea de que Crystal podría no llegar a la versión 1.0. Sinceramente espero que tenga éxito.
¿Cuál es tu lenguaje de programación favorito y por qué?
Skillbox recomienda: