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
Code : | Sélectionner tout |
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
Code : | Sélectionner tout |
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
Code : | Sélectionner tout |
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
Code : | Sélectionner tout |
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
Code : | Sélectionner tout |
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 ?