RECHERCHE :
Bienvenue sur le site de Michel VOLLE
Powered by picosearch  


Vous êtes libre de copier, distribuer et/ou modifier les documents de ce site, à la seule condition de citer la source.
 GNU Free Documentation License.

É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[1]

Selon la thèse de Church-Turing[2], « 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[3] : 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[4], 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[5], 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[6], un langage de programmation objet comme Java, un « middleware » conforme à l’architecture Corba[7], 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[8], 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é[9] ; 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[10].


[1] Ravi Sethi, Programming Languages, Addison Wesley, 1996

[2] Alan W. Biermann, Great Ideas in Computer Science, MIT Press, 1997.

[3] David Harel, Algorithmics, Addison-Wesley, 1993.

[4] Michèle Soria, Michelle Morcrette, Anne Brygoo et Odile Paliès, Initiation à la programmation par Word et Excel, Vuibert 1998.

[5] « Bob Barton, the main designer of the B5000 and a professor at Utah, had said (…): « The basic principle of recursive design is to make the parts have the same power as the whole ». For the first time I thought of the whole as the entire computer and wondered why anyone would want to divide it up into weaker things called data structures and prodedures. Why not divide it up into little computers, as tims-sharing was starting to ? But not in dozens. Why not thousands of them, each simulating a useful structure ? » (Alan Kay, « The Early History of Smalltalk », History of Programming Language II, Addison Wesley, 1996, p. 516).

[7] « Common Object Request Architecture »

[8] Source : Jean-Paul Figer, op. cit., http://www.figer.com/Publications/evolution.htm

[10] Il s’agit d’offres d’emploi, donc de données de flux ; le Cobol reste majoritaire dans le stock des emplois de programmeurs.