Évolution du
logiciel
21 novembre 2003
Les
progrès du logiciel concernent les langages de programmation, systèmes
d'exploitation, interfaces utilisateur et outils de développement. Ils sont déterminants
pour la pénétration des ordinateurs dans les activités industrielles ou
intellectuelles.
Le
coût de production du logiciel diminue plus lentement que celui du matériel.
L'enjeu du coût du logiciel, jugé mineur aux débuts de l'informatique, est
ainsi devenu primordial.
Langages
Selon
la thèse de Church-Turing,
« tout langage de programmation non trivial imaginable est capable de calculer
ni plus ni moins de fonctions qu'un autre langage de programmation non trivial » :
tous les langages non triviaux sont donc équivalents à une machine de Turing.
Cependant il ne faut pas surestimer la portée de cette équivalence : un simple câble, un
pont de lianes et le pont de la Concorde permettent tous trois de traverser la
Seine mais pour utiliser le premier il faut être un funambule, le
second exige une bonne forme physique, seul le troisième est vraiment commode.
Dans le domaine des langages, la qualité et la commodité résident dans les
outils de contrôle de programmes et de
programmation.
L’évolution
des langages de programmation est motivée par la recherche de la productivité
du programmeur et de la qualité des programmes (aides à la documentation et à
la gestion de configuration). Les besoins ne sont pas les mêmes selon que
l’on considère le programmeur occasionnel, qui écrit un petit programme de
temps à autre pour résoudre un problème « pointu », et le
programmeur professionnel qui participe à un travail d’équipe à temps
plein. Le premier pourra souvent se tirer d’affaire avec Excel, qui est plus
un outil qu’un langage de programmation,
ou il préfèrera utiliser un langage comme Scheme (dialecte de LISP) dans
lequel il est relativement facile d’expliciter la logique d’un problème ;
le second préfèrera C++ ou Java, langages adaptés à la production
industrielle de gros programmes.
Chaque
programmeur a des habitudes auxquelles il est attaché. Les discussions sur les
mérites comparés des divers langages sont souvent futiles car chaque
langage est adapté à une situation particulière. Il importe, d’ailleurs, de
savoir de qui et de quoi il s’agit lorsque l’on parle de programmation :
entre un grand logiciel et le petit programme que l’on développe soi-même il
existe la même différence qu’entre l’industrie automobile et le bricolage
domestique : tous deux, certes, utilisent les procédés de la mécanique
mais pas avec la même organisation, ni les mêmes outils, ni les mêmes résultats.
Classification
des langages de programmation
On
peut classer les langages de programmation selon quatre approches qui se sont
succédées dans le temps et qui ont chacune réclamé un effort intellectuel
intense :
Les
langages « impératifs » comme Fortran, Cobol ou C visent à
piloter le processeur en obéissant à sa définition logique et physique.
Les
langages « structurés » comme Pascal ou Turbo Pascal visent à
assister le fonctionnement mental du programmeur en l’incitant à documenter
sa démarche et à éclater le programme en petits modules lisibles (pas plus
qu’une page d’écran) et intellectuellement maîtrisables.
Les
langages « fonctionnels » comme LISP visent à faciliter la mise
en forme d’un raisonnement.
Les
langages « objet » comme Smalltalk, C++ ou Java, visent à simuler
le fonctionnement de la « chose » concernée par le programme,
qu’il s’agisse de clients dans une file d’attente, de relations
commerciales dont on suit le « cycle de vie » entre commande et réception
de la livraison, de dossiers administratifs parcourant un « workflow »
le long duquel ils doivent rester « traçables ».
Chacune de ces approches correspond à une étape
dans la maîtrise de la complexité des programmes.
On
voit venir une quatrième approche : celle qui structure les processus de
travail d’une entreprise en mettant au centre de la conception du système
d’information le couple « être humain organisé + automate
programmable doué d’ubiquité » associé à la maîtrise de la qualité
des données. Elle articule un langage de modélisation du métier comme UML,
un langage de programmation objet comme Java, un « middleware »
conforme à l’architecture Corba,
une base de données comme Oracle, une organisation des processus en « workflows »,
des « Web services » etc.
Évolution
Au
début de l'informatique, le coût de la programmation n'était pas critique. Si
une machine coûtait 10 millions de francs, il n’était pas choquant que son
logiciel coûtât 1 million de francs. Si la durée de vie du matériel était
de dix ans, on admettait que le développement du logiciel prît deux à cinq
ans. Mais la baisse rapide du coût des matériels a rendu critique le coût des
logiciels.
Si
l’on utilise la méthode des points de fonction pour mesurer la productivité
du logiciel,
on trouve la courbe suivante sur les cinquante dernières années. Elle montre
que le coût de production du logiciel a baissé depuis cinquante ans d'environ 4 % par an :
Le
prix du logiciel pour l’utilisateur s’obtient en divisant le coût de
production, augmenté de la marge du producteur, par le nombre de ses
utilisateurs : or ce nombre croît en fonction directe du nombre des
ordinateurs et du nombre de logiciels par ordinateurs et en fonction inverse du
nombre de logiciels offerts sur le marché. Il faut tenir compte aussi du
monopole de fait acquis par certains produits comme le système d’exploitation
Windows ou le traitement de texte Word de Microsoft sur le marché des logiciels
pour PC.
Dans
les entreprises, le Cobol représente 80 % du logiciel produit depuis 1960. Il
existe encore un million de programmeurs Cobol dans le monde. Ils se consacrent
à la maintenance du stock de programmes écrits dans ce langage.
Les
langages objet, plus récents (C++, Java) n'augmentent pas sensiblement la
productivité des développeurs (le coût de la conception initiale est plus élevé,
et la programmation en langage objet ne peut porter ses fruits que si les
programmeurs travaillent selon une méthode très rigoureuse) mais ils
facilitent l'évolution des logiciels et permettent de réduire leur coût de
maintenance. Le coût de maintenance du logiciel traditionnel est dans les premières
années de l'ordre de 10 à 15 % du coût du développement et il tend ensuite
à croître ; on estime qu’il convient de refaire le logiciel à neuf
lorsque le coût de maintenance atteint 30 % du coût de réfection. Avec les
langages objet, la maintenance est moins coûteuse et l'évolution, plus aisée,
permet d'éviter les réfections.
Par
ailleurs les outils de développement visuels (interfaces graphiques, générateurs
de programmes) accroissent la productivité dans un rapport de 1 à 5. Ces
outils, d'abord dédaignés par les « vrais programmeurs » adeptes de C ou de
C++, permettent de produire les lignes de code en manipulant icônes et menus.
Grâce à une plus grande facilité de création ou de modification la
programmation « à la souris » gagne du terrain.
Le
programmeur du futur s'appuiera sur des outils visuels, des techniques objets et
des bibliothèques de composants. Ainsi, et en rupture avec les tendances antérieures,
il se peut que la baisse du coût des logiciels accélère dans les prochaines
années.
Les
orientations du marché sont d’ores et déjà lisibles. Le graphique
ci-dessous montre l’évolution des offres d’emploi pour les programmeurs
entre février 1999 et mai 2000 aux Etats-Unis, classées par langage demandé ; elle montre la
croissance rapide des langages objet (C++ et Java), la montée de Perl, Java
Script et Visual Basic, ainsi que la perte d’importance du Cobol.
|