5 technologies qui ont changé la manière de développer des logiciels

Cet article vous a plu ? Pourquoi ne pas le partager ?

Après un break d’une quinzaine années dans la communication et le marketing, je suis récemment revenu à mes premières amours : le développement de logiciel. Je n’avais pas complètement rompu avec la programmation, et j’avais à plusieurs reprises, durant toutes ces années, replongé à titre personnel (un solveur de sudoku par ici, une appli Alexa par là), ou pour réaliser des prototypes à usage interne à l’agence, comme un outil de mesure des audiences de nos clients sur les réseau sociaux. Plus récemment, j’ai conçu un aggrégateur de store locator en scrappant les cartes des concurrents d’un de mes clients. Mais dans l’ensemble, cela restait de l’ordre du prototype ou du projet d’amplitude mesurée.

En rejoignant récemment un éditeur de logiciel, j’ai non seulement renoué avec des pratiques que j’avais oubliées, mais découvert de nouvelles méthodes, de nouveaux outils, dont nous ne disposions absolument pas il y a vingt ans. En voici quelques unes.

Github

L’une des plus grosses frustrations que j’ai pu ressentir, durant mes années de développement informatique chez Dassault Systèmes, c’était ce sentiment de révinventer la roue à chaque nouveau développement, à chaque portage sur une nouvelle plateforme. C’était un peu la faute aux langages de cette époque, dotés de très peu de librairies.

De nos jours, ce n’est plus du tout la même histoire. Si on a besoin d’un composant capable d’effectuer tel ou tel traitement plus ou moins sophistiqué, il suffit d’effectuer une recherche en ligne et le tour est joué. C’est d’autant plus vrai avec des langages comme Python. Il existe un nombre incroyables de librairies sur lesquelles ont peut s’appuyer. Besoin de lire le texte sur des documents scannées ? Il existe une librairie Python (même plus qu’une) pour cela. Besoin de lire un format de fichier un peu spécial ? D’autres que vous ont certainement rencontré le même problème et en ont fait un composant qu’ils ont rendu disponible.

Mais comment rend on disponibles de telles librairies ? Et bien Github rend ce service. Au-delà des mécanismes de gestion de version, de livraison de code et de gestion de branches qui lui sont inhérents, cette plateforme, rachetée par Microsoft il y a quelques années, permet à des milliers de développeurs de partager leur travail, dans une démarche collaborative incroyable.

Stack Overflow

Quand on installe une nouvelle librairie, qu’on teste un nouveau langage, ou qu’on rencontre des problèmes pour faire fonctionner un programme, on se sent parfois un peu seul, un peu perdu. C’était d’autant plus vrai il y a vingt ans, quand on était dans une démarche exploratoire.

Mais Internet a tout changé, comme disait Henri Kaufman. Et en copiant, dans une requête Google, le message d’erreur rencontré, on obtient souvent des dizaines de résultats correspondant à des situations analogues rencontrées par d’autres développeurs, qui dans une approche communautaire semblable à celle évoquée précédemment, s’entraident, en partageant leurs expériences.

Et il faut bien le reconnaître, une bonne partie de cette multitude de discussions se trouvent hébergées sur un site : Stack Overflow. C’est tout bonnement incroyable : quelle que soit la technologie évoquée, qu’ils ‘agisse de systèmes d’exploitation, de langages, ‘algorithmes, de bases de données, de bibliothèques de composants, de compatibilité de versions, on trouve des réponses à quasiment toutes les questions qu’on peut se poser.

Docker

Lors de mes dernières années chez Dassault, j’avais pu assister à l’essor des techniques de machines virtuelles installées sur des ordinateurs portables. C’était la grande époque de VMware, rapidement acquis par l’un des géants de la high-tech, EMC. Le principe de la virtualisation, c’est de faire fonctionner, dans un espace plus ou moins étanche, un système d’exploitation similaire ou complètement différent à son système hôte, quelle que soit la technologie utilisée, Unix, MacOS, Windows. On crée des « machines virtuelles », qui utilisent les mêmes ressources (clavier, écran, mémoire ou disque dur). Seul hic : il fallait pour cela disposer d’une « image » disque qui crée ce nouvel environnement.

Avec Docker, on aborde une approche encore plus subtile de la virtualisation. On peut faire fonctionner un, deux, ou plusieurs environnements virtuels qui utilisent la même technologie. On peut ainsi ouvrir plusieurs Linux ou plusieurs MacOs sur le même appareil. L’intérêt, c’est qu’on peut, sur chaque instance, faire fonctionner des logiciels différents. Mieux, la plupart des logiciels libres disposent d’images Docker qu’on peut installer à l’aide d’une commande simple (docker pull).

La puissance de cette approche est particulièrement incroyable. Sans avoir besoin de passer des heures à télécharger, installer et configurer des logiciels complexes comme des bases de données, je peux les installer et les lancer en un clien d’oeil (docker pull, docker run). Je peux ainsi faire fonctionner plusieurs bases de données, les démarrer ou les arrêter, à la demande.

Graph DB

Puisqu’on parle de bases de données, profitons en pour faire un détour du côté des dernières évolutions. J’avais fait mes premiers pas chez Dassault en portant un système de gestion de données techniques basé sur DB2 puis Oracle, d’un environnement mainframe vers un environnement Unix. Des SGBD relationnels, donc.

Puis j’ai eu mon époque Ekoz Technology. Ouzi Koskas avait conçu une technologie vraiment révolutionnaire (du moins à l’époque où il l’avait imaginée, dans les années 90), qui permettait de réaliser des jointures avec une complexité de l’ordre de nLog(n) (et non n2 comme pour les SGBD concurrents) ce qui était tout bonnement incroyable dans le contexte où nous l’avions testée.

Depuis, j’ai vu passer d’autres évolutions des bases de données. Mais celle qui me semble réellement la plus structurante, c’est l’invention des bases de données orientée graphes, où le problème du coût de la complexité algorithmique des jointures est éliminé par une représentation des données sous forme de graphes. Autrement dit, une sorte de base de données objet où les données pointent les unes vers les autres. Au lieu de réaliser une jointure, il suffit désormais de parcourir des listes de pointeurs. Vous imaginez le gain de performance…

ChatGPT

J’ai déjà évoqué ChatGPT à plusieurs reprises sur ce blog. Cet outil d’IA est tellement bluffant, qu’il me semble parfois qu’il est capable de passer le test de Turing, tant ses réponses semblent avoir élaborées par un être humain. Sur certains domaines, certes, j’ai pu apprécier le niveau d’enfumage qui se cache derrière une telle arrogance dans sa manière de répondre et d’argumenter, tout en reconnaissant souvent s’être trompé… C’est ainsi, tel un dragueur de haut vol, ChatGPT répond avec l’applomb de celu iqui ne sait rien mais a un avis sur tout.

Mais s’il y a un domaine où les réponses de ChatGPT valent de l’or, c’est bien en informatique. J’ai pu faire le test à plusieurs reprises ces derniers mois, c’est tout bonnement magique. On lui expose un problème qu’on cherche à résoudre, en expliquant bien le contexte et les outils qu’on souhaite utiliser, et le rout est joué.

En voici un exemple simple et très académique. J’ai demandé à ChatGPT d’écrire un programme Python qui calcule le coefficient binomial (sans lui donner la formule), et sans utiliser la librairie mathématique de Python. Voici le résultat, simple et propre.

Certainly! You can compute combinations without using the `math` library by manually implementing the combination formula. Here’s an example Python program:


def factorial(num):
    if num == 0 or num == 1:
        return 1
    return num * factorial(num - 1)

def compute_combinations(n, k):
    if n < 0 or k < 0 or k > n:
        return "Invalid input: n and k must be non-negative, and k must be less than or equal to n."

    result = factorial(n) // (factorial(k) * factorial(n - k))
    return result

if __name__ == "__main__":
    # Example usage
    n = 5
    k = 2

    combinations_result = compute_combinations(n, k)

    print(f"C({n}, {k}) = {combinations_result}")

In this version, the `factorial()` function is a recursive function that calculates the factorial of a given number. The `compute_combinations()` function then uses this factorial function to compute combinations without relying on the `math` library. Replace the values of `n` and `k` with the desired integers. Ensure that the values are non-negative, and `k` is less than or equal to `n`.

Il y aurait probablement matière à poursuivre cette liste avec d’autres outils apparus ces dernières années, évoquer l’omniprésence du Cloud (GCP, Azur ou AWS), l’essor de l’IA désormais à porté de mains du plus simple développeur, sans parler de la piste du NoCode, chère à certains de mes lecteurs. Je vous laisse mettre en commentaire les technologies qui, selon vous, auraient eu leur place dans cette liste…

Cet article vous a plu ? Pourquoi ne pas le partager ?