Retours de développeurs : Android et Kotlin comme moyens d’expression
Les équipes Linkvalue évoluent sur différents environnements techniques en développement Mobile, Web, Infra/ Cloud et Data.
Nous évoquons dans cet article le développement mobile sur Android.
Anthony (aka Nino) et Julien, passionnés de développement mobile, partagent leur vision et leur expérience de l’écosystème Android et du langage Kotlin.
Android est un système d’exploitation mobile open source géré par Google depuis 2007. Il est installé sur 2,5 milliards d’appareils actifs, parmi smartphones, tablettes et objets connectés (Android TV, Android Auto, Chromebook et WearOS).
Lancé en 2011, avec une première version stable en 2016, Kotlin est depuis 2017 le langage recommandé par Google pour développer sur Android. Il s’agit d’un langage de programmation fonctionnelle orienté objet.
Que signifie Android pour toi ?
- Julien : Android est un système d’exploitation détenu par Google pour pouvoir gérer son smartphone.
- Nino : C’est un moyen d’expression à partir d’une application, par exemple pour exprimer une idée ou un concept. Si je souhaite faire de la recherche à partir de code, l’application vient démontrer que cette idée ou cette technologie fonctionne.
C’est aussi de l’échange et du partage avec des personnes différentes pour des besoins différents. C’est par exemple autant un moyen de communication sur le côté UI avec des designers, que côté code avec mes collègues ou moi-même plus tard en me relisant pour faire comprendre ce que j’ai voulu faire.
Comment as-tu découvert le développement mobile Android ?
- Julien : Je ne m’en rappelle plus exactement en détail. Mais je me souviens que j’avais des collègues de l’époque qui avait fait un retour sur la conférence Android Makers au tout début d’Android Things, et ça m’avait intéressé de loin.
J’étais aussi très attiré par l’IoT et j’ai vu que le développement mobile était un moyen d’y accéder sans passer par du C. Dans un premier temps j’ai donc voulu avoir les bases pour savoir travailler sur Android en général, avant de passer sur Android Things. Je me suis formé en autodidacte, j’ai suivi un ou deux cours Udemy au plus. - Nino : J’étais d’abord croupier en Angleterre, bien que j’aie toujours eu une passion pour l’informatique. Je faisais des petits programmes et des macros sur des jeux mais sans compétence professionnelle. Puis en rentrant en France, j’ai fait le pas de considérer ce hobby comme un potentiel travail. J’avais peur de perdre l’aspect plaisir, mais je me suis lancé et j’en suis très content !
Grâce à un financement de la Région Rhône-Alpes, j’ai réalisé une formation à l’AFPA de Grenoble de développeur concepteur informatique avec un module sur la mobilité. J’y ai découvert iOS et Android et je me suis naturellement tourné vers Android pour sa partie ouverte. Ne pas pouvoir travailler sur Windows ou Linux est un problème pour moi.
Quels sont tes librairies et ton langage de prédilection sur Android ?
- Julien : J’ai d’abord commencé par Java dans le cadre d’une mission, mais depuis j’utilise Kotlin.
Premièrement car c’est poussé par Google, qui recommande de passer sur Kotlin. Et ensuite car en regardant le langage j’ai beaucoup apprécié ses principales fonctionnalités, comme l’inférence de types et l’aspect nullable. Et de plus ça ressemble en certains points à du Scala avec son côté fonctionnel et le pattern matching. Ça reste moins puissant mais ça permet de faire de la programmation fonctionnelle. Ce qui pour moi représente l’avenir de la programmation.
Côté librairies, j’aime bien utiliser l’API Google Maps, car il a y pas mal d’applications intéressantes à faire dessus à titre personnel. J’ai également une appétence pour la réalité augmentée avec ARCore et avec Sceneform. C’est développé par Google pour cet usage. - Nino : Kotlin avec de l’Android natif, car ça répond à la problématique globale. C’est-à-dire que ça fonctionne, c’est éprouvé et robuste. Kotlin offre des solutions simples à des problématiques qui sont compliquées à aborder avec Java.. Et au niveau de la capacité à réaliser des applications, on n’a pas encore la preuve que d’autres technos soient meilleures.
De plus il y a une grosse communauté, qui permet de s’entraider et d’avoir accès à de la documentation.
Et pour moi avec Kotlin la killer feature est les coroutines. Elles apportent un nouveau souffle à ce problème systématique en informatique : l’asynchronisme. C’est facile à gérer et limite les erreurs typiques en Android. De plus ça s’intègre bien à la façon de coder en Kotlin avec des lambdas. Alors qu’en Java comprendre la complexité des fils directeurs est assez compliqué.
Il y a aussi LiveData, qui est une librairie de Google. C’est un composant supplémentaire du framework Android qui fait le lien entre un calcul autonome et l’écran, afin de publier le résultat de manière réactive.
Côté hybride pour moi le plus intéressant actuellement est Flutter.
C’est impressionnant car ça fonctionne aussi bien sur du Web, de l’iOS, Android, … Avec peu de complexité pour supporter tout en même temps. Malgré tout le langage DaRT qui est utilisé n’est pas moderne et assez compliqué. Je trouve que c’est le plus difficile des langages objet à comprendre et à maîtriser. Il y a plein de symboles qui ne font pas facilement sens.
Mais Flutter en Kotlin, j’attends ça avec impatience ! Flutter a de l’avenir et rentre progressivement dans les mœurs pour faire de l’hybride.
Il y a aussi KMP (Kotlin Multi Platform). Il ne permet pas de faire du full cross platform, mais de mutualiser et partager le cœur de l’application (travail en asynchrone, requêtes serveurs, accès aux données, …) sur iOS et Android. Il suffit ensuite d’ajouter la vue pour chacun. Ça reste toutefois du haut niveau utilisé par de grands groupes ou pour optimiser son time-to-market.
Dans quels cas recommanderais-tu de développer en Kotlin ?
- Julien : Je pense que Kotlin peut être utilisé dans quasiment tous les cas, à part quand on a besoin de faire quelque chose de plus bas niveau. Dans ce cas on peut s’orienter vers du NDK par exemple. Côté animation et jeux vidéo il y a aussi Unity qui peut être utilisé.
Mais sinon Kotlin reste de facto le langage à utiliser pour toutes les applications Android de traitement et d’administration.
Sinon je m’interroge sur l’avenir de Flutter dans le développement mobile. Est-ce qu’il va apporter une compétition entre les langages et en supplanter ou au contraire amener une complémentarité ? - Nino : Pour coder en natif, Kotlin est le choix évident. En cross-platform, c’est différent. Chacun a un langage, une implémentation et des capacités différentes. Et dans les cas où on a besoin de faire appel à une fonctionnalité du téléphone (notifications, caméra, Bluetooth, …), le natif fonctionne bien mieux. Si on doit solliciter les API des différents devices dans notre application, je conseille de faire du natif. Après avec une application avec un simple accès aux données depuis un serveur, autant le faire en cross platform pour éviter de répéter le code deux fois.
Sinon d’un point de vue purement technique, il vaut mieux privilégier iOS pour tout ce qui est enregistrement et création artistique audio. Car avec iOS il y a environ 10 ou 15 appareils à considérer. Alors qu’avec Android il y a plus de 4 millions de devices différents et Google ne gère pas les implémentations de chaque constructeur. Le framework est trop fragmenté, ce qui rend difficile de faire des traitements à la milliseconde près, comme c’est préférable pour le traitement audio. Idem côté Bluetooth.
Toutefois le fait de ne pas être lié à un device en particulier avec Android peut aussi être un avantage. Dans des cas particuliers comme la mise en rayon, où on utilise et on communique avec un device externe supplémentaire, il est plus facile d’interagir avec.
Quel a été l’impact du développement sur Android et en Kotlin dans ta vision du développement ?
- Julien : En tant que développeur web, tout ce que m’a apporté le langage Kotlin n’est pas forcément retranscriptible en PHP. Notamment l’asynchronisme et la programmation fonctionnelle qui est plus facilement abordable avec Kotlin.
L’IoT et l’embarqué apportent aussi des contraintes physiques plus importantes et du coup des challenges intéressants que l’on ne retrouve pas dans le Web. - Nino : Au niveau de la programmation orientée objet je n’ai pas forcément appris grands choses, mais Kotlin apporte justement d’autres solutions.
La programmation orientée objet tourne autour de la notion de hiérarchie et d’héritage alors que Kotlin est davantage basé sur de la composition. Il procure donc des outils complémentaires.
Kotlin est aussi un langage fonctionnel. Ce qui ouvre une myriade de possibilités, qui permettent de simplifier certaines choses par rapport à Java, comme le traitement de collection.
Pourquoi devrait-on apprendre à développer sur Android et en Kotlin ?
- Julien : iOS et Android sont tous les 2 très bien, bien que pas faits pour les mêmes téléphones. L’avantage d’Android avec Kotlin reste le côté multiplateforme, ce qui permet d’avoir un code métier partagé entre tout et qui permet même de faire du JavaScript, du back, etc.
- Nino : Android ou iOS, techniquement les deux se valent. Donc c’est plus une question de langage. Même si Swift et Kotlin sont assez similaires car les idées sont les mêmes. Après ça dépend aussi du public que l’on souhaite toucher, de son appétence pour certains devices et pour le monde libre.
Sur Android, pour un débutant, je ne recommanderai pas de commencer par Kotlin car c’est un langage beaucoup plus abstrait que Java. Du coup on ne voit pas et on ne comprend pas forcément tout le fonctionnement, ce qui fait que tout ne sera pas maîtrisé.
Débuter par Java permet de mettre les mains dans le cambouis et même de faire de l’algorithmique afin de comprendre comment implémenter une solution nous-même. Et ensuite plus tard, on peut passer sur Kotlin pour prendre de la vitesse. Sinon ça revient à faire du retroenginnering pour comprendre comment fonctionne Kotlin en basses couches, ce qui serait moins intéressant.
Quel est le ‘truc en plus’ d’Android et de Kotlin ?
- Julien : De façon purement pragmatique, il y a le fait que développer en Kotlin sur Android ne nécessite pas un appareil en particulier, quand on doit s’équiper avec un Mac/ iPhone pour développer sur iOS sans passer par une VM. Alors qu’on peut passer sur n’importe quelle autre plateforme pour faire de l’Android.
- Nino : Côté Android, c’est le material design qui est arrivé avec Lollipop. À l’époque ça a été un tournant technique et design pour Android. On a considéré les écrans comme des feuilles de papier qui se superposaient. D’un point de vue design ça a apporté de nouvelles façons de penser et d’interagir avec l’utilisateur et côté technique il y a eu une notion d’élévation. Android a commencé à se populariser à ce moment-là. À tel point que certaines librairies permettent d’ailleurs de faire du material design sur iOS.
Côté Kotlin, c’est la data class. Ça permet de transformer certains fichiers qui font 200 lignes en un fichier de 10 lignes. La data class va stocker des données et générer automatiquement le code nécessaire selon les classes.
Il y a aussi le null-check qui permet d’éviter d’accéder à un objet qui n’existe pas et donc un crash. En cas d’incohérence dans son code, la compilation échoue.
Quelles sont les limites d‘Android et de Kotlin ?
- Julien : Il faut maintenir beaucoup plus de versions et prendre en compte plus de tailles d’écran différentes du fait de la fragmentation des téléphones, contrairement à l’écosystème général d’Apple.
- Nino : Kotlin est un langage compilé, donc pas comparable avec un langage interprété ou transpilé. Il a donc une certaine robustesse mais il n’est pas aussi rapide et instantané que JavaScript peut l’être par exemple.
Et effectivement Android est très fragmenté dans le sens où on a encore 2 à 5% des utilisateurs qui sont sur des versions vieilles de 5 à 6 ans. La politique de Google est de ne pas forcément pousser les utilisateurs à se mettre à jour vers une version plus récente. Ça limite l’obsolescence des devices, mais en tant que développeurs on doit parfois gérer des bugs qui n’apparaissent que pour une minorité d’utilisateurs, car ce n’est pas entendable de laisser bloqués certains utilisateurs.
Malgré tout, je prends énormément de plaisir tous les jours sur Android. Je suis lucide sur ses problèmes mais l’expérience reste positive et je vais continuer à travailler dessus ces prochaines années.
Nos experts évoluent également sur d’autres environnements techniques. Vous pouvez découvrir leur retour d’expérience dans ces articles :
- JavaScript : Retours d’expérience de développeurs web sur ce langage populaire
- Symfony et Laravel : Retours d’expérience de développeurs PHP
- Vision et usages de Java : Témoignages de développeurs
Nous publions régulièrement des articles sur des sujets de développement produit web et mobile, data et analytics, sécurité, cloud, hyperautomatisation et digital workplace.
Suivez-nous pour être notifié des prochains articles et réaliser votre veille professionnelle.
Retrouvez aussi nos publications et notre actualité via notre newsletter, ainsi que nos différents réseaux sociaux : LinkedIn, Twitter, Youtube, Twitch et Instagram
Vous souhaitez en savoir plus ? Consultez notre site web et nos offres d’emploi.