Développer comme un pro en France, c’est possible

En tant que développeur C/C++/NET et plus généralement Microsoft, il est possible de participer à des projets open-source tout en restant en France. Il n’y a pas besoin de s’expatrier pour participer à des projets complexes. Exemple:

  • Windows Terminal
  • Microsoft NET CoreCLR
  • Microsoft NET CoreFx
  • Windows UI

Le portail GitHub.com et sa section Microsoft contient des dizaines de projets. De plus, il existe ailleurs de nombreux autres projets open-source de classe internationale comme :

  • Google Chromium
  • Mozilla Firefox

Il y a de quoi étudier et contribuer. Vous allez me dire, ah oui mais il faut du temps pour rentrer dedans ! Ben oui, tout à un prix.

Dans le cadre de mon partenariat avec Programmez, je vais essayer de faire un ou deux articles sur les contributions open-source de ce style. Pour mon MVP, le plus important pour moi est de creuser le projet Microsoft NET CoreCLR. Pour Microsoft c’est un projet important et cela peut permettre d’avoir une bonne visibilité de contribuer. Il y a des étapes à franchir pour NET et la roadmap va nous mener de NET Core 3 à NET 5.0 en 2021. Il va y avoir des évolutions.

L’avantage des projets open-source C++ tient dans le fait que les librairies third-party ne sont jamais deprecated. Les projet grandissent et avancent. Il n’y a pas de Marketing qui impose telle ou telle feature ou telle lib qui change tout. Le langage ISO C++ évolue, la STL évolue mais les fondamentaux sont toujours là. Le style “Modern C++” s’est imposé partout et c’est super pro.

En comparaison dans le monde C#/NET, avant il n’y avait pas Linq, avant il n’y avait pas async/await. Quand vous regardez le code des nouveaux projets .NET, c’est n’importe quoi avec leur async/await. Le Marketing a essayé de nous faire croire que async/await était la panacé car ça exploitait mieux la batterie. C’est une arnaque intellectuelle.

Rappel sur cette arnaque: Pour vendre des tablettes Surface sous ARM, Microsoft nous explique qu’il faut économiser la batterie et que les programmes actuels consomment trop de CPU donc de batterie et que la solution c’est WinRT et les API async. Moralité, on nous bride la possibilité de faire du Win32 en ARM. On a vu le succès de l’effet. Pas de tablettes à la vente, fiasco de WinRT. Ensuite, on nous dit disponibilité que des applications du store mais pas C++. Donc il n’y a que des applications de misère… Résultat: Le fiasco, again. Ensuite on ouvre à Win32. Trop tard, le store et WinRT sont à la ramasse. L’utilisation des API WinRT est de 2% dans les applications Windows. WinRT étant un subset des API Win32 qui n’apportent rien et qui est async/await avec un modèle d’état fini mêlé de threading et de blocage qui est pénible à utiliser et qui ne résout en rien l’usage de la batterie. Oui pour les programmes de bourrin en C# mal écrit, ça peut poser problème mais pour les vrai développeurs C++, on sait ce qu’on fait, on n’a pas besoin de créer un thread à chaque fonction. On sait faire pipi sans en foutre partout sur la cuvette !

Moralité, les petits jeunes y croient et développe de la m…. en barre. Ils créent des fonctions qui créées 3 strings qui se battent en duel et retourne une Task et la méthode est marquée async/await ! C’est n’importe quoi. La programmation C#, c’est devenu un truc très bizzard. Au niveau de la plateforme, les CoreFX et le CoreCLR c’est nickel mais les développeurs C#/NET sont instables. Ils utilisent les nouveautés du langage a chaque nouvelles évolutions, il changent de librairies de bases tous les ans, un coup c’est ADO.NET, un coup c’est Dapper, un coup c’est EF, un coup c’est EF Core ; ils se laissent balader par le Marketing et ne réfléchissent pas par eux-mêmes. Ils font du code jetable qui est réécrit à chaque changement de framework ou de Visual Studio. Y a rien de pérenne. Bref, la roadmap NET va secouer le cocotier j’espère. A croire que ce n’est pas assez technique et compliqué. Il sont besoin ce complexifier les choses. Je vois énormément de développeurs C# qui sont frustrés car il n’y a rien à optimiser en C# ou si peu. Il sont sur une boite noire. Ils ne voit pas l’OS, le processeur. Il ont un Framework et ils jouent avec. Venez faire du C/C++, chez nous on build on the metal, on n’a pas besoin de complexifier le code pour se rendre intéressant.

Pour bien mener sa barque en développement C#/NET, il ne faut pas écouter le marketing et se poser les bonnes questions:

  • ais-je besoin de cette Nème nouvelle fonctionnalité du langage C#
  • ais-je besoin de mettre mon logiciel en risque pour utiliser la dernière libraire à la mode ?
  • qu’elle est l’intérêt de mettre à niveau ces satanés paquets Nuget qui sont tous plus incompatibles les uns que les autres avec leur dépendances foireuses ?
  • est-ce utilise que je mette le doigt dans le monde UWP quand on sait le succès (c’est de l’humour) que cela a ?
  • on me dit que l’avenir c’est le cloud ? Dois-je tout casser et tout réécrire ?
  • j’ai une interface UI faite en WinForms ; on me dit de passer à WPF ; ça casse tout. Dois-je y passer ?
  • j’ai une application UI WinForms ou WPF qui fonctionne nickel. On me dit que Angular c’est la mode ; dois-je y passer ? Angular c’est du TS/JS.

Pour toutes ces questions, il faut s’entourer de gens d’expériences qui sauront pour éviter les pièges. Il faut des experts en développement logiciel : des Architectes.

Le développement logiciel, c’est un métier.

Applications multi-plateformes ? HOWTO ?

Pour développer des applications multi-plateformes, il n’y a pas cinquante choix possibles, il n’y en a qu’un seul qui est gratuit et performant : c’est C++.

Seul le C++ permet de tirer partie des dernières nouveautés des SDK Windows, Linux, Android et iOS car le système et son environnement sont faits avec. L’avantage de C++ est qu’il <<build on the metal>> : il n’y a pas plus rapide. C++ tire partie de l’architecture logicielle des systèmes d’exploitation et matérielle des derniers processeurs x86, x64 et ARM. Cela fait quarante ans que les optimiseurs de code C++ garantissent la meilleur qualité de code possible.

C est le nouvel assembleur. C++ permet l’orientée objet : abstractions, héritage et polymorphisme (fonctions virtuelles), surcharge d’opérateurs, templates. Avec sa librairie STL (Standard Template Library) et conjointement avec une librairie comme Boost (boost.org), le C++ possède une boite à outil universelle qui gère les strings, containers (collections), algorithmes, les I/O, les threads, les smart pointers, les communications, etc.

Passez le pas. Installez Visual C++ sous Windows, GCC sous Linux, XCode sous Mac et partagez du code métier. Réalisez des interfaces graphiques riches et tirez partie du meilleur langage de développement qu’est C++.

Vous allez me dire il existe des solutions hybrides comme NET ou Java ? Ces solutions sont un ensemble de mille feuilles lourds et lents qui ne permettent pas de créer des applications de classe mondiale. En automobile, y a les Fiat 500 et les Ferrari. A prix égal (voir moins cher), vous prenez quoi? Y a pas photo…

Dossier Azure eShopOnContainers 2019 pour Programmez

En partenariat avec Programmez, il est prévu de faire un dossier sur la sample officiel Microsoft eShopOnContainers disponible sur https://github.com/dotnet-architecture/eShopOnContainers :

Sample eShopOnContainers de Microsoft

Il est décidé de faire une introduction à Docker (Septembre 2019) puis de faire des dossiers sur les architectures Micro-services, les APIs management, le code, le code, le code !

Stay tuned.

Le renouvellement des MVP…

Nous attendions tous la date du 1er Juillet avec attention car nous avons su qui était renouvelé MVP ou pas… C’est un moment toujours un peu angoissant de savoir si ses contributions seront suffisantes pour Microsoft pour obtenir de nouveau le titre de MVP.

Une fois l’effervescence retombée, nous reprenons chacun le flot de nos vies respectives. Etre MVP est une distinction qui marque une année de contributions pour une communauté technique Microsoft. Cela demande du temps et de l’investissement. Souvent, les soirées sont longues et les nuits sont courtes et il n’est pas rare de vouloir faire un break de temps en temps.

Continuer à vouloir être nominé MVP demande de l’énergie et surtout du temps. Il faut soit coder, faire des metups & events, faire des podcasts, des articles techniques, du blogging : cela prend du temps. Cela se fait souvent au détriment de la vie familiale ou des loisirs. Il faut être vigilent et conserver à l’équilibre la balance du “personal/profesionnal life” ! C’est un challenge.

Comme on dit entre nous, MVP un jour, MVP toujours. Nous faisons partie du Programme et nous en sommes fier. Grâce à cela, nous rayonnons et savons tirer notre épingle du jeu dans un monde professionnel en constante mutation avec un facteur de complexité en perpétuel expansion.

En France nous sommes 111 MVP dont 31 MVP Developer Technologies et 21 MVP Azure (source mvp search). C’est un honneur de faire partie de cette communauté.

Merci Martine T.

Applications: Managed vs Native

Disclaimer: cet article n’engage pas le point de vue de mon employeur ou de Microsoft. Je travaille dans le monde du Services Microsoft, je fais du développement .NET/C# et C++, des audits, de la formation ; je contribue en C/C++ à Windows, mais je ne fais pas de Java. Question de principes.

Les années 2000 ont vu l’explosion des langages dit “Managed” comme Java ou NET. Leurs caractéristiques sont les suivantes:

  • Productivité accrue
  • Compilation du code en un langage intermédiaire (bytecode ou MSIL) avec des méta-data
  • Langage dérivé de C++
  • Environnement d’exécution securisé sous forme de machine virtuelle qui emet du code à la volée (JIT ou Just In Time Compilation) à partir du bytecode ou du MSIL quelque soit l’architecture matérielle, l’OS ou le processeur
  • Suppression automatique de la mémoire allouée (Garbage Collector)
  • Framework (super boite à outils) qui contient des packages pour coder l’accès aux données, les Web Services, les structures de données, la crypto, la sécurité, l’UI, le support XML, JSON, etc.

Ces systèmes “managed” existent depuis 20 ans environ et ont bati leur réputation en dénigrant les langages traditionnels à base de compilation native qui ciblent une architecture matérielle ou processeur ou OS distinct.

L’application “Managed” est par nature “safe et secure” car le code ne peut être modifié par une main extérieure. La langage contient des exceptions et le code est déterministe et le code intermédiaire généré contient des met-data et checksum qui assurent que le code généré est sécurisé.

Comparé au code C++ qui était pointé du doigt (car code majoritairement utilisé par les développeurs dans les années 90-2000) qui permettait d’être attaqué par buffer overflow, etc. Le message était le suivant: C++ est unsafe et unsecure. Venez faire du Java/.NET à la place.

Pour bien charger la mule, on ne parle plus de code compilé ou code C/C++ mais de code “Unmanaged”. C’est une escroquerie intellectuelle. On n’est pas ici pour se raconter des histoires: C’est complètement faux de dire qu’un code C/C++ est unsafe et unsecure. L’OS est fait avec ! le Shell, etc.

Ces systèmes Managed ont expliqué qu’il n’y aurait jamais de virus fait avec. Avec le recul, on s’aperçoit qu’il n’y a jamais eu autant de logiciels malveillants faits avec ses technologies car très faciles à utiliser pour coder de la socket bas niveau par exemple, faire des outils d’attaque DOS.

Revenons au comparatif de fonctionnalités pour un code “Unmanaged”:

  • Compilation du code C++ en assembleur optimisé (code pour pipelines parallèles et code vectorisé, support des instructions étendues pour les processeurs Intel ou AMD) => “Power and Performance”
  • Support des APIs de l’OS hôte : accès illimité aux API du système d’exploitation
  • Gestion automatique de la mémoire en C++ Moderne (C++11) via les smart pointers
  • Code syntaxiquement compatible à 90% avec Java ou C# en C++ Moderne

La vérité du terrain: Regardons la liste des applications que nous faisons tourner au quotidien sur nos PC par exemple:

  • Windows, Linux: OS en C/C++.
  • Suite Office: Word, Excel, Outlook, PowerPoint : C/C++
  • Outils: 7zip, Adobe reader, Chrome, VLC : C/C++

Bref, les vrais logiciels sont faits en C/C++. Pourquoi ? Parce que c’est rapide, fiable et que l’expérience utilisateur est maximum. Je fais une action, le logiciel répond immédiatement.

N’avez vous jamais eu la frustration de clicker dans une application et d’attendre 3 secondes avant que cela répondent…. ?

Le monde du mobile a revu l’essence du monde Unmanaged car les devices ont un petit processeur, peu de mémoire et peu de stockage. Et là, l’utilisateur veut de la performance et du répondant. Une application qui met 30 secondes à se lancer est swappée rapidement. Le mobile a besoin de traiter les images de la caméra, par exemple, il lui faut du natif ! Pas le choix…

Quel est le bilan des systèmes du “Managed” depuis 2000 ?

Java a sorti son épingle du jeu et est massivement utilisé sur les systèmes Linux comme Red Hat. De la guerre .NET/Java, il est clair que Microsoft n’a pas su gagné le combat. D’une part en interne, Microsoft a une relation schizophrène avec .NET, Microsoft propose la technologie mais ne fait pas ses logiciels avec. Microsoft fait 95% de ses logiciels en C/C++ avec la stack C++ Moderne.

Vous allez me dire oui mais pour les entreprises ? OK, dans le monde du Services, les sociétés Gold Partners font du .NET. Mais les systèmes d’informations faits en NET sont rares comparés aux SI Java. Les entreprises réservent leurs applications d’entrée gamme aux technologies Windows et .NET mais dès qu’il faut attaquer le coeur de métier, aller sur les gros serveurs Linux ou Unux, Java est utilisé. Microsoft a du mal à se faire une place dans les grosses sociétés pour le SI stratégique. OK on vend des WS en .NET, un peu de SQL Server à droite à gauche, du SharePoint, mais ça reste de taille moyenne en général. Microsoft est le choix des petits et moyens systèmes. Oui, cela fait des milliers de clients mais de petites structures. Quelques appz clients lourds mais pas de SI stratégiques… Microsoft perse dans les entreprises avec Windows Server, Active Directory, la suite Office, la messagerie mais à l’époque du Web, le discours du développement Microsoft est très flou. On nous parle de .NET Framework 5.0, de .NET Core 3.0 Preview 6 , de .NET Standard 2.2, c’est très flou et assez compliqué…Dans le monde des services public, Java est utilisé massivement. Dans les banques, c’est 50/50 avantage Java.

Avec le cloud, la donne change un peu… On peut héberger pleins de petits serveurs et la guerre n’est plus Java./NET mais Web/JS vs le reste du monde.

Code Review Microsoft : Le diable se cache dans le détail

En ce moment, je contribue au code source Microsoft de Windows Terminal. Le projet est en open-source sur GitHub et Microsoft accepte les contribution externes.

J’ai commencé par observer le code source qui est assez important et puis j’ai opté pour la création d’une issue suite à des commentaires dans le code qui disaient “changer ci, changer ça, TODO MSFT, etc”.

Après plusieurs jours de réflections, j’ai commencé de jardiner dans le code. Tu modifies un fichier cpp , un ou deux fichier .h et puis les classes utilisatrices ont des changements à répercuter. Bref, tu modifies 15 fichiers au final pour un juste petit changement… Mon premier commit a été massif mais ce fut libérateur. J’ai réalisé que je pouvais le faire. D’un autre côté, cela fait plus de 15 ans que j’ai accès au code source de Windows, donc avec le temps ça serait malheureux de ne pas y arriver… ça serait une faute depuis tout ce temps !

Le temps du Pull Request est venu… C’est le moment ou tu remontes les changements de ta branche chez le projet principale et là, tu décris tes corrections et tu passes par la revue de code ou code review et là, chez Microsoft c’est impitoyable…

Exemple sur l’utilisation de smart pointers:

  • ne pas mettre de pointeur, passer un smart pointer
  • ne pas passer un smart pointeur si une réfrence suffit
  • mettre les ref en const
  • oter les copies de variables inutiles

Au départ, j’avais fait pas de changement et mis des smart pointers là ou des références pouvaient sufir… Le code a été revu. Doc ici: https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/

Comme je disais sur le réseau social LinkedIn, contribuer au code source Windows, c’est exigeant, c’est un autre métier… On m’en a voulu pour ces paroles car on pensait que je critiquais les sociétés de services. Non… ce n’est pas ça. Le code review de Microsoft est impitoyable, rien n’est laissé au hasard. C’est impressionnant. Et pourtant, je fais du code review, je fais même du coaching en code review. C’est mon dada et bien là, je me suis retrouvé avec pleins de requests changes…

Un PR à moi: https://github.com/microsoft/terminal/pull/1161

Nous sommes tous des Architectes

Un bon développeur est aussi un architecte. On ne code pas n’importe quoi n’importe comment. Et pour cela, faut être formé. Dès que je vois une conférence chez Microsoft par exemple ou un nouveau book, j’invite mes connaissances professionnelles à y aller ou à lire cet ebook. Dernièrement, on me dit Pic, je peux pas lire ton ebook au bureau mon patron m’a fait la remarque… Là tu te dis, OK le monde fabuleux des PME a encore frappé… Par devant je suis Gold Partner Microsoft, un pure player mais la réalité c’et que tu dois pisser du code sans valeur ajoutée à la chaîne et que tu dois te former sur ton temps libre. Tu demandes un accès Pluralsight, c’est non. Tu lis des ebooks, c’est non. C’est quoi ces boites de m**** ? Au bureau, un consultant se doit de se former régulièrement, ça fait partie du métier. Tu veux être vendu à 350 € la journée ou à 1000 € ? Tu veux faire du .NET/C# à la pointe ? De la modernisation des Appz dans le cloud Azure ou du cloud-native ? Ah Oui Pic, la formation chez MS elle me servirait bien mais je peux, je suis en retard sur mon projet et si je m’absente, tu vois… Non je vois pas! Si ton patron qui ne te forme déjà pas, refuse que t’aille en séminaire, c’est un idiot. Change de job. Vite ! Améliore ton quotidien.

Les Rangers MVP

Microsoft MVP

Voici la liste des MVPs Microsoft:

  • [MVP Developer Technologies] Anthony Giretti
  • [MVP Azure] Cédric GEORGEOT
  • [MVP FoxPro] Frédéric Steczycki
  • [MVP Azure] Laurent Grangeau
  • [MVP Azure] Cédric Leblond
  • [MVP Azure] Cédric Derue
  • [MVP Developer Technologies] Gora LEYE
  • [MVP Developer Technologies] Christophe Pichaud