J’ai toujours eu l’impression qu’il y avait beaucoup de musiciens parmi les programmeurs.

Il me parait anormalement courant de constater que tel ou tel collègue fait, ou a fait de la musique. Ou au moins en écoute beaucoup. Genre « Ah tu fais de la musique ? Ah toi aussi ? ».

Dans une mission, il y avait même une guitare disponible à tout moment dans l’open-space, avec pas mal de monde capable de s’en servir, et une bonne part des autres parlant de leurs autres instruments préférés et de leurs aventures musicales plus ou moins récentes.

On ne retrouve pas cela avec les autres formes d’art. Il y a plein de développeurs musiciens, mais des développeurs qui font du dessin ? De la sculpture ? Qui écrivent des romans ? Est-ce qu’on peut voir dans les open-space de devs des feuilles blanches et la gouache, comme on voit des guitares ?

Dans les conférences, on voit souvent des gens qui parlent de générer la musique à partir de code, mais rarement un tableau abstrait (ce serait pourtant facile).

Pendant longtemps, la coïncidence m’a intrigué, sans que j’y prête beaucoup d’attention. Puis au fil du temps, diverses associations d’idées, constatations, rapprochements, me sont venus à l’esprit. J’ai donc décidé de me plonger sérieusement dans le sujet et de noter mes pensées, de façon organisée.

Prog Rocks!

Un mot sur le titre de ce document : il s’agit à la base du titre d’une compilation de rock progressif, un sous genre du rock assez technique, influencé par le jazz et la musique classique, dont Pink Floyd, Genesis, King Crimson ou Yes sont des représentants typiques et célèbres.

Prog est à la base l’abréviation de « Progressive », mais ça marche aussi avec « programmation », et en anglais to rock signifie « être génial », « déchirer » .

Notez : un jeu de mot. C’est un pattern. On y reviendra.

Il y a corrélation

Can you do musical composition or arrangement ?

Do you have a lively imagination ?

IBM

Dans cette publicité de 1956, alors que l’ingénierie logicielle n’existe pas encore vraiment, et que peu en dehors des spécialistes ont jamais entendu parler de programmeurs, et moins encore ont envisagé cette carrière, IBM fait déjà la connexion entre la musique et programmation.

On peut voir aussi dans cette publicité la relation entre la programmation et les mathématiques, ce qui est beaucoup moins surprenant, surtout à l’époque, quand le domaine était encore beaucoup dans le théorique, en tout cas par rapport à aujourd’hui.

Dès les années 50, et même sans doute avant, il était déjà clair (au moins pour les recruteurs de big blue), que les musiciens et les programmeurs avaient le même genre d’esprit.

Dans ma propre vie et carrière, j’ai pu constater qu’il y a beaucoup de musiciens parmi nous. Plus que dans la population générale, et comparativement peu de pratiquants des autres arts, comme le dessin ou la sculpture.

Je n’ai pas vraiment de chiffres Eric Eliott, qui a beaucoup plus de followers que moi, a fait un sondage parmi ses abonnés pour voir combien étaient musiciens. Résultat : quasiment la moitié. Dans un blog, il compare ce chiffre au 30% d’américains qui ont fait de la musique récemment.

De même dans les meetups et les conférences, on voit souvent des sujets autour de la musique.

Par exemple à Devoxx France 2016, Fred Cécilia, qui lieIOT et machine learning pour faire de la musique (c’est d’ailleurs ce talk qui a déclenché la rédaction du présent document – oui je sais la gestation a été longue). Ou encore à Best of Web 2015 la démonstration de l’API Web Audio par les chercheurs de l’Ircam, ou ce meetup de ladies of code dédié à l’interaction code+art.

Musical names

Un autre signe de corrélation : on a souvent des références musicales dans les noms des langages, des librairies, des frameworks.

Dans l’autre sens, l’outil informatique est beaucoup utilisé pour produire de la musique, il suffit de scanner cette page listant les langages de programmation sur le sujet pour s’en convaincre.

Similarité des domaines

En y réfléchissant, la musique et la programmation présentent pas mal de similarités, au niveau de la forme, et au niveau de la démarche.

Le lien ce sont les mathématiques

Il existe un lien évident entre la musique et la programmation : les mathématiques. Les deux domaines ont étés fortement influencés par cette science, voir y puisent leurs origines.

Origines et influences mathématiques de la programmation

Dans la majorité des cas, on fait bien peu de mathématiques dans notre quotidien de développeur. Nous faisons de la plomberie de flux de données, du mapping de propriétés, écrivons quelques règles de logique et de transformation, et affichons tout ou une partie de cela en se battant avec les bugs des navigateurs.

Difficile de rapprocher ce travail des constructions abstraites des mathématiciens.

Pourtant tout le monde, en tout cas parmi ceux qui ont étudié l’histoire de l’informatique et/ou la programmation fonctionnelle, sait que la programmation est un spin-off des mathématiques.

Le mot algorithme vient du nom latinisé du mathématicien perse Al-Khawarizmi. Il a été utilisé par Ada Lovelace, premier(e) programmeur(euse) de l’histoire. Nos programmes sont des cas particuliers de machines de Turing, et nous les exécutons sur des machines avec l’architecture décrite par Von Neumann. A chaque fois que nous écrivons function dans une application node.js, nous faisons référence au lambda calcul d’Alonzo Church.

Origines et influences mathématiques de la musique

Bien sûr on peut modéliser tout l’univers avec des mathématiques, trouver le nombre d’or dans chaque brin d’herbe, appliquer de la trigonométrie sur les triangles de Picasso, etc. Mais on ne peut nier que la musique est un art où les mathématiques sont particulièrement présentes.

La légende raconte que Pythagore, lors d’une promenade près d’une forge, aurait remarqué que la note produite par le choc du marteau sur l’enclume dépendait de la taille de celui-ci, et donc de sa masse. Si on prend des marteaux de 2, 3 et 4 unités de masse, le rapport entre le marteau de 2 et le marteau de 4 est une octave, le rapport entre le marteau de 2 et 3 est une quinte. Dans l’antiquité seuls ces deux intervalles étaient considérés comme assonants (c’est à dire comme sonnant juste). Cette simplicité correspondait très bien à leur philosophie que le monde était régi par les nombres. La musique est « l’art du nombre rendu audible », et longtemps classée parmi les sciences.

Bien sûr les homo sapiens du paléolithique faisaient déjà de la musique bien avant que les grecs n’expliquent le monde par des rapports de nombres. On chantait déjà dans les grottes à la lumière du feu, en s’accompagnant de percussions et en faisant vibrer les cordes d’arc.

Cependant, la culture gréco-romaine est celle qui a donné naissance à la culture européenne. La musique chantée par les moines au moyen âge, avec ses règles strictes d’harmonie héritée de l’antiquité est la racine de toutes les musiques occidentales modernes.

Nous savons aujourd’hui que chaque son, chaque note, est caractérisée par sa fréquence et que les intervalles d’octaves, de quinte, etc… correspondent aux fréquences qui entrent en résonance, plus ou moins naturellement, avec la fréquence de base. L’octave a par exemple une fréquence double de celle de la note de base.Cycle des quintes

Les intervalles de quinte et d’octave ont été utilisés, de manière assez rigoureuse et, oui, mathématique, pour construire, progressivement, la gamme moderne que nous avons sur nos claviers. Voir par exemple le cycle des quintes, ou les calculs pour construire le tempérament égal.

De même la composition suit des règles précises, la construction de canon, de contrepoints, de fugues, etc… Exige du créateur une démarche basée sur les motifs, les calculs, les formules.

Les correspondances vont aussi dans l’autre sens. En creusant un peu, on peut trouver dans les exercices que font les musiciens quotidiennement depuis des siècles des notions mathématiques qui ne seront formalisées que beaucoup plus tard. Par exemple en associant un rapport de fréquence et un intervalle, on introduit un logarithme. De même, l’ensemble des notes, munie de l’addition d’intervalles avec le principe d’identification des octaves produit un groupe.

Pour approfondir le sujet, allez lire l’excellent papier de Rémi Coulon.

Les patterns

On dit que les mathématiques sont la science des motifs, des patterns. Le fait qu’un nombre soit pair, premier ou parfait est un pattern. Qu’un triangle, quelle que soit sa taille puisse être rectangle ou isocèle est un pattern. De même pour des droites parallèles, des courbes sinusoïdales, des fractales, etc…

Les mathématiques sont l’art d’expliquer et de représenter le monde, et au delà, de créer des univers, en déduisant et inventant des abstractions, qui sont des motifs répétables de réalité.

En informatique, il y a des patterns partout. Par construction. Tout programme est un arbre de modules, de fonctions, d’expressions. On retrouve les mêmes structures partout. Et l’art de la programmation, fonctionnelle, déclarative, orientée objet, est de trouver la bonne abstraction, le bon motif, qui permettra une modélisation efficace et élégante d’une réalité exécutable.

Le rapport avec la musique ? Il y a aussi des patterns partout : mesures, mélodies, accords, tempo… D’ailleurs une musique sans aucune forme de répétition est inécoutable.

La musique, comme un programme, a un côté fractal, une pièce est structurée de façon macroscopique et microscopique, de l’organisation des mouvements et thèmes jusqu’aux polyphonies et accords, en passant par les phrases, les contrepoints, les mesures.

Mais non, le lien c’est le langage

Le lien c’est le langage. C’est la position défendue par Marco Panigada sur la page dédiée au sujet sur le wiki C2.

Langage informatique, langage mathématique, langage musical

La musique, comme la programmation est une sorte de langage. Cette comparaison n’est pas originale, c’est un lieu commun depuis des siècles de parler de langage musical et des émotions que les compositeurs transmettent. De même la notation classique de la musique, sous forme de partitions ou tablatures, est clairement un langage écrit, comme les hiéroglyphes de la vallée du Nil ou les rûnes scandinaves.

La programmation se fait avec des langages. Ceux-ci ont une grammaire, des mots (les tokens), une syntaxe, comme détaillé dans la hiérarchie de Chomsky. Ils ont aussi une expressivité, une personnalité unique.

Même si la comparaison n’est pas évidente avec les langages naturels ou le langage musical, les langages de programmation sont des moyens d’expression. Les langages naturels ont aussi une grammaire, une syntaxe, des patterns reconnaissables, c’est d’ailleurs un jeu amusant de reconnaître un langage qu’on ne parle pas à son rythme et à sa sonorité. De plus on peut insérer du langage naturel sous forme écrite dans un programme.

Un programme est quelque part la forme écrite d’une création exécutable, exprimée suivant la personnalité du langage choisi, du programmeur ou de l’équipe de programmeurs.

La musique est aussi un moyen d’expression, une forme de langage, avec un vocabulaire de notes, une grammaire de mesures et de tempo, des règles d’harmonies, et permet d’exprimer beaucoup, et de créer des choses. La comparaison a été faite de nombreuses fois, et une grande majorité des créations musicales, instrumentales ou non, racontent quelque chose.

Le lien avec le langage est plus frappant encore sous forme écrite, ce qui n’a rien d’étonnant, puisque le fait de transcrire sur un support implique en soi l’existence d’une forme de communication.

Les mathématiques aussi, sont un langage, une façon de représenter le monde, des idées, des concepts, et de les développer.

Literate Programming - Knuth - Wikimédia

Dans les trois cas (musique, programmation, mathématiques), le langage est à la fois le média de communication et l’artefact cognitif permettant d’approfondir la discipline, la création, la propre compréhension de l’auteur, et le langage lui même.

Un cas intéressant de jonction entre la programmation et le langage est le concept de Literate Programming (programmation lettrée), préconisé par Donald Knuth. Il s’agit d’écrire le programme comme un essai, en suivant la logique et l’ordre des pensées qu’un humain peut suivre. Le programme est ensuite dérivé de cette source grâce à des macros.

Jeux et patterns

Dans les langages naturels

Les jeux de mots, que l’on peut faire en français ou en anglais sont des patterns : on joue sur la similarité des sons ou d’autres similitudes.

De même les palindromes, les anagrammes ou les ambigrammes  sont des jeux de logique, de symétrie, de patterns que l’on peut faire avec le langage naturel.

Palindrome

Un palindrome est un texte qui peut se lire dans les deux sens. Par exemple, le mot kayak, inversé, est toujours kayak.

Kayak est un palindrome est assez bref. Un autre exemple de palindrome, plus intéressant, par Alain Damasio, dans « la horde du contrevent »  :

« Et si l’arôme des bottes révèle madame, le verset t’obsède, moraliste ! »

Anagramme

Un anagramme est un texte qui est composé des mêmes lettres qu’un autre texte, par exemple « Tom Elvis Jedusor » est l’anagramme de « Je suis Voldemort » ou encore : « Rien n’est établi » est l’anagramme de « Albert Einstein ».

Ambigramme

La notion d’ambigramme est moins familière. Il s’agit de texte que l’on peut lire dans plusieurs directions et qui prend (ou non) un sens différent. Par exemple dans cette figure les mots « faux » est « vrai » peuvent être lus, selon l’orientation du texte.

Ambigramme - Faux Vrai - Wikimédia

En musique

En musique également on a des patterns et des jeux de ce type, il s’agit même des techniques de bases de la composition. Les possibilités sont encore plus grandes, du fait que l’on dispose de plusieurs voix, de plusieurs instruments et de la possibilité d’utiliser des accords.

Voici quelques exemples, brièvement :

Mouvement rétrograde

ll s’agit de lire la partition à l’envers, en commençant à l’a fin. Le thème sonne alors très différemment.

On peut même avoir un palindrome musical si la partition donne quelque chose d’identique dans les deux sens

J.S. Bach l’a d’ailleurs concrétisé dans sa célèbre offrande musicale.

Mouvement contraire

Les intervalles montants sont remplacés par des intervalles descendants.

Canon

Il s’agit de répéter un thème en ajoutant ou retirant un instrument à chaque répétition (éventuellement en décalé), l’exemple le plus célèbre est le canon de Pachelbel.

On a aussi d’autres curiosités musicales comme des changements de tonalité indétectables du fait de la structure harmonique.

Similarité des démarches

En termes de démarche, les deux disciple aussi beaucoup en commun.

Créativité et ingénierie / artisanat

Dire qu’un musicien est un créatif est un pléonasme. A partir du moment où il se permet une improvisation occasionnelle ou l’écriture d’une pièce, même courte, on peut dire qu’il crée quelque chose. Même les interprètes purs, quelque part, créent, dans le sens où ils font sortir du vide une oeuvre intense, y transmettant l’intention et l’émotion du compositeur.

On en parle moins, mais faire de la musique implique des compétences relevant de l’ingénierie.

En lisant ces mots, vous visualisez peut-être un studio d’enregistrement moderne avec les impressionnantes tables de mixage aux dizaines de boutons, les appareils intimidants avec des graphiques abscons et les rivières de câbles.

En fait, même un guitariste amateur doit s’accorder, régler la hauteur de son chevalet et de ses micros, enchaîner ses effets dans le bon ordre, noter les réglages, et de manière générale, connaître pas mal de notions techniques pour produire quelque chose. Quelle est la différence entre reverb, écho et delay ? Wah et auto-wah ? Fuzz, overdrive, distortion ? Pourquoi mettre tel effet avant tel autre ? Mais cet aspect ne se limite pas aux musiques rock : même avec des instruments acoustiques, genre violon ou clarinette, il faut des connaissances techniques pour l’entretien, le réglage, l’accordage, etc…

The software Craftsman - Sandro Mancuso

Je parle d’ingénierie, pour que l’on fasse bien l’association avec l’ingénierie logicielle, mais tout cela a un côté artisanal : on ne calcule pas avec des formules, et une précision mathématique comme des ingénieurs, on bricole, on assemble, on teste, et le savoir faire et l’expérience permettent des résultats.

Le développement informatique est aussi, beaucoup plus de l’artisanat que de l’ingénierie. Cela peut paraître moins flatteur, mais reflète beaucoup mieux la réalité. Je suis un supporter de la philosophie software craftsmanship, qui assume ce constat et dans laquelle un artisan développeur se doit de devenir un maître dans son art, par l’expérience et l’apprentissage constant, et aussi un mentor, par le partage, à la façon des menuisiers et des forgerons d’antan.

La programmation est aussi une discipline créative : nous faisons naître des choses du néant. Parfois triviale, parfois merveilleuses. La création est même double : nous créons le code, le texte structuré, dont la beauté est indiscutable, parsemé de joyaux littéraires en langage naturel, mais aussi le résultat de l’exécution du programme, qui peut être beau, grandiose, complexe, inspirant.

Une même arborescence des livrables

Dans sa forme, un programme écrit peut être comparé à une pièce de musique (ou à un roman). Dans les deux cas on a une structure globale, perceptible de loin, une architecture, avec des sections, des parties de différentes tailles qui s’articulent et s’imbriquent. On a aussi des éléments de détails, une fonction ou une instruction ou bien une note, une phrase ou une ornementation, selon le domaine. On a clairement un côté fractal.

Le musicien, comme le programmeur, doit être capable d’alterner entre la vision globale, macroscopique de la pièce sur laquelle il travaille, et le détail, le petit élément qu’il est en train d’ajouter.

Un travail à la fois collaboratif et individuel

On réalise rarement un logiciel seul. Il s’agit presque toujours d’un travail d’équipe, où il faut savoir communiquer, s’adapter et apprendre du style des autres, orchestrer le travail pour une division harmonieuse. Il faut savoir écouter, pour recueillir les besoins et les feedbacks, avoir assez d’empathie pour comprendre les différents points de vue et connaître assez du travail de ses partenaires (même dans des domaines différents comme le design) pour suivre leurs conseils.

En même temps, entre les points de synchronisation, nous enfilons nos écouteurs et nous isolons dans notre bulle musicale (oui encore de la musique) devant nos IDE. Ce qui d’ailleurs correspond au mode opératoire de n’importe quel créatif : la création se fait la porte fermée, en isolation.

En musique aussi le travail est à la fois collectif et individuel. Individuel, car la pratique se fait en solitaire. La plupart des heures que passe un musicien avec son instrument, il les passe seul. Collectif, car souvent, on joue ou dans un groupe dans un orchestre, et il faut être synchronisé avec les autres, les écouter, avec empathie et culture. Le contact avec d’autres musiciens est aussi une excellente source d’inspiration.

Ce n’est pas un hasard si on retrouve des métaphores musicales pour le travail en équipe, que j’ai d’ailleurs volontairement utilisées dans un paragraphe précédent, comme « orchestration des tâches » ou « travailler en harmonie » (Et oui, je vous fait re-scanner l’article vers le haut pour retrouver où j’ai utilisé ces expressions, ce post est un peu récursif en fait 🙂 )

Des moyens d’expression

Je l’ai évoqué rapidement dans la partie langage : la musique et la programmation sont des moyens d’expression.

Dans les deux cas, l’exécutant utilise un artefact cognitif – j’adore cette expression, artefact cognitif, je l’ai piqué à David Allen – son instrument ou sa machine, et exprime quelque chose à travers ce média.

Dire que la musique permet l’expression de sentiments, d’émotions, de narration ne surprend personne.

Dire la même chose de l’écriture de logicielle peut-être plus. Mais même s’il s’agit du plus ennuyeux des logiciels d’entreprise, son existence a été exprimée par une équipe, à travers un outil. Plus convainquant, les programmeurs s’expriment très souvent de façon tout à fait subjective à travers les commentaires ou les noms de variables.

De plus, chaque programmeur a son style d’écriture, ses préférences, qui sont souvent reconnaissables très rapidement, et il s’exprime dans des langages qui ont des personnalités, si bien que quelques dizaines de lignes de programme forment une structure particulière d’une grande individualité.

Enfin quand on développe une interface – qu’elle soit graphique, textuelle ou autre – on lui donne une forme, par définition subjective, qui traduit la personnalité et les préférences du programmeur.

Conclusion

Programmation et musique sont donc deux disciplines qui ont beaucoup de similarités : leurs liens avec les mathématiques, avec le langage, la même démarche créative et artisanale, l’aspect arborescent des livrables, etc…

Ce sont disciplines qui attirent le même genre de personnes, qui s’y plongent et s’y sentent à l’aise : des esprits vifs, orientés patterns, qui aiment collectionner les connaissances et bricoler et créer.

La corrélation est reconnue depuis les années 50 et est même visible, indirectement, par des études impliquant de l’imagerie cérébrale.

Inné ou acquis ? Cette préférence et aisance pour ces disciplines est, comme toutes les aptitudes humaines, un reflet à la fois du patrimoine génétique de l’individu et de l’environnement qui l’a façonné. On a vu aussi qu’il y avait un encouragement de la corrélation par le système éducatif.