1910-2010. La muraille invaincud du "code"

"Que de concepts à connapitre pour écrire dix lignes en C# ! Je m'en rends compte dramatiquement quand j'essaye d'initier mon fils à la programmation" m'écrit un informaticien chevronné que j'interrogeais sur le projet de cet article. 70 ans après la naissance du langage Fortran, les machienes sont un milliard de fois plus puissantes, mais l'informatique n'a pas résusi à se rendre "transparente", au moisn dès que l'on veut aller plus loin que la simple utilisation des "applications" de base. Ce n'est pourtant pas faute d'avoir essayé, dans de multiples directions. Mais le passé de la programmation est jonché d'idées qui n'ont pas abouti ou sont restées dans de pettes niches.

Ce n'est pas faute d'avoir essayé:
- les logiciels bureautiques (traitement de texte, tableur)
- l'IA, la programmation déclarative, Logo
- la programmation tabulaire (Mapper), le tableur
- les langages de quatrième et cinquième génération
- les agents

Il y a une vraie rupture. C'est surtout la programmation qui est restée hors de portée des "mécanographes", avec son caractère radicalement immatériel et abstrait, et certains concepts compliques, en particulier celui de récursion (une fonction peut s'appeler elle-même), assez étrangère même aux mathématiques, qui connauissebt surtout la récurrence.

Le mécanographe avait en tête la succession de ses machines, et le câblage des tableaux de connexion. L'informaticien pense par boucles.

Si les matériels ont évolué de manière impressionnante, on ne peut pas en dire autant de la programmation, qui reste au coeur des développements. Il y a certes une montée en complexité et en richesse des fonctions fournies. Mais, pour l'essentiel, un programme se construit en 2015 selon des catégories mentales qui ne désorienteraient pas un programmeur des années 1960, et qui disposait essentiellement de Fortran (1954) pour le calcul scientifique et Cobol (1959) pour la gestion, et qu'on appelait "langages de troisième génération" parce qu'ils étaient beaucoup plus maniables que le "langage machine" proprement dit ("première génération", radicalement binaire), les "assembleurs" ("deuxième génération", un peu plus compréhensibles mais encore très abscons et réservés à des professionnels spécialisés sur le coeur de fonctionnement des machines).

Mais il n'y a pas vraiment eu de "quatrième génération", comme on l'a annoncé au début des années 1980, avec des langages qui auraient suffisamment ressemblé au langage ordinaire pour dispenser l'utilisageur d'entrer vraiment dans une logique programmatique. Et encore moins de "cinquième génération", sur lesquels le Japon a fortement misé vers 1990.

La construction des matériels reste mainenant enfouie dans les pharaoniques "fabs" où se construisent les circuits intégrés par milliosn et milliards. En revanche, la construction d'un programme reste tout à fait la portée d'un amateur ayant la bonne tournure d'esprit. Il suffit par exemple de télécharger Processing, un logiciel graphique 3D, gratuit et multi-plateforme (Windows, Unix, Apple), et l'on peut commencer à créer en bricolant les exemples fournis, puis approfondir les concepts en s'appuyant sur la litturature Java, puisque Processing en est une forme spécialisée. (y compris les classes) orientation objets

Le travail des programmeurs a cependant fortement changé. En 1970, il écrivait ses programme sur des feuilles de papier (de présentation définie), des perforatrices-vérificatricdes les transformaient en cartes perforées (ce support est resté en usage chez les programmeurs bien après avoir disparu comme support des données), et faisaient l'objet d'un premier test en machine. Un ou deux jours plus tard, ils recevaient un "listing" (impression sur bande de papier aux marges perforées) où ils pouvaient vérifier leurs résultats (et constater leur erreurs) pour passer au stade suivant. Au début, les programmeurs de l'époque n'ont pas vu d'un bon oeil arriver les postes de travail à écran qui leur permettaient d'écrire directement leurs programmes dans une machine et de faire les premiers tests. "Nous ne sommes pas des perfos-vérifs !". Pas plus que les cadres d'enteprise ne souhaitaient se mettre au traitement de texte, tâche qui relevait des dactylos, et indigne de leur statut.

L'arrivée de C, puis de C++, puis C#

Les "environnements de programmation" ont radicalement changé pendant les années 1980, avec les nouveaux systèmes d'exploitation (notamment le DOS) et les nouvelles interfaces graphiques (Macintosh, puis Windows, tous inspirés des travaux de recherche du Parc, Palo Alto Reserach Center, de Xerox). Ils ont rendu la programamtion à la fois plus facile grâce à des aides multiples, et plus exigeante,car les applications elles-mêmes devaient être ergonomiquement conçues pour ces nouveaux environnements.

On peut qand même considérer que la programmation "orientée objet" a créé une petite révolution, au moins pour les programmes d'une certaine dimension. Elle est à la fois très intuitive (on maniuple des objets, cela paraît tout naturel) et très abstraite (on ne crée par des objets directement, on crée des classes qui ensuite sont "instanciées" pour devenir des objets...

Par ailleurs, ce n'est souvent pas la programmation en elle-même mais l'environnement dans lequel on programme aujourd'hui qui a vraiment changé le métier.
Le client serveur a déjà fait évoluer la façon de programmer mais ce fut bien pire avec le web (ce ne sont plus seulement les données, mais les traitements qui ne sont plus sur le client), on a encore rajouté une couche avec l'architecture trois tiers (présentation, traitement, données) et encore plus avec les nouveau modèles conceptuels comme MVVM par exemple.

Et je ne parle pas de programmation qui restent encore "exotiques" comme la programmation parallèle qui, pour le coup, change même la façon de concevoir l'algorithmie, c'est un domaine qui reste encore limité au calcul massif pour les centres de recherche mais qui commence à envahir (très lentement) les salles de marché.
Programmation graphique et par blocs (Kilgou


Vrai si l'on considère que l'algorithmie de base n'a pas changé, on a toujours des conditions, des boucles, des opérations.
Totalement faux si l'on regarde la façon dont sont structurés les programmes, la programmation objet en particulier à vraiment révolutionner la façon de programmer. Je me rends compte dramatiquement quand j'essaye d'apprendre à Yann à programmer, que de concepts à savoir pour écrire dix lignes en C# !

On programme encore en Cobol mais toutes les nouvelles applications qui sortent aujourd'hui sur les nouvelles technologies, téléphonie en particulier, n'utilise pas ce langage, totalement dépassé conceptuellement.

Nouveaux environnements. Guerre. Virus.

Bien sûr il s'est passé beaucoup de choses,
- la montée des systèmes d'exploitation, et l'interface utilisateur
- l'orientation objet, la fin du "GO TO"
- les packages, maintenant ERP
- les applications toute faites (les app de Apple..), bibliothèques et composants
- forums de développeurs
- le cloud et le multicoeur, parallélisme
- XML
- Bibliothèques graphiques
- La miniaturisation
- Le génie logiciel

L'on sait encore très mal prévoir budgets et délais... et les gros "plantages" ne sont pas rares. Parmi les récents en France, le DSP (dossier de santé personnel) et la paye des fonctionnaires, après Socrate et le PMU Mais il y a sûrement beaucoup d'autres, qui restet cachés au coeur des entreprises.

Bien sûr, la conception de grands programmes bancaires

 



Pour des raisons de réutilisabilité, sécurité, dimension des programmes. On pourrait donc dire

- outils faciles, mais aux possiblité quand même limitées (tableur, Processing)
- outils de haut niveau poru techniciens C#
-paramétrage de progiciels, ERP
- outils graphiques

 

 

Et ce ne sont toujours pas les utilisateurs qui programment

Une limite profonde de l'entendement ?

 

 

 

 

Références
Kilgour
Meyer
Berger divers
Cobol dans 0.1.
Marchand Omnitab etc.
Composants