Le langage ne cesse d’évoluer, il faut se tenir au courant
de ses avancées…
C# et ses évolutions
C# est un langage qui n’a cessé de s’améliorer. Alors que la syntaxe
de nombreux langages est quasi figée depuis leur création à part quelques
modifications à la marge, C# est passé d’un langage simple (la V 1) à un
monstre dans ses dernières versions.
Est-ce un bien ?
Quand les nouvelles features viennent rendre votre travail
plus facile, plus productif, assurément c’est un bien (comme Linq par exemple) !
Pour les jeunes ingés qui veulent montrer leurs muscles (où les vieux ingés qui
veulent faire à la page, genre vieux-beaux) c’est certainement un terrain de
jeu terriblement amusant pour écraser de son savoir ceux qui préfèrent être que
paraître.
Mais tout progrès a sa face sombre, et personnellement je
trouve que les évolutions trop nombreuses de C# en rendent l’apprentissage
presque impossible. D’un cours de 5 jours pour apprendre l’essentiel à un
débutant il y a longtemps on en est arrivé à 4 semaines minimum pour C# 10 si
on veut prendre le temps de tout expliquer et de faire quelques exercices pour
vérifier la compréhension… Et ça je ne trouve pas que cela soit un
« bien » mais plutôt un enfer car dans les équipes on trouve des
écarts de niveau de plus en plus grands, donc dangereux pour la maintenance des
logiciels, ce qui ne serait pas possible avec un langage plus
« resserré » sur l’essentiel. On s'en sort généralement malgré tout puisque la plupart des formations ne sont que des mises à jour basées sur la connaissance d'anciennes versions. Mais, pour celui qui doit tout apprendre depuis le départ, cela est peut-être devenu un peu long. Certes on peut toujours faire du "globsharp" comme d'autres parlent le "globish" et non l'anglais. Tout dépend des objectifs bien entendu.
Il y a donc du pour et du contre comme à chaque fois. Gardez
à l’esprit qu’il est préférable d’écrire un code lisible par le plus grand
nombre que du code de SSII pondu par de jeunes ingés en mal de reconnaissance
technique et que plus personne ne peut maintenir passés 6 mois, pas même eux !
Cela dit, que cela nous plaise ou non, Microsoft a décidé de
faire de C# un langage jamais terminé et toujours en mouvement, pour le
meilleur comme pour le pire.
C# 10 nous offre tout de même quelques avancées
intéressantes qu’il serait dommage de bouder. Par exemple le mot clé record
permet de définir des structures immuables « out of the box ». Très
intéressant pour se rapprocher de la programmation fonctionnelle mais plus prosaïquement
pour écrire du code multithread plus sûr.
Les Global Usings sont aussi bien pratiques. Au lieu de
lister plein de Usings en début de chaque code on peut placer dans un seul
endroit (App par exemple) des usings « globaux » qui seront valable
partout.
Il y a aussi des petites différences qui viennent perturber
la lecture plus qu’autre chose à mon avis, comme la fin de l’obligation
d’entourer le code d’un namespace avec des parenthèses.
Puis il y a les choses qui auraient dû marcher comme ça dès
le départ. Comme le fait de pouvoir utiliser des constantes (Const) dans les
chaînes interpolées (par $).
Comme vous le voyez il y a à boire et à manger, des choses
intéressantes et d’autres plus anecdotiques. A vous de voir ce qui vous est
utile et de piocher les bons morceaux et laisser le reste pour éviter
d’encombrer votre code de passages illisibles…
D’ailleurs je ne vais pas faire une redite de la doc
Microsoft sur un sujet aussi basique. Ce papier n’a pour vocation de vous
interpelez sur les évolutions de C# et leur bonne utilisation. Pour la liste
purement technique et fastidieuse, mais complète, des nouveautés de C#10 je
vous recommande chaudement la doc officielle qu’on trouve ici : https://docs.microsoft.com/fr-fr/dotnet/csharp/whats-new/csharp-10
Et C# 11 ?
Ah les vilains gourmands !
On a à peine entamé le plat qu’ils pensent à reprendre du
dessert !
Ce que j’ai dit plus haut sur C# 10 reste valable bien
évidemment …
Ce qu’il est important de savoir c’est que C# 11 nous est
livré par petits morceaux depuis longtemps dans Visual Studio 2022 !
Ainsi la version 17.1 amenait les attributs génériques ou
les templates de listes. Mais la version 17.2 amenait les littéraux de chaînes
brutes ce qui est bien du C# 11 et non du 10. De même la version 17.3 amène des
améliorations à nameof, ou le modificateur « required » pour les
champs et les propriétés.
Là aussi, le mieux est de s’abreuvoir à la source, la doc
officielle : https://docs.microsoft.com/fr-fr/dotnet/csharp/whats-new/csharp-11
Conclusion
Bref C# 10 est livré, les gens commencent à peine à s’en
servir que C# 11 au lieu d’arriver groupé dans un an en une seule fois nous est
distillé par petits bouts dans les versions intermédiaires de Visual Studio.
Je n’aime pas réellement cette façon de procéder. Indépendamment
du danger que j’évoquais déjà plus haut d’un langage qui telle la grenouille
qui voulait se faire plus grosse que le bœuf de la fable finira peut-être par
exploser à la face de ses créateurs trop exaltés et brouillons.
Microsoft, faites un autre langage, laissez le choix aux développeurs
d’utiliser un langage de niveau .NET 3.5 quand LINQ a été introduit par exemple
et créez un D# à côté dans lequel on additionnera toutes les petites choses
intervenues entre temps. Comme ça on saura. Un développeur C# serait obligé de
connaître parfaitement C#, mais un C# cernable et compréhensible. Et si on
voulait plus (mais qui en entreprise le demanderait…) on exigerait la
connaissance de D#...
J’ai commencé ma « carrière » de MVP en 2009 en
étant MVP C#. J’adore ce langage. Et je l’aime toujours autant alors je
voudrais le protéger contre un grand danger qui le guette, devenir impraticable
car inapprenable…
Stay Tuned !