Choisir une technologie de développement en 2020 ? - Partie II
Quand j'ai écrit la première partie de cette chronique, je me suis dit "je vais expliquer les choses pour que les gens comprennent que c'est autrement plus compliqué, pour développer une application, de choisir Java ou NET par exemple". La deuxième partie livre mon point de vue en tant qu'Expert et Architecte Microsoft.
Quand j’ai écrit la première partie de cette chronique, j’ai commencé par écrire les choses avec un objectif en deux phases :
- Poser le problème
- Y répondre
Quand j’ai livré le premier article, mon patron m’a dit « j’ai pas saisi là ou tu voulais en venir, je suis resté sur ma faim ». Mes potes m’ont dit « ouaip, tu t’es pas foulé un neurones toi ! ». Je leur ai répondu que je posais le problème. Y a un pote qui fait du C++ qui a cerné mon discours en me disant « tu vas niveler par le bas pour le marketing ou bien tu vas leur expliquer que le père Noël n’existe pas ? ». Voilà on y arrive. La vulgarisation avec pédagogie pour tout le monde est très compliquée. Mes amis veulent de la technique Level 300, les DSI veulent des choses exprimées en français compréhensible Level 100.
Dans mon post, j’explique que peut-être on va devoir développer 4 applications :
- Une app mobile iOS en Swift
- Une app mobile Android en Java
- Une app Desktop en C# .NET Core
- Une app Web en TS/Node ou en ASP.NET MVC Core
La partie Mobile
Revenons dans mon domaine d’initiés : le monde des technologies Microsoft. Le produit Xamarin est censé répondre au multiplateforme pour iOS et Android via Xamarin.Forms. Vous allez me dire, « ben voilà il fallait le dire plus tôt ! ». Oui mais non. Xamarin.Forms c’est lent et toutes les fonctionnalités des plateformes natives ne sont pas couvertes. Les dernières fonctionnalités ne sont pas supportées. Le marketing Microsoft dit que le code C# est réutilisable à 80%. La réalité est très différente…. Il faut faire un app Android et une App iOS. Le pire, c’est qu’il existe Xamarin iOS et Xamarin Android pour faire du natif en C#. Et pour les noubs, y a Xamarin.Forms !
Prenons la vraie vie : les développeurs d’applications professionnelles font du natif. Ça veut dire quoi ? Cela veut dire utiliser le SDK de l’OS fournit par l’éditeur :
- Java pour la plateforme Android
- Swift ou Objective C/C++ pour la plateforme iOS
Donc il faut faire deux applications mobiles ? Oui monsieur ! Oui madame ! Oui mademoiselle ! Et vous avez de la chance, Microsoft a abandonné le Windows Phone ! Le natif permet d’avoir des applications qui se lance en deux secondes maximum et qui sont réactives et performantes. Cela compte énormément.
La partie Desktop
Passons au poste de travail. Comment faire une application Desktop multiplateforme ? C’est très simple : C++ et QT. Ah vous ne faites pas de C++ ? Dommage… Vous avez entendu parlé de Java ? Oui mais bon quand les applications mettent 30 secondes à se lancer et rament trop, moi ça m’énerve donc je ne fais pas d’applications Desktop en Java, c’est une hérésie. Le monde Microsoft propose .NET Framework et .NET Core. Il y a Windows Forms, WPF, et Win32. Win32, c’est réservé aux éditeurs logiciels car c’est du C/C++. Reste WinForms ou WPF ! WPF est censé être le choix de Microsoft car plus récent. Le problème c’est que WPF c’est lent, complexe, tordu et indebuggable. A vous de voir. Moi je choisis WinForms sur .NET Framework en attendant le support final pour .NET Core avec NET5 pour bientôt.
La partie Web
La partie Web la plus simple à développer est de faire un front simple avec des Web API. Vous pouvez vous complexifier la solution en choisissant un front JS/TS comme Angular et un back-end en NodeJS ou en Java ! Angular c’est un truc lourd et complexe qui oblige le développeur à faire du copier /coller de masse et chaque changement devient une plaie. Changement de Framework tous les 3 mois (incompatibilités majeures à toutes les versions), changement de web API complexes à propager, bref tout ça pour quoi ? Rien. Moi j’opte pour un front ASP.NET MVC Core et des Web API .NET Core. Oui même pour le monde Web, j’écarte Java, trop lourd, trop lent, trop obsolète. De plus, avec la guerre Oracle, Google, on ne sait pas sur quel pied danser. Support Oracle, OpenJDK, c’est un bordel sans nom.
Synthèse
Dans ce deuxième billet, on découvre que les solutions sont propres à chaque utilisation. Le mobile est natif et le Desktop est managé et le Web est aussi managé. La solution miracle n’existe pas. Méfiez-vous des messages du marketing qui nivelle tout par le bas et vous promet le all-in-one avec une seule technologie comme JS, C# ou Java. Un Renault, c’est une Renault. Une Peugeot c’est une Peugeot. Et pourtant, il y a 4 roues, un moteur et un embrayage. Donc oui c’est la même chose vue de loin mais c’est une implémentation différente vue de près. Méfiez-vous des garagistes qui vous promettent monts et merveilles. Dans le développement logiciel c’est pareil. Il y a les applications pour mobile et les applications Desktop et les applications Web. Et dans chaque catégorie, il y a des plateformes cibles. Il existe des technologies pour chaque cible. C++ a 40 ans, Java a 25 ans, C# a 19 ans, TS a 5 ans. Ne perdez pas l’image des voitures. Vous aimez la rapidité, la puissance et le confort et la maitrise : c’est le natif. Sinon, il y a les versions éco et là c’est simple mais ça vole pas haut en rapidité, confort et finition. C’est le managé comme Java et Xamarin.