
De la part d'un traducteur: cet article est une traduction légèrement abrégée de l'
article original de Gal Schlesinger, développeur frontend expérimenté. Il aime vraiment la programmation et son passe-temps étudie divers langages de programmation (et parfois très inattendus) à la fois pour le travail et pour ses propres projets. Gal parle également des avantages et des inconvénients de plusieurs d'entre eux dans ce matériau.
Malgré le fait qu'au travail, je travaille le plus souvent avec Java, JS et Ruby, j'aime apprendre de nouveaux langages et frameworks. Il me semble que la formation continue aide à former de nouvelles idées intéressantes qui peuvent être utilisées, si nécessaire, pour résoudre un problème spécifique. De plus, la programmation fonctionnelle permet de mieux comprendre la programmation orientée objet et le travail constant avec Rails vous permet d'apprendre de nombreuses nuances de test (bien sûr, si vous vous entraînez). Le problème est que tôt ou tard, dans le processus d'apprentissage d'autres langues, vous commencez à vous demander: y a-t-il un idéal parmi eux, où seraient rassemblées toutes les fonctions utiles que vous avez trouvées dans d'autres?
Skillbox recommande: Cours pratique "Mobile Developer PRO" .
Nous vous rappelons: pour tous les lecteurs de «Habr» - une remise de 10 000 roubles lors de l'inscription à un cours Skillbox en utilisant le code promo «Habr».
Je veux ajouter: mes préférences dans les langages de programmation peuvent ne pas correspondre aux vôtres. Dans cet article, je décris mon expérience acquise au cours des deux derniers mois au cours du travail sur des projets majeurs et ceux que je crée pendant mon temps libre.
Rubis
J'ai commencé à apprendre Ruby uniquement parce que sa communauté répète constamment l'idée que tout ici est différent de Java, avec lequel j'ai travaillé plus tôt. J'aime vraiment Ruby. C'est un excellent langage avec un grand nombre de bibliothèques prêtes à l'emploi (nous les appelons des gemmes, des gemmes), ce qui vous permet de développer rapidement et de mettre en service une nouvelle application. Rails - ce qu'on peut appeler «s'assit et s'en alla».
Ruby est un langage orienté objet, de sorte que tout le code sera approximativement dans le même style, quelle que soit la bibliothèque que vous décidez de choisir. La communauté ici est très puissante: les programmeurs préfèrent modifier les bibliothèques existantes au lieu d'en créer une à chaque fois (ActiveRecord et Sequel à titre d'exemple). Cette fonctionnalité vous permet de vous faciliter la vie.
Certes, Ruby n'est pas assez rapide en matière de performances. Les composants sont généralement «lourds» et prennent beaucoup de temps à charger. Pratiquer avec Rails est amusant, mais exécuter des applications signifie dépenser du temps et de l'argent. Heroku et AWS ECS en sont des exemples: vous devrez payer pour la RAM, l'espace fichier, le trafic et la disponibilité. En outre, il convient de garder à l'esprit que l'heure de début estimée pour une application de taille moyenne est de 5 à 10 secondes.
Javascript
J'adore JavaScript. La plupart de mes projets frontaux sont pour le web, car tout le monde a maintenant accès au navigateur. C'est une langue relativement facile à apprendre, elle est très courante, le seuil d'entrée est bas. Les outils de développement sont assez bons, implémenter le prototypage en utilisant JavaScript n'est qu'un rêve. La communauté compte également de nombreux membres qui accordent une grande attention à l'amélioration des composants.
JS a beaucoup de défauts. L'un des principaux est la division de la communauté en différents domaines du développement du langage en fonction de ses préférences. Ainsi, la principale différenciation concerne les systèmes de types (Flow vs TS), et les approches d'utilisation des bibliothèques et de tout le reste diffèrent. En conséquence, de nombreux développements, les modules sont tout simplement "bruts".
Rapide
Après avoir travaillé avec les deux langues précédentes, j'ai commencé à apprendre Swift. J'avais besoin de la langue pour avancer dans mon "jeu du développeur". Au départ, j'étais au niveau zéro, car je ne savais que créer des applications avec Native React. En principe, c'était suffisant, mais je voulais en savoir plus.
Swift est un langage typé statiquement. Initialement, il a été créé pour développer des applications dans l'écosystème Apple, mais il est ensuite devenu open-source, donc ils travaillent maintenant avec lui pour créer des applications pour Linux. Les avantages du langage sont que les applications qui y sont écrites se chargent rapidement et que le processus de compilation est clair, de sorte que le nombre d'erreurs d'exécution est progressivement minimisé.
La syntaxe du langage est intéressante et pas trop difficile à apprendre, certaines fonctions permettent d'éviter les erreurs et les problèmes. Par exemple, si une partie du code "attend" une chaîne, la transmission erronée d'un entier n'est pas autorisée. Cela vous permet de détecter et de corriger les erreurs au stade le plus précoce du processus de développement.
Pourquoi Swift n'est-il pas mon héros? Le fait est qu'il n'est pas si facile d'écrire dans Swift dans des éditeurs autres que Xcode. J'utilise habituellement Vim, les autres éditeurs sont plus lents. D'une certaine manière, j'ai essayé VSCode et Atom, mais je ne les aimais pas vraiment. Peut-être qu'à la fin je me concentrerai sur la Swift CLI, qui vous permettra de créer des plugins pour l'éditeur, mais pas maintenant. Swift n'a pas non plus de compilation statique, donc pour utiliser la CLI, vous devrez configurer votre environnement avec Swift. C'est normal pour les applications Mac, mais les serveurs sont Linux.
ReasonML
Je suis très satisfait de cette nouvelle syntaxe et boîte à outils pour Ocaml développée par Facebook. Le tulkit est assez mature, il donne beaucoup de fonctions. Les bons sont OPAM, le gestionnaire de paquets, ainsi que Merlin et OCaml / Reason. Tout cela fonctionne bien avec Vim. Et même si vous ne mentionnez pas le moteur de saisie semi-automatique et d'autres fonctions. Les outils de développement ici sont très bons.
Reason peut être compilé dans JS à l'aide de BuckleScript, qui génère un JS exécutable à partir du code Reason / OCaml. C'est incroyable, car dans ce cas, nous obtenons des systèmes entièrement typés avec une excellente interaction JS, et nous pouvons également utiliser les bibliothèques nécessaires.
La seule chose que je n'aime pas, c'est que je dois créer de nombreuses définitions de types uniquement pour une utilisation en dépendance. Mais ce n'est rien, car nous n'avons pas besoin d'assembler le module entier, mais seulement l'entrée / sortie de la fonction / classe / méthode spécifique que nous utilisons. Tout cela fonctionne très rapidement et sans problème.
La difficulté de créer une application Reason native s'est avérée être l'utilisation de certaines bibliothèques. Il s'agit principalement d'OCaml, mais comme OCaml et Reason sont interchangeables, j'ai utilisé l'extension Chrome pour travailler avec le code Reason. Le problème s'est avéré être un code OCaml qui ne peut pas être converti en Reason, probablement en raison d'un manque de PPX dans l'extension Chrome. PPX, si je comprends bien, une extension de syntaxe est une macro qui convertit le code. Ceci est un peu un plugin Babel.
Soit dit en passant, Reason / Ocaml ne prend pas en charge le multicœur, il y a Lwt pour cela. Mais pour cette bibliothèque, il n'y a toujours pas de manuels intelligibles!
Le seuil d'entrée pour OCaml / Reason est très élevé, ce qui est un peu frustrant. La communauté n'est pas trop développée et peu de gens expliquent bien les choses étranges. Peut-être que cela changera avec le temps.
Golang
Juste une langue fantastique. Il est facile à apprendre, le code se compile et s'exécute sans problème. Il existe un support pour les systèmes multicœurs et de nombreuses autres fonctionnalités utiles. La communauté est assez développée, avec un grand nombre de spécialistes.
Le fait qu'il existe de nombreux modules et applications puissants écrits en Go, tels que Docker, Kubernetes, CockroachDB, signifie que vous pouvez créer un binaire d'infrastructure pour, par exemple, Raspberry pi dans votre application.
Le manque de génériques (qui peuvent être ajoutés dans l'une des versions suivantes) est étrange car il existe des difficultés "structurelles" lors de l'utilisation de graphiques, d'arbres et d'algorithmes. Je préférerais que le compilateur fasse tout pour moi.
De plus, le problème pour moi n'est pas un système VGO modulaire très clair. Au fil du temps, nous en apprendrons plus à ce sujet, car la communauté se développe progressivement, mais jusqu'à présent, il y a peu d'informations. Le langage lui-même est assez complexe. Ce n'est pas une raison pour ne pas l'utiliser, mais pour l'instant j'évite de travailler à plein temps avec Golang. Il est pour ainsi dire ennuyeux. Peut-être qu'avec le temps, je reconsidérerai mes vues.
Cristal
Nous avons commencé avec Ruby, donc je suggère de finir Crystal.
C'est l'une des nouvelles langues, toujours pas à la version 1.0, qui ressemble presque à Ruby, mais elle est typée statiquement et rapidement! Il offre aux développeurs un grand nombre de fonctions, notamment des types facultatifs, CSP et bien plus encore. Il existe quelques nouveaux frameworks Web Crystal comme Lucky et Amber. Il y a Kemal, qui est comme Sinatra, mais pour Crystal, en plus il y a des ORM.
Mais, comme la langue est encore jeune, elle n'est pas tout à fait prête pour une utilisation active. Par exemple, j'aimerais que Crystal utilise tous les cœurs, comme Go. Un éditeur avec saisie semi-automatique et indices de types pendant le survol ne serait pas non plus superflu. Je suis un peu inquiet à l'idée que Crystal ne parvienne pas à la version 1.0. J'espère sincèrement qu'il réussira.
Quel est votre langage de programmation préféré et pourquoi?
Skillbox recommande: