Quelques réflexions un peu en vrac sur l'utilisation de l'intelligence artificielle pour le développement logiciel.
Commençons par être très clair: je suis pour l'arrêt total et immédiat de tous les développements et utilisations d'intelligences articielles (qui n'ont rien avec une intelligence, mais assurément tout avec l'artificialité), que ce soit pour le développement logiciel ou n'importe quelle autre activité, notamment, mais pas seulement, en raison de leurs coûts énergétique et environnemental.
Cela étant dit, j'entends régulièrement des arguments comme "oui mais c'est pas mal pour démarrer", ou "c'est bien pour les trucs répétitifs", ou encore "c'est intéressant d'essayer quand même".
Tous ces arguments me semblent refléter un désattrait pour l'activité de développement logiciel, l'idée qu'on était attiré par cette activité et qu'on l'appréciait mais qu'une certaine lassitude prend le dessus, et que l'IA permettrait de continuer mais sans les aspects pénibles comme les parties répétitives à coder, la recherche d'exemples ou de la bonne fonction dans la documentation.
Ces parties de l'activité du développement logiciel sont pourtant importantes. Du code répétitif est souvent le signe qu'il faudrait une abstraction, un mini-langage dédié pour permettre une description de plus haut-niveau afin de n'avoir à fournir que l'information nécessaire sans tout le gras répétitif autour. Parcourir la documentation et des exmples est l'occasion de découvrir des fonctions et des manières de faire différentes, autant d'occasion d'enrichir ses pratiques, ce que ne permet pas un générateur basé sur une IA, encore moins s'il s'adapte à votre style de programmation pour reproduire vos tics et tocs.
Si on n'a pas envie de se taper l'écriture d'une partie du code, c'est peut-être que le langage n'est pas adapté ? C'est peut-être l'occasion d'en découvrir et utiliser un autre ? Ou bien qu'il manque la bibliothèque avec l'API qui va bien, et dans ce cas pourquoi ne pas écrire cette dernière pour qu'elle serve aussi à d'autres ?
La réponse la plus courante à ces questions sera sans doute que ça prendrait du temps, du temps qu'on n'a pas parce qu'il faut que le développement avance. Il est possible aussi de se dire qu'on n'a pas envie de consacrer du temps à cette partie.
Je peux comprendre le manque d'envie de passer du temps sur un aspect du code, ayant moi-même parfois dû implémenter des fonctionnalités qui étaient nécessaires mais pas du tout le but d'un développement. Mais c'est l'occasion d'apprendre des choses, d'essayer une nouvelle bibliothèque pour l'appliquer à la solution à implémenter. Et s'il faut implémenter un truc pas intéressant du tout et qui laisse peu de place à la créativité, on peut aussi trouver un certain plaisir à le faire proprement. Par ailleurs, si on lâche l'affaire pour cette partie du code moins intéressante et qu'on la confie à un générateur basé sur une intelligence artificielle, on finira par lâcher l'affaire sur une autre à peine plus intéressante et ainsi de suite jusqu'à finalement faire tout générer, parce que c'est facile et qu'au final on aura perdu le goût du travail, travail étant à prendre ici comme activité de confrontation à la réalité.
L'argument du manque de temps, maintenant, puisque le but de ces générateurs de code est bien d'augmenter la productivité. Pourquoi veut-on développer plus vite ? Ou plutôt qui veut développer plus vite ? Pour satisfaire quels intérêts ? Ces questions sont rarement posées, voire même les poser peut faire passer pour un demeuré, tellement leur réponse est évidente, naturalisée, incorporée: Parce que. Parce qu'il y a de la concurrence. Parce qu'il faut rester dans la course. Parce que le temps c'est de l'argent.
Je veux bien entendre qu'on veuille aller vite par impatience de voir advenir le résultat imaginé, espéré, voir les hypothèses vérifiées, voir les intuitions et les idées de calculs confirmées, mais dans ce cas il me semble que c'est un peu gâcher le plaisir que de confier la tâche à une machine.
Reste donc l'argumentation économique, dominante, sur l'augmentation (supposée) de la productivité. Un jour deux gugusses invités à nous faire entrevoir les bonheurs de la valorisation de la recherche nous expliquaient qu'il fallait surtout être les premiers sur un marché, qu'importe si la première version du produit est boguée, mal fichue, incomplète, ... il faut occuper le marché (et tant pis si ça se traduit par des milliers d'objets rapidement obsolètes qui rempliront les déchéteries). L'IA trouve tout son sens dans cette optique: une idée d'application bidon pour satisfaire un besoin qui n'existe pas encore ? Un petit coup d'IA pour générer une première version, sûrement pas très modulaire, sûrement pas très maintenable ou extensible, mais qu'importe elle est rapidement là, prête à être déployée. Gain de temps, gain d'argent. Promesses de profits, levée de fonds.
Mais pour que ça fonctionne, il faut des données, en l'occurrence des codes sources de logiciels, beaucoup de codes, pour entraîner ces IAs. Ça coûte cher, les données. Mais par bonheur on en trouve plein gratuitement, grâce aux logiciels libres. Encore faut-il pouvoir les trouver facilement, ce qui est le cas grâce aux plateformes de développement centralisées comme Github, Gitlab, mais aussi maintenant grâce à Software Heritage.
Ce qui reste cher, c'est la création d'une intelligence artificielle et surtout son fonctionnement à cause de la place pour les données et la consommation d'énergie. Et si on investit là-dedans, ce n'est pas pour donner le résultat. Non, on va plutôt faire payer le service, c'est normal. On peut donc imaginer la vente de services de génération de code par langage (tant pour du C, tant pour du C++, ...) et une facturation au temps passé pour les calculs. Je suis sûr que des gens réfléchissent à ça et on peut leur faire confiance pour trouver ce qui les enrichira le plus.
Imaginons maintenant un développeur freelance. S'il veut être compétitif face à des clients qui n'y connaissent pas forcément grand chose en développement logiciel, il peut choisir d'investir dans un service d'IA, en espérant que cet investissement se traduise par un gain de temps, donc potentiellement plus de clients servis, donc plus de sous pour lui. A condition d'accepter de devenir dépendant d'un service d'IA, dont les conditions évolueront au fur et à mesure que de plus en plus de clients de ce service deviendront captifs. Corollaire: les développeurs qui n'adoptent pas de service d'IA deviennent moins compétitifs, et sont incités à sauter le pas, même si au passage le métier n'est plus le même.
On trouve donc un cas d'école en économie capitaliste: celui qui investit et se rend dépendant d'un gros fournisseur devient plus compétitif, au détriment donc de ceux qui n'investissent pas dans les mêmes outils. La qualité importe peu dans le calcul économique (dans le sens du travail, c'est évidemment autre chose). Au final, il y a une pression à suivre le mouvement, même si celui-ci détruit la planète. Pour les autres, la marginalisation.
Cette séparation est présente dans bien d'autres domaines, par exemple en menuiserie/ébénisterie on trouve des personnes qui seront plutôt pour n'utiliser que des outils à main, avec peu de consommation énergétique, peu d'investissements, mais un travail plus long, donc des tarifs plus élevés, et des personnes qui misent sur l'investissement dans des machines, consommatrices de ressources pour les produire et d'énergie pour fonctionner, qui permettent de réaliser certaines tâches plus rapidement mais qui au passage uniformisent les pratiques (et la production). Les seconds pourront souvent proposer des tarifs inférieurs, marginalisant les premiers, pour le plus grand bonheur des fabricants de machines.
Bien sûr, il faudrait nuancer tout cela, les générateurs basés sur des IAs ne peuvent pas tout faire et répondre à toutes les demandes, mais la tendance est là, et là aussi sont les espoirs des capitalistes qui comme d'habitude espèrent pouvoir piller un bien commun, les logiciels libres, pour le transformer en profits privés, tout en détruisant au passage un peu plus la planète et la santé mentale des travailleurs.
Pour conclure sur l'utilisation de l'IA dans le développement logiciel, cette tendance à vouloir avoir le résultat mais en en faisant le moins possible, quelque part en n'en payant pas le coût, n'est pas réservée à cette activité, mais me semble généralisée: qu'on en juge par tous les smart gadgets et autres applications censées soulager l'utilisateur de tout ce qui lui est présenté comme un fardeau pour qu'il puisse se concentrer sur... quoi exactement ?