Comme je suis en train d'apprendre Haskell, et que ce genre de challenge algorithmique semble particulièrement bien adapté à ce langage, je vous livre ici ma solution.
Quelle serait la vôtre ? Tous les langages sont acceptés.
(Si le code est trop long pour tenir dans un commentaire, ou si ce n'est pas pratique pour des raisons de formatage, postez-le sous la forme d'un Gist par exemple)
Ce très court billet pour vous signaler l'existence de quelques sites de programmation à la fois très sérieux et fort sympathiquement illustrés.
Haskell
Un sur Haskell d'abord, mon langage du moment. Richement illustré sous Paint, on admirera la précision du tracé et l'harmonie des couleurs.
Learn you a Haskell for great good : http://learnyouahaskell.com/
Lisp
Un sur Lisp ensuite, comme quoi l'obsession parenthésique n'oblitère pas irrémédiablement le sens artistique :
Lisperati : http://lisperati.com/
A la réflexion, oubliez ce que j'ai dit sur Lisp et le sens artistique. Visez un peu, l'auteur du site a réalisé une vidéo pour promouvoir son livre, et quelque chose me dit qu'il l'a fait lui-même après consommation de champignons de contrebande :
Ruby
Pour finir, un site sur Ruby, parce qu'il n'y a pas que des langages utiles dans la vie (troll spotted). Et puis voyez, le temps d'exécution de ses programmes a laissé à l'auteur tout le champ nécessaire pour apprendre à dessiner correctement, comme quoi à quelque chose malheur est bon.
Why's (Poignant) Guide to Ruby : http://mislav.uniqpath.com/poignant-guide/book/
Je vous livre (en pièce jointe de ce billet) un petit script shell que j'ai développé suite à un besoin récurrent : créer une hiérarchie de répertoires.
Le besoin typique est de créer une structure de projet Java (à la Maven), mais le script peut naturellement se révéler utile dans nombre de situations.
Dans une interview accordée à ComputerWorld, Larry Wall partage ses réflexions sur Perl, dont il est l'inventeur. Outre les origines du langage, nous y apprenons quelques anecdotes intéressantes ou surprenantes : par exemple, Perl a été utilisé pour écrire le pilote d'accès au système de fichiers de Clearcase (tiens donc, ça explique bien des choses...).
Quant au futur du langage, il s'annonce mouvementé. Après Python 3, c'est au tour de Perl 6 de marquer la rupture : la rétrocompatibilité ne sera pas assurée car le coeur de l'interpréteur a été totalement réécrit, et le langage lui-même semble voué à une forte mutabilité ("embrace and extend, please").
A noter aussi le mea culpa sur la syntaxe des expressions rationnelles : "We took it and made it worse"...
Au début de l'année, je vous avais déjà parlé de Python 3.0, qui s'annonçait comme une version de rupture, un nouveau départ permettant de faire un peu de ménage dans le langage tout en ajoutant de nouvelles fonctionnalités.
Après huit ans de bons et loyaux services, PHP4 prend sa retraite.
Sorti le 22 mai 2000, il a apporté en son temps de nombreuses nouveautés et une sécurité améliorée.
Son support officiel est désormais arrêté.
Les derniers irréductibles qui n'auraient pas encore migré sur PHP5 sont donc fortement invités à le faire, et pourront à cette occasion découvrir son tout nouveau modèle objet et profiter de ses fonctionnalités avancées comme la gestion native du XML, des webservices, et l'intégration de la librairie SQLite.
ComputerWorld a eu la chance de réaliser une longue interview de Bjarne Stroustrup, créateur du langage C++.
Celui-ci revient sur les raisons qui l'ont poussé à créer un nouveau langage de programmation, et présente les justifications techniques ou philosophiques ayant conduit à certaines des fonctionnalités les plus controversées du langage.
IBM publie un article intéressant (mais non technique) retraçant les origines de XML, son utilisation actuelle, et son futur probable.
Conçu à l'origine pour la publication de documents (rapports, documents techniques, pages web...), XML a pourtant été peu employé dans ce but, notamment en raison de la complexité et de la mauvaise qualité des outils permettant de le manipuler. Actuellement, il est surtout utilisé dans le domaine du développement logiciel, pour les fichiers de configuration, les exports de données... Pourtant, il opère un retour rapide sur son domaine d'application premier, notamment grâce aux dernières suites bureautiques (OpenOffice, et dans une moindre mesure MS Office) et aux nouveaux protocoles de publication comme APP (Atom Publishing Protocol).
Les développeurs de Python (menés par Guido Van Rossum, à l'origine du projet) ont récemment annoncé que la version 3.0 de ce puissant langage de script ne serait pas rétro-compatible avec la branche 2.x. La faute à une réécriture complète du moteur, le but recherché étant de débarrasser le langage de tous les "hacks" et bugs accumulés au fil des ans, afin de repartir sur une base saine. Tous les programmes et modules d'extension devront être profondément modifiés pour fonctionner sur cette nouvelle version.
Une telle rupture est suffisamment rare dans le petit monde des langages de programmation pour provoquer surprise et interrogation parmi la communauté des utilisateurs, car l'habitude est plutôt à un conservatisme forcené - on se souvient des contorsions auxquelles Sun doit se livrer pour intégrer certaines nouvelles fonctionnalités dans Java (les "génériques" pour Java5, les "closures" pour Java7...) sans briser la rétro-compatibilité...
Certaines sociétés hésiteront donc à franchir le pas et préféreront rester sur la branche 2.x actuelle, dont le développement continue. Par exemple, Google estime qu'environ 15% de son code repose sur Python : on imagine aisément l'ampleur de la migration...