Langue: Anglais
Aujourd’hui, il existe pléthore de langages de programmation dans l’informatique et l’on peut souvent tout faire avec eux. Mais revenons au début de l’histoire afin de comprendre où se situe le langage Go que nous allons découvrir.
Au début, il n’y avait quasiment que l’assembleur, ou on communiquait directement avec la machine via des instructions en hexadécimal.
Efficace mais peu pratique, ce qui poussa à développer une première génération de langages de programmation comme Cobol, Lisp, Fortran, et surtout le C plus tardivement dans les années 70 qui reste encore une référence. Le C est considéré comme un langage bas niveau, car l’accès à la gestion de la mémoire est plus ou moins manuelle.
Mais depuis le Web et le début du 21ᵉ siècle, une autre vague de langages plus modernes de haut niveau (gestion de mémoire automatique, etc.) sont apparus qui sont bien plus simples à utiliser et qui sont presque aussi performants.
JavaScript, Ruby, Python pour le Web, C# pour Microsoft, Java pour le Web et les applications, C++ pour les jeux vidéos, Python pour l’intelligence artificielle, les solutions ne manquent pas et tout sont plus ou moins interchangeables.
Pourquoi donc développer un nouveau langage ? Tout simplement parce que l’informatique évolue et que les grosses entreprises type GAFA ont bien souvent des besoins différents. On a ainsi vu l’émergence récente de nouveaux langages, comme Swift pour l’écosystème Apple, Kotlin pour Android, et Rust et Go par Mozilla et Google. Généralement, la particularité de ces langages est d’être compatible (mieux adapté) pour de la programmation fonctionnelle qui est de plus en plus populaire, et surtout d’utiliser la puissance des processeurs pour faire de la programmation concurrente. Pour schématiser grossièrement, lorsque votre processeur à 8 cœurs, vous pouvez opérer en simultané 8 tâches en même temps, ce qui va augmenter la performance de votre code.
Pourquoi avoir choisi de lire ce livre et de découvrir Go alors que je connais plein d’autres langages ? Parce que c’est un langage très utilisé pour ses qualités concurrentielles dans la blockchain ou les performances des systèmes sont au cœur des besoins.
Dans ce livre, nous avons donc une présentation complète du langage Go de Google et de ses particularités. Même si les auteurs commencent par la base (les variables, la syntaxe du langage), vous allez vite vous retrouver perdu si vous ne maitrisez pas un autre langage de programmation avant de vous attaquer à ce livre.
Dans ce livre, il n’y a rien de particulièrement étonnant et il suit le même schéma que les autres livres que j’ai pu lire pour apprendre des langages de programmation.
Les exemples sont assez complexes, mais très bien choisis pour faire comprendre à quel point la programmation peut être puissante (dessiner des figures 3D avec des formules, analyser son espace disque, faire un bot qui navigue sur internet pour détecter des mots, etc.)
Concernant le langage en lui-même, il y a des bonnes choses, comme un formateur de code intégré, tout pour écrire des tests sans avoir besoin de librairie, des règles strictes pour uniformiser le code et éviter les imports inutiles. On peut l’utiliser sans problème à la fois pour du logiciel et du web, et le système d’erreur est simple et efficace.
Si je dois faire un bot performant, je pense que j’utiliserai Go, car je le trouve très adapté et je comprends mieux pourquoi les blockchains l’utilisent. Il y a également des outils pour analyser la performance de son code que j’ai trouvé séduisants.
Cependant, plein de choses me gênent dans Go. Tout d’abord, il y a énormément de choses qui sont implicites pour réduire le code, mais qui rendent la compréhension beaucoup plus difficile.
Il y a des conceptions étranges qui font apparaître des problèmes que l’on ne verrait pas dans d’autres langages et je trouve justement que tout cela rend le code pas assez “safe”. Par exemple, vous testez qu’un objet est “null” mais le langage vous répondra qu’il ne l’est pas parce que votre objet n’a pas été initialisé ou des choses de ce genre. C’est sûr qu’avec uniquement des gens expérimentés dans Go le problème ne se pose pas, mais c’est tout ce que je déteste dans un langage de programmation : le manque de clarté.
Il y a d’autres choses qui me posent problème : pas de support des optionnels, une conception assez primaire des tableaux. En bref, il ne fait pas si moderne que ça et je préfère largement le langage de programmation Swift d’Apple que je trouve beaucoup plus élégant.
Son vrai point fort, c’est sa gestion du parallélisme pour la performance. Son système de routine (parallélisme) n’est pas exceptionnel en soi, vu qu’il est également possible de faire du “multithreading” avec d’autres langages. Sa grosse innovation, c’est son système de “channel” qui vous permet de pouvoir communiquer entre toutes les routines que vous créez : en gros, vous pouvez faire communiquer les fonctions que vous avez mises en parallèle les unes avec les autres. Vous pouvez aussi les synchroniser, les combiner, etc. C’est extrêmement puissant.
Cependant, “un grand pouvoir implique de grandes responsabilités”, comme le dit si bien Churchill, Roosevelt, Schiappa ou bien Spider-Man.
Lorsque vous vous amusez à faire des choses aussi compliquées que faire communiquer vos fonctions que vous avez mises en parallèle, vous avez intérêt de savoir ce que vous êtes en train de faire.
Si vous voulez créer un projet en Go, il vaut mieux avoir des gens compétents et expérimentés, surtout si vous vous amusez à explorer cette partie.
Les parties les plus complexes sur la fin (reflection, bas niveau) sont plutôt bien expliquées contrairement à la globalité du livre.
Le livre n’avait rien d’une ballade de santé, j’ai pu donc solidifier des connaissances en programmation et découvrir Go, ses avantages et ses spécificités. Le gros point négatif, c’est quand même le manque de clarté du livre et des explications. Vous trouverez fréquemment ce genre de phrase où l’on vous demandera de retourner 50 pages en arrière : Notice the similarity of the string above with intsToString in section 3.5.4. C’est assez pénible.
À lire pour des programmeurs au moins confirmés qui veulent découvrir Go car c’est le livre référence et nul doute que vous y apprendrez des choses si vous ne connaissez pas ce langage.