Archives du blog

Scala on Coursera

La semaine dernière s’achevait le cours Functional Programming Principle in Scala de Coursera, animé par Martin Odersky en personne. Si vous ne connaissez pas Coursera, sachez que c’est l’une des startups californiennes qui se lance dans le domaine de l’éducation en ligne (l’une de leur dernière recrue est Pamela Fox, speakeuse à Mix-it 2012, et qui, alors qu’elle n’était pas encore employée, avait fait une keynote sur l’éducation). Sur le site, vous suivez des cours en vidéo, vous avez des exercices à faire et à rendre, vous recevez des notes et à la fin un diplome si vous avez été sages. Avec pas loin de 2 000 000 d’inscrits, le site a pris son envol, à juste titre il faut dire car la plateforme est très bien conçue. Martin Odersky, et sa société TypeSafe, frappe donc encore un grand coup marketing en lançant ce cours en ligne sur Coursera. Si ce nom vous est également inconnu, Martin est le créateur de Scala avec une équipe de l’EPFL (Ecole Polytechnique Fédérale de Lausanne) où il est chercheur. Il a également bossé sur le compilateur Java et notamment contribué aux génériques de Java5. On peut donc dire sans trop se tromper qu’il en connaît un rayon en matière de JVM et de langage.

 

Je ne l’avais jamais vu en revanche donner un cours, mais les videos sur Coursera qu’il a réalisé sont claires et compréhensibles à condition d’avoir un minimum d’anglais (et également de faire abstraction de l’accent allemand, qui est quand même plus compréhensible que l’accent français probablement). Le volume de cours n’est pas négligeable : s’étalant sur 7 semaines, il fallait quand même prévoir une à deux heures pour les vidéos et de quelques minutes à plusieurs heures pour les exercices. Mais cela n’a pas décourager les foules : le cours a compté 50000 participants (ou plutot inscrits, je ne sais pas si tous en sont venus à bout). Ce que j’en retiendrais :

 

Les plus :

- la plateforme Coursera : rien à dire, je trouve ça bien très bien fait. Les vidéos sont téléchargeables ou visionnables en ligne, avec une possibilité d’accélérer la lecture qui est très appréciable tout en restant compréhensible. Les exercices sont très clairs, vous téléchargez un projet tout prêt dans le cas de ce cours, une fois terminé, vous pouvez le soumettre en ligne de commande avec ‘submit monmail monpassword’. Des tests unitaires vont alors se lancer sur votre projet directement sur la plateforme et vous pouvez voir votre résultat sur la page de feedback. Il faut patienter quelques minutes mais rien de dramatique. Le système de note est intéressant, avec un petit côté gamification : on cherche à avoir le 10/10 même si une note inférieure permet de valider le cours. Seul point négatif à ce propos : l’absence de trace vraiment explicite pour comprendre quel test et quand votre programme a échoué : on se retrouve à mettre de vieux println dans le code pour essayer de cerner le problème.

- les leçons étaient très souvent intéressantes, mettant bien en avant la programmation fonctionnelle, avec des exemples bien choisis et des solutions élégantes. J’avais lu le livre d’Odersky “Programming in Scala” lors de sa sortie, et j’ai retrouvé des exemples du livre, mais je m’y suis bien moins ennuyé. Les exercices étaient loin d’être triviaux pour certains : celui sur les anagrammes que je pensais faire en quelques minutes m’a finalement pris les 2h de ma pause déjeuner… La progression était correcte, et j’ai eu l’impression d’apprendre des choses tout au long du cours : je pouvais difficilement en demander plus.

- au delà de Scala, difficile de ne pas aimer la programmation fonctionnelle. Et la pratiquer en Java est un vrai plaisir. Les collections scala sont géniales, vraiment. Dans la vie de tous les jours, je pallie comme beaucoup le manque grâce à l’excellente librairie Guava par exemple, et ce n’est pas sans déplaisir que je vois l’arrivée de Java8 (dont de nombreux concepts sont déjà dans Scala).

 

Le moins :

- Certains exercices étaient plus “mathématiques” que “programmatique”, j’avais l’impression de retourner en prépa plus que d’apprendre un langage. On sent ici le côté académique de Odersky et je me demande si cela n’a pas rebuté un certain nombre de participants. Cela se sent aussi sur le langage en lui même, avec son système de type. Ce n’est pas le genre de chose qui m’intéresse outre mesure (que le système de type soit complet ou pas…), et certaines vidéos à ce sujet étaient moins intéressantes à regarder.

- Je me suis limité à utiliser l’IDE conseillé, un Eclipse packagé pour Scala. Et j’ai trouvé l’expérience horrible (je travaille pourtant très souvent sous Eclipse), l’IDE plantait régulièrement, la complétion était longue, les erreurs souvent obscures et lancer les tests était lent. Autrement dit je ne sais pas comment les équipes qui travaillent sur des projets conséquents se débrouillent pour être productives. Il est fort possible qu’il y ait eu un problème avec ma machine, mais j’ai un macbook avec jdk7 assez standard : j’imagine donc que d’autres peuvent avoir ce problème. J’ai vu que beaucoup utilisait TextMate, et IntelliJ pour certains, ce qui est certainement mieux mais pas toujours possible dans une entreprise. Et globalement tout est lent, la compilation, les tests, l’execution… TypeSafe fournit un gros travail à ce sujet mais il y encore du chemin à parcourir.

- J’ai souvent cherché des solutions alternatives une fois mes exercices rendus et je me suis rendu compte que même en connaissant très bien le problème, j’avais parfois du mal à comprendre celles-ci, tant les possibilités et styles peuvent varier. Je trouve ça assez inquiétant pour la maintenabilité d’une application, en tout cas si personne ne prend le temps de bien fixer certaines règles. La liberté amenée par Scala vient avec un prix de rigueur, Odersky le dit lui même dans ses vidéos, n’hésitez pas à nommer les résultats intermédiaires de vos programmes. Et c’est vrai que l’API donne parfois envie de chaîner les appels sur une ligne, il faut donc résister et accepter de perdre en “oneliner” pour gagner en lisibilté.

- Les boucles “for comprehension” sont un concept puissant mais on se retrouve vite perdu entre les types disponibles, les itérateurs déclarés et les filtres. Alors que le code executé est souvent simple, toute la logique se trouve dans la déclaration du for. C’est souvent compliqué à débugger, parfois correct mais incroyablement lent si vous avez fait un mauvais choix (dont on ne se rend pas toujours compte immédiatement). Pour les anagrammes j’avais par exemple une solution qui fonctionnait correctement mais qui mettait 30 secondes de plus pour un itérateur mal déclaré. Il doit y avoir des carnages dans certaines applications… Il est parfois plus simple de faire le code avec des “map” et des “filter” puis de convertir en “for comprehension” par la suite.

 

Si le sujet vous intéresse un autre article bien plus complet sur Scala et Coursera se trouve ici. Je ne peux qu’admirer l’excellence marketing de TypeSafe qui réussit encore une fois un très beau coup (après l’annonce récente de l’entrée de Rod Johnson au board par exemple). Et à titre personnel, je suis content d’avoir participer : j’ai appris de nouvelles choses et voir d’autres langages est toujours un excellent moyen de progresser. Je ne suis par contre toujours pas convaincu pour faire un vrai gros projet de la vraie vie avec. Ou alors avec un mec de chez Twitter ou Foursquare qui vient m’aider à démarrer et à prendre les bonnes options et les bonnes pratiques. Mais on en a rarement sous la main. Je surveille quand même du coin de l’oeil, on ne sait jamais…

Back from Devoxx : Play! 2, hopes and fears

Le mois de Novembre est de loin le préféré des Javaistes et tous ceux qui le peuvent se rendent à Devoxx, la plus grande conférence européenne sur Java. Plutôt que de commenter chaque session vue, je vais essayer de synthétiser mes impressions sur ces 3 jours de conférences.

Devoxx c’est 5 jours, 2 d’universités et 3 de conférences, à Anvers avec 3300 développeurs. C’est beaucoup de rencontres, des gens que l’on apprécie mais que l’on ne croise qu’aux conférences, et d’autres que l’on voit pour la première fois (et que l’on tente de reconnaître des avatars twitter, avec plus ou moins de succès!). L’organisation est extrêmement bien rodée (10 ème édition) et l’équipe de Stephan fait un travail incroyable (vous imaginez servir 3300 geeks affamés pendant une semaine dans un cinéma où se déroulent 6 tracks en parallèle?).

Il y avait de nombreux sujets traités mais je vais me concentrer sur les sujets qui n’étaient pas ou peu présents l’année précédente, en commençant par Play! dans ce premier article.

Avec aucun talk l’année dernière et 3 cette année, on peut dire que Play! a fait du bruit! Nous avons notamment eu l’annonce de la beta release de la version 2.0 et du rapprochement avec la société Typesafe. Une version qui comme le laisse supposer l’intégration dans la stack de Typesafe s’oriente vers Scala, même si Java sera toujours supporté (l’animation en haut à droite de ce site vous donne une bonne idée de l’évolution).

Fears

Cette décision me gêne un peu personnellement et d’après les échos que j’en ai eu, n’est pas forcément très populaire. Vous pouvez installer cette bêta et vous faire une idée par vous même avec la documentation disponible, mais la simplicité que l’on aimait dans la version 1 disparaît un peu. J’ai attendu quelques jours avant de faire ce billet, car je voulais tester un peu par moi même et prendre la température autour de moi et sur le web. Que nous amène donc cette v2 ?

Même si il est possible de rester sur une version Java pour la partie serveur, le moteur de template est pour l’instant en Scala uniquement, alors que Groovy jusqu’à présent faisait un très bon travail en se faisant oublier. Scala amène un typage plus fort donc une détection plus en amont des erreurs éventuelles, ce qui est louable. Trois exemples d’application sont disponibles avec la bêta, et pour avoir joué un peu avec, ce changement ralentit pas mal la compilation des templates : là où on passait son temps à rafraîchir le navigateur pour avoir instantanément le résultat, on attend maintenant un peu que la compilation se fasse, malgré le fait que mon laptop (MacBook Pro) soit relativement puissant. Le système de template Groovy sera peut être sauvé par la communauté  et réintroduit.

Et Scala est certainement un très bon outil lorsqu’on le maîtrise mais il demande globalement plus d’investissement, et là ou la v1 permettait de se plonger rapidement dans le code, cette v2 inquiète un peu par sa complexification inutile. La documentation est encore un peu légère (normal pour une bêta) donc ces craintes sont peut être inutiles mais j’en doute…

La compatibilité est de plus brisée, vous ne pourrez pas upgrader votre application sans un peu de travail. Le système de build est maintenant confié à SBT, le maven-like de Scala : plus de fichier dependencies.yml donc, et l’ensemble de commande est devenu un wrapper de SBT. A voir à l’utilisation, un peu de lecture si vous voulez approfondir.

Hopes

Tout n’est heureusement pas à jeter dans cette nouvelle version! On peut noter l’utilisation d’IO non bloquant (à la nodejs entre autre), et le traitement asynchrone plus développé (concept Iteratee/Numerator issu de Haskell). L’introduction d’Akka permet de supporter une lourde charge tranquillement et le framework Play! a lui même été en partie réécrit pour en utilisant ces concepts. La démo montre que 10000 requêtes ne posent pas de problème au serveur qui monte au maximum à 15Mo de RAM, et redescend à 2Mo une fois la vague passée : impressionnant, même si les requêtes ne faisaient aucun traitement métier. Play! pourrait devenir un outil de choix pour les applications à très fortes volumétries.

L’abstraction de l’accès aux données est réduite au maximum pour laisser aux développeurs le choix du datastore approprié. On retrouve tout de même les entités avec annotations JPA, et Ebean a remplacé Hibernate et amène un finder pratique pour requêter la base, et plus stateless que son prédécesseur. Dans mes rapides tests, on n’est pas vraiment dérangé par cette nouveauté, à creuser plus en détails.

Côté client, l’objectif est de permettre d’intégrer les excellentes technologies que l’on voit apparaître comme Jade, Less (c’est mon prochain billet de la série Nodejs), Backbone.js, Coffeescript. Un répertoire ‘assets’ a été ajouté à la structure du projet et les fichiers contenus sont automatiquement compilés et disponibles comme si ils étaient des ressources (par exemple les .coffee sont compilés en js et disponibles comme si le js était dans le répertoire public).

Les routes sont également compilées et ça c’est très pratique ! Si le controller ou la méthode indiqué dans le fichier route est inexistant, vous le savez immédiatement.

Dans les petits bonus plaisants, on peut maintenant écrire (en Scala) "def index = TODO" qui permet de continuer à écrire son code sans se préoccuper de l’implémentation du controller. Si on appelle cette méthode, elle affiche dans votre navigateur une belle page avec TODO. Le genre de détail ‘nice to have’.

Si vous voulez approfondir et vous faire votre avis, voici quelques liens qui peuvent vous intéresser :  la page officiellele blog Ipponle blog du Touilleur.

So what ?

Play est définitivement devenu populaire, et apprécié par beaucoup. Je fais partie de ceux qui apprécient son côté simple, productif, efficace et fun et qui l’ont utilisé pour faire des sites actuellement en ligne. Cette v2 me laisse un peu sceptique, n’étant pas spécialement un fanatique de Scala. C’est un excellent langage et très puissant, mais aussi très exigeant à produire et maintenir (des personnes autrement plus qualifiées que moi se sont déchainées sur le sujet ces derniers temps). Là où Play! faisait merveille pour commencer une application en 10 minutes après la lecture de 3 pages de tutorial, la v2 s’oriente vers une stack haute performance plus élitiste. Peut être que dans un an Scala/Play nous aura conquis. Dans tous les cas la hype est toujours là, il va falloir tester ça!

TypeSafe : Scala vers l’entreprise et au delà

La semaine dernière a eu lieu l’annonce officielle de la création de l’entreprise TypeSafe et de la mise à disposition de leur stack en téléchargement. Cette stack est conçue pour développer en Scala en entreprise, avec notamment le framework Akka, l’outil de build SBT et des outils pour coder. Que des trucs trendy !

Logo Typesafe

TypeSafe a une équipe assez exceptionnelle, jugez plutôt :
Martin Odersky, créateur de Scala
Jonas Boner, créateur de Akka
– Mark Harrah, créateur de SBT
Victor Klang, développeur sur Akka, speaker a Devoxx .

Comme conseillers de l’entreprise, on compte James Gosling et Doug Lea. Comme investisseurs, des exécutifs de Facebook, Google, Linkedin, Foursquare et Redhat. Bref, du lourd, du très lourd.

TypeSafe veut fournir aux développeurs une stack complète, gratuite et open source pour faire des applications scalables avec Akka pour middleware, et vise notamment les applications “cloud”. Il y aura également une activité de support sur cette stack, ainsi que de la formation et du conseil. Un installeur izpack (excellent produit open source, par le non moins excellent Julien Ponge) vous amène le nécessaire sur votre machine pour vous lancer dans l’aventure !

Scala doit on le rappeler, a été créé il y a maintenant 8 ans, et est en version 2.9.0. Le but avoué de ce langage est de combler les failles de Java tout en s’appuyant sur ses forces. La dernière version amène notamment une amélioration globale des performances et le support des collections parallèles.

Akka est un framework basé sur le modèle de communication par acteur lesquels échangent des messages asynchrones. Viktor Klang était speaker à Devoxx et avait donné un talk très intéressant, qui donne un bon aperçu de la puissance de Akka. Ce talk est d‘ailleurs disponible gratuitement sur Parley’s

Les acteurs sont des processus légers, isolés et non bloquants, qui ne partagent aucun état avec les autres processus. Chaque acteur a une boite aux lettres qu’il utilise pour recevoir les messages des autres acteurs. Ce système permet d’éviter plus simplement les problèmes de deadlock, starvation… Il peut toujours y avoir des problèmes mais il est plus simple de les éviter.

Akka vous offre aussi le support des transactions, des services REST, des Websockets, de Apache Camel, de Spring, de AMQP et de OSGi… Si avec tout ça vous ne trouvez pas votre bonheur !

Une fois l’installation réalisée, un petit tutorial est fourni pour calculer les décimales de Pi, en utilisant Akka depuis Scala ou Java. Le tuto présente également comment installer Scala IDE 2.0, dernière version du plugin pour Eclipse. Le support de Scala s’est bien amélioré dans l’IDE, même si la complétion est encore parfois un peu perdue.

Un récent article sur Akka avec une belle métaphore sur la pièce ‘En attendant Godot’ permet de se plonger plus en douceur dans les concepts du produit.

Un dernier mot, le site de TypeSafe est réalisé avec Play! Framework (comme le site de Mix-it d’ailleurs). Puisqu’on vous dit que c’est trendy !

Suivre

Recevez les nouvelles publications par mail.

Rejoignez 967 autres abonnés