dans un environnement professionnel



Documents pareils
Panorama des solutions analytiques existantes

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

THÉMATIQUES. Comprendre les frameworks productifs. Découvrir leurs usages. Synthèse

Point sur les solutions de développement d apps pour les périphériques mobiles

les techniques d'extraction, les formulaires et intégration dans un site WEB

4. SERVICES WEB REST 46

Introduction à MapReduce/Hadoop et Spark

Architecture Orientée Service, JSON et API REST

Fouillez facilement dans votre système Big Data. Olivier TAVARD

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Cours en ligne Développement Java pour le web

MapReduce. Nicolas Dugué M2 MIAGE Systèmes d information répartis

Éléments de programmation et introduction à Java

NoSQL. Introduction 1/23. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Big Data. Cyril Amsellem Consultant avant-vente. 16 juin Talend

Technologies du Web. Ludovic DENOYER - ludovic.denoyer@lip6.fr. Février 2014 UPMC

Compte Rendu d intégration d application

Groupe de Discussion Big Data Aperçu des technologies et applications. Stéphane MOUTON

NoSQL. Introduction 1/30. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

Cartographie des solutions BigData

Programmation Web. Madalina Croitoru IUT Montpellier

Hadoop, Spark & Big Data 2.0. Exploiter une grappe de calcul pour des problème des données massives

Bases Java - Eclipse / Netbeans

Les technologies du Big Data

CAS, un SSO web open source. 14h35-15h25 - La Seine A

Technologies Web avancées. ING1 SIGL Technologies Web avancées

Laurent JOLIN. Compétences. Expériences professionnelles. Architecte technique. 15, rue Jean Favier Toulouse

APPEL À COMMUNICATIONS 2010

Technologies Web. Ludovic Denoyer Sylvain Lamprier Mohamed Amine Baazizi Gabriella Contardo Narcisse Nya. Université Pierre et Marie Curie

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

La dernière base de données de Teradata franchit le cap du big data grâce à sa technologie avancée

Chapitre VI- La validation de la composition.

Alfstore workflow framework Spécification technique

CNAM Déploiement d une application avec EC2 ( Cloud Amazon ) Auteur : Thierry Kauffmann Paris, Décembre 2010

4 Exemples de problèmes MapReduce incrémentaux

Architectures Web Services RESTful

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Paul FLYE SAINTE MARIE

Systèmes en réseau : Linux 1ère partie : Introduction

Programmation parallèle et distribuée (Master 1 Info )

MapReduce et Hadoop. Alexandre Denis Inria Bordeaux Sud-Ouest France ENSEIRB PG306

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

31 ans - 8 ans d'expérience

Environnements de développement (intégrés)

Les bases de données relationnelles

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Vérifier la qualité de vos applications logicielle de manière continue

Introduction aux «Services Web»

Évaluation et implémentation des langages

Applications et Services WEB: Architecture REST

Plan du cours. Historique du langage Nouveautés de Java 7

Labs Hadoop Février 2013

INGÉNIEUR LOGICIEL JAVAEE / GROOVY 8 ANS D EXPÉRIENCE

Méthode de Test. Pour WIKIROUTE. Rapport concernant les méthodes de tests à mettre en place pour assurer la fiabilité de notre projet annuel.

Curriculum Vitae de Michel Casabianca

Mardi 9 septembre

Machines Virtuelles. et bazard autour. Rémi Forax

HADOOP ET SON ÉCOSYSTÈME

Davi Trénou. Analyste/Développeur. Concepteur web. Consultant SAP Logan, H2K2B4 Montréal, QC, CA.

openarchitectureware & transformation de modèle Yannick Lizzi Architecte Logiciel itemis France Mail: lizzi@itemis.de

Devenez un véritable développeur web en 3 mois!

Hassene BELGACEM. Expériences Professionnelles. JEE architect / Technical leader. Ingénieur Informatique. Cycle Préparatoire

Informatique & Systèmes de Communication. Stages de 12 à 16 semaines aux Etats-Unis

PRIMAVERA P6 ENTERPRISE PROJECT PORTFOLIO MANAGEMENT WEB SERVICES

Méthode d Évaluation des Coûts liés à l Open Source (ECOS)

TP1 : Initiation à Java et Eclipse

Hébergement MMI SEMESTRE 4

Logiciels Open Sources et le Secteur Privé

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Java - la plateforme

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Les grandes facettes du développement Web Nicolas Thouvenin - Stéphane Gully

Design. Search. Cloud AMOA ECM. Intégration. IT Solutions. Formation. Développement. Mobilité. Open source. Infogérance. Ergonomie

Mercredi 15 Janvier 2014

L écosystème Hadoop Nicolas Thiébaud Tuesday, July 2, 13

Cloud. Définition? 08/11/2012. James Urquhart The Wisdom of Clouds

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Formation : Langues : Types d Intervention et Secteurs d Activité :

Classes et Objets en Ocaml.

Java Aspect Components (JAC)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Cloud et SOA La présence du Cloud révolutionne-t-elle l approche SOA?

Expert technique J2EE

Initiation à JAVA et à la programmation objet.

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Java 1.5 : principales nouveautés

COMPRENDRE L ARCHITECTURE DES WEB SERVICES REST. Amosse EDOUARD, Doctorant

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Celui qui vous parle. Yann Vigara

Le stockage local de données en HTML5

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

La technologie Java Card TM

Suite Jedox La Business-Driven Intelligence avec Jedox

Cours de Programmation 2

Intégration de systèmes

Transcription:

dans un environnement professionnel

Questions Quels langages et paradigmes connaissez vous? Procédural/Structuré? C, VB, Delphi? Objet? Java, C#, C++, PHP, Python, Ruby? Déclaratif? SQL? Logique? Prolog? Fonctionnel? Haskell, Ocaml?

Présentation

Un exemple On veut lancer 2 dés à 6 faces, 200 fois

Un exemple On veut lancer 2 dés à 6 faces, 200 fois On calcule la somme des 2 faces pour chaque lancer

Un exemple On veut lancer 2 dés à 6 faces, 200 fois On calcule la somme des 2 faces pour chaque lancer On affiche l histogramme correspondant, en mode texte

Un exemple On veut lancer 2 dés à 6 faces, 200 fois On calcule la somme des 2 faces pour chaque lancer On affiche l histogramme correspondant, en mode texte 2: XXXX 3: XXXXXXXXXX 4: XXXXXXXXXXXXXXXXXXXXXX 5: XXXXXXXXXXXXXXXXXXXXX 6: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 8: XXXXXXXXXXXXXXXXXXXXXXXXXX 9: XXXXXXXXXXXXXXXXXXXXX 10: XXXXXXXXXXXXXX 11: XXXXXXXXXXXX 12: XXXX

Une solution en Java

Une solution en Scala

La «vraie» solution en Scala Stream.continually(util.Random.nextInt(6)+util.Random.nextInt(6)+2).take(200).groupBy(identity).toList.sortBy(_._1).foreach { case(a, b) => println(a+":" + "X" * b.size) }

Pourquoi s y intéresser Un meilleur Java 100% compatible

Pourquoi s y intéresser Un meilleur Java 100% compatible Plus concis

Pourquoi s y intéresser Un meilleur Java 100% compatible Plus concis Inférence de types

Pourquoi s y intéresser Un meilleur Java 100% compatible Plus concis Inférence de types Librairie standard plus riche (collections, String )

Pourquoi s y intéresser Un meilleur Java 100% compatible Plus concis Inférence de types Librairie standard plus riche (collections, String ) Plus puissant : n- uplets, définition d opérateurs, pattern matching, DSL

Pourquoi s y intéresser Un meilleur Java 100% compatible Plus concis Inférence de types Librairie standard plus riche (collections, String ) Plus puissant : n- uplets, définition d opérateurs, pattern matching, DSL Interpréteur pour les tâches «rapides»

Un meilleur Java package example trait Similarity { def issimilar(x: Any): Boolean def isnotsimilar(x: Any): Boolean =!issimilar(x) } class Point(val x: Int = 0, val y: Int = 0) extends Similarity { def issimilar(obj: Any) = obj.isinstanceof[point] && obj.asinstanceof[point].x == x def +(p: Point) = new Point(x+p.x, y+p.y) } object Point extends App { val p1 = new Point(1, 2) val p2 = new Point val p3 = new Point(5) val p4 = new Point(y=6) val p5 = p2 + p4 println(p2.isnotsimilar(p5)) }

Pourquoi s y intéresser La programmation fonctionnelle est de plus en plus fréquente : Java 8, C#, VB#, F#, C++ 11, Swift, Fortran 95, PHP 5.3, Ruby/Python, Map/ Reduce

Pourquoi s y intéresser La programmation fonctionnelle est de plus en plus fréquente : Java 8, C#, VB#, F#, C++ 11, Swift, Fortran 95, PHP 5.3, Ruby/Python, Map/ Reduce Un des rares langages vraiment hybride

Pourquoi s y intéresser La programmation fonctionnelle est de plus en plus fréquente : Java 8, C#, VB#, F#, C++ 11, Swift, Fortran 95, PHP 5.3, Ruby/Python, Map/ Reduce Un des rares langages vraiment hybride Il est plus intéressant pour un programmeur de connaître d autres langages que d approfondir celui qu il maitrise

2012 Pourquoi s y intéresser

2015 Pourquoi s y intéresser

Pour la petite histoire Développé en Europe (à l EPFL) Conçu par Martin Odersky A conçu Generic Java qui va donner les génériques qu on connaît depuis Java 5 Le compilateur qu il a écrit va être repris par Sun pour faire javac Puis il a voulu faire un «meilleur» Java, moins limitant A commencé par Funnel, simple mais trop «pur», élégant d un point de vue théorique mais peu pratique En 2002/2004, Scala apparaît : plus pragmatique mais toujours mixant fonctionnel et objet

La programmation fonctionnelle

La programmation fonctionnelle Un vaste sujet qui nécessiterait plusieurs cours

La programmation fonctionnelle Un vaste sujet qui nécessiterait plusieurs cours Un programme est une fonction, composé d autres fonctions

La programmation fonctionnelle Un vaste sujet qui nécessiterait plusieurs cours Un programme est une fonction, composé d autres fonctions On transforme des données, on ne les modifie pas (elles sont immutables comme String en Java)

La programmation fonctionnelle Un vaste sujet qui nécessiterait plusieurs cours Un programme est une fonction, composé d autres fonctions On transforme des données, on ne les modifie pas (elles sont immutables comme String en Java) Historiquement, cela fait des langages plus lents et typés «recherche universitaire»

La programmation fonctionnelle Un vaste sujet qui nécessiterait plusieurs cours Un programme est une fonction, composé d autres fonctions On transforme des données, on ne les modifie pas (elles sont immutables comme String en Java) Historiquement, cela fait des langages plus lents et typés «recherche universitaire» Mais de plus en plus utilisé dans le monde réel (Erlang, R)

Composition

Composition def randomchars = Stream.continually(util.Random.nextPrintableChar)

Composition def randomchars = Stream.continually(util.Random.nextPrintableChar) def randomcharswithlength(n: Int) = { val length = util.random.nextint(n) randomchars.take(length) }

Composition def randomchars = Stream.continually(util.Random.nextPrintableChar) def randomcharswithlength(n: Int) = { val length = util.random.nextint(n) randomchars.take(length) } def randomcharstream(n: Int) = Stream.continually(randomCharsWithLength(n))

Composition

Composition def randomstrings(n: Int) = randomcharstream(n).map { s => s.mkstring }

Composition def randomstrings(n: Int) = randomcharstream(n).map { s => s.mkstring } def find(n: Int, count: Int, s: String) = randomstrings(n).take(count).filter(_.contains(s))

Composition def randomstrings(n: Int) = randomcharstream(n).map { s => s.mkstring } def find(n: Int, count: Int, s: String) = randomstrings(n).take(count).filter(_.contains(s)) randomstrings(10).zipwithindex.find(_._1.contains( "foo")).map { _._2 }

Composition

Composition def firsta = randomstrings(10).zipwithindex.find(_._1.contains("a")).m ap { _._2 }.getorelse(0)

Composition def firsta = randomstrings(10).zipwithindex.find(_._1.contains("a")).m ap { _._2 }.getorelse(0) def averagea(n: Int) = Stream.continually(firstA).take(n).reduce(_+_)/n

Composition def firsta = randomstrings(10).zipwithindex.find(_._1.contains("a")).m ap { _._2 }.getorelse(0) def averagea(n: Int) = Stream.continually(firstA).take(n).reduce(_+_)/n def parallelaveragea(n: Int) = Stream.continually(firstA).take(n).par.reduce(_+_)/n

Les gains

Les gains Map/reduce : on code moins, on peut paralléliser, distribuer

Les gains Map/reduce : on code moins, on peut paralléliser, distribuer Option : plus de null pointer et on utilise map

Les gains Map/reduce : on code moins, on peut paralléliser, distribuer Option : plus de null pointer et on utilise map Code plus fiable Commutateur en Erlang: 31.5 ms d indisponibilité par an http://web.cs.ucdavis.edu/~filkov/papers/ lang_github.pdf

Les gains Map/reduce : on code moins, on peut paralléliser, distribuer Option : plus de null pointer et on utilise map Code plus fiable Commutateur en Erlang: 31.5 ms d indisponibilité par an http://web.cs.ucdavis.edu/~filkov/papers/ lang_github.pdf On réutilise plus le code qu en programmation objet

Scala : un langage hybride

Scala : un langage hybride On garde la mutabilité

Scala : un langage hybride On garde la mutabilité On peut commencer en mode «meilleur Java»

Scala : un langage hybride On garde la mutabilité On peut commencer en mode «meilleur Java» Puis introduire de l immutabilité et des fonctions progressivement

Scala : un langage hybride On garde la mutabilité On peut commencer en mode «meilleur Java» Puis introduire de l immutabilité et des fonctions progressivement Les performances sont équivalentes à Java

Scala : un langage hybride On garde la mutabilité On peut commencer en mode «meilleur Java» Puis introduire de l immutabilité et des fonctions progressivement Les performances sont équivalentes à Java Très puissant : opérateurs, XML et autres DSLs, implicits, macros...

Scala : un langage hybride On garde la mutabilité On peut commencer en mode «meilleur Java» Puis introduire de l immutabilité et des fonctions progressivement Les performances sont équivalentes à Java Très puissant : opérateurs, XML et autres DSLs, implicits, macros... Mais il faut savoir se limiter : http://www.scala- lang.org/ old/node/8610

Les niveaux suivant Odersky Level A1: Beginning application programmer Java- like statements and expressions: standard operators, method calls, conditionals, loops, try/catch class, object, def, val, var, import, package Infix notation for method calls Simple closures Collections with map, filter, etc. for- expressions Level A2: Intermediate application programmer Pattern matching Trait composition Recursion, in particular tail recursion XML literals Level A3: Expert application programmer Folds, i.e. methods such as foldleft, foldright Streams and other lazy data structures Actors Combinator parsers Level L1: Junior library designer Type parameters Traits Lazy vals Control abstraction, currying By- name parameters Level L2: Senior library designer Variance annotations Existential types (e.g., to interface with Java wildcards) Self type annotations and the cake pattern for dependency injection Structural types (aka static duck typing) Defining map/flatmap/withfilter for new kinds of for- expressions Extractors Level L3: Expert library designer Early initializers Abstract types Implicit definitions Higher- kinded types

Dans le monde réel

Ecosystème

Ecosystème On peut utiliser toutes les librairies Java

Ecosystème On peut utiliser toutes les librairies Java Certaines ont des «wrappers» : Swing, slf4j, Google Guice, JPA, JMX, MongoDB, Hadoop, Spring

Ecosystème On peut utiliser toutes les librairies Java Certaines ont des «wrappers» : Swing, slf4j, Google Guice, JPA, JMX, MongoDB, Hadoop, Spring D autres supportent naturellement Java et Scala : Play, Akka, Spark...

Ecosystème On peut utiliser toutes les librairies Java Certaines ont des «wrappers» : Swing, slf4j, Google Guice, JPA, JMX, MongoDB, Hadoop, Spring D autres supportent naturellement Java et Scala : Play, Akka, Spark... Les librairies Java s utilisent telles quelles mais on écrit plus de code

Ecosystème On peut utiliser toutes les librairies Java Certaines ont des «wrappers» : Swing, slf4j, Google Guice, JPA, JMX, MongoDB, Hadoop, Spring D autres supportent naturellement Java et Scala : Play, Akka, Spark... Les librairies Java s utilisent telles quelles mais on écrit plus de code Supporté par Eclipse, Idea, Netbeans, Emacs et autres

Scalatest

Equivalent de Junit Scalatest

Scalatest Equivalent de Junit Mais en Scala donc un DSL

Scalatest

Spark

Spark Implémente map/reduce comme Hadoop mais en plus rapide

Spark Implémente map/reduce comme Hadoop mais en plus rapide Utilisé par Amazon, Ebay, IBM, NASA, Yahoo...

Spark Implémente map/reduce comme Hadoop mais en plus rapide Utilisé par Amazon, Ebay, IBM, NASA, Yahoo... Très simple

Spark Implémente map/reduce comme Hadoop mais en plus rapide Utilisé par Amazon, Ebay, IBM, NASA, Yahoo... Très simple Trés rapide : peut trier 100 To en 23 min et 1000 To en 234 min

Spark Implémente map/reduce comme Hadoop mais en plus rapide Utilisé par Amazon, Ebay, IBM, NASA, Yahoo... Très simple Trés rapide : peut trier 100 To en 23 min et 1000 To en 234 min https://databricks.com/blog/2014/10/10/spark- petabyte- sort.html

Spark def avg(n: Int) = sc.parallelize(1 to n).map{ i => firsta }.reduce(_+_)/n

Spark def avg(n: Int) = sc.parallelize(1 to n).map{ i => firsta }.reduce(_+_)/n def time[a](f: => A) = { val s = System.nanoTime val ret = f printf("time: %.2f sec\n", (System.nanoTime- s)/ 1.0e9) ret }

Scala.js On écrit en Scala et il compile en Javascript

Scala.js On écrit en Scala et il compile en Javascript Le code est concis et efficace

Scala.js On écrit en Scala et il compile en Javascript Le code est concis et efficace Intégré avec Node.js et autres

Scala.js On écrit en Scala et il compile en Javascript Le code est concis et efficace Intégré avec Node.js et autres On peut le voir comme un exemple «ultime» de DSL

Scala.js

Scala.Js

Play Un framework complet pour faire des sites Web Utilisable en Java et Scala Typé «rapide et efficace», moins de contraintes que J2EE, rechargement à chaud Utilisé par LinkedIn, Coursera

Play Très complet : RESTful Templates Authentification CRUD Validation (par annotations) Planificateur de tâches SMTP mailer JSON & XML Persistence basée sur JPA Embarque une base de données pour simplifier les tests (h2) Embarque un framework de tests etc.

Play

Autres https://wiki.scala- lang.org/display/sw/tools +and+libraries https://twitter.github.io/

Twitter

Twitter Ils utilisaient (et utilisent) Ruby et Ruby on Rails

Twitter Ils utilisaient (et utilisent) Ruby et Ruby on Rails Très efficace pour le front- end mais peu adapté aux traitements longs (performance, GC...)

Twitter Ils utilisaient (et utilisent) Ruby et Ruby on Rails Très efficace pour le front- end mais peu adapté aux traitements longs (performance, GC...) Besoin d un typage fort

Twitter Ils utilisaient (et utilisent) Ruby et Ruby on Rails Très efficace pour le front- end mais peu adapté aux traitements longs (performance, GC...) Besoin d un typage fort Ils ont regardé d autres langages : C++, Python, Erlang, Java, JRuby...

Twitter Ils utilisaient (et utilisent) Ruby et Ruby on Rails Très efficace pour le front- end mais peu adapté aux traitements longs (performance, GC...) Besoin d un typage fort Ils ont regardé d autres langages : C++, Python, Erlang, Java, JRuby... La gestion de la concurrence est un gros plus dans Scala

Guardian.co.uk Fondé en 1821 mais a choisi de devenir principalement numérique

Guardian.co.uk Fondé en 1821 mais a choisi de devenir principalement numérique La 1 ère architecture était basée sur Java, Spring, Hibernate, Velocity et Oracle

Guardian.co.uk Fondé en 1821 mais a choisi de devenir principalement numérique La 1 ère architecture était basée sur Java, Spring, Hibernate, Velocity et Oracle Mais elle était trop monolithique et pas assez flexible => l ajout de nouvelles fonctions était long

Guardian.co.uk Fondé en 1821 mais a choisi de devenir principalement numérique La 1 ère architecture était basée sur Java, Spring, Hibernate, Velocity et Oracle Mais elle était trop monolithique et pas assez flexible => l ajout de nouvelles fonctions était long Python + Django était une solution viable mais qui nécessitait de réécrire le code Java

Guardian.co.uk Ils utilisaient Scala à travers Scalatest pour leur code Java

Guardian.co.uk Ils utilisaient Scala à travers Scalatest pour leur code Java Ils ont donc généralisé son usage

Guardian.co.uk Ils utilisaient Scala à travers Scalatest pour leur code Java Ils ont donc généralisé son usage Puis sont passé à Play + Akka

Guardian.co.uk Ils utilisaient Scala à travers Scalatest pour leur code Java Ils ont donc généralisé son usage Puis sont passé à Play + Akka Plus de 2 millions de pages vues par jour

Guardian.co.uk Ils utilisaient Scala à travers Scalatest pour leur code Java Ils ont donc généralisé son usage Puis sont passé à Play + Akka Plus de 2 millions de pages vues par jour 0 interruption de service

Autres LinkedIn (ont construit Apache Kafka) Electricité de France Trading Novell Xerox FourSquare Sony Siemens

Echecs

Echecs Yammer (www.yammer.com) est un réseau social d entreprise

Echecs Yammer (www.yammer.com) est un réseau social d entreprise Après avoir décidé de migrer de Scala à Java, ils ont fait machine arrière en 2011

Echecs Yammer (www.yammer.com) est un réseau social d entreprise Après avoir décidé de migrer de Scala à Java, ils ont fait machine arrière en 2011 Ils citent : La complexité du langage D avoir sous- estimé le travail de formation et la difficulté de trouver des programmeurs Scala expérimentés Une compatibilité ascendante imparfaite Des problèmes de performance

Echecs Yammer (www.yammer.com) est un réseau social d entreprise Après avoir décidé de migrer de Scala à Java, ils ont fait machine arrière en 2011 Ils citent : La complexité du langage D avoir sous- estimé le travail de formation et la difficulté de trouver des programmeurs Scala expérimentés Une compatibilité ascendante imparfaite Des problèmes de performance La plupart des objections relèvent de l organisation ou ne sont plus valides

Echecs Yammer (www.yammer.com) est un réseau social d entreprise Après avoir décidé de migrer de Scala à Java, ils ont fait machine arrière en 2011 Ils citent : La complexité du langage D avoir sous- estimé le travail de formation et la difficulté de trouver des programmeurs Scala expérimentés Une compatibilité ascendante imparfaite Des problèmes de performance La plupart des objections relèvent de l organisation ou ne sont plus valides Mais il ne faut pas sous- estimer le coût du changement et savoir le faire progressivement

Notre expérience

Density

Density Editeur de progiciels pour la gestion d actifs, les mutuelles...

Density Editeur de progiciels pour la gestion d actifs, les mutuelles... 1 millions de lignes de Java en 10 ans

Density Editeur de progiciels pour la gestion d actifs, les mutuelles... 1 millions de lignes de Java en 10 ans 300 000 lignes «techniques», 700 000 lignes «métier»

Density Editeur de progiciels pour la gestion d actifs, les mutuelles... 1 millions de lignes de Java en 10 ans 300 000 lignes «techniques», 700 000 lignes «métier» Scala utilisé depuis 2 ans pour le nouveau code technique

Density Editeur de progiciels pour la gestion d actifs, les mutuelles... 1 millions de lignes de Java en 10 ans 300 000 lignes «techniques», 700 000 lignes «métier» Scala utilisé depuis 2 ans pour le nouveau code technique Le code «métier» reste en Java (8 depuis peu)

Les connections «résilientes»

Les connections «résilientes» L application garde des connections à la base de données

Les connections «résilientes» L application garde des connections à la base de données On veut qu elle détecte les pertes de connection, prévienne l utilisateur et lui propose de se reconnecter

Les connections «résilientes» L application garde des connections à la base de données On veut qu elle détecte les pertes de connection, prévienne l utilisateur et lui propose de se reconnecter Mais cela peut arriver n importe où dans le code (persistence automatique)

Les connections «résilientes» L application garde des connections à la base de données On veut qu elle détecte les pertes de connection, prévienne l utilisateur et lui propose de se reconnecter Mais cela peut arriver n importe où dans le code (persistence automatique) Certains opérations peuvent être réessayées, d autres non

Les connections «résilientes» L application garde des connections à la base de données On veut qu elle détecte les pertes de connection, prévienne l utilisateur et lui propose de se reconnecter Mais cela peut arriver n importe où dans le code (persistence automatique) Certains opérations peuvent être réessayées, d autres non http://javatoscala.com/

Les connections «résilientes»

Les connections «résilientes» On encapsule les connection et les «statements» dans une facade

Les connections «résilientes» On encapsule les connection et les «statements» dans une facade On l écrit en Java avec Eclipse

Les connections «résilientes» On encapsule les connection et les «statements» dans une facade On l écrit en Java avec Eclipse On convertit en Scala avec http:// javatoscala.com/

Les connections «résilientes» On encapsule les connection et les «statements» dans une facade On l écrit en Java avec Eclipse On convertit en Scala avec http:// javatoscala.com/ On écrit un «retry» et on le met devant les méthodes qui le supportent

Les connections «résilientes»

Les connections «résilientes» On encapsule les connection et les «statements» dans une facade avec la même interface

Les connections «résilientes» On encapsule les connection et les «statements» dans une facade avec la même interface On l écrit en Java avec Eclipse

Les connections «résilientes» On encapsule les connection et les «statements» dans une facade avec la même interface On l écrit en Java avec Eclipse On convertit en Scala avec http:// javatoscala.com/

Les connections «résilientes» On encapsule les connection et les «statements» dans une facade avec la même interface On l écrit en Java avec Eclipse On convertit en Scala avec http:// javatoscala.com/ On écrit «retry», «safely» et on les met devant les méthodes qui le supportent

Les connections «résilientes»

Reporting avec Birt

Reporting avec Birt On intègre un outil de reporting open- source : Birt

Reporting avec Birt On intègre un outil de reporting open- source : Birt Ecrit en Java

Reporting avec Birt On intègre un outil de reporting open- source : Birt Ecrit en Java API complexe

Reporting avec Birt On intègre un outil de reporting open- source : Birt Ecrit en Java API complexe Le gain est faible

Reporting avec Birt

Reporting avec Birt

Un compilateur de formules

Un compilateur de formules Le but est de définir des formules sur les champs de nos objets

Un compilateur de formules Le but est de définir des formules sur les champs de nos objets Nous utilisons un interpréteur Java modifié (BeanShell) mais c est lent

Un compilateur de formules Le but est de définir des formules sur les champs de nos objets Nous utilisons un interpréteur Java modifié (BeanShell) mais c est lent L éditeur ne fait pas de complétion comme un IDE

Un compilateur de formules

Un compilateur de formules Pour l éditeur, nous utilisons Ensime embarqué

Un compilateur de formules Pour l éditeur, nous utilisons Ensime embarqué Si on a une classe Java Foo avec geta et getb, on génère, on compile et on charge :

Avantages et inconvénients : notre expérience

Avantages et inconvénients : notre expérience Avantages

Avantages et inconvénients : notre expérience Avantages Très puissant

Avantages et inconvénients : notre expérience Avantages Très puissant Plus concis, plus agréable à programmer

Avantages et inconvénients : notre expérience Avantages Très puissant Plus concis, plus agréable à programmer Permet d envisager le parallélisme plus sereinement

Avantages et inconvénients : notre expérience Avantages Très puissant Plus concis, plus agréable à programmer Permet d envisager le parallélisme plus sereinement Permet de faire du code plus fiable tout en restant rapide

Avantages et inconvénients : notre expérience Avantages Très puissant Plus concis, plus agréable à programmer Permet d envisager le parallélisme plus sereinement Permet de faire du code plus fiable tout en restant rapide Inconvénients

Avantages et inconvénients : notre expérience Avantages Très puissant Plus concis, plus agréable à programmer Permet d envisager le parallélisme plus sereinement Permet de faire du code plus fiable tout en restant rapide Inconvénients Langage complexe et presque trop riche : il faut savoir se limiter

Avantages et inconvénients : notre expérience Avantages Très puissant Plus concis, plus agréable à programmer Permet d envisager le parallélisme plus sereinement Permet de faire du code plus fiable tout en restant rapide Inconvénients Langage complexe et presque trop riche : il faut savoir se limiter Besoin de changer (un peu) notre environnement de développement

Avantages et inconvénients : notre expérience Avantages Très puissant Plus concis, plus agréable à programmer Permet d envisager le parallélisme plus sereinement Permet de faire du code plus fiable tout en restant rapide Inconvénients Langage complexe et presque trop riche : il faut savoir se limiter Besoin de changer (un peu) notre environnement de développement Recrutement possible mais moins facile

Avantages et inconvénients : notre expérience Avantages Très puissant Plus concis, plus agréable à programmer Permet d envisager le parallélisme plus sereinement Permet de faire du code plus fiable tout en restant rapide Inconvénients Langage complexe et presque trop riche : il faut savoir se limiter Besoin de changer (un peu) notre environnement de développement Recrutement possible mais moins facile Part de marché et pérennité correctes mais loin de Java

Alternatives

Java 8 Alternatives

Alternatives Java 8 Autre langages : Clojure, Erlang, Haskell, F#...

Questions?