(Suite du chapitre 1 – Inventons le logiciel dont vous êtes le héros )
Apprendre à créer ses propres applications web et se faire aider par une communauté spécialisée devient à la portée d’un très grand nombre de personnes.
Comment sont consommées la plupart de ces petites applications pour les particuliers (ou ‘apps’) aujourd’hui ? Principalement sous deux forme : des apps dites ‘mobiles’ nativement développées pour smartphones et tablettes, et des sites web consultables à partir de tout type d’appareils. Depuis quelques années la différence entre ces deux catégories d’apps s’estompe : statistiquement les apps ‘mobiles’ sont préférées par les utilisateurs mais leurs avantages principaux comme la mobilité, la rapidité ou une meilleure expérience utilisateur sont maintenant égalés par les sites web de dernière génération. Ceux-ci sont accessibles sur mobile dans un format adapté dit ‘responsive’, et bénéficient de navigateurs web plus rapides et capables de donner une expérience ‘enrichie’ aux utilisateurs proche de celle des app mobiles. Les équipes qui font progresser des navigateurs comme Chrome (Google) ou Edge (Microsoft) ont joint leurs forces pour progresser plus vite (ils s’appuient sur la même technologie open source Chromium), et sont concurrencé de loin par Apple (Safari) et Mozilla (Firefox) qui ont leur propre technologie mais font des efforts similaires. On peut dire qu’aujourd’hui l’avantage de développer des apps ‘mobiles’ est fortement concurrencé par la facilité de développer des ‘apps web’.
Pour ceux qui font le choix de développer des apps web, l’un des inconvénients est l’évolution permanente des technologies dans ce domaine — a ce sujet voir cette infographie impressionnante qui s’arrête malheureusement en 2012 ou celle ci qui date de 2020. Le choix des bonnes technologies pour développer une app web doit être adapté à la complexité et la durée du projet mais il y a quelques incontournables comme JavaScript et ses librairies comme React ou jQuery pour l’expérience utilisateur, ou comme Rails ou Django pour la facilité de développement côté serveur. Ce dernier environnement, Django, est lui même basé sur un langage récent et très facile à apprendre, Python, assez proche du langage naturel (en anglais!). D’autres technologies sont nécessaires pour développer une application complète (une base de donnée, un système de tests automatiques, un serveur web ou une plateforme de déploiement…) mais nous y reviendrons.
Les technologies utilisées par deux sites webs connus : Airbnb, the world’s most well-known hospitality service that helps millions of people find rental apartments and short-term lodging, is largely based on Ruby on Rails., while Instagram, a mainstream social networking application, is built with Python. (Source: RubyGarage.com)
Toutes ces technologies ont gagné rapidement en popularité ces dernières années si bien qu’une large communauté s’est développée autour d’elles, et que de nombreux contenus de formation et forums de discussions existent aujourd’hui pour s’auto-former et se faire assister. Le site web spécialisé le plus connu, StackOverflow reçoit plus 100 Millions de visiteurs par mois (il fait partie des 50 sites les plus visités au monde) et vient de lever 85 Millions de Dollars en Juillet 2020 pour continuer à se développer. Depuis 1 à 2 ans le terme d’environnement ‘low-code’ ou ’no-code’ devient également populaire, avec l’apparition de nouvelles offres comme AppSheet racheté par Google ou d’autres. Mais leurs capacités sont encore assez limitées. Apprendre à créer ses propres applications web et se faire aider par une communauté spécialisée devient donc à la portée d’un très grand nombre de personnes.
Il existe aujourd’hui des environnements de développements qui permettent de décrire assez intuitivement n’importe quel idée d’app en 3 étapes.
Après avoir expérimenté Rails il y a 10 ans, j’ai donc pu profiter du confinement en 2020 pour débuter en Python et Django. On retrouve dans ces deux environnement de développement web les mêmes éléments de base, et notamment le concept que l’inventeur de Rails, David HH, a nommé ‘échafaudage’ (scaffolding). Ce concept — ou plutôt cette bonne pratique — permet de créer facilement de nouvelles applications en générant automatiquement tous les éléments nécessaires à son fonctionnement, tout en gardant ces éléments bien structurés pour pouvoir ensuite les faire évoluer un par un ‘à la main’, c’est à dire en modifiant leur code source. Contrairement à cette bonne pratique, les environnements de génération précédente — comme Windev ou Deplhi — permettent de créer rapidement des applications mais leur modification ultérieure devient vite un vrai casse tête, car le code source de ces éléments n’est pas pensé pour être modifié ‘à la main’.
Que ce soit avec Rails ou avec Django les grandes étapes de la création d’une application web sont sensiblement les mêmes : d’abord la création d’une application vide (ce qui crée tout de même toute la structure nécessaire, et notamment une base de données et un mini serveur web suffisant pour le développement), puis sans ordre particulier
(1) l’édition d’un modèle de données qui sera au fur et à mesure importé sous forme de tables dans la base de données,
(2) la création de pages web qui présentent les données à l’utilisateur et permettent de les manipuler, et
(3) l’enrichissement des éléments du modèle pour qu’ils réagissent de manière appropriée lorsque l’utilisateur les manipule (on parle de ‘comportement’ ou de ‘logique métier’ de ces données, et ces comportements sont codés comme des fonction en Python pour Django, ou en Ruby pour Rails).
Ces étapes étant en nombre limité le développement se faire de manière assez itérative, facilitant l’apprentissage pour les développeurs débutants.
L’intérêt de ces environnements c’est de pouvoir décomposer et décrire de manière assez intuitive n’importe quelle application suivant ces 3 éléments. Prenons l’exemple de l’outil logiciel discuté dans le premier chapitre (celui qui permet à un groupe d’entrepreneurs de collaborer tout en se partageant la propriété intellectuelle de leur résultat). La première idée (ou ‘scénario’) qui vient à l’esprit est le suivant : lorsqu’un utilisateur de l’outil a une idée de nouveau projet et souhaite y collaborer avec d’autres, il doit pouvoir documenter son idée rapidement et inviter tout d’abord ses amis à lui donner leur opinion en privé et à participer au développement. Pour cela, cet utilisateur va devoir (1) interagir avec les modèles Projet — pour stocker le nom, le statut (ce n’est encore qu’un ‘brouillon’), une icône ou une image et différentes sections décrivant le projet — et Utilisateur — pour stocker une liste d’Amis invités à échanger sur un projet grâce à (2) une page web qui permettre de créer ou de modifier un Projet et de sélectionner d’autre Utilisateurs parmi une liste d’Amis avec qui partager ce ‘brouillon’ de projet. On devra enfin (3) vérifier que chaque Utilisateur ne doit avoir accès qu’à ses propres projets ou ceux auxquels il est invité, même s’il intercepte un email d’invitation qui ne lui est pas destiné.
Ce n’est qu’un scénario, et une application en comporte généralement des dizaines, mais le principe reste le même pour les suivants, et petit à petit le modèle de données (1), les pages web (2) et les comportements (3) vont s’enrichir en essayant de les conserver les plus simples possibles.
On ne parle ici que des environnements de développement pour apps web. Rappelons nous que pour l’instant en 2020, les apps ‘mobiles’ représentent aussi une grande part du marché, mais nous verrons que les environnements dédiés d’Apple (XCode et le langage Swift) et de Google (Android Studio et les langages Java, C++ et Kotlin) décomposent les applications ‘mobiles’ essentiellement dans les mêmes 3 éléments. Cette décomposition en 3 catégories d’éléments est généralement valable dans beaucoup de domaines, et désignée sous le nom de MVC « Modèle – Vue – Contrôleur ». Nous pourrons donc réutiliser les mêmes idées pour développer des apps ‘mobiles’
A suivre : Chapitre 3 : Apprendre en réalisant des projets concrets
Une réponse sur “L’âge d’or du développement web c’est maintenant”