jeudi 27 août 2009

Un, plusieurs, et le chaos

J'aime bien programmer, mais j'aime bien raler aussi. C'est mon cote francais. Et ca ne s'arrange pas avec l'age. Pourtant, au fond, je suis tres pragmatique et positif, et je ne critique qu'avec l'espoir, sans doute naif, qu'on pourrait faire mieux. (Je tente de repousser aussi loin que possible le petit soupcon qui me suggere que les problemes, ils ne sont pas ailleurs, ils sont... chez moi. Soupcon indelicat qui coexiste avec le secret espoir que quelqu'un me dira, mais non, il n'y a pas de probleme, regarde... et le monde s'illuminera.)

Une des nombreuses choses qui me posent probleme quand je fais des petits programmes, c'est les structures de donnees, qui ne sont jamais exactement ce que je voudrais, et dans lesquelles tres rapidement je m'embirlificote comme dans du spaghetti.

Oui, je suis eternellement reconnaissant pour la magie des tableaux et des hachages. Je peux faire pas mal de choses tres vite avec ca. Je suis reconnaissant aussi pour l'elegance et la simplicite du format YAML, qui permet presque le DWIM des donnees. Mais, parfois, je me sens carrement ingrat et frustre, parce que je veux faire des choses tres simples, et apparemment c'est pas si simple, et je ne comprends pas pourquoi.

Voici donc deux problemes elementaires que j'ai avec les structures de donnees elementaires:

1. $=@ Pourquoi la difference fondamentale entre une chose et plusieurs? Entre un scalaire et une liste? Genre, j'ai une bille dans ma poche, OK cool, c'est un scalaire. Mais si j'en ai deux, alors c'est completement different! C'est une liste, enfin un tableau, enfin une structure d'un niveau d'abstraction superieur, avec un comportement completement different. Bref il y a une espece de impedance mismatch entre le cas un, qui est tout de meme tres courant, et le cas plusieurs, qui est le cas general, mais qui survient parfois quand on ne s'y attend pas. Genre, j'ai un permis de conduire, evidemment, je n'en ai qu'un. Ah ben non, je suis parti vivre a l'etranger, maintenant j'en ai deux. C'est completement different, je n'ai plus un permis, j'ai un ensemble de permis de conduire! Tout change! Le policier ne me dit plus: "Votre permis, SVP." mais "L'un de vos permis, SVP." Et moi je lui reponds, "Je ne sais pas quel permis vous donner." Bref c'est penible de devoir tout changer dans mon programme pour une raison aussi triviale que le passage de 1 a 2. Je ne sais pas quelle tete aurait un langage qui ne ferait pas de difference fondamentale entre un et plusieurs, enfin pas plus de difference entre 1 et 2 qu'entre 2 et 3. Je sais juste que parfois ca serait bien pratique.

2. @=% L'autre truc qui me navre, c'est le fait qu'un hachage n'est pas ordonne. Tres pratique, le hachage, pour acceder a mes donnees. Mais qui a decide que le prix a payer pour ca c'est de melanger toutes mes donnees? Pourquoi me condamne-t-on a l'irreversible? Oui, l'entropie existe. Mais si je range des livres sur une etagere, je m'attends a les retrouver dans le meme ordre le lendemain. Cette insistance pour jeter a la poubelle l'ordre sous pretexte qu'on utilise un certain algorithme de stockage des donnees me parait nuisible dans la plupart des cas. Par defaut, l'ordre devrait etre preserve. Les ordinateurs sont tres doues pour ca. Le desordre devrait etre un choix delibere qu'on ne ferait que dans quelques cas d'optimisation des performances. A mon avis, dans la plupart des cas, on serait tres contents de garder l'ordre.

Ha. ca me fait penser, dans le genre, truc debile avec l'informatique qui existe depuis toujours et dont on est seulement maintenant en train de se defaire: l'idee que tant qu'on a pas fait "Sauvegarder", on a tout perdu. Excuse-moi, cher ordinateur, mais quand je travaille, je m'attends a ce que les choses restent, pas a ce qu'elles disparaissent parce que j'ai oublie de dire, "Ah oui, ce truc sur lequel je travaille depuis une heure? En fait j'aimerais le garder." Cher ordinateur, c'est toi qui as une memoire photographique et quasi infaillible, pas moi. Alors oui, je suis reconnaissant que, avec un ordinateur, contrairement a une feuille de papier, si je souhaite tout effacer, je peux le faire sans difficulte et recommencer avec une page blanche. Cela dit, merci de ne pas faire ca par defaut et sans rien me demander, ok? Et non, c'est pas une question intelligente, quand je ferme le programme apres une dure journee de travail, de me dire: "Vous ne m'avez pas dit de garder votre travail, voulez-vous que je le jette a la poubelle?" Quand les robots deviennent nos infirmieres, j'espere ne jamais en entendre un me dire: "Vous ne m'avez pas dit que vous souhaitiez rester vivant. Souhaitez-vous que je vous tue?"

1 commentaire:

  1. À propos de 1., sur la regrettable discontinuité entre 1 et plusieurs, en relisant l'excellent Higher-Order JavaScript de Sean Burke, je crois comprendre que la liste est justement un intermédiaire entre le scalaire et le tableau. La liste Perl permet, dans certains cas, d'éviter de devoir se poser la question idiote: "Est-ce que ce que j'ai dans la poche est de type unique, ou est-ce de type plusieurs?" Si une fonction retourne une liste, en Perl, on peut traiter le résultat comme un élément unique en se posant moins la question de l'éventuelle multiplicité.

    En Perl,
    push @wad, splice(@things, 0, 1);
    fait ce qu'on veut, mais l'apparent équivalent Javascript
    wad.push( things.splice(0,1) );
    nous donne un tableau avec un élément qui est un tableau de un élément, berk!

    RépondreSupprimer