Note importante : au moment où j’écris ces lignes, je découvre Scala. Cet article n’est pas destiné à être une référence. Il ne prétend pas être exhaustif, exact et parfait.
L’histoire de Scala est intéressante, elle nous permet de comprendre les fondations du langage. Elle renforce à mon avis l’intérêt du langage et me donne encore plus envie d’avancer dans mon apprentissage.
L’histoire de ce langage débute en 2001, à l’Ecole Polytechnique Fédérale de Lausanne (EPFL), plus précisément au Laboratoire des Méthodes de Programmation (LAMP). Martin Odersky son fondateur est professeur à l’EPFL.
En 1995 lui et Philip Wadler découvrent la JVM. Quelques travaux de recherches plus tard, SUN Microsystems demande à Martin de travailler sur le compilateur Java 1.1. Martin sera par la suite le responsable du développement du compilateur javac de la version 1.1 à la version 1.4.
En 1997 Martin et Philip travaillent sur des concepts pour apporter de la programmation fonctionnelle et générer du bytecode Java. Le projet appelé Pizza donnera naissance plus tard à Scala indirectement :
Pizza is a strict superset of Java that incorporates three ideas from the academic community: parametric polymorphism, higher-order functions, and algebraic data types. Pizza attempts to make these ideas accessible by translating them into Java. We mean that both figuratively and literally, because Pizza is defined by translation into Java. It turns out that these features integrate well: Pizza fits smoothly to Java, with only a few rough edges.
David Pollak (fondateur du framework Web Lift écrit en Scala), dans l’introduction de son livre « Beginning Scala » explique que Pizza a ensuite donné les Generics dans Java. Martin Odersky a été membre de l’expert group de la JSR-014 (Add Generic Types To The JavaTM Programming Language) qui a finalisé son travail en 2004. Les Generics en Java sont le fruit du travail de Martin Odersky.
Dès 2001, Martin commence à travailler sur Scala. La première version date de 2003. Son équipe et lui ont ensuite commencé à enseigner Scala à l’EPFL. Scala 2.0 est sorti en 2006. La dernière version est Scala 2.7.7 au moment où j’écris ces lignes.
Scala 1.4 est aussi capable de générer du bytecode compatible avec la CLR de la plateforme .NET de Microsoft (voir cette page).
Ce que cela m’inspire
C’est un langage mature, structuré par des chercheurs et des professeurs. La force de Scala est de se reposer sur la JVM et sur le bytecode Java, tout en proposant une approche différente. Et j’avoue que plus j’avance dans mon apprentissage, plus je comprends l’engouement et le plaisir à programmer en Scala.
Je réfléchis aux meilleurs moyens de parler Scala à l’ensemble des développeurs Java. Je pense qu’attaquer de manière frontale, 10 ans d’orienté objet et de programmation procédurale n’est pas une bonne idée. Je pense aussi que cristalliser l’écueil de formation en France des ingénieurs dans le domaine fonctionnel n’est pas une bonne idée. Scala restera un langage de niche si personne ne fait l’effort de comprendre comment construire des ponts entre nous, développeurs Javas, et vous, développeurs Scala.
Comme un Français qui découvre l’Anglais, et qui parle au départ avec un fort accent étranger, je pense que les premiers programmes que j’écrirai en Scala auront l’accent Java. Ensuite je m’efforcerai de progresser, jusqu’à arriver à un niveau d’aisance, qui me fera peut-être oublier ma langue maternelle, qui reste Java.
Sérieusement, prenez le temps de regarder Scala.
Références
http://en.wikipedia.org/wiki/Higher-order_function
http://en.wikipedia.org/wiki/First-class_function
http://infoscience.epfl.ch/record/64384?ln=en
Articles, présentations et thèses autour de Scala
L’histoire de Scala sur le site officiel.
Et encore 10 ans d’orienté objet, en 4ans d’expérience Java, je n’ai vu du véritable Objet que dans une seule mission. J’ai plus vu du code procédural mis dans des « objets » du genre helper et compagnie que du véritable orienté objet. Ou alors des concepts pas clair, mal défini, des rôles mal identifiés.
Du coup le marché forme inévitablement l’expérience des développeurs avec les mauvais paradigmes (pour un langage objet).
Je digresse mais à propos du développement orienté objet, j’ai lu une entrée de Misko Hevery assez sympa sur un livre : http://misko.hevery.com/2010/01/06/growing-object-oriented-software-guided-by-tests/
Et ça c’est un véritable écueil pour le monde Java.
Salut Nico,
ton billet me fait sourire car tu te voila maintenant (temporairement) dans le camps des « minoritaires ». Le camp qui pousse un langage inconnu de la plupart des développeurs et qu’on ne voit pas sur les couvertures de magazines pour DSI.
A toi les « Je ne vois pas l’intérêt, tu peux tout faire en Java » ou le classique « tous les langages se valent » ou ma phrase préférée « ok ton truc c’est bien, mais on peut faire n’importe quoi dans tous les langages, suffit de coder proprement ».
Bon, tu as la chance de parler 1/ d’un truc à la mode, 2/ à un moment ou les développeurs ont conscience qu’ils existent autre chose (merci Groovy, GAE..) et 3/ qu’ils commencent à se poser des questions sur le langage Java mais je n’ai qu’une chose à te dire :
Bienvenu dans mon monde ! 🙂
Je suis curieux d’avoir dans quelques temps ton expérience sur le sujet,
… effectivement, Java et la programmation OO a l’air de prendre un virage (à ne pas rater ) au vu des news cette semaine :
http://www.infoq.com/news/2010/04/scala-q
Je promets je vais garder un oeil sur Scala.
@mra
Cet article à été écris le 1er avril 🙂
Cela dit il faut surveiller le petit scala.
@Sébastien Douche
Oui, la programmation polyglotte c’est une bonne chose. J’adhère à ce principe : « the right language for the right job ».
http://www.infoq.com/articles/paradigm-based-polyglot-prog