Fermer

octobre 10, 2021

Tous les Pythonistas devraient passer à Go… ou d'accord, peut-être juste la moitié


Votre ingénieur logiciel moyen est toujours amoureux de Python. Marié, même.

Mais pas ceux de Google, Uber, Dropbox, Soundcloud, Slack et Medium. Les programmeurs des grandes entreprises sont depuis longtemps tombés amoureux du langage avec   la jolie mascotte.

Cela ne veut pas dire que Python n'est pas bon. C'est génial !

Mais que ce soit pour les API, les services Web ou le traitement de données, alors que la plupart des développeurs utilisent encore Python, les plus performants adoptent de plus en plus Golang ou Go. Parce que ça déchire.

Go a été inventé par un trio de stars chez Google : Robert Griesemer était l'un des responsables de la machine JavaScript V8 de Google et l'un des principaux développeurs de Sawzall, un autre langage inventé par Google. Rob Pike a co-développé l'environnement Unix et co-créé le langage de programmation Limbo. Avec Ken Thompson, l'équipe avait l'inventeur d'Unix et le créateur du langage B — le prédécesseur de C — à bord.

Google était à l'origine écrit en Python — oui , Python est toujours cool, mais vers 2007, les ingénieurs cherchaient un meilleur langage pour effectuer des tâches typiques chez Google. Ils rencontraient des problèmes comme ceux-ci, selon une discours de Rob Pike en 2012 :

  • Builds lentes : Produire un nouveau code prenait une éternité. Cela me semble familier !
  • Dépendances incontrôlées : Avez-vous déjà essayé d'installer un progiciel, pour découvrir que vous devez installer au moins cinq autres dépendances et d'innombrables sous-dépendances pour y accéder travail? Il s'avère que même les Googleurs ont ce problème.
  • Chaque programmeur utilise un sous-ensemble différent du langage : En Python, un développeur peut utiliser le package NumPy, un autre préfère SciPy, etc. Lorsque les programmeurs veulent mélanger leur code dans un seul package, les choses deviennent compliquées.
  • Mauvaise compréhension du programme : Les personnes qui disent comprendre le code à la minute où elles le lisent mentent. Du moins s'il ne s'agit pas d'un programme "Hello World" très simple. Et la documentation du code n'aide souvent pas — dans la plupart des cas, elle n'existe même pas, ou elle est mal écrite.
  • Duplication d'effort : Avez-vous déjà copié un morceau de code à partir de une partie du programme, juste pour la copier ailleurs ? Mauvaise pratique. Mais la plupart des langages de programmation le rendent facile à faire.
  • Coût des mises à jour : Avec un tel gâchis comme décrit ci-dessus, cela vous surprend-il vraiment que la mise à jour de votre logiciel va prendre beaucoup de temps et de matière grise ? Pas cool.
  • Version asymétrique : Avec du code en double flottant partout, les ingénieurs peuvent ne mettre à jour qu'une version de l'extrait de code d'origine et oublier les autres. Vous vous retrouvez donc avec une version qui contient à la fois du nouveau et de l'ancien code. Cela semble chaotique ? C'est le cas.
  • Difficulté d'écriture d'outils automatiques : Il est possible d'écrire des programmes qui écrivent eux-mêmes du code — en fait, la plupart des programmes le font à un moment donné. Mais avec les langages de programmation modernes, c'est toujours difficile à réaliser. , Java est idéal pour le développement Web, Haskell est idéal pour le code paresseux mais robuste. Le résultat est qu'un seul programme contient souvent des extraits de plusieurs langues différentes. Mais pour la compilation, le débogage et par souci de propreté, il est bien mieux d'écrire un programme dans un seul langage.

Le trio a donc entrepris de concevoir un langage propre, simple et lisible. Un langage qui éliminerait, ou au moins atténuerait, ces problèmes trop courants en génie logiciel.

La racine de bon nombre de ces problèmes courants est la complexité des langages modernes. Pensez à Python ou C — avez-vous déjà essayé de lire toute la documentation ? Bonne chance.

En revanche, la plus grande caractéristique de Go est sa simplicité. Cela ne veut pas dire que vous ne pouvez pas créer de code compliqué avec. Mais Go est très délibéré pour ne pas avoir de fonctionnalités qui apportent plus de complexité sans résoudre le problème.

Par exemple, Go n'a pas de classes comme les autres langages orientés objet. Fonctionnalité très utilisée dans d'autres langages, les classes sont idéales pour faire en sorte qu'un objet hérite des propriétés d'un autre objet. Le problème est que si vous essayez de changer la structure d'un objet sans changer celle des autres, vous cassez le code. Go a une alternative, appelée struct, qui favorise la composition par rapport à l'héritage.

Les autres fonctionnalités clés de Go sont :

  • Sécurité de type : En C, vous pouvez utiliser des pointeurs pour faire à peu près n'importe quoi, y compris planter le programme. Go ne vous permet pas de déconner comme ça.
  • Lisibilité : Comme Python, Go donne la priorité à la lisibilité. Cela le rend plus convivial pour les débutants que la plupart des langages et rend le code plus facile à gérer. Avec Godocce processus est beaucoup plus automatisé que dans la plupart des langages — et les développeurs n'ont pas à perdre un temps précieux à écrire ce qu'ils ont fait.
  • Orthogonalité :[19659015] Cela signifie que si vous modifiez un objet dans votre code, aucun autre objet ne changera à cause de cela. En ce sens, une radio  est orthogonale  car le volume ne change pas si vous changez de station. Contrairement à C, par exemple, si vous changez une chose, d'autres peuvent en dépendre et changer également. Go est orthogonal car il simplifie les choses.
  • Minimalité : Dans Go, il n'y a qu'une seule façon d'écrire un morceau de code. Comparez cela à Python, où vous avez des millions de façons d'écrire une chose !
  • Pratique : Les choses importantes devraient être faciles à coder, même si cela signifie que d'autres choses sont impossibles à faire dans Go. La logique ici est que vous souhaitez augmenter la productivité d'un développeur en rendant les tâches récurrentes rapides et faciles. Et s'il y a un problème plus complexe – ce qui est rare de toute façon – ils peuvent toujours l'écrire dans une autre langue.

Tout cela peut sembler ennuyeux et peu créatif. Et dans un sens, c'est vrai – ce n'est pas un langage avec des fonctionnalités géniales que vous pourriez utiliser pour impressionner les autres, une pléthore de façons de résoudre un problème, pas de liberté sans limites. Go n'est pas un langage qui est là pour explorer, pour faire des recherches.

Mais c'est incroyable quand vous essayez de construire quelque chose qui fonctionne. Lorsque vous faites partie d'une équipe avec de nombreuses personnes différentes d'horizons différents travaillant sur le même code. Lorsque vous êtes fatigué de tout le désordre que vous rencontrez avec d'autres langues.

…Avec une communauté florissante

En raison de sa simplicité, Go est l'un des langages les plus collaboratifs qui existent de nos jours. Le temps est révolu où les programmeurs s'asseyaient dans leurs petites cabines et ne rencontraient jamais les autres.

Maintenant, nous avons StackExchange pour résoudre tous nos problèmes de codage. Et nous avons Slack, Zoom, Google Meet et bien plus pour rester en contact avec notre équipe. Mais les langues modernes sont toujours adaptées au petit nerd dans la cabine.

Allez change cela. Bien qu'il ait vingt ans de moins que Python, il possède une communauté dynamique.

Il n'est donc pas surprenant qu'ils mettent le respect, l'ouverture et la convivialité au sommet de leur code de conduite. Alors que d'autres langages, comme Python ou C, ont également des déclarations de communauté comparables, l'accent est moins mis sur ces valeurs de base.

Il n'est donc pas surprenant que la communauté joue un rôle explicite dans les sondages annuels Go, contrairement à de nombreux autres langages.