Il semblerait que je persévère dans la continuité émergente de ce blog : moins d'article sur les interfaces, et plus sur les langages -- ce qui curieusement, ne reflète absolument pas ce que je fais au quotidien. Cela dit, je pense qu'il y a ici l'occasion de jeter un pont entre ces deux domaines, grâce au design...
Je profite de l'ébullition qui se produit actuellement autour de Arc, et notamment de la réponse de Paul Graham "Take the Arc challenge" pour vous faire part de mes impressions... non pas sur le langage lui-même, mais sur le fait d'être la personne qui conçoit le langage : le "designer".
Si je parle de "design" ici, plutôt que de conception, c'est pour mettre l'accent sur le fait que Arc a réellement été conçu avec des valeurs fortes, par opposition à quelque chose qui a été pensé ou plutôt "intuitionné" et ensuite qui a évolué de manière organique. En regardant plus en détail le (vaste) ensemble des langages existants, on se rend compte assez rapidement qu'une bonne partie manque de principes de conception clairs -- ce qui témoigne de l'absence d'une volonté de design.
Bref, ce n'est manifestement pas le cas de Arc, et Paul Graham a même pris l'occasion d'exprimer plus en détail sa vision dans son dernier article. Petits extraits:
(...) I worked on things that would make programs shorter. Why would I do that? Because making programs short is what high level languages are for. It may not be 100% accurate to say the power of a programming language is in inverse proportion to the length of programs written in it, but it's damned close. Imagine how preposterous it would sound if someone said "The program is 10 lines of code in your language and 50 in my language, but my language is more powerful." You'd be thinking: what does he mean by power, then ?
et plus loin
This is not to say none of the stuff I did was hard. Some of it seemed hard to me. But in language design, solving problems, whether hard or easy, is not the goal. Making a good language is. The real test of Arc—and any other general-purpose high level language—is not whether it contains feature x or solves problem y, but how long programs are in it.
Ce qui résume relativement bien un aspect qui est souvent peu considéré : un langage n'est pas essentiellement quelque chose de technique, mais bel et bien un mode d'expression (et j'ajouterais : un mode d'expression qui structure la pensée en retour). Comme le rappelle Paul Graham en début de son article : chacun semble avoir son opinion à propos de Arc, et la plupart des premières réactions on été primaires et plutôt négatives... une des raisons étant qu'il faut du temps pour apprendre le langage et le pratiquer ; ce n'est donc que plus tard que des remarques "plus constructives" pourront émerger.
Ceci m'amène finalement à ce que je voulais vraiment dire dans cet article (hormis de sensibiliser mon lectorat - qui n'en a sûrement pas besoin - au concept de design de langage) : lorsque l'on fait (vraiment) du design, on essentiellement fait des choix qui ne sont pas des conséquences de contraintes techniques, mais des choix qui vont donner le coeur et la chair de ce que nous allons créer.
Bien souvent, ce coeur et cette chair ne s'expriment pas directement, et la forme l'emporte sur le fond dans l'esprit des gens : chacun a toujours quelque chose à dire sur la forme (et croyez moi, vous le voyez tous les jours quand vous bossez dans l'interface graphique
mais très peu de gens sont capables de comprendre qu'il y a un fond... et dans ce cas restent en général très prudents en s'exprimant par rapport à lui.
Bref, être un designer n'est pas quelque chose de facile, parce que l'on met beaucoup de nous même dedans. Nous mettons beaucoup de choses qui ne sont pas le fruit d'une démarche problème -> solution, nous essayons plutôt de créer un esprit, de "donner une âme" aux choses si je puis dire.
Lorsque j'ai fait ma license de design, j'étais ingénieur en logiciel depuis deux ans... et j'ai vraiment compris que pratiquer l'ingénierie avait quelque chose de réconfortant : c'est un peu comme une série de puzzles logiques, où il y a certes beaucoup de solutions, mais où la part de créativité que l'on peut investir fait justement partie de ce fond invisible qui ne préoccupe pas tant les gens. Au final beaucoup de satisfaction (les puzzles assemblés) et peu de frustration (personne pour manifester son désaccord sur la forme).
Pour le design, c'est vraiment différent : on se retrouve littéralement à nu devant les autres, et il faut avoir le coeur bien accroché pour ne pas se laisser démonter par des critiques qui tiennent (bien souvent) plus du réflexe que d'une tentative de compréhension. Nos profs nous ont heureusement entraîné tout le long en nous confrontant à ce genre de situation, mais il reste que c'est quelque chose de vraiment éprouvant, car il n'y a pas d'abri possible : quelque chose que l'on a designé vient du fond de nous, et ne pas la comprendre, ou la remettre en question nous affecte directement en conséquence.
Bref, Paul Graham est quelque part victime de son succès : c'est quelqu'un de connu, et il a visiblement beaucoup investi de lui-même dans Arc... et peut-être n'était-il pas encore complètement prêt à entendre tant de critiques abruptes.
En tout cas, pour vous remercier d'avoir lu cet article jusqu'au bout, je vous invite à regarder ce fil de discussion où vous trouverez des versions dans beaucoup de langages d'un même programme... c'est très très intéressant de regarder les exemples de code en se demandant "quel est l'esprit de ce mode d'expression" ?
