dimanche 24 novembre 2013

Du temps de cerveau pour... programmer - 2 - programmer pour mobiles

Le premier article de cette série pour programmer avec LiveCode est ici, un dimanche évidemment.

Aujourd'hui nous essayerons de parler de la programmation pour des mobiles (téléphones, tablettes, phablettes et autres machins). Deux parties donc : En quoi c'est différent d'un programme pour un ordinateur "classique" ; et une fiche de lecture d'un nouveau livre dédié à ça et qui vient de paraître.

Pourquoi est-ce différent de programmer pour un "mobile" ?

Depuis le temps qu'existent les ordinateurs, il y a énormément de programmes qui ont été développés pour eux, et donc beaucoup de programmeurs. Il y a plusieurs sortes de programmeurs évidemment, mais en général ils ont certaines caractéristiques communes :
- un programmeur aime programmer et exercer ainsi son sens logique
- un programmeur est persuadé de programmer mieux que les autres et est toujours prêt à critiquer les programmes écrits par d'autres
- un programmeur préfère un langage de programmation, même s'il en connait plusieurs et a du mal à en changer
- un programmeur s'est construit avec le temps un ensemble de bouts de programmes utiles et un savoir-faire qui le rend plus performant dans ce langage, surtout s'il travaille en équipe avec des procédures complexes pour coordonner les développements
- un programmeur n'aime pas lire la documentation ou des livres (on dit RTFM pour pousser quelqu'un à lire le manuel qu'on ne lit pas soi-même - RTFM = Read the fucking manual, pas besoin de traduction)
- un programmeur aime aller chercher dans des forums spécialisés des solutions à ses problèmes
- un programmeur ne commente pas son code pour empêcher les autres de le lire
- un programmeur aime tout recommencer à zéro plutôt que de modifier un programme écrit par un autre programmeur forcément nul
- un programmeur aime réécrire un programme qui marche dans son langage préféré pour qu'il marche pareil.

Le mobile a changé ça de manière assez importante :
- d'abord, les mobiles existent depuis peu et font intervenir des des réflexes moins ancrés chez les développeurs
- l'utilisateur du mobile est très important. Il peut faire moins de choses que sur un ordinateur en règle générale et doit donc le faire bien, de son point de vue. L'interface utilisateur et l'ergonomie sont donc encore plus importantes que pour un programme standard
- comme il y a moins de fonctionnalités sur les appareils mobiles, souvent mais pas toujours, il faut simplifier l'expérience utilisateur pour qu'elle soit la plus directe possible
- il y a beaucoup d'applications mobiles qui font à peu près la même chose et il est très difficile de s'en distinguer. Une application moins "léchée" risque donc simplement de disparaître
- les applications pour mobiles se vendent moins cher que les applications pour ordinateurs et pourtant elles peuvent coûter plus cher pour les développer
- le mot mobile recouvre en fait plein de machins divers qui ont des caractéristiques très différentes : même s'il y a principalement des mobiles Apple (sous iOS) et des mobiles Androïd pilotés par Google, il y a des centaines de variantes en taille, en résolution, en capteurs, en capacités... et il est difficile de gérer toutes les combinaisons possibles d'un coup.
- la simple transposition sur un mobile d'une application traditionnelle ne marche pas. Personne n'en veut, ce qui est parfois dur à accepter pour un informaticien
- enfin, les mobiles ouvrent à toutes sortes d'applications qui n'existaient pas avant, du fait de la mobilité, de capteurs de proximité, du GPS, de caméras et d'appareils photos, et toutes sortes de choses liées à de nouveaux comportements des utilisateurs.

Il y a plusieurs questions clés à résoudre pour programmer sur mobile, importantes avant de s'y lancer :

- choisir ses cibles : Apple ou Androïd, ou les deux, ou tous les systèmes à la fois ? Ce choix est déterminant car il impacte le choix des outils. LiveCode permet tout, y compris la programmation de sites en HTML5 afin de développer non seulement des applications "indépendantes" mais aussi des "Web apps", c'est-à-dire des programmes qui seront visibles grâce au navigateur web de votre mobile
- choisir les tailles de mobiles visées : il y a de tout - moins chez Apple qui a bien standardisé les tailles des écrans, mais énormément chez les fabricants de terminaux Google. Etre capable de développer une application qui soit agréable à utiliser sur de multiples tailles d'écrans suppose une grande maîtrise de l'ergonomie et des outils pour calculer la place des objets sur l'écran en fonction de sa taille, dans certaines limites.
- idem pour le choix des "capteurs" que vous souhaitez utiliser : vérifier que le capteur est présent sur le mobile de l'utilisateur et le prévenir que cette application a besoin de tel ou tel capteur. Sinon l'utilisateur sera ou furieux ou frustré ou les deux, mon colonel.
- avoir compris comment "publier" son application, une fois terminée, afin que les utilisateurs puissent la trouver ou l'acheter, ou même pour en faire profiter sa famille ou ses amis (ou son entreprise/association). Il y a des "magasins" différents et chacun avec ses règles qui peuvent être complexes, et qui évoluent avec le temps. Mon conseil est simple : écrire une application toute simple et la publier pour tester la méthode. Une fois que votre application est sur le ou les magasins que vous avez identifiés, retirez-la (pour ne pas en avoir honte) et lancez-vous dans quelque chose de plus sérieux. Au moins vous saurez comment publier une application.
- bien choisir son système de développement : On parle ici de LiveCode évidemment, mais pour certaines fonctions avancées il faut faire appel à des extensions ou en écrire soi-même. Cela dépend des applications évidemment et c'est rare. Le fait de disposer d'un outil comme LC réellement multi-plateformes est un avantage certain.
- finalement, avoir compris que l'essentiel de l'application mobile est dans l'interface utilisateur. Le reste, les algorithmes et autres calculs logiques seraient les mêmes sur un ordinateur, donc ils ne sont pas propres aux mobiles. Or cette interface utilisateur a besoin d'être pilotée par l'utilisateur, avec des "gestes". Ces gestes sont devenus classiques, et l'utilisateur jettera votre application s'il ne peut pas utiliser les gestes habituels pour la piloter.On est ici dans le vrai domaine du mobile : les gestes et actions pour piloter l'application sont de plus en plus importants.

Choisissez bien votre approche. Quelques conseils pour LiveCode :
- Vous êtes débutant complet et vous apprenez à développer grâce à LiveCode : bon choix à mon avis. Lire les ressources de base sur LiveCode (voir prochain article), essayer les exemples et les "lessons" et lancez-vous dans une première application pour le fun, d'abord sur votre ordinateur (Mac, Windows ou Linux), puis seulement après sur mobile.
- Vous savez déjà programmer, mais ne connaissez rien à LiveCode : vous allez être surpris. Dépassez la surprise initiale et les critiques qui vous viendront à l'esprit (LC est verbeux, LC met des bouts de programme un peu partout). Ecrivez une première application et observez la magie lorsque vous la faites tourner sur plusieurs terminaux différents et lorsque vous voyez la facilité avec laquelle vous développez l'interface utilisateur. Puisque vous savez programmer déjà, vous savez ne pas lire les documentations (en ligne ou à coup de RTFM). Comme LC est un langage où il est facile de modifier un programme en temps réel, vous pourrez "déboguer" facilement vos premiers essais.
- Vous connaissez déjà LiveCode et voulez vous mettre au développement pour mobiles, en comprenant bien les différences avec les ordinateurs et les points sur lesquels vous devez vous concentrer. Mon conseil est simple : écrivez toute la logique de votre programme comme vous savez le faire et ensuite assemblez tout ça dans une interface utilisateur pour mobile (ce qui va vous demander du temps). Vous y gagnerez du temps. Vous chercherez des ressources pour vous aider. Il y en a dont le livre ci-dessous.

Le livre "LiveCode Mobile Development" (Collection Hotshot de Packt) - en anglais of course


Ce livre est intéressant à plusieurs points de vue :

- Il est issu d'une collection (Hotshot) où tous les livres sont basés sur le même plan, comme dans beaucoup d'autres collections, par exemple "... pour les nuls". Cette collection est centrée autour de livres pour programmeurs et autres informaticiens. Il y a donc un certain côté répétitif dans le plan pour chacun des 10 chapitres mais, après tout, la pédagogie, c'est la répétition !
Ca ne m'a pas gêné : il s'agit d'un livre de référence, pas d'un roman d'Alexandre Dumas. 

- le plan type d'un chapitre est très américain : Un sujet (pourquoi ce chapitre), un "mission briefing" (ce qu'on va faire dans le chapitre), un "why" (quelles techniques on va y apprendre), une "mission checklist" pour les pré-requis éventuels à ce chapitre. Ensuite pour chacun des grands sujets du chapitre : une partie "engage thrusters" qui comprend les explications, les lignes de code et qui constitue le coeur du chapitre ; puis un "mini-debriefing" pour montrer des copies d'écran et éventuellement une partie "Classified Intelligence" pour quelques idées autres et avancées. Le chapitre se termine par un résumé de ce qui a été fait et un "hotshot challenge" pour aller plus loin avec un exercice avancé. A noter que sur le site de l'éditeur, on peut charger tous les éléments nécessaires, une fois acheté le livre : lignes de code, piles LiveCode et éléments d'accompagnement comme des images ou des sons.
La vraie plus-value est évidemment dans les annexes qu'on peut charger, car cela permet de récupérer des piles déjà faites et des les comprendre plus facilement, ainsi que de les adapter. Le développeur plus avancé se contentera presque des annexes, le débutant lira avec intérêt les chapitres.

- le niveau pré-requis n'est pas évident. Il est dit dès le début qu'il faut déjà connaître LiveCode pour rentrer dans le livre. C'est vrai en ce sens que le parfait débutant en LiveCode ne doit pas lire ce livre en premier. Il faut au moins avoir installé LC et commencé à comprendre les premiers exemples et leçons de base. Mais le livre consacre parfois des pages et des pages à savoir comment paramétrer tel ou tel bouton, y compris dans son apparence, comme si on était des enfants, alors qu'à d'autres moments il présente des techniques plus avancées de LC, et qu'enfin à d'autres moments il montre des techniques réservées aux mobiles.
Mon conseil est donc de lire ce livre, soit si vous êtes un débutant en LC avec un peu d'expérience en programmation et quelques essais en LC au préalable, soit si vous connaissez bien LC et que vous souhaitez y découvrir quelques techniques utiles pour le développement d'applications mobiles.

- sur le plan "mobile" en effet, le livre n'est pas très avancé mais il donne quelques bons conseils. Je trouve que c'est son point faible. Il devrait plutôt s'appeler "LiveCode development : des exemples simples pour mobile". Ce n'est pas une critique fondamentale. J'y ai appris des choses, mais suis ressorti déçu par le fait que les fonctions avancées ne sont même pas abordées.
Je suis particulièrement frustré par le chapitre 4 (créer des menus adaptés à votre mobile) qui n'entre pas assez dans les détails et qui fait appel à une extension payante de LC, appelée MobGUI, qui ne me parait pas la meilleure manière de réaliser une application.

- parmi les choses intéressantes qu'on trouve dans ce livre je citerai : développer sa propre interface et ses propres "boutons" plutôt que d'utiliser les boutons standards ; privilégier des graphiques plutôt que des images, car ils sont plus rapides à afficher et plus faciles en cas de changement de résolution ; utiliser la notion de "state machine" ou automate comme moyen simple de programmer des choix ; optimiser la taille de l'application en utilisant des images dans les boutons ; utiliser simplement une petite base de données SQL avec le moteur de base de données inclus dans LC...
Evidemment la plupart de ces fonctionnalités peuvent aussi être utilisées sur un appareil non mobile, mais le fait de penser "mobile" introduit à mon avis un bon état d'esprit chez le programmeur (vous ;)

- sans revenir à Alexandre Dumas qui était payé à la ligne lorsque ses romans paraissaient en feuilleton, il y a plusieurs cas où l'auteur fait du remplissage en détaillant ligne par ligne des instructions répétées pour plusieurs cartes ou boutons. C'est un peu trop ! D'autant plus que dans certains cas le programme proposé pourrait être simplifié avec une logique un peu poussée qui permettrait de minimiser le nombre de lignes à taper. Un programmeur est un paresseux et a tendance à préférer économiser le temps passé à taper. Souvent c'est pourquoi il préfère des langages réputés moins verbeux, mais illibles après coup. LiveCode, mieux programmé, peut être plus attrayant.
(Voilà ! J'ai fait comme tout programmeur, j'ai critiqué les lignes de programme de l'auteur !!!)

- le chapitre 10 est le seul vraiment "mobile" puisqu'il est consacré aux achats "in-app", c'est-à-dire à la manière pour votre application mobile de proposer aux utilisateurs des achats payants à l'intérieur de votre application, et aussi aux publicités si vous désirez en inclure. C'est une des grandes caractéristiques des applications pour mobiles.
Le chapitre est une bonne introduction à ces sujets. Il est suivi d'une annexe sur la manière de paramétrer LiveCode pour développer sur mobiles : partiel mais utile !

Tout dépend en fait de votre envie de lire. Si vous êtes du genre à préférer musarder sur l'Internet et à chercher dans les forums et listes de discussion des réponses précises à des questions, vous ne trouverez rien de nouveau dans un tel livre (et dans la plupart des livres d'ailleurs). Si vous êtes en train de commencer à utiliser LiveCode, ce livre vous donnera l'envie de programmer une application pour mobile et couvrira les points qui vous permettront de démarrer. Si vous êtes déjà sur un projet avancé, spécialement un jeu, ce livre ne vous servira à rien mais il vous est nécessaire dans votre bibliothèque (numérique), car les informaticiens adorent montrer les livres qu'ile ne lisent pas.

Je pense que l'éditeur devrait publier d'autres livres sur LC, plus avancés : comment réaliser un jeu pour mobile avec LiveCode par exemple...

Finalement

Ceci conclut notre billet d'aujourd'hui. Dimanche prochain, on reviendra aux débutants pour les accompagner, notamment en regardant comment se dépatouiller dans la galaxie des sites qui donnent des conseils sur LC.

Exercice aujourd'hui (pour ceux qui ont le livre) : Le lire et proposer une liste des chapitres que vous auriez aimé y voir !

Aucun commentaire:

Publier un commentaire