Plongée du ciel dans les profondeurs
Pour manger, j’écris des programmes en SQL pour modifier le comportement interne d’un outil qui génère du SQL. Le SQL est lui-même un langage de quatrième génération destiné à masquer à l’utilisateur l’organisation interne d’une base de données et à lui faire croire que tout est soigneusement rangé dans de jolies tables bien ordonnées.
Cette base de donneés s’appuie sur un système d’exploitation (OS) qui ne lui présente que de la mémoire et du disque, la place exacte en mémoire ou sur disque n’étant connue que de l’OS. D’ailleurs, une partie de la mémoire est en fait sur le disque, et une partie du disque est chargée en mémoire.
Le système d’exploitation fonctionne à partir d’un disque dur qui a un cache mémoire, et ment à l’OS sur sa structure interne (cylindres, secteurs...) en faisant sa propre petite sauce, histoire d’obtenir de bons benchmarks et de bien se vendre, et accessoirement de ne pas corrompre les données qu’on lui confie.
Stratosphère
Remontons. Le SQL, qui était à l’origine conçu pour une communication facile entre l’être humain non spécialisé et la machine, n’est plus considéré que bon que pour des développeurs. (On pensait pourtant autrefois donner directement à l’utilisateur final le droit d’attaquer les bases de données en SQL, mais l’expérience montre qu’il vaut mieux y avoir toujours un informaticien, de formation ou de tournure d’esprit adéquate, pour parler à un ordinateur, même avec un langage prétendument naturel mais forcément impitoyablement strict et logique.)
La structure réelle des tables et leur agencement, et le SQL, sont alors masqués par un logiciel de type Business Objects [1], qui n’offre plus au non-informaticien que des « Dimensions » et « Indicateurs » qu’il copie-déplace au sein de tableaux évoquant un Excel gavé d’anabolisants. Là, l’informaticien s’est éclipsé après avoir créé l’« univers », qui consiste surtout à donner un sens au fatras de tables, liaisons et clés étrangères de la base de données.
Ces dimensions et indicateurs servent à l’élaboration de « tableaux de bord », rassemblant sous forme synthétique (c’est-à-dire avec des carrés verts et des clignotants rouges disposés avec un goût très sûr de gamin de maternelle) les informations précédemment remontées.
On plane pas un peu haut ?
Je n’ose pas compter le nombre de cycles CPU destinés à simplement interpréter la manière dont les données sont organisées au sein de toutes ces strates, et à faire communiquer toutes ces entités (chacune avec ses structures de données, ses contraintes de sécurité...) et le comparer à celui nécessaire à la récupération et à l’affichage.
Quand M. Durand de la comptabilité mitonne son rapport, Business Objects le réexprime en SQL, traduit par la base en requête d’accès à des tables, donc à des blocs de sa mémoire, que l’OS va aller chercher un peu partout, notamment sur le disque dur, lequel traduira les requêtes en lectures physiques. Et encore, j’oublie toute la circuiterie, je ne connais rien au Northbridge ni au fonctionnement interne du processeur (lui-même segmenté en unités logiques).
Évidemment, simplifier radicalement le système reviendrait à enseigner à Business Objects, sinon à la couche affichage de Windows, voire à la carte graphique, à récupérer les données directement sur les secteurs du disque dur. Cela va totalement à l’encontre des approches « diviser pour régner », « chacun son métier », “best of breeds”, « à chaque type de tâche son programme dédié », etc... qui ont fait le succès de l’informatique depuis cinq ou six décennies. Rien que creuser et optimiser les relations entre chaque composant pour en tirer le meilleur parti à chaque étage rendrait fou un docteur en informatique.
Ce genre de délire n’est plus guère valable, et encore, que pour les projets fonctionnellement archi-limités aux contraintes de performance très fortes, du genre qu’on ne fait plus guère (à présent, même un téléphone a un système d’exploitation complet). L’esprit humain a ses limites quand à la manipulation de la complexité, et les entreprises quant aux temps de développement : on empile donc les briques de composants testables unitairement et à peu près éprouvés, au moins testables.
Cette accumulation de strates quasi-géologiques n’est pas qu’une nécessité de construction, c’est aussi une conséquence de l’évolution historique des besoins : le SQL permettait enfin d’accéder aux données de manière relativement standard et de les manipuler ; Business Objects les présentait enfin sous une forme exploitable autrement que par des tableaux statiques et des graphiques figés ; les datawarehouses (entrepôts de données) agrégeaient enfin à un niveau humain l’accumulation indécente de ces données ; le data mining permet enfin de trouver les corrélations cachées, etc.
Post-combustion
À raison d’un nouveau niveau d’abstraction tous les dix ans, je me demande à quoi ressemblera le suivant : le regroupement des tableaux de bord de manière dynamique sous forme de « vision de monde », interconnectée avec le fameux web sémantique 3.0 qui n’en finit pas d’imminer ?
Accessoirement, les transformations que j’inflige aux données pour alimenter mon datawarehouse ne sont pas réellement du code, mais des données elles-mêmes stockées dans des tables accessibles par SQL (un fichier aurait été beaucoup moins souple). Ce qui me permet de les manipuler comme des données (d’où la notion de métaprogrammation). À la limite, l’alimentation pourrait s’auto-modifier. Je ne pense pas créer Skynet par inadvertance[2], mais je m’interroge : où cela s’arrêtera-t-il ? Une piste :
Cinquième et Septième Loi de la Programmation informatique (Lois de Croissance) :
La taille d’un programme grandira jusqu’à occuper tout l’espace mémoire disponible.
La complexité d’un programme grandit jusqu’à ce que son concepteur n’y comprenne plus rien.
4 réactions
1 De Dr. Goulu - 10/07/2007, 09:53
intéressante réflexion. quelques éléments pour la compléter :
1) la mémoire disponible sur disque a toujours été plus vaste que la mémoire vive (RAM) adressable par le CPU, jusqu'à aujourd'hui. Les processeurs 8 bits (16 d'adresse) étaient limités à 64Kb de RAM, les 32 bits à 4 Gb, les 64 bits actuels à 16 exabyte, plus que toute la RAM produite jusqu'ici !
2) les bases de données servaient à stocker des informations prenant trop de place pour tenir en RAM. Elles n'ont plus cette justification sur des machines 64 bits : des "structures de données" classiques (en RAM) couplées avec le mécanisme de mémoire virtuelle permettent de stocker les données de manière plus efficace, plus souple et aussi sure.
3) les débits réseau commencent à approcher les débits disque disponibles il y a quelques années. Le disque dur devient peu à peu un cache du réseau. Preuve : quand on télécharge un logiciel, on le garde quelque temps, mais si on en a besoin quelques semaines plus tard, on le re-télécharge sans hésiter.
4) la hierarchie mémoire (caches CPU, Ram, disque) devient en fait un gros système de cache du réseau, qui contient l'Information (avec I majuscule), distribuée, redondante, souvent incohérente ...
5) les "systèmes d'exploitation" qui se basent sur les faits ci-dessus s'appellent les SASOS : "single address space operating system". L'idée est que tous les processeurs tournant sous un SASOS partagent le même espace mémoire (de 16 exabytes) tout comme les 2 coeurs de votre Core DUO partagent la même RAM dans votre PC. Sauf que là, on aurait des millions de coeurs, offrant une énorme puissance de calcul distribuée... Il existe des protos de SASOS, mais l'obstacle sur lequel ils butent est la sécurité : comment empêcher la corruption volontaire ou involontaire des données ? Des mécanismes de protection de la mémoire sont en train d'être mis en place au niveau des processeurs (bit NX pour Non-eXecutable d'Intel)
6) les couches d'abstraction sont nécessaires pour les raisons évoquées dans l'article (accès par des langages et outils de haut niveau sans avoir à tenir compte de l'implémentation) mais aussi pour la sécurité qui exige d'empêcher un utilisateur de pouvoir corrompre les données. SQL permet de corrompre des tables, mais pas de crasher le système d'exploitation (en principe...), alors que l'application, avec sa jolie UI en couleurs, est surtout là pour empêcher l'utilisateur final de faire ce que l'administrateur de la base a le droit de faire.
7) le coût en performance des couches d'abstraction est négligeable car nos CPU ne font rien au moins 90% du temps, et surtout le temps d'accès aux données (sur disque) est tel qu'il vaut la peine de faire pas mal d'optimisation (qui ne coute que des cycles CPU) pour minimiser les accès disque.
A l'époque de Terminator 1, je pilotais un robot par des Transputers, des processeurs interconnectés par des lignes série rapide... Donc je pense qu'on va faire un Skynet comme dans le film. Sans s'en apercevoir....
2 De Jid - 10/07/2007, 15:05
Addendum à la 7ème loi: un programmeur qui modifie un programme (qu'il n'a pas conçu) le complexifie de façon à ce que même le concepteur devienne un simple programmeur sur son propre programme.
3 De Steve Schnepp - 10/07/2007, 19:17
Attention toutefois aux strates, elles fuient toujours de quelque part : www.joelonsoftware.com/ar... .
4 De Le webmestre - 10/07/2007, 20:55
Dr Goulu : Bonnes remarques !
1 et 2) Je me demande comment on va faire quand les machines n’auront plus que de la RAM, même à plusieurs niveaux (avec les disques durs sur mémoire flash, le moment est proche...)
3) Oui, tout finit sous forme de cache de quelque chose d’autre. On pourrait dire que déjà notre ordi n’est qu’un cache pour l’accès à Internet pour certaines applis.
Cependant, si les débits réseau commencent à approcher ceux des vieux DD, les applis, elles, consomment des données de plus en plus rapidement aussi.
5) Et les problèmes d’upgrade, de virus ? Miam...
6) Bien vu ! Je me posais juste du côté du développeur et avais négligé cet aspect. 7) Trop de CPU ? Dans le cas général, pas de problème, c'est bien pour ça que l’eye candy est supportable en bureautique. Mais dans le domaine du brassage de données ici évoquée, mouais. Quand j’empile BO et Oracle, le CPU est à fond (faut dire que BO est très microsoftien dans ses besoins en ressources.)
À propos de Terminator : j’avais justement beaucoup aimé la remarque dans le troisième opus sur l’inéluctabilité de Skynet quelle que soit la technologie... Un peu comme le thème de la Singularité.
@Jid : Oui, j’ai connu ça aussi. Revenir sur un programme qui a été maintenu par d’autres, c'est comme revoir un enfant qui a grandi après un bout de temps. Tiens, il sait faire ça maintenant... À la fois le même et différent.
Steve : Très bon lien !!! En résumé, les abstractions et l’empilage des couches a ses limites... mais dans le cas général, est-ce un si gros problème ? L’exemple du TCP est bon : la couche en dessous est faillible, et il s’en sort (en général) bien. J’avais lu quelque part qu’un bon développeur doit connaître son outil, bien sûr, et la couche en dessous. Ai-je besoin de connaître le microcode du dernier Intel pour compiler un datawarehouse ?