Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Le choix de Sophie à l’ère des unités mobiles…

[new:30/08/2014]Emblématique roman décrivant un choix insoutenable et impossible, le Choix de Sophie, devenu en soi l’expression de la détresse qu’on eut simplement qualifiée de cornélienne si elle n’était pas chargée d’autant de douleur est bien le choix qui se pose à celui qui doit développer pour des unités mobiles… Quel OS supporter ? Quels tooling ? Même en restant dans le monde C# c’est un vrai arrache-cœur qu’un tel choix…

Pensées d’été

C’est l’été, même le vrai creux, le trou béant entre le 14 juillet et le 15 aout. Le vide intergalactique au-delà de la bordure extérieure est plus peuplé par l’énergie du vide que le vide des bureaux n’est peuplé par l’absence d’énergie des quelques ingés qui trainent leur carcasse comme des particules engluées dans un champ de Higgs… 

27° dans le bureau c’est ma limite. Les neurones pédalent dans le yaourt. La machine à café dégage trop de chaleur pour s’en approcher, pas maso. Reste à bavarder entre amis en vapotant un peu de menthe fraiche. Alors tiens je vais vous raconter une histoire vécue en l’arrangeant un peu pour le suspens et le plaisir, je l’espère, de la lire…

L’utilitaire de l’angoisse

…Pour lui, tout a commencé par une nuit sombre, le long d'une route solitaire de campagne, alors qu'il cherchait un raccourci que jamais il ne trouva…  - Les Envahisseurs, 1967 .

 

Nous sommes tous des David Vincent lorsque vient le moment de choisir “en quoi” développer une nouvelle application mobile… Non pas que nous devons convaincre un monde incrédule que le cauchemar a déjà commencé, tout le monde s’en est rendu compte je pense, mais c’est plutôt cette empathie que nous ressentons à son égard, sa solitude, immense, son angoisse, extrême. La peur palpable de se tromper, de ne pas être là où il le faut au bon moment. Arriver trop tôt, arriver trop tard. Ne pas être pris au sérieux. Se faire des amis en chemin et les voir disparaitre… Tragique destin que celui de l’homme qui doit sans cesse faire des choix pour sa survie, savoir prendre trop de risques sans perdre tout mais au final en avançant seul…

Pour moi tout a commencé par une soirée normale, sombre puisque je travaille tard, dans mon bureau éclairé par ses néons rouges et bleus et la lueur des écrans qui m’entourent. Tout cela mettant un peu de gaité et une ambiance “vaisseau spatial” que j’adore mais qui ne change rien à l’histoire.

Pour moi tout a commencé quand je me suis dit “tiens, cet utilitaire Android téléchargé sur mon S3, il est très pratique mais il est mal fait et ils sont tous pareils, je vais vite fait me le refaire en ….”.

Et là un blanc.
Un ange passe.
Puis deux.
Puis tout un tas …

Et là j’ai bogué, incapable de trouver la fin de la phrase. Comme piégé dans une spirale temporelle de série Z, comme suspendu dans un no-man’s land entre hésitation et assurance, dans l’un de ces paradoxes einsteiniens où plus on voyage vite moins le temps passe rapidement, plus on veut voir loin, plus en fait on voit le passé. Un trou béant dans le crâne par lequel s’échappe la substance de mes pensées happées par les combinatoires infinies et les doutes. Les doutes. Ces affreux doutes.

Ce fichu utilitaire dont j’envisageai de tête en trois secondes la poignée de code à écrire devenait soudain une tâche de titan perdu entre deux infinis se multipliant eux-mêmes à en perdre la tête comme deux miroirs qui se font face…

Le faire en cross-plateforme MvvmCross

Avec ma série de vidéos sur le sujet on peut penser – à juste titre - que je suis au taquet. Oui mais… Ce petit utilitaire n’a peut-être pas besoin d’être en WinRT ni en Windows Phone, j’avoue me servir plus souvent de mon Galaxy que de mon Nokia… Le cross-plateforme se limite tout de suite si on supprime ces cibles… Reste Android, mais l’original fonctionne en Android ça serait bien de l’avoir sur autre chose. Ou en WPF. Mais là ça ne sert à rien ma Surface est une vraie Surface en mode RT, pas question de faire tourner un utilitaire Win32 …

Moralité à la trappe le mode cross-plateforme, trop d’infrastructure pour juste une poignée de code déjà écrite de tête zut ! ça semblait si simple, un truc vraiment court, pas trop trivial, mais vraiment pas une application complexe. En WPF sans se poser de question elle serait déjà écrite.

Bon ben WinRT alors ?

En dehors de ma Surface qui est certes de petite taille mais qui ne tient pas dans une poche je risque vite d’être frustré. Je veux du mobile vraiment mobile. En réalité il faut que mon truc fonctionne sur un smartphone. Exit WinRT. Mais c’est un peu dommage. J’hésite. Microsoft pousse tellement WinRT ça ferait un bon exemple pour un article… Oui mais WinRT on ne peut pas dire que - maintenant que tout le monde sait ce que sait - cela soit un sujet super accrocheur. J’hésite encore plus du coup.

Alors on revient à Android ?

C’est un peu ça le problème… C’est vrai que l’original ne me convient pas et que le phone que j’utilise le plus c’est mon S3. C’est pas bête finalement.

Oui mais… je commence quand même le projet en MvvmCross histoire de pouvoir changer d’avis plus tard et de pouvoir ajouter d’autres cibles ou bien je le développe purement en Android tout de suite ?

La dernière option est alléchante, quelques lignes de Java ou de C# c’est pareil, et j’aurai le résultat tout de suite.

Mais quand même… développer en Java ça me défrise… Alors en Xamarin pour rester en C#. C’est déjà mieux. Ou tiens; le faire en F# Xamarin, là c’est sportif et ça fait un entrainement… Bon c’est un petit outil que je veux faire vite fait sur le gaz, pas une prise de tête non plus…

Mais ça va tourner que sur Android donc ? Et ce n’est pas top le côté visuel avec Android, même avec Xamarin car ce dernier se moque de l’UI (sauf avec les Xamarins.Forms mais c’est encore très neuf tout ça). On en revient à MvvmCross qui ajoute le binding… Et de nouveau l’infrastructure devient énorme pour quelques lignes de code… Je n’arrive pas à me résoudre à faire une usine à gaz pour une si petite chose. Et pourtant des utilitaires ou des petites apps de ce type c’en est bourré en entreprise. Il faut donc éviter de se perdre en conjecture.

Non. je n’arrive pas à me résoudre à le faire uniquement pour Android. Ni même à choisir en quoi je le ferai si j’optais pour cette solution. C’est le problème de travailler sans contrainte, trop de liberté laisse trop de temps aux hésitations ! A moins que justement, sans contrainte forte, ce ne soit la voix de la sagesse qui me pousse à ne rien faire tellement le marché est curieux, instable et pas alléchant…

Dans ce cas c’est Windows Phone ! ?

Pince-mi et pince-moi, c’est forcé. Si ce n’est pas Android c’est forcément Windows Phone.

IO quoi ? iOS de chez qui ? Ma-pelle ? Ahhhh Apple. Non merci. Jamais sauf sous la torture je ne ferai le moindre truc pour les machines de ces @#! de chez Apple. Jamais. je n’ai pas de Mac de toute façon. En fait je n’en ai plus. Et je n’en veux plus. Pour un client, je peux me forcer, pour moi même je ne vais pas m’infliger autant de souffrance. Donc pas question d’iOS. ça sera Android ou Windows Phone. Tel est le vrai choix qui se justifie pleinement et objectivement d’ailleurs : Android est le numéro 1 qui surpasse de loin en part de marché tout le monde, donc travailler pour cet OS est rationnel, et Windows Phone est l’OS mobile le plus intelligent et le mieux fait avec le meilleur tooling, totalement rationnel comme choix aussi. L’un est numéro 1 des ventes, l’autre numéro 1 de la technologie. iOS n’est ni l’un ni l’autre.

Vous le voyez bien il ne reste que Windows Phone puisque j’ai écarté – sans le faire tout en le faisant – Android à l’étape précédente…

Windows Phone mais lequel ? La 7.x c’est mort hein.. La 8, non. Le 8.1. Ok. C’est bien fait j’aime c’est du C#/XAML ce que je préfère.

Oui mais d’un autre côté c’est pas le smartphone que je trimbale avec moi, quel intérêt ? Certes ça se rapproche de WinRT du coup je pourrais le faire marcher sur ma Surface RT et sur mon PC….

C’est pas si bête après tout.

Mais hélas malgré la convergence, malgré les récentes solutions “Universelles” il faut toujours plusieurs projets et on retombe dans une infrastructure complexe pour si peu. Autant utiliser MvvmCross qui me permet de rajouter les cibles les unes après les autres selon mes besoins et de n’en développer qu’une seule au départ. J’ai l’impression d’être coincé dans une boucle infinie un peu…

Oui mais un truc Xamarin et MvvmCross j’en ai montré plein déjà… Mon petit utilitaire il doit aussi être “rentabilisé” en servant d’exemple pour un article par exemple ou même aller sur un Store pourquoi pas.

Soutenir Windows Phone me parait plus conforme dans un tel cas. C’est une belle plateforme étouffée par cette bêtise que sont les tuiles qui n’avaient pas eu de succès déjà avec WP7. Le manque d’applis y fait beaucoup aussi, mais qui de la poule… et puis en entreprise ce n’est pas un détail essentiel et ma clientèle ce sont les entreprises, pas le grand public.

Bon, disons que je ne vais faire qu’une version tout de suite en Windows Phone. Avec Mvvm Light.

Là je vais aller vite, ça va tourner tout de suite. C’est une bonne solution donc.

Oui. J’aurai une belle appli qui tourne sur smartphone que je n’utilise pas souvent et qu’il faudra réécrire totalement pour WinRT Surface ou PC et je ne parle pas si je veux au final que cela marche en Android puisque, après le tout, ce serait bien de ne pas perdre de vue que je veux remplacer une app qui ne me plait pas mais dont j’ai besoin… sous Android !

Le besoin !

Le Besoin. Ce truc bête qu’on oublie vite, aussi vite que celui qui a ce besoin : l’utilisateur !

La solution consiste à donner à l’utilisateur ce dont il a besoin ! C’est ça la clé !

Donc l’utilisateur ici veut remplacer une app Android il faut donc le faire par une app Android c’est une évidence. Pourquoi chercher midi à 14h ?

… Parce que je n’aime trop pas développer pour Android. Je préfère XAML. A notre époque être obligé de créer des tonnes d’images PNG découpées comme un vieux site Web pour créer une app smartphone je trouve ça débile, ringard, à côté de la plaque. La multiplication des form factors justifie pleinement le vectoriel de XAML.

Mais l’utilisateur ne me le demande pas.

C’est dommage.

Donc si je m’en tiens au besoin, et si je ne veux pas perdre de temps, je dois faire l’app pour Android en utilisant Xamarin avec un look minimaliste pour ne pas perdre ma vie en nine-patches et autres PNG à la noix en 300 résolutions différentes… Ca va être super laid je le sens… rapide mais laid.

Si m’en tiens au marché, Android gagne aussi la partie.

Si je considère mes gouts, le tooling et la puissance de la plateforme, je préfère Windows Phone…

Le choix de Sophie…

Nous  y voilà. je dois sacrifier l’un pour sauver l’autre. Et je n’arrive pas à m’y résoudre.

Moralité j’ai commencé 5 ou 6 solutions différentes au gré de mes hésitations, dans tous les modes possibles, cross-plateforme ou non, sous Android pur, avec Xamarin en C#, purement WinRT, exclusivement Windows Phone 8.1… Autant d’heures à refaire le même truc sans jamais en finir un. Je ne sais même plus comment appelé la solution j’ai tourné le nom de tant de façons déjà…

Le choix est impossible. Et j’ai consommé plus de temps qu’il n’en faut pour développer directement le projet sans se poser toutes ces questions.

Le tort serait donc de s’interroger ?

Je ne crois pas. Foncer dans le brouillard n’a jamais été une stratégie super subtile… Trop réfléchir et trop hésiter mène à l’inaction et ce n’est pas une bonne chose non plus. Mieux vaut avancer mal que de rester sur place. Quoi que…

Il est vrai que tout cela n’est qu’expérimentation, si je peux conseiller mes clients c’est justement parce que je passe mon temps à expérimenter, à faire des erreurs, tâtonner pour enfin trouver une bonne solution. Du coup quand on m’appelle j’ai déjà quelques idées à fournir, un gain de temps et d’argent important pour des équipes de développement ! Donc certes je n’ai pas la pression, donc je peux hésiter, certes je teste toutes les combinaisons pour trouver les meilleures, mais ce petit utilitaire je ne sais toujours pas comment je vais le faire !

Conclusion

Bien entendu je n’ai absolument aucune contrainte ni de temps ni de budget puisque j’expérimente. Aucune obligation comme en production. En fait je n’ai même pas le temps de m’occuper de cette app j’ai trop de travail à faire pour “m’amuser”. Rien qu’écrire ici est un luxe, mais ça me détend.

Cela prouve une fois encore que les cordonniers sont les plus mal chaussés. Pour mes clients je trouve toujours – enfin je le pense sincèrement – si ce n’est “la” bonne solution au moins “une” bonne solution, correctement pensée, financée, designée, analysée, découpée, etc… Mais pour moi, sans aucune limite, sans aucun crédit préfixé, sans aucune contrainte la feuille reste blanche. Non en fait je noirci cent feuilles sans en sortir une seule de propre ! La créativité s’exprime sous la contrainte c’est vrai, le compositeur que je suis par ailleurs devrait le faire savoir à l’informaticien !

Mais cela illustre aussi parfaitement le terrible choix que les DSI doivent faire… En quoi développer les apps mobiles… Quel OS soutenir, le ou lesquels oublier ?

La nécessité absolue de penser mobile et principalement smartphone est je pense bien ressentie par tous désormais, mais la peur de se tromper, de prendre une route qu’on regrettera ensuite, faire le mauvais choix de l’infrastructure, tout cela paralyse encore trop.

La solution est de penser utilisateur final, comme pour l’UX. C’est le seul lien à la réalité, le seul fil conducteur qui mène au succès d’un projet.

Ce sera donc de l’Android.

Hmmm. Au moins avec du WinRT pour Surface et mon PC, je pourrais l’utiliser et en faire une version Windows Phone…

Ah non ça ne va pas recommencer !

Hélas si…

Sauf… sauf.. peut-être enfin une bonne solution : Xamarin.Forms.

Mais ça j’en parlerai plus tard. Laissons le temps à cette merveilleuse idée de matûrer un peu.

Stay tuned !

blog comments powered by Disqus