Comment devenir un expert Microsoft ?

Au travers les échanges que j’ai avec mes étudiants à l’ESGI ou bien sur les forums, la question qui revient souvent c’est “comment on devient un Expert Microsoft ?”. En effet, la stack des produits et technologies est tellement large que on en sait pas ou donner de la tête…

Je vais vous donner mon avis et il n’engage que moi, ni Microsoft ni mon employeur.

Pour commencer il y a des fondamentaux: un expert n’est pas un marabout. Il ne lit pas dans les boules de cristal mais dans les livres. Cela pourrait être la conclusion de cet article… !

Conseil n°1: Lisez, lisez tout, soyez gourmand, soyez vorace. Que vous soyez bachelier, Bac+2,3, en master et même ingénieur. Vous avez de la chance, les ouvrages techniques existent tous au format PDF et sont facilement accessibles en direct (j’ai jamais dit qu’il fallait aller sur allitebooks.com mais l’idée est là) ou sur les torrents… Utilisez le Pattern du “try before buy” : si un book vous plait, vous l’achetez.

Dans le monde Azure, Windows , il existe de nombreux ouvrages gratuits chez Microsoft Press: cf. https://blogs.msdn.microsoft.com/microsoft_press/tag/ebooks/ Regardez par exemple les ouvrages suivants:

Ces ebooks sont gratuits et sont de très bonne qualité !

L’idéal c’est de savoir réaliser une architecture d’application qui ressemble à cela:

Le PDF sur les microservices explique cela. A partir de là, vous êtes au fait des dernières technologies car la solution du sample eShopOnContainers met en oeuvre ASP.NET MVC, Docker, Azure, les back-end, C#, SQL Server, du cache et du NoSQL, etc. Le code source de cette solution est disponible sur Github: https://github.com/dotnet-architecture/eShopOnContainers/

La marche peut toute fois être élevée pour être franchie en une seule fois. Il faut d’abord partir sur de bonnes bases.

Conseil n°2: Lisez le Guide Architecture Windows v2 ; download ici: http://windowscpp.com/Books/AppArchGuideV2.pdf . Ce guide va vous expliquez les principes d’architecture pour réaliser une bonne solution et un bon design d’application. Voici le schéma classique d’une application découpée en couches:

Le langage C# fait partie des fondamentaux. C’est la base du développement. Il existe de nombreux ouvrages spécialisés comme:

Conseil n°3: Si vous voulez être un vrai Pro du développement .NET, il y a un ouvrage de référence chez Microsoft Press: CLR by C#. C’est la bible. Achetez-le. Il explique tout sur .NET: la BCL, le JIT, le garbage collector, les CLR, etc.

Conseil n°4: Passez des certifications. Commencez par quelque chose de simple: 70-483 Programming C#. Puis choisissez votre cursus. Web, Mobile, Azure. Au choix. Attention le passage de certifications ne doit pas ce faire sous forme de bachotage avec des examens blancs… sinon cela ne valide en rien une expérience. Il faut maîtriser les sujets, les pratiquer et avoir le socle de compétences.

Ensuite, il n’y a pas de secrets : il faut pratiquer. Microsoft met à disposition les éditions gratuites de Visual Studio 2019 livrées avec un SDK Windows, SQL Server est aussi disponible en téléchargement ou en image Docker, et Windows 10 fournit IIS. Bref, vous avez tout pour devenir un pro du développement Microsoft.

Serez-vous un Expert ? Je ne sais pas mais en tout cas, je vous donne toutes les informations pour y parvenir. Pour être un expert il faut entre 5 et 10 ans d’expérience et de pratique au quotidien ; pas avant.

Conseil n°5: Il n’y a pas de honte à savoir dire : je ne sais pas. Ne vous improvisez pas. Vous n’êtes pas un commercial ! Soyez humble. Soyez crédible. Ne jouez pas des claquettes !

Conseil de MVP: Lisez Windows Internals. N’oubliez pas que le joyau, c’est Windows…

Et Windows est fait en C/C++ donc lisez aussi:

Microsoft fait tous ces produits en C/C++ à 95% donc si vous être curieux (les vrais experts le sont), renseignez vous sur le SDK Windows et le développement C/C++ en Win32. Windows, Office, SQL Server, Windows Server, Chrome, VLC : tout ce que vous avez sur votre PC est fait en C/C++ ; ne l’oubliez pas !

Disclaimer: Les liens donnés pour le téléchargement ici sont donnés à titre indicatif et n’engage pas au piratage mais au “try before buy”. Si un livre vous plait, achetez-le !

.NET Core 3.0 est sorti

Pour les downloads : https://dotnet.microsoft.com/download

v3.0.0

Current 

Released 2019-09-23

Release notes

Supports C# 8.0

Supports F# 4.7

Supports Visual Studio 2019 (v16.3)

Included in Visual Studio 16.3

ASP.NET Core IIS Module 13.0.19258.0

SDK 3.0.100

Windows

macOS

  • .NET Core Installer: x64
  • .NET Core Binaries: x64

Linux

Other

Runtime 3.0.0

Windows

macOS

  • ASP.NET Core Binaries: x64
  • .NET Core Installer: x64
  • .NET Core Binaries: x64

Linux

Other

Questions Techniques – le vrai monde

Voici le genre de choses que j’aborde avec un client pour gagner sa confiance et lui montrer que je pourrais lui être utile…

Comment migrer une application legacy procédurale en OOP (Object Oriented Programming / Programmation Orientée Objet) ? Les techniques, les choix…

Comment migrer une application legacy client-serveur en .NET à base de Web-services REST ou de micro-services ?

Vous disposez d’une énorme solution IT avec des technologies plurielles de la stack Microsoft (le temps fait sa loi). Il faut tout remettre à jour. Vous n’avez pas le droit ni le temps ni le budget de tout réécrire. Comment faite vous ?

J’ai une solution IT de 4.000.000 de lignes de code. Vous devez auditer la solution et me donner un axe. On garde, on jette, on factorise, on réoriente, on fait quoi ??? Comment faite vous : donnez moi des pistes ?

Je possède de l’ASP.NET Forms, de l’ASP.NET MVC (plusieurs versions), du VB.NET, du WinForms, du WPF, y en a partout, que dois je garder ? Comment m’en sortir avec les technologies Microsoft ?

Je veux passer de Oracle à SQL Server pour des raisons de coût. . Comment faire ? Best practices ?

Je veux migrer un ensemble d’applications sur Azure, comment faire ? Par ou commencer ?

Je veux mettre du Docker dans mon infrastructure legacy pour la conserver un peu plus longtemps. Comment faire ? Est-ce une bonne idée ? Dois-je tout migrer en l’état dans Docker ou dois-je moderniser les dernières évolutions ?

Docker ou Kubernetes ?

Je peux faire un audit de votre SI en juste regardant votre code en 1h30 ? Cela vous tente ? Ok on y va…

Ce sont de vrais questions complexes dont vous ne trouverez pas la réponse sur StackOverflow. C’est autrement plus sérieux que coding games et ses test bidons dont la solution est sur n’importe quel moteur de recherche…

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.

Contribution Windows/Terminal en C++

Le projet Windows/Terminal est disponible sous GitHub en early alpha stage… Les contributions open-source sont les bienvenues. J’ai décidé de contribuer.

J’ai rempli une issue avec des trucs à faire : https://github.com/microsoft/terminal/issues/1058

et puis on m’a affecté une branche, après discussion, et puis une fois le code effectué (8j de dev), j’ai fait un Pull Request: https://github.com/microsoft/terminal/pull/1161

Après la phase de code review (Microsoft est très exigeant) et les tests unitaires, mon PR a été accepté et mergé.

Je suis officiellement contributeur sur le code source de Windows.

Fier. Content. Heureux. 🙂

La suite ? Il y a encore pleins de // TODO MSFT, je rempile…

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.