Comment apprendre à développer une application mobile Android ?

Comment apprendre à développer une application mobile Android ?

Je suis en train de créer JavaScript de Zéro, une formation vidéo en ligne pour apprendre le JavaScript. Elle est conçue spécialement pour les débutants complets en programmation. Regardez gratuitement le module débutant sur YouTube dès maintenant.

Beaucoup de personnes me demandent souvent comment apprendre à développer une application mobile sur Android ou iOS.

Aujourd’hui c’est assez facile d’apprendre dans le sens où vous trouvez de nombreuses ressources de diverses formes : ebooks, vidéos, MOOC (Massive Online Open Courses), articles de blog etc. Mais s’il est facile de trouver des ressources pour apprendre, avoir une sorte de ligne directrice pour savoir « par où commencer » est important pour débuter et pour ne pas perdre sa motivation en cours de route.

Dans ce billet je vais vous présenter les différentes ressources que j’ai utilisées et que j’utilise toujours pour développer mon application mobile Hercule. Je me pencherai principalement sur Android puisque c’est mon domaine d’expertise. Mais beaucoup de ressources que je vais citer peuvent être utilisées pour iOS.

J’ai simplifié les explications suivantes pour m’adresser aux débutants n’ayant pas ou peu de connaissances dans le développement logiciel. Chers développeurs puristes qui lisez ces lignes, ne m’en voulez pas ;-). Notez que je ne parle pas de la plateforme Windows Mobile mais uniquement d’Android et iOS qui sont pour moi les deux plateformes majeures aujourd’hui. N’hésitez pas à commenter si vous avez des infos / questions / précisions que j’améliore l’article. Merci.

Comment apprendre à développer une application mobile Android ?

Développer une application mobile Android ce n’est pas juste apprendre à programmer. Une application mobile possède une interface utilisateur qu’il faudra aussi concevoir et enrichir au fil du temps. Le design est un aspect extrêmement important d’une application mobile. Il ne faut pas le négliger.

Aujourd’hui on considère acquis le côté technique des applications, c’est-à-dire qu’une app fasse son travail correctement sans planter, c’est devenu la base. Même si ce travail n’est pas aisé (le développement logiciel est un métier à part entière), on se différencie aujourd’hui par le design c’est-à-dire la conception de l’application.

Attention en France on confond souvent design et esthétique, ça n’a strictement rien à voir ! Design veut dire conception en français, l’interface graphique (UI : User Interface) fait partie du design, l’expérience utilisateur (UX : User eXperience) fait partie du design également, le choix des couleurs et l’esthétisme des boutons font aussi partie du design mais ce n’est qu’une fraction de la conception d’une application.

Pour commencer doucement à apprendre le développement mobile je pense qu’il est intéressant de commencer par apprendre à designer. Pourquoi est-ce que je recommande ça plutôt que de se lancer dans le code tout de suite ? Tout simplement parce que si vous venez d’un milieu où vous n’avez jamais programmé, apprendre le design en premier sera une transition plus douce que d’apprendre à coder. Apprendre le design ne demande aucune connaissance technique particulière et vous pourrez donner vie à votre application en concevant les écrans qui la composeront avant d’apprendre à développer.

Par ailleurs c’est une bonne pratique de concevoir avant de coder, de plus vous aurez des connaissances sur les différentes lois de design qui vous permettront de faire une interface graphique utilisable, agréable et surtout bien pensée pour vos utilisateurs !

Apprendre le design pour concevoir une application mobile Android

Le système d’exploitation Android (mais surtout Google) facilite le travail côté design en unifiant les interfaces utilisateur grâce au Material Design. Vous pouvez parcourir son site et particulièrement les guidelines du Material Design pour apprendre les bonnes pratiques de la conception d’interfaces pour Android.

Mais avant de plonger corps et âme dans le Material Design, je vous invite à lire 2 livres et à regarder la vidéo ci-dessous pour approcher le design d’une façon plus générale et en douceur. A lire dans cet ordre :

  1. Don’t make me think – Steve Krug
  2. About Face 3: The Essentials of Interaction Design – Alan Cooper
  3. BONUS: Excellente vidéo pour comprendre ce qu’est le design (49 min)

Une fois que vous aurez lu ces livres et regardé la vidéo vous aurez un sens plus aiguisé de ce qu’est un bon design. Et n’oubliez jamais que vous concevez une application mobile à destination d’un être humain, pas d’une machine, ce point est essentiel pour faire de bonnes apps !

Il existe également d’autres ressources, en ligne cette fois, qui permettent d’apprendre le design pour mobile, et notamment :

Le dernier lien sur Udacity est très général et vous permettra d’apprendre tout ce qu’il faut savoir pour créer votre première app (design & développement logiciel compris). Ce sont les cours mis en ligne gratuitement par Google faits par des ingénieurs chez Google.

Maintenant que vous avez une idée un peu plus précise de ce qu’est la conception d’interface graphique et le design, on peut passer à l’apprentissage de la programmation.

Apprendre la programmation pour une créer une application mobile Android

Premier pré-requis indispensable (vous avez dû vous en apercevoir vu les liens précédents), il faut lire l’anglais. C’est indispensable, toutes les ressources en ligne de qualité sont en anglais, même votre code le sera ! N’importe quel ingénieur ou développeur écrit en anglais et pose ses questions dans Google en anglais quand il a un problème de développement logiciel.

L’anglais est la langue internationale, il faut donc pouvoir la lire à minima pour pouvoir apprendre à programmer. Bien sûr vous pouvez toujours lire des traductions de livres ou utiliser les sous-titres pour les vidéos, mais si vous comptez rester dans ce milieu, il sera indispensable de connaître l’anglais.

Ceci étant dit, quelles ressources utiliser et par où commencer ?

À peine on souhaite apprendre à développer une application mobile qu’on a déjà 10 000 questions ! Quel langage utiliser ? Pourquoi celui-là plutôt qu’un autre ? Quels sont les avantages et inconvénients de développer en natif ? En multi-plateforme ? etc.

Comme lorsqu’on va acheter une nouvelle voiture et qu’on demande à un professionnel « c’est quoi la meilleure voiture à acheter en ce moment ? », s’il est sérieux, il vous répondra : « ça dépend, c’est pour quoi faire ? ». Et c’est exactement ce que je vais vous répondre, ça va dépendre de votre objectif.

Il existe 2 façons majeures de développer une application mobile (je vais expliquer plus en détails chaque solution) : développer en utilisant le langage natif ou utiliser un outil cross-plaftorm (multi-plateforme).

Développer avec le langage natif de la plateforme

Il existe plusieurs dizaines (voir centaines) de langages de programmation différents avec des concepts plus ou moins communs, je ne rentre pas dans les détails ici. Sachez simplement que vous pouvez utiliser plusieurs langages et outils différents pour développer une même application mobile.

Mais il existe uniquement un langage dit natif. Le langage natif est le langage utilisé de base pour développer une application mobile. C’est le langage « par défaut », celui qui vient avec le système d’exploitation et l’environnement dans lequel sera exécuté l’application mobile. Pour le système Android, le langage natif est le Java. Pour iOS, c’est l’Objective-C, qui va sûrement être remplacé par le nouveau langage Swift.

Bref. Quel intérêt de développer avec le langage natif ?

Les avantages

  • C’est le langage le plus riche qui offre le plus de possibilités en terme de liberté de développement.
  • Vous pourrez accéder à des librairies développées par d’autres développeurs pour vous faciliter certaines tâches et ajouter des fonctionnalités très facilement. Une librairie est grossièrement du code écrit par quelqu’un d’autre que vous pouvez intégrer facilement dans votre application pour effectuer une tâche complexe. Par exemple tracer des courbes, faire des effets 3D, etc.
  • Meilleur support de la part de la communauté et du fournisseur du système d’exploitation (Google) qui mettra à jour régulièrement ses librairies de développement.
  • Le code natif permet d’avoir toujours les dernières nouveautés concernant les accès au matériel de l’appareil sur lequel vous travaillez, sur le téléphone ou la tablette par exemple. Si vous avez besoin de la caméra, de l’accéléromètre ou du GPS, aucun problème, vous pourrez toujours y accéder.
  • C’est gratuit.

Les inconvénients

  • Si vous voulez développer une même application sur Android et iOS en langage natif, vous devrez créer et maintenir 2 codes sources différents, l’un en Java (Android) et l’autre en Objective-C ou Swift (iOS). Cela implique 2 fois plus de temps de développement et de maintenance.

Pour information, Hercule est développée en Java pour Android, c’est pour ça que vous ne la trouverez pas sur iOS, car je ne l’ai pas porté en Objective-C / Swift, trop de travail pour moi tout seul !

Est-ce que vous devez apprendre le langage natif ? Et bien ça dépend, si votre application est complexe et à besoin de ressources matérielles comme la caméra ou autre, qu’elle doit être hyper fluide et réactive, je pense que le langage natif est indispensable. Mais si elle est simple, une solution multi-plateforme serait sûrement plus appropriée.

Développer avec une solution multi-plateforme

Le hic du langage natif comme on l’a vu, c’est qu’il ne fonctionne que sur sa plateforme de référence. Or si vous voulez développer une application pour Android et pour iOS, il vous faudra 2 codes sources différents pour votre application.

Ça demande donc 2 fois plus de ressources (en temps et en hommes) pour maintenir la même application sur les 2 plateformes. Galère. Pour résoudre ce problème, certaines sociétés ont créé des outils de développement multi-plateforme qui permettent de développer avec un seul langage pour toutes les plateformes (même Windows Mobile !).

Les avantages

  • Un seul code pour plusieurs plateformes : vous ne rédigez qu’un code source et vous avez une appli qui peut tourner sur Android, iOS et Windows Mobile. Gros gain de temps et de ressources donc ! Notez que vous aurez certaines spécificités à gérer tout de même, notamment à créer une interface graphique unique pour chaque plateforme. Mais ceci est vrai également si vous développez en langage natif !
  • Beaucoup de monde utilise ces outils donc la communauté est pas mal présente pour vous aider.
  • Vous pouvez « attaquer » plusieurs marchés d’un coup : Android, iOS et Windows Mobile. Votre potentiel d’utilisateurs est donc plus important.

Les inconvénients

  • Vous n’aurez pas nécessairement accès tout de suite (dès que ça sort côté langage natif) aux dernières nouveautés de la plateforme (Android, iOS) car il faut un temps d’adaptation pour que la société adapte ses outils aux nouveautés.
  • Les applications générées par ces outils sont souvent beaucoup plus grosses et lourdes que les applications développées en langage natif. (3 Mo en multi-plateforme contre 176 ko en langage natif).
  • La vitesse d’exécution et la fluidité peut parfois être moindre qu’une application en langage natif.
  • Vous n’aurez pas accès aux nombreuses librairies développées pour les langages natifs mais vous aurez accès aux librairies développées pour cet outil.
  • Certaines solutions sont payantes.

Si votre application n’est pas très complexe et/ou fait appel à peu de matériel sur le téléphone, alors le développement multi-plateforme peut être une excellente alternative au développement en langage natif.

Il reste toutefois très très difficile de faire un choix quant aux technologies à utiliser pour développer une application mobile. Si vous hésitez, ne vous culpabilisez pas, même moi j’hésiterai et pourtant je ne suis pas novice. Il y a du pour et du contre dans chaque choix.

Tout dépend également de ce qu’on appelle une application « complexe » ou « simple ». Il y a aussi un autre problème par exemple vous partez sur une idée d’app simple et sur du multi-plateforme et puis vous faites évoluer l’appli et un jour vous vous apercevez que vous ne pouvez pas faire telle chose car l’outil multi-plateforme ne vous permet pas de le faire alors qu’en natif oui…

C’est un sujet délicat et complexe qui fait rage sur internet même parmi les professionnels. Les outils sont en constante évolution en plus de ça…

Je pense que si vous voulez avoir un maximum de ressources disponibles pour apprendre, partir sur du natif peut être une bonne idée car la documentation et le support sont riches, mais encore une fois, ça dépend de votre projet.

Les principaux outils qui vous permettent de développer en multi-plateformes sont Xamarin, PhoneGap et Appcelerator. Il en existe beaucoup d’autres mais je ne vais pas tous les lister ici.

Ressources pour apprendre à développer une application mobile Android

Pour apprendre à développer en langage natif, il faut utiliser ces quelques références en la matière :

Le premier est la référence pour toute la documentation officielle, je vous invite notamment à parcourir la section training. Pour commencer c’est idéal. Ensuite sur Udacity, vous aurez des cours en vidéo d’ingénieurs de chez Google, il y a des leçons sur le développement logiciel pur mais également sur le design d’interface graphiques.

Enfin le dernier lien mais pas des moindres, StackOverflow (SO pour les intimes), c’est la référence du forum pour développeurs. Vous avez une question ? Elle a certainement déjà été postée sur ce site et vous y trouverez une réponse. Bien sûr, comme d’hab, entièrement en anglais, donc posez vos questions en anglais ! Toujours !

Notez que je ne parle pas de livres ici, tout simplement parce que le développement logiciel évolue et particulièrement le système Android donc quand vous achetez un livre, il est souvent déjà dépassé… Mais ça reste néanmoins un support qui peut s’avérer utile pour les débutants car les bases en programmation restent inchangées, donc vous pouvez acheter un livre sur le langage Java par exemple si vous voulez des bases solides pour continuer le développement logiciel d’applications mobiles.

Pour apprendre à développer via une solution multi-plateforme, il faut lire la documentation de la solution que vous choisirez.

Quels outils utiliser pour le développement d’application mobile Android ?

Là, contrairement aux langages à utiliser pour développer, on se pose moins de questions. Pour Android, il faut utiliser Android Studio. C’est l’environnement de développement officiel fourni par Google (basé sur IntelliJ Idea) et qui est supporté par Google.

Autrement dit, si vous voulez être à la pointe des outils performants pour développer une app Android, c’est Android Studio qu’il faut utiliser. Eclipse IDE n’est plus recommandé ni supporté je crois, et franchement après avoir essayé Android Studio vous ne voudrez plus revenir à Eclipse. Le travail qu’ils ont fait sur ce logiciel est remarquable.

Mot de la fin

J’espère que ces informations vous auront été utiles et vous permettront de commencer à apprendre à développer une application mobile pour Android.

Si vous voulez un dernier conseil sur les étapes à suivre dans l’ordre, voici ce que je ferai aujourd’hui si je devais apprendre à nouveau à développer une app Android, dans l’ordre s’il vous plaît :

  1. Lire les livres sur le design
  2. Installer Android Studio
  3. Je regarderai les vidéos sur Udacity de Google pour créer ma première application
  4. Je lirai la section training pour créer sa première app
  5. Une fois tout ça fait, je me challengerai avec une petite app, un projet d’un truc simple à réaliser et je le ferai entièrement depuis zéro
  6. Je recommencerai le point 5 avec une nouvelle fonctionnalité sur un truc que je ne connais pas du tout (accès réseau, caméra etc.)
  7. Je recommencerai le point 6 jusqu’à avoir une app utile et viable et je la posterai sur le play store, juste pour voir comment ça marche avec une vraie app
  8. Je lirai du code source d’autres applications Android open source sur github.com (on apprend beaucoup en lisant le code d’autrui)

De manière générale, quand on apprend la programmation on a tendance à faire 2 erreurs : la première c’est de suivre des tutoriels et autres cours faciles à reproduire et où il n’y a aucune difficulté, aucun plantage ou autre… on copie colle le code et boum ça marche super. Mais en faisant ça on apprend rien. Lire et copier-coller c’est insuffisant, il faut pratiquer pour apprendre.

Il y a un dicton qui dit « c’est en forgeant qu’on devient forgeron », pour le développement logiciel, c’est pareil. C’est en pratiquant que vous apprendrez et que vous retiendrez ce qu’il faut. Enfin la deuxième erreur c’est qu’on travaille souvent dans sa zone de confort, il faut en sortir et explorer ce qu’il y a juste un peu au-delà, c’est comme ça qu’on apprend. On tente un nouveau truc, ça ne marche pas, on cherche une solution, on recommence jusqu’à ce que ça marche.

Ça fait plus de 15 ans que je développe (j’ai commencé tôt) et c’est comme ça que tous les développeurs que j’ai pu côtoyer développent et ont appris à développer. Il n’y a pas de secrets ni de miracles, la pratique est votre seule option pour apprendre.

Bon courage à toutes et à tous !

PS : N’hésitez pas à poser vos questions dans les commentaires j’intégrerai mes réponses dans l’article pour l’enrichir au fur et à mesure et faire de ce billet une référence pour tous ceux qui se posent cette fameuse question !