Dans la peau d'un grand écrivain, quel programme JavaScript auriez-vous écrit ?
Un développeur de Twitter interroge cinq styles d'écriture
Imaginez qu'un jour, vous vous levez le matin dans la peau d'un célèbre écrivant, William Shakespeare par exemple. Vous vous mettez devant votre PC, et vous commencez à écrire du JavaScript. Vous avez appris les rudiments de ce langage, et vous vous dites : « je vais écrire une petite fonction Fibonacci, histoire de m’exercer un petit peu ».
Quel style de programmation auriez-vous produit ? Comment auriez-vous structuré votre programme avec cette personnalité unique de l'écrivain ?
Ça vous semble insensé ? Difficile à imaginer ?
Pas si sûr. Angus Croll, membre de l'équipe noyau web chez Twitter et amoureux de littérature, a écrit un article très original, où il illustre le programme « imaginaire » de cinq écrivains célèbres : Ernest Hemingway, William Shakespeare, Andre Breton, Roberto Bolaño et Charles Dickens. Chacun d'eux devait coder une fonction Fibonacci, avec son style d'écriture propre.
Ernest Hemingway
Le code d'Ernest Hemingway est réduit à l'essentiel sans mot ou variable gaspillés. Pas de fantaisie, ni de logique élaborée ou des noms de variables intelligents. Tout y est simple et clair. En fait, c'est ce qui fait la beauté de ses écrits. Il ne se casse pas trop la tête. Si tu lui demandes le résultat pour un nombre plus petit, il vous ignorera tout simplement : « Je suis fatigué, et cette question est stupide ».
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 function fibonacci(size) { var first = 0, second = 1, next, count = 2, result = [first, second]; if(size < 2) return "the request was made but it was not good" while(count++ < size) { next = first + second; first = second; second = next; result.push(next); } return result; }
William Shakespeare
Avec William Shakespeare, on entre dans l’excès des mots, avec des commentaires écrits en pentamètre iambique. Dans ses pièces de théâtre, Shakespeare ajoute souvent le sentiment dramatique, avec ce style d'écriture caractéristique. Apparemment, ça se ressent aussi dans son code, et son style ne change pas quand il programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 function theSeriesOfFIBONACCI(theSize) { //a CALCKULATION in two acts. //employ'ng the humourous logick of JAVA-SCRIPTE //Dramatis Personae var theResult; //an ARRAY to contain THE NUMBERS var theCounter; //a NUMBER, serv'nt to the FOR LOOP //ACT I: in which a ZERO is added for INITIATION //[ENTER: theResult] //Upon the noble list bestow a zero var theResult = [0]; //ACT II: a LOOP in which the final TWO NUMBERS are QUEREED and SUMM'D //[ENTER: theCounter] //Commence at one and venture o'er the numbers for (theCounter = 1; theCounter < theSize; theCounter++) { //By divination set adjoining members theResult[theCounter] = (theResult[theCounter-1]||1) + theResult[Math.max(0, theCounter-2)]; } //'Tis done, and here's the answer. return theResult; //[Exuent] }
André Breton
André Breton est un fondateur du mouvement surréaliste. Il croyait que les rêves étaient plus intéressants que la réalité, et doivent être la base de nos efforts créatifs. Sa solution est mise en évidence par une logique élégante. Tout simplement, c'est un développeur très créatif.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function Colette(umbrella) { var staircase = 0, galleons = 0, brigantines = 1, armada = [galleons, brigantines], bassoon; Array.prototype.embrace = [].push; while(2 + staircase++ < umbrella) { bassoon = galleons + brigantines; armada.embrace(brigantines = (galleons = brigantines, bassoon)); } return armada; }
Roberto Bolaño
Avec Bolaño, c'est plutôt une complexité sans effort et une naïveté pleine de charme. Son style narratif est caractérisé par une honnêteté désarmante et séduisante. Aucun aspect de la fragilité humaine n'est censuré, mais la chaleur et l'humour transmis dans ses mots sont à la fois engageants et exaltants.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 function LeonardoPisanoBigollo(l) { if(l < 0) { return "I'd prefer not to respond. (Although several replies occur to me)" } /**/ //Everything is getting complicated. for (var i=2,r=[0,1].slice(0,l);i<l;r.push(r[i-1]+r[i-2]),i++) /**/ //Here are some other mathematicians. Mostly it's just nonsense. rationalTheorists = ["Archimedes of Syracuse", "Pierre de Fermat (such margins, boys!)", "Srinivasa Ramanujan", "Rene Descartes", "Leonhard Euler", "Carl Gauss", "Johann Bernoulli", "Jacob Bernoulli", "Aryabhata", "Brahmagupta", "Bhaskara II", "Nilakantha Somayaji", "Omar Khayyám", "Muhammad ibn Mūsā al-Khwārizmī", "Bernhard Riemann", "Gottfried Leibniz", "Andrey Kolmogorov", "Euclid of Alexandria", "Jules Henri Poincaré", "Srinivasa Ramanujan", "Alexander Grothendieck (who could forget?)", "David Hilbert", "Alan Turing", "von Neumann", "Kurt Gödel", "Joseph-Louis Lagrange", "Georg Cantor", "William Rowan Hamilton", "Carl Jacobi", "Évariste Galois", "Nikolay Lobachevsky", "Rene Descartes", "Joseph Fourier", "Pierre-Simon Laplace", "Alonzo Church", "Nikolay Bogolyubov"] /**/ //I didn't understand any of this, but here it is anyway. return r /**/ //Nothing happens here and if it does I'd rather not talk about it. }
Fidèle à ses habitudes, son code est truffé d'admission d'insécurité, d’embarras et d'ignorance. Une solution brillante, mais qui vous engage dans la réflexion. Il n'utilise pas les points-virgules (reflet de l'absence de guillemets dans ses romans) et l’utilisation implicite des variables globales suggère leurs apparitions dans des chapitres à venir.
Charles Dickens
Avec Dickens, on joue dans le superficiel. Et ça se ressent dans son code. Il manque de la substance et une compréhension profonde de l'exercice. Il a échoué à saisir la philosophie sous-jacente de la série de Fibonnaci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function mrFibbowicksNumbers(enormity) { var assortment = [0,1,1], tally = 3, artfulRatio = 1.61803; while(tally++ < enormity) { //here is an exceedingly clever device assortment.push(Math.round(assortment[tally-2] * artfulRatio)); } //should there be an overabundance of elements, a remedy need be applied return assortment.slice(0, enormity); }
Conclusion
On peut dire que cet article d’Angus Croll illustre grandement le rapprochement entre l'écriture littéraire et la programmation. Chacun de nous peut laisser une empreinte et un style propre, que ce soit dans la programmation, ou dans l'écriture. Une forme d'art réservée à une élite. C'est une illustration de la richesse de langages de programmation tels que le JavaScript. C'est ainsi, qu'au-delà de l’imaginaire et de l'humeur, l'auteur nous laisse avec une réflexion profonde, que je vous laisse le plaisir de lire :
« Que ce soit dans l'albumen protecteur de Crockford ou dans les confins des classes de sciences sèches et fermées d'esprit, la doctrine et le dogme sont les ennemies du bon programme JavaScript. Certains développeurs aiment les livres contenant les règles (strictes) à suivre, ou les [solutions] passent partout – c'est pourquoi nous avons Java. Le plaisir senti dans JavaScript est ancré dans le manque de rigidité et les possibilités infinies qu'il permet. Les langages naturels gardent ces mêmes potentiels. Les meilleurs auteurs et les meilleurs développeurs JavaScript sont ceux obsédés par le langage, qui explorent et expérimentent avec tous les jours, et de cette manière, ils développent leurs propres styles, leurs propres idiomes, et leurs propres expressions. »
Source : site d'Angus Croll
Et vous ?
Que pensez-vous de ce rapprochement entre l'écriture et la programmation ?
Dans la peau de votre écrivain préféré, quel programme JavaScript auriez-vous écrit ?
Partager