Depuis le temps qu’on fait des applications ce devrait être plus facile!

Ce matin, nous faisions le bilan d’un projet de développement d’une application web dans Azure et plusieurs commentaires autour de la table m’ont laissés perplexe. Celui dont je voudrais vous entretenir en particulier aujourd’hui est le suivant :

«  Depuis le temps qu’on fait des applications ce devrait être plus facile »

En effet, depuis plus 60 ans que l’on fait des programmes informatiques. Ça devrait être simple maintenant! Bien que la technologie ait beaucoup évolué depuis les premiers programmes Cobol, le principe de base d’un programme est sensiblement le même. On affiche une interface à l’utilisateur, on applique des règles d’affaires (validations, calculs, transformations) et on sauvegarde des données dans un support comme un fichier ou une base de données.

Ce qui a grandement changé est les outils avec lesquels nous travaillons. Il est vraiment loin derrière nous le temps où un développeur n’avait qu’à connaître un seul langage travaillait toute sa carrière à faire un seul type d’application. De plus le niveau de connaissance de la base des processeurs et des systèmes d’exploitation nécessaires pour programmer est de moins en moins élevé. Ceci est dû au haut niveau d’abstraction des nouveaux langages et frameworks que l’on utilise.

De plus, les applications de nos jours sont faites à l’aide de plusieurs technologies différentes et dans des styles architecturaux complexes et variés. Quand je suis sorti de l’école en 1997 et que j’ai décroché mon premier mandat, je me souviens de l’architecte logiciel du projet qui me demandait si je savais ce qu’était une application N-Tiers. Il a dû être bien découragé quand je lui ai répondu « N-Quoi ??? ». À l’époque, les principes d’architecture multitiers n’étaient pas du tout enseignés dans les écoles. Mais est-ce mieux aujourd’hui en 2017? Je n’en ai pas l’impression. Avec la pénurie de main-d’œuvre en informatique, nous engageons fréquemment des finissants collégiaux et universitaires. Lorsque je leur donne des formations en .net et en architecture, la plupart ne savent que vaguement ce qu’est une architecture N-Tiers. De plus ils ont vraiment du mal à saisir le pourquoi du comment dans ce genre d’architecture.

Dans les années 2000, lorsque Microsoft a accouché son nouvel environnement de développement qu’est Visual Studio.NET et le framework.NET, le niveau d’abstraction avait encore fait un bon vers l’avant, mais s’était une très bonne chose! Une même personne pouvait facilement faire une application Windows, une application web, des services web et bien plus. Visual Studio était un outil extrêmement rapide et efficace pour construire nos applications. Par contre avoir un outil fantastique ne garantit pas le succès. Imaginer que l’on invente un outil de menuiserie super technologique et performant qui peut faire l’équivalent d’un marteau, d’un tournevis, d’une scie, d’un galon à mesurer et d’autres fonctionnalités. Demandez-moi de vous construire une maison avec cet outil et je vais juste être en mesure de construire extrêmement rapidement une grosse maison tout croche… L’architecture du bâtiment sera certainement déficiente aussi (je ne suis évidemment pas menuisier). Cette analogie n’est malheureusement pas de moi. C’est comme ça que nos amis du Pattern and Practices de Microsoft expliquent leur raison d’être. Leur mission est de mettre de l’ordre dans le chaos en fournissant de la documentation et des guides pour bien utiliser cet outil qu’est Visual Studio.

Lorsque je donne de la formation, je conseille toujours fortement à mes étudiants de lire le Microsoft Application Architecture Guide, 2nd Edition  (https://msdn.microsoft.com/en-us/library/ff650706.aspx )

Microsoft définie ce guide comme étant : « Le guide destiné à aider les développeurs et les architectes de solutions à concevoir et à construire des applications efficaces et de haute qualité en utilisant la plateforme Microsoft et le .NET Framework plus rapidement et avec moins de risques; Il fournit des conseils sur l’utilisation des principes d’architecture, des principes de conception et des modèles éprouvés et fiables. »

Originalement paru en 2002, en 2009 une 2e édition de ce guide nous a été fournie pour prendre compte de nouveau concept comme l’infonuagique. Mais l’infonuagique apporte une autre belle couche d’abstraction qui nous éloigne encore de la machine de base… et encore une fois c’est une bonne chose. Il est maintenant plus facile que jamais de construire des applications disponibles mondialement, qui sont performantes et hautement disponibles, et ce à des coûts raisonnables. Malheureusement en 2009 lorsque ce guide a été révisé, Microsoft n’en était qu’au début de l’aventure avec Azure et ne couvrait que très peu les notions infonuagiques.

Lors d’une formation que j’ai donnée le mois dernier, nous avons passé un peu plus de 4 heures à parler de modélisation objet, d’architecture N-Tier et de notions d’architecture orientée service. Vous auriez dû voir la fasse des gens dans la salle lorsque je leur ai dit que ça, c’était de l’histoire ancienne! Oui tout ça est encore nécessaire et utile lorsqu’on construit des applications traditionnelles. Mais aujourd’hui avec l’infonuagique, on doit connaître la différence entre IaaS, PaaS, SaaS, FaaS et CaaS pour être en mesure de faire une bonne solution. Que ce soit pour une application en mode « Serverless », une approche « Microservices » ou du déploiement par « Container », les connaissances à acquérir sont nombreuses.

Le hasard fait drôlement les choses, mais un courriel de Microsoft ce matin annonçait la disponibilité d’un tout nouveau guide gratuit sur l’architecture des applications dans Azure. Le  Cloud Application Architecture Guide est un livre électronique de 300 pages qui se concentre sur l’architecture, la conception, la mise en œuvre et les considérations qui s’appliquent quelle que soit la plate-forme infonuagique choisie. Le livre est disponible ici :

https://azure.microsoft.com/en-us/campaigns/cloud-application-architecture-guide/?wt.mc_id=azurebg_ENAzureNewsletter_December&mkt_tok=eyJpIjoiWWpZd05XUXlNMkkwTW1SbSIsInQiOiJJSEdlQ3BZY0F5R2I2MzM3Nzh6R1pJMmxOZEJHc1BZeEwrVnV0SHVhbVZhM1J0RGYyTm9jMEl0bmoxUmg2R3ZwMEsxVGhFa0EzR2lxdzRHM3lcL3NtdWxZaXRSdTlzK1g5V1ZtQUFqZHZVS0x6TGRDK2RoSW82OHJib2swd1BYOXdZVlpkWnFqNHpoWExyczVCZWJqUjZNZllLUUxvNmFqaUpjMWhUa1c4N2M0PSJ9

Donc que pensez-vous maintenant du commentaire «  Depuis le temps qu’on fait des applications ce devrait être plus facile » … On fait tellement d’abstractions maintenant qu’un seul développeur peut à lui seul créer son infrastructure de développement, provisionner les services nécessaires dans Azure (Web App, Base de données SQL, Service d’authentification, processus de backup, etc.), programmer son application à l’aide de Visual Studio et déployer le tout lui-même en production (dans Azure). On demande donc à une personne d’être architecte techno, architecte logiciel, programmeur, expert en sécurité et en performance. Mon avis final sur la question « est-ce plus facile qu’avant ? »… oui c’est beaucoup plus facile et rapide qu’avant pour faire une belle grosse maison tout croche! Par contre, en prenant le temps de faire une bonne analyse, une bonne architecture et une bonne équipe sur un projet… Sky is the limit!