SlideShare a Scribd company logo
1 of 142
Lessons Learned:
Use of Modern JVM Languages Besides Java
Kai Wähner (MaibornWolff et al GmbH)


                                                                                         Main Tasks
                                                                    Evaluation of Technologies and Products
                                                                           Requirements Engineering
                                                                      Enterprise Architecture Management
                                                                        Business Process Management
                                                                Architecture and Development of Applications
                                                                       Planning and Introduction of SOA
                                                                      Integration of Legacy Applications
                                                                               Cloud Computing
                                                                                   Big Data

              Consulting                                                                  Contact
              Developing                                                  Email: kontakt@kai-waehner.de
               Speaking                                                   Blog: www.kai-waehner.de/blog
               Coaching                                                        Twitter: @KaiWaehner
                                                                          Social Networks: Xing, LinkedIn
                Writing

www.mwea.de    Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner
Java platform




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Variety of languages on the .NET platform




                                                    C                                   C++

                       C#                                                                  F#
                                                      .NET
                       Silverlight                                                      Scala


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner           01.10.2012
Variety of languages on the Java platform




                                       Java                                             Java


                        Java                           Java
                                                                                         Java
                                          Java

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner           01.10.2012
Characteristics of the Java language




             „It’s not all
      rainbows and unicorns
        in the land of Java“




                          http://batsov.com/Java/Groovy/2011/05/06/jvm-langs-groovy.html



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner      01.10.2012
Java platform




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Java Virtual Machine (JVM)




                Java Runtime Environment (JVM + Java Standard Libraries)
       => JVM Bytecode -> VM-specific internal representation -> Native machine code




www.mwea.de    Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Java Virtual Machine (JVM)


              Ahead-of-time compiled
               Java Bytecode (.class)




                Java Runtime Environment (JVM + Java Standard Libraries)
       => JVM Bytecode -> VM-specific internal representation -> Native machine code




www.mwea.de        Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Java Virtual Machine (JVM)


              Ahead-of-time compiled                                                         Ahead-of-time compiled
               Java Bytecode (.class)                                                        Scala Bytecode (.class)




                Java Runtime Environment (JVM + Java Standard Libraries)
       => JVM Bytecode -> VM-specific internal representation -> Native machine code




www.mwea.de        Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                   01.10.2012
Java Virtual Machine (JVM)


              Ahead-of-time compiled                                                         Ahead-of-time compiled
               Java Bytecode (.class)                                                        Scala Bytecode (.class)




                Java Runtime Environment (JVM + Java Standard Libraries)
       => JVM Bytecode -> VM-specific internal representation -> Native machine code




              Ahead-of-time compiled
              Groovy Bytecode (.class)




www.mwea.de        Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                   01.10.2012
Java Virtual Machine (JVM)


              Ahead-of-time compiled                                                          Ahead-of-time compiled
               Java Bytecode (.class)                                                         Scala Bytecode (.class)




                Java Runtime Environment (JVM + Java Standard Libraries)
       => JVM Bytecode -> VM-specific internal representation -> Native machine code



                                                                                             Interpreted or Just-in-time
                                                                                             compiled Groovy Bytecode
              Ahead-of-time compiled                                                                (In-memory)
              Groovy Bytecode (.class)

                                                                                                Groovy Script Code


www.mwea.de        Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                     01.10.2012
Languages for the Java platform




       240+ further languages:
     http://tinyurl.com/3ql5m98


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
"Escape from the Java language prison"




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
What is the key message?




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Key message




 Java is still the most important programming platform




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Key message




 Java is still the most important programming platform
 Java is not the new Cobol



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Key message




 Java is still the most important programming platform
 Java is not the new Cobol
 Modern JVM languages besides Java create added value

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Agenda


    1.  Reduced Efforts
    2.  Increased Flexibility
    3.  Reduced Complexity
    4.  Reduced Heterogeneity
    5.  Innovation
    6.  Language Selection
    7.  Problems
    8.  Getting Started
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Agenda


    1.  Reduced Efforts
    2.  Increased Flexibility
                                                                                        Business
    3.  Reduced Complexity
                                                                                         Value
    4.  Reduced Heterogeneity
    5.  Innovation
    6.  Language Selection
    7.  Problems
    8.  Getting Started
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner       01.10.2012
Agenda


    1.  Reduced Efforts
    2.  Increased Flexibility
    3.  Reduced Complexity
    4.  Reduced Heterogeneity
    5.  Innovation
    6.  Language Selection
    7.  Problems
                                                                                        Lessons
    8.  Getting Started
                                                                                        learned
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner      01.10.2012
Agenda


    1.  Reduced Efforts
    2.  Increased Flexibility
                                                                                        Business
    3.  Reduced Complexity
                                                                                         Value
    4.  Reduced Heterogeneity
    5.  Innovation
    6.  Language Selection
    7.  Problems
    8.  Getting Started
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner       01.10.2012
Lines of code (Java)




        employees.sort (
        new Comparator{
        public int compare(Object emp1, Object emp2){
          int emp1Age = ( (Employee) emp1).getAge();
         int emp2Age = ( (Employee) emp2).getAge();
         if( emp1Age > emp2Age )
                return 1;
         else if( emp1Age < emp2Age )
                return -1;
         else
         return 0;
   }



                   Java



www.mwea.de      Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Lines of code (Scala)




        employees.sort (
                                                                                      employees.sort (_.age > _.age)
        new Comparator{
        public int compare(Object emp1, Object emp2){
          int emp1Age = ( (Employee) emp1).getAge();
         int emp2Age = ( (Employee) emp2).getAge();
         if( emp1Age > emp2Age )
                return 1;
         else if( emp1Age < emp2Age )
                return -1;
         else
         return 0;
   }



                   Java                                                                        Scala



www.mwea.de      Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                      01.10.2012
Lines of code (Scala)




                                                                                   employees.sort (_.age > _.age)

        Scala API:




                                                                                            Scala



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                      01.10.2012
Lines of code


     <books>
        <book isbn="…">
          <title>Groovy in Action</title>
          <author>Dierk Koenig</author>
          <author>Paul King</author>
          …
        </book>
        <book isbn="…">
          <title>Grails in Action</title>
          <author>Glen Smith</author>
          <author>Peter Ledbrook</author>
        </book>
          ...
     </books>

     (Making Java Groovy, Kenneth A. Kousen)




www.mwea.de        Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Lines of code


     <books>
        <book isbn="…">
          <title>Groovy in Action</title>
          <author>Dierk Koenig</author>
          <author>Paul King</author>
          …
        </book>
        <book isbn="…">
          <title>Grails in Action</title>
          <author>Glen Smith</author>
          <author>Peter Ledbrook</author>
        </book>
          ...
     </books>

     (Making Java Groovy, Kenneth A. Kousen)




      Task: Get the title of the second book!

www.mwea.de        Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Lines of code (Java)


     <books>                                                        DocumentBuilderFactory factory =
        <book isbn="…">                                              DocumentBuilderFactory.newInstance();
          <title>Groovy in Action</title>                           Document doc = null;
          <author>Dierk Koenig</author>
          <author>Paul King</author>                          try {DocumentBuilder b = factory.newDocumentBuilder();
          …                                                         doc = b.parse("src/jag/xml/books.xml");
        </book>                                               } catch (Exception e) {        // Parser, SAX, IO
        <book isbn="…">
          <title>Grails in Action</title>                           e.printStackTrace();}
          <author>Glen Smith</author>                         if (doc == null) return;
          <author>Peter Ledbrook</author>
                                                                    NodeList titles = doc.getElementsByTagName("title");
        </book>
          ...                                                       Element titleNode = (Element) titles.item(1);
     </books>                                                       String title = titleNode.getFirstChild().getNodeValue();
                                                                    System.out.println("The second title is " + title);
     (Making Java Groovy, Kenneth A. Kousen)




      Task: Get the title of the second book!

www.mwea.de        Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                        01.10.2012
Lines of code (Groovy)


     <books>
        <book isbn="…">
          <title>Groovy in Action</title>
          <author>Dierk Koenig</author>
          <author>Paul King</author>
          …                                                         root = new XmlSlurper().parse('books.xml')
        </book>                                                     println root.book[1].title
        <book isbn="…">
          <title>Grails in Action</title>
          <author>Glen Smith</author>
          <author>Peter Ledbrook</author>
        </book>
          ...
     </books>

     (Making Java Groovy, Kenneth A. Kousen)




      Task: Get the title of the second book!

www.mwea.de        Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                 01.10.2012
Agenda


    1.  Reduced Efforts
    2.  Increased Flexibility
                                                                                        Business
    3.  Reduced Complexity
                                                                                         Value
    4.  Reduced Heterogeneity
    5.  Innovation
    6.  Language Selection
    7.  Problems
    8.  Getting Started
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner       01.10.2012
Increased flexibility




                         Modularisation



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Modularisation




                            http://www.artima.com/scalazine/articles/package_objects.html




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner       01.10.2012
Increased flexibility




                                              Scripting



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Scripting



     Change behaviour of an application
          dynamically at runtime


                                             Direct execution
                                                                 vs.

              JSR 233 Scripting for the Java Platform



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Increased flexibility




                    Meta programming



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Meta programming (Runtime)



              // Java Code
              public class ABC() {

                  public static ABC factory() {
                          return new ABC();
                  }

                  public static void main(String[] args) {
                          ABC abc = ABC.factory());
                  }
              }


www.mwea.de         Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Meta programming (Runtime)




              // A little bit of (Groovy-) Magic:
              Class.metaClass.factory = { Object[] args ->
                delegate.metaClass.invokeConstructor(*args)
              }




www.mwea.de     Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Meta programming (Runtime)




              // A little bit of (Groovy-) Magic:
              Class.metaClass.factory = { Object[] args ->
                delegate.metaClass.invokeConstructor(*args)
              }

              // Now, all Java classes have a „factory()“ method:
              HashMap hashmap = HashMap. factory ()
              Integer integer = Integer. factory (42)
              Dimension dimension = Dimension. factory (2, 3)


www.mwea.de     Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Meta programming (Runtime)




                                In Practice: „Finder“ in Grails




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Meta programming replacement in Scala:
 Implicit Conversions




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Meta programming replacement in Scala:
 Implicit Conversions




                                            Attention: Use it wisely!
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Increased flexibility




                   Build management



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Build tools




                                                                                         Ant
                                                                                         vs.


                                                                                    Maven
www.mwea.de    Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner         01.10.2012
Build tools




                                                                                         Ant
    Gradle                                                                               vs.


                                                                                    Maven
www.mwea.de    Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner         01.10.2012
Build tools




                                                                                         Ant
    Gradle                                                                               vs.


                                                                                    Maven
www.mwea.de    Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner         01.10.2012
Build tools




                                                                                         Ant
    Gradle                                                                               vs.


                                                                                    Maven
www.mwea.de    Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner         01.10.2012
Build tools



    Further advantages
    (e.g. Scripting)
                                                                                         Ant
    Gradle                                                                               vs.


                                                                                    Maven
www.mwea.de    Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner         01.10.2012
Agenda


    1.  Reduced Efforts
    2.  Increased Flexibility
                                                                                        Business
    3.  Reduced Complexity
                                                                                         Value
    4.  Reduced Heterogeneity
    5.  Innovation
    6.  Language Selection
    7.  Problems
    8.  Getting Started
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner       01.10.2012
Reduced complexity




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Reduced complexity




                                   Concurrency



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Concurrency




                      Current situation?



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Current situation




     „The
  Gigahertz
     Race
   is over!“


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
The industry has an answer




                                                                                    Multicore
                                                                                     CPUs

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner     01.10.2012
Concurrency




                                The problem?



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
The problem




              Process
                 A


                                                                                           Shared
                                                                                            State
              Process
                 B



www.mwea.de      Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner        01.10.2012
The problem




      Thread-API
        Deadlocks
        Race Conditions
        Exceptions




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Reduced complexity




                                          Solution?



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Attempted rescue




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Good books! However, the Thread API is still complex ...




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Reduced complexity




                             Better solution?



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Alternatives* for dealing with state (instead of Thread API)




   Shared Mutability => Software Transactional Memory (STM)

                                                              versus


                                Isolated Mutability => Actors




                                                                                        * Purely Immutability => Tough to realize


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                         01.10.2012
Shared Mutability: Software Transactional Memory (STM)


 „Clojure does not replace the Java thread system,
  rather it works with it. [But there are] no locks! “

  => An alternative to lock-based synchronization!




                       http://www.heise.de/developer/artikel/Benefits-1030160.html


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Isolated Mutability: Actors




              „Communicate by passing immutable Messages“




                   http://www.infoq.com/presentations/Actor-based-Programming (Jamie Ridgway)


www.mwea.de    Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner          01.10.2012
Actors in Scala

         val chatRoom = actor {
              while (true) {
                  receive {
                                 case Subscribe(user) => // do something
                                 case Unsubscribe(user) => // do something
                                 case UserPost(user, post) => // do something
         }}}


         // send a asynchronous message to the Actor:
         chatRoom ! Subscribe(User("Bob"))


                          No Thread API, Locks, Synchronisation
                (and therefore lower threat to deadlocks or race conditions)


www.mwea.de        Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Actors in Groovy with GPars (Groovy Parallel Systems)


                                         „Give Actors an OO facade“
         @ActiveObject
         class Decryptor {

              @ActiveMethod        // asynchronous => return a Future object
              def decrypt(String encryptedText) {
                        return encryptedText.reverse() }

              @ActiveMethod
              def decrypt(Integer encryptedNumber) {
                        return -1*encryptedNumber + 142 } }

              final Decryptor decryptor = new Decryptor()

              def part1 = decryptor.decrypt(' noitcA ni yvoorG')
              def part2 = decryptor.decrypt(140)

              print part1.get() // == Groovy in Action
              print part2.get() // == 2


www.mwea.de         Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Reduced complexity




                                        Domain
                                        Specific
                                       Languages
                                         (DSL)

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Domain Specific Languages (DSL)




     A [internal] DSL is a programming language that mimics the terms,
     idioms, and expressions used among experts in the targeted domain.
     Code written in a DSL reads like structured prose for the domain.

     Ideally, a domain expert with little experience in programming can
     read, understand, and validate this code. Sometimes, a domain
     expert might be able to write DSL code, even if he isn’t a professional
     programmer.
                     http://ofps.oreilly.com/titles/9780596155957/DomainSpecificLanguages.html


www.mwea.de    Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner           01.10.2012
Internal DSL in test frameworks




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
ScalaTest (Scala)


   Which code is easier to understand?




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
ScalaTest (Scala)


   Which code is easier to understand?




   Java:                     assertTrue(map.containsKey(‘a’));




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
ScalaTest (Scala)


   Which code is easier to understand?




   Java:                     assertTrue(map.containsKey(‘a’));




   Scala:                    map should contain key ‘a’


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Example for an internal Scala DSL




                                                                                           Baysick DSL
                                                                                        (simulates BASIC)
                                                                                            http://blog.fogus.me/2009/03/26/
                                                                                         baysick-a-scala-dsl-implementing-basic/




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                          01.10.2012
Agenda


    1.  Reduced Efforts
    2.  Increased Flexibility
                                                                                        Business
    3.  Reduced Complexity
                                                                                         Value
    4.  Reduced Heterogeneity
    5.  Innovation
    6.  Language Selection
    7.  Problems
    8.  Getting Started
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner       01.10.2012
Reduced heterogeneity




                                                                                          Install
                    Source code                                                            script
                       (Java)                                                             (Shell)




                        Dynamic
                     database script
                                                                                        Build
                         (JRuby)
                                                                                        (XML)


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner           01.10.2012
Reduced heterogeneity




                                                  Source code

                                    Dynamic database script

                                                  Install script

                                                          Build

                                                       (Groovy)




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Agenda


    1.  Reduced Efforts
    2.  Increased Flexibility
                                                                                        Business
    3.  Reduced Complexity
                                                                                         Value
    4.  Reduced Heterogeneity
    5.  Innovation
    6.  Language Selection
    7.  Problems
    8.  Getting Started
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner       01.10.2012
Innovation




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Innovation




                                                                                        New
                                                                                        Technologies
                                                                                          Concepts
                                                                                          Solutions




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner           01.10.2012
Innovation




                                                                                        New
                                                                                        Technologies
                                                                                          Concepts
                                                                                          Solutions




                                                                                    Marketing
                                                                          Article, blogs, conference sessions

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner           01.10.2012
Innovation




                                                                                        New
                                                                                        Technologies
                                                                                          Concepts
                                                                                          Solutions




  New Projects                                                                      Marketing
Consulting, Coaching, Development                                         Article, blogs, conference sessions

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner           01.10.2012
Marketing




                                                        „War for Talents“




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Marketing




                                                        „War for Talents“




                                                                       „Follow the Leader“

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Conclusion "business value"



         Reduced efforts
                                                                                           Reduced
                                                                                          complexity


                                             Increased
                                              flexibility




                                                                                          Reduced
              Innovation                                                                Heterogeneity



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner              01.10.2012
Conclusion "business value"



         Reduced efforts
                                                                                           Reduced
                                                                                          complexity


                                             Increased
                                              flexibility




                                                                                          Reduced
              Innovation                                                                Heterogeneity



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner              01.10.2012
Agenda


    1.  Reduced Efforts
    2.  Increased Flexibility
    3.  Reduced Complexity
    4.  Reduced Heterogeneity
    5.  Innovation
    6.  Language Selection
    7.  Problems
                                                                                        Lessons
    8.  Getting Started
                                                                                        learned
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner      01.10.2012
Languages for the Java platform




      240+ further languages:
    http://tinyurl.com/3ql5m98

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Language selection




                               <Excursus>


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Excursus: Typing




                                                                                           Dynamically
                                                                                              typed
        Complexity


                                                                                           languague


                                            Statically
                                              typed
                                            language



                                                                Power
www.mwea.de          Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner             01.10.2012
Excursus: Programming concepts




                                            Scala in Depth, Joshua D. Suereth



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Language selection




                               </Excursus>


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Languages for the Java platform




                  Which language(s)
                   shall we use?


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Conclusion „language selection"




              The language has to be
         „Java Friendly“ and „Feature Rich“



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Languages for the Java platform




      240+ further languages:
    http://tinyurl.com/3ql5m98

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Languages for the Java platform




                                             Maturity?



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Maturity




      240+ further languages:
    http://tinyurl.com/3ql5m98

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Maturity




      240+ further languages:
    http://tinyurl.com/3ql5m98

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Languages for the Java platform




                                Prevalence?



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Prevalence?




      240+ further languages:
    http://tinyurl.com/3ql5m98

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Prevalence?




      240+ further languages:
    http://tinyurl.com/3ql5m98

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Languages for the Java platform




                Platform integration?



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Syntax alignment


     import java.util.*; // Java
     Date today = new Date(); // Java




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Syntax alignment


     import java.util.*; // Java
     Date today = new Date(); // Java

     today = new Date() // Groovy




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Syntax alignment


     import java.util.*; // Java
     Date today = new Date(); // Java

     today = new Date() // Groovy

     import java.util._ // Scala
     var today = new Date // Scala




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Syntax alignment


     import java.util.*; // Java
     Date today = new Date(); // Java

     today = new Date() // Groovy

     import java.util._ // Scala
     var today = new Date // Scala

     java_import ‘java.util.Date' # JRuby
     today = Date.new # JRuby




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Syntax alignment


     import java.util.*; // Java
     Date today = new Date(); // Java

     today = new Date() // Groovy

     import java.util._ // Scala
     var today = new Date // Scala

     java_import ‘java.util.Date' # JRuby
     today = Date.new # JRuby

     (import '(java.util Date)) ; Clojure (def today (new Date)) ;
     Clojure (def today (Date.)) ; Clojure alternative

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Good IDE-support: The Paranthesis Generator?




     (import '(java.util Date)) ; Clojure (def today (new Date)) ;
     Clojure (def today (Date.)) ; Clojure alternative

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Plattform integration? => No syntax alignment!




                              JRuby
        Feature Rich


                                                 Clojure
                             Jython

                                                                                        JavaScript

                                                                  Java Friendly
www.mwea.de            Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner       01.10.2012
Seamless integration?




                                                            Java



               Groovy?                                                                  „Other“


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner        01.10.2012
Seamless Integration? (Groovy)

     public class Article {
            private String name;
            private String price;
            public Article(String name, String price) {
                this.name = name;
                this.price = price;
            }                                                                                class Article {

            public String getName() {                                                         String name
                return name;                                                                  String price
            }
                                                                                             }
            public void setName(String name) {
                this.name = name;
            }
            public String getPrice() {
                return price;
            }
            public void setPrice(String price) {
                this.price = price;
            }
        }



                       Java                                                                          Groovy
www.mwea.de        Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                     01.10.2012
Seamless Integration? (Groovy)

     public class Article {                                                  public class Article {
            private String name;                                                     private String name;
            private String price;                                                    private String price;
            public Article(String name, String price) {                              public Article(String name, String price) {
                this.name = name;                                                        this.name = name;
                this.price = price;                                                      this.price = price;
            }                                                                        }
            public String getName() {                                                public String getName() {
                return name;                                                             return name;
            }                                                                        }
            public void setName(String name) {                                       public void setName(String name) {
                this.name = name;                                                        this.name = name;
            }                                                                        }
            public String getPrice() {                                               public String getPrice() {
                return price;                                                            return price;
            }                                                                        }
            public void setPrice(String price) {                                     public void setPrice(String price) {
                this.price = price;                                                      this.price = price;
            }                                                                        }
        }                                                                        }



                       Java                                                                       Groovy
www.mwea.de        Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                        01.10.2012
Seamless integration?




                                                            Java



                  Groovy                                                                „Other“


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner        01.10.2012
Plattform integration?




                              JRuby
                                                                                                 Groovy
        Feature Rich


                                                 Clojure
                             Jython

                                                                                        JavaScript

                                                                  Java Friendly
www.mwea.de            Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner       01.10.2012
Seamless integration?




                                                            Java



                „Other“                                                                 Scala?


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner        01.10.2012
Seamless integration? (Scala) => Bytecode != Bytecode


   Implicit Conversions                                                                 Inexpressible
             vs.                                                                          Language
  Object Identity / Equality                                                              Features



                                                                                             Objects
                                                                                               vs.
                                                                                            Primitives
      Uniform
      Access
      Principle
                                                                     Java Bytecode Analysis

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner         01.10.2012
Seamless integration? (Scala) => Bytecode != Bytecode



     „Usually, it just works ...




                                                                 ... if not, define a Java Interface.“

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner    01.10.2012
Seamless integration?




                                                            Java



                „Other“                                                                 „Scala“


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner        01.10.2012
Plattform integration?




                              JRuby                                           Scala
                                                                                                 Groovy
        Feature Rich


                                                 Clojure
                             Jython

                                                                                        JavaScript

                                                                  Java Friendly
www.mwea.de            Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner       01.10.2012
Languages for the Java platform




            240+ Weitere:
    http://tinyurl.com/3ql5m98

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Languages for the Java platform




            240+ Weitere:
    http://tinyurl.com/3ql5m98

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Conclusion „language selection"




              The language has to be
         „Java Friendly“ and „Feature Rich“



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Conclusion „language selection"




              „The dynamic One“                                                           „The functional One“




              The language has to be
         „Java Friendly“ and „Feature Rich“

                       (Other JVM languages only if „forced“)


www.mwea.de     Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner               01.10.2012
Conclusion „language selection"




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Agenda


    1.  Reduced Efforts
    2.  Increased Flexibility
    3.  Reduced Complexity
    4.  Reduced Heterogeneity
    5.  Innovation
    6.  Language Selection
    7.  Problems
                                                                                        Lessons
    8.  Getting Started
                                                                                        learned
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner      01.10.2012
Why use new languages? Java does the job, right?




                                                            IT
                                                              vs.



                                          Politics
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Why use new languages? Java does the job, right?




              Cloud Computing will be requested by the customer...




www.mwea.de     Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Why use new languages? Java does the job, right?




              Cloud Computing will be requested by the customer...



        NoSQL will be required for big data and high scalability...




www.mwea.de     Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Why use new languages? Java does the job, right?




              Cloud Computing will be requested by the customer...



        NoSQL will be required for big data and high scalability...



... but modern JVM languages will probably never be demanded 




www.mwea.de     Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Problems with modern JVM Languages




                ‚Real life‘ problems



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Problems with modern JVM Languages


     -  New Concepts for Java / OO Developers
     -  Powerful vs. Ease of Use
     -  Confusion due to Meta Programming
     -  Bytecode != Bytecode
     -  Trouble with Debugging
     -  Total Cost of Ownership (Skills, Training, Refactoring, Maintenance)




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Problems with modern JVM Languages


     -  New Concepts for Java / OO Developers
     -  Powerful vs. Ease of Use
     -  Confusion due to Meta Programming
     -  Bytecode != Bytecode
     -  Trouble with Debugging
     -  Total Cost of Ownership (Skills, Training, Refactoring, Maintenance)



                  BUT:
     „Don't let yourself be fooled!“
                  (you also use a JAXB compiler, a GWT compiler, a WSDL compiler, etc., right?)


www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner        01.10.2012
Bytecode != Bytecode




                                                                   Java + Groovy = Good

                                                                   Java + Scala = Ok

                                                                   Non-Java + Non-Java = ???




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Bytecode != Bytecode




                                                       Ruby




          Scala
                                                        JRuby + Scala: www.codecommit.com/blog/ruby/integrating-scala-into-jruby




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                            01.10.2012
IDEs do not have AS-GOOD maturity as Java (yet?)




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
IDEs do not have AS-GOOD maturity as Java (yet?)




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Agenda


    1.  Reduced Efforts
    2.  Increased Flexibility
    3.  Reduced Complexity
    4.  Reduced Heterogeneity
    5.  Innovation
    6.  Language Selection
    7.  Problems
                                                                                        Lessons
    8.  Getting Started
                                                                                        learned
www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner      01.10.2012
Getting started...




You can't make something out of nothing.




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Getting started...



   Use new languages!
                                                                                        Marketing
                Looking back at                                                         Channels
               finished projects



               Think about it BEFORE
                starting new projects
                                                                                          Internal
                                                                                          Projects
                                                      Testing

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner        01.10.2012
Conclusion „lessons learned“




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Did the key message arrive?




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Key message




 Java is still the most important programming platform
 Java is not the new Cobol
 Modern JVM languages besides Java create added value

www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Did the key message arrive?




www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Thank you for your attention... Questions?




   Contact
              Kai Wähner                         MaibornWolff et al GmbH                Mobile +49 151 544 277 88
              IT Consultant                      Theresienhöhe 13                       Email kontakt@kai-waehner.de
                                                 D-80339 München                        Twitter @KaiWaehner



www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner                  01.10.2012

More Related Content

What's hot

Build the foundation for Private Cloud
Build the foundation for Private CloudBuild the foundation for Private Cloud
Build the foundation for Private Cloud
AppZero
 
.NetCampus Windows Azure Mobile
.NetCampus Windows Azure Mobile.NetCampus Windows Azure Mobile
.NetCampus Windows Azure Mobile
antimo musone
 
Presentation enterprise cloud & v clouddatacenter
Presentation   enterprise cloud & v clouddatacenterPresentation   enterprise cloud & v clouddatacenter
Presentation enterprise cloud & v clouddatacenter
xKinAnx
 
9 dani künzli citrix cloud solution 2
9 dani künzli citrix cloud solution 29 dani künzli citrix cloud solution 2
9 dani künzli citrix cloud solution 2
Digicomp Academy AG
 
Cloud Standards: EnablingInteroperability.and.package.delivery
Cloud Standards: EnablingInteroperability.and.package.deliveryCloud Standards: EnablingInteroperability.and.package.delivery
Cloud Standards: EnablingInteroperability.and.package.delivery
Abiquo, Inc.
 
MS TechDays 2011 - Cloud Computing with the Windows Azure Platform
MS TechDays 2011 - Cloud Computing with the Windows Azure PlatformMS TechDays 2011 - Cloud Computing with the Windows Azure Platform
MS TechDays 2011 - Cloud Computing with the Windows Azure Platform
Spiffy
 

What's hot (20)

IBM Cloud UCC Talk, 8th December 2020 - Cloud Native, Microservices, and Serv...
IBM Cloud UCC Talk, 8th December 2020 - Cloud Native, Microservices, and Serv...IBM Cloud UCC Talk, 8th December 2020 - Cloud Native, Microservices, and Serv...
IBM Cloud UCC Talk, 8th December 2020 - Cloud Native, Microservices, and Serv...
 
From Monolithic to Microservices
From Monolithic to Microservices From Monolithic to Microservices
From Monolithic to Microservices
 
Paving the Way to IT-as-a-Service
Paving the Way to IT-as-a-ServicePaving the Way to IT-as-a-Service
Paving the Way to IT-as-a-Service
 
Architecture: Microservices
Architecture: MicroservicesArchitecture: Microservices
Architecture: Microservices
 
Build the foundation for Private Cloud
Build the foundation for Private CloudBuild the foundation for Private Cloud
Build the foundation for Private Cloud
 
.NetCampus Windows Azure Mobile
.NetCampus Windows Azure Mobile.NetCampus Windows Azure Mobile
.NetCampus Windows Azure Mobile
 
Codecentric At Ajax World Conference San Jose
Codecentric At Ajax World Conference San JoseCodecentric At Ajax World Conference San Jose
Codecentric At Ajax World Conference San Jose
 
Building a High-Performance Reactive Microservices Architecture
Building a High-Performance Reactive Microservices ArchitectureBuilding a High-Performance Reactive Microservices Architecture
Building a High-Performance Reactive Microservices Architecture
 
An Overview of Designing Microservices Based Applications on AWS - March 2017...
An Overview of Designing Microservices Based Applications on AWS - March 2017...An Overview of Designing Microservices Based Applications on AWS - March 2017...
An Overview of Designing Microservices Based Applications on AWS - March 2017...
 
Presentation enterprise cloud & v clouddatacenter
Presentation   enterprise cloud & v clouddatacenterPresentation   enterprise cloud & v clouddatacenter
Presentation enterprise cloud & v clouddatacenter
 
Deploying Java Applicationson Ec2
Deploying Java Applicationson Ec2Deploying Java Applicationson Ec2
Deploying Java Applicationson Ec2
 
Mastering Application Integration Challenges in Hybrid Cloud Environments
Mastering Application Integration Challenges in Hybrid Cloud EnvironmentsMastering Application Integration Challenges in Hybrid Cloud Environments
Mastering Application Integration Challenges in Hybrid Cloud Environments
 
Cloud Foundry et le Cloud vu par VMware
Cloud Foundry et le Cloud vu par VMwareCloud Foundry et le Cloud vu par VMware
Cloud Foundry et le Cloud vu par VMware
 
IBM Hybrid Cloud Integration UCC Talk, 21st November 2018
IBM Hybrid Cloud Integration UCC Talk, 21st November 2018IBM Hybrid Cloud Integration UCC Talk, 21st November 2018
IBM Hybrid Cloud Integration UCC Talk, 21st November 2018
 
9 dani künzli citrix cloud solution 2
9 dani künzli citrix cloud solution 29 dani künzli citrix cloud solution 2
9 dani künzli citrix cloud solution 2
 
Cloud Standards: EnablingInteroperability.and.package.delivery
Cloud Standards: EnablingInteroperability.and.package.deliveryCloud Standards: EnablingInteroperability.and.package.delivery
Cloud Standards: EnablingInteroperability.and.package.delivery
 
Tap into a Private Cloud as a Service to Accelerate Hybrid Success
Tap into a Private Cloud as a Service to Accelerate Hybrid SuccessTap into a Private Cloud as a Service to Accelerate Hybrid Success
Tap into a Private Cloud as a Service to Accelerate Hybrid Success
 
Building Rich Mobile Apps with HTML5, CSS3 and JavaScript
Building Rich Mobile Apps with HTML5, CSS3 and JavaScriptBuilding Rich Mobile Apps with HTML5, CSS3 and JavaScript
Building Rich Mobile Apps with HTML5, CSS3 and JavaScript
 
MS TechDays 2011 - Cloud Computing with the Windows Azure Platform
MS TechDays 2011 - Cloud Computing with the Windows Azure PlatformMS TechDays 2011 - Cloud Computing with the Windows Azure Platform
MS TechDays 2011 - Cloud Computing with the Windows Azure Platform
 
Best Practices: Microsoft on AWS - Miles Ward - AWS Summit 2012 Australia
Best Practices: Microsoft on AWS - Miles Ward - AWS Summit 2012 AustraliaBest Practices: Microsoft on AWS - Miles Ward - AWS Summit 2012 Australia
Best Practices: Microsoft on AWS - Miles Ward - AWS Summit 2012 Australia
 

Viewers also liked

Flogo - A Golang-powered Open Source IoT Integration Framework (Gophercon)
Flogo - A Golang-powered Open Source IoT Integration Framework (Gophercon)Flogo - A Golang-powered Open Source IoT Integration Framework (Gophercon)
Flogo - A Golang-powered Open Source IoT Integration Framework (Gophercon)
Kai Wähner
 
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Kai Wähner
 
Who's More Functional: Kotlin, Groovy, Scala, or Java?
Who's More Functional: Kotlin, Groovy, Scala, or Java?Who's More Functional: Kotlin, Groovy, Scala, or Java?
Who's More Functional: Kotlin, Groovy, Scala, or Java?
Andrey Breslav
 

Viewers also liked (9)

Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...
Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...
Showdown: Integration Framework (Spring Integration, Apache Camel) vs. Enterp...
 
Machine Learning Applied to Real Time Scoring in Manufacturing and Energy Uti...
Machine Learning Applied to Real Time Scoring in Manufacturing and Energy Uti...Machine Learning Applied to Real Time Scoring in Manufacturing and Energy Uti...
Machine Learning Applied to Real Time Scoring in Manufacturing and Energy Uti...
 
Comparison of Open Source Frameworks for Integrating the Internet of Things
Comparison of Open Source Frameworks for Integrating the Internet of ThingsComparison of Open Source Frameworks for Integrating the Internet of Things
Comparison of Open Source Frameworks for Integrating the Internet of Things
 
Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)
Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)
Microservices - Death of the Enterprise Service Bus (ESB)? (Update 2016)
 
Flogo - A Golang-powered Open Source IoT Integration Framework (Gophercon)
Flogo - A Golang-powered Open Source IoT Integration Framework (Gophercon)Flogo - A Golang-powered Open Source IoT Integration Framework (Gophercon)
Flogo - A Golang-powered Open Source IoT Integration Framework (Gophercon)
 
Cloud Native Middleware Microservices - Lessons Learned with Docker, Kubernet...
Cloud Native Middleware Microservices - Lessons Learned with Docker, Kubernet...Cloud Native Middleware Microservices - Lessons Learned with Docker, Kubernet...
Cloud Native Middleware Microservices - Lessons Learned with Docker, Kubernet...
 
IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...
IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...
IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...
 
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
Microservices, Containers, Docker and a Cloud-Native Architecture in the Midd...
 
Who's More Functional: Kotlin, Groovy, Scala, or Java?
Who's More Functional: Kotlin, Groovy, Scala, or Java?Who's More Functional: Kotlin, Groovy, Scala, or Java?
Who's More Functional: Kotlin, Groovy, Scala, or Java?
 

Similar to Lessons learned: Use of Modern JVM Languages besides Java - JavaOne 2012

TechSearchWeb.pdf
TechSearchWeb.pdfTechSearchWeb.pdf
TechSearchWeb.pdf
TechSearchWeb
 
Technology Tutorial.pdf
Technology Tutorial.pdfTechnology Tutorial.pdf
Technology Tutorial.pdf
TechSearchWeb
 
An Introduction to Maven
An Introduction to MavenAn Introduction to Maven
An Introduction to Maven
Vadym Lotar
 
Netbeans
NetbeansNetbeans
Netbeans
acosdt
 
Part 2 java development
Part 2 java developmentPart 2 java development
Part 2 java development
techbed
 
Kann JavaScript elegant sein?
Kann JavaScript elegant sein?Kann JavaScript elegant sein?
Kann JavaScript elegant sein?
jbandi
 
1. JAVA_Module_1-edited - AJIN ABRAHAM.pptx.pdf
1. JAVA_Module_1-edited - AJIN ABRAHAM.pptx.pdf1. JAVA_Module_1-edited - AJIN ABRAHAM.pptx.pdf
1. JAVA_Module_1-edited - AJIN ABRAHAM.pptx.pdf
10322210023
 

Similar to Lessons learned: Use of Modern JVM Languages besides Java - JavaOne 2012 (20)

TechSearchWeb Tutorials.pdf
TechSearchWeb Tutorials.pdfTechSearchWeb Tutorials.pdf
TechSearchWeb Tutorials.pdf
 
TechSearchWeb.pdf
TechSearchWeb.pdfTechSearchWeb.pdf
TechSearchWeb.pdf
 
Technology Tutorial.pdf
Technology Tutorial.pdfTechnology Tutorial.pdf
Technology Tutorial.pdf
 
An Introduction to Maven
An Introduction to MavenAn Introduction to Maven
An Introduction to Maven
 
Netbeans
NetbeansNetbeans
Netbeans
 
Presentation on java
Presentation on javaPresentation on java
Presentation on java
 
Part 2 java development
Part 2 java developmentPart 2 java development
Part 2 java development
 
Java vs. Node.js
Java vs. Node.jsJava vs. Node.js
Java vs. Node.js
 
Bn1005 demo ppt core java
Bn1005 demo ppt core javaBn1005 demo ppt core java
Bn1005 demo ppt core java
 
Java training in chennai, Java course in chennai
Java training in chennai, Java course in chennaiJava training in chennai, Java course in chennai
Java training in chennai, Java course in chennai
 
Crx 2.2 Deep-Dive
Crx 2.2 Deep-DiveCrx 2.2 Deep-Dive
Crx 2.2 Deep-Dive
 
maven build certificaton
maven build certificatonmaven build certificaton
maven build certificaton
 
D. Andreadis, Red Hat: Concepts and technical overview of Quarkus
D. Andreadis, Red Hat: Concepts and technical overview of QuarkusD. Andreadis, Red Hat: Concepts and technical overview of Quarkus
D. Andreadis, Red Hat: Concepts and technical overview of Quarkus
 
Curso de Programación Java Intermedio
Curso de Programación Java IntermedioCurso de Programación Java Intermedio
Curso de Programación Java Intermedio
 
Java training noida hibernate+spring+struts+web services(1)
Java training noida hibernate+spring+struts+web services(1)Java training noida hibernate+spring+struts+web services(1)
Java training noida hibernate+spring+struts+web services(1)
 
Unit-IV_Introduction to Java.pdf
Unit-IV_Introduction to Java.pdfUnit-IV_Introduction to Java.pdf
Unit-IV_Introduction to Java.pdf
 
Kann JavaScript elegant sein?
Kann JavaScript elegant sein?Kann JavaScript elegant sein?
Kann JavaScript elegant sein?
 
JavaOne 2010 Keynote
JavaOne 2010 Keynote JavaOne 2010 Keynote
JavaOne 2010 Keynote
 
best java training in noida.pptx
best java training in noida.pptxbest java training in noida.pptx
best java training in noida.pptx
 
1. JAVA_Module_1-edited - AJIN ABRAHAM.pptx.pdf
1. JAVA_Module_1-edited - AJIN ABRAHAM.pptx.pdf1. JAVA_Module_1-edited - AJIN ABRAHAM.pptx.pdf
1. JAVA_Module_1-edited - AJIN ABRAHAM.pptx.pdf
 

More from Kai Wähner

Kappa vs Lambda Architectures and Technology Comparison
Kappa vs Lambda Architectures and Technology ComparisonKappa vs Lambda Architectures and Technology Comparison
Kappa vs Lambda Architectures and Technology Comparison
Kai Wähner
 
The Top 5 Apache Kafka Use Cases and Architectures in 2022
The Top 5 Apache Kafka Use Cases and Architectures in 2022The Top 5 Apache Kafka Use Cases and Architectures in 2022
The Top 5 Apache Kafka Use Cases and Architectures in 2022
Kai Wähner
 

More from Kai Wähner (20)

Apache Kafka as Data Hub for Crypto, NFT, Metaverse (Beyond the Buzz!)
Apache Kafka as Data Hub for Crypto, NFT, Metaverse (Beyond the Buzz!)Apache Kafka as Data Hub for Crypto, NFT, Metaverse (Beyond the Buzz!)
Apache Kafka as Data Hub for Crypto, NFT, Metaverse (Beyond the Buzz!)
 
When NOT to use Apache Kafka?
When NOT to use Apache Kafka?When NOT to use Apache Kafka?
When NOT to use Apache Kafka?
 
Kafka for Live Commerce to Transform the Retail and Shopping Metaverse
Kafka for Live Commerce to Transform the Retail and Shopping MetaverseKafka for Live Commerce to Transform the Retail and Shopping Metaverse
Kafka for Live Commerce to Transform the Retail and Shopping Metaverse
 
The Heart of the Data Mesh Beats in Real-Time with Apache Kafka
The Heart of the Data Mesh Beats in Real-Time with Apache KafkaThe Heart of the Data Mesh Beats in Real-Time with Apache Kafka
The Heart of the Data Mesh Beats in Real-Time with Apache Kafka
 
Apache Kafka vs. Cloud-native iPaaS Integration Platform Middleware
Apache Kafka vs. Cloud-native iPaaS Integration Platform MiddlewareApache Kafka vs. Cloud-native iPaaS Integration Platform Middleware
Apache Kafka vs. Cloud-native iPaaS Integration Platform Middleware
 
Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?
Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?
Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?
 
Serverless Kafka and Spark in a Multi-Cloud Lakehouse Architecture
Serverless Kafka and Spark in a Multi-Cloud Lakehouse ArchitectureServerless Kafka and Spark in a Multi-Cloud Lakehouse Architecture
Serverless Kafka and Spark in a Multi-Cloud Lakehouse Architecture
 
Resilient Real-time Data Streaming across the Edge and Hybrid Cloud with Apac...
Resilient Real-time Data Streaming across the Edge and Hybrid Cloud with Apac...Resilient Real-time Data Streaming across the Edge and Hybrid Cloud with Apac...
Resilient Real-time Data Streaming across the Edge and Hybrid Cloud with Apac...
 
Data Streaming with Apache Kafka in the Defence and Cybersecurity Industry
Data Streaming with Apache Kafka in the Defence and Cybersecurity IndustryData Streaming with Apache Kafka in the Defence and Cybersecurity Industry
Data Streaming with Apache Kafka in the Defence and Cybersecurity Industry
 
Apache Kafka in the Healthcare Industry
Apache Kafka in the Healthcare IndustryApache Kafka in the Healthcare Industry
Apache Kafka in the Healthcare Industry
 
Apache Kafka in the Healthcare Industry
Apache Kafka in the Healthcare IndustryApache Kafka in the Healthcare Industry
Apache Kafka in the Healthcare Industry
 
Apache Kafka for Real-time Supply Chain in the Food and Retail Industry
Apache Kafka for Real-time Supply Chainin the Food and Retail IndustryApache Kafka for Real-time Supply Chainin the Food and Retail Industry
Apache Kafka for Real-time Supply Chain in the Food and Retail Industry
 
Kafka for Real-Time Replication between Edge and Hybrid Cloud
Kafka for Real-Time Replication between Edge and Hybrid CloudKafka for Real-Time Replication between Edge and Hybrid Cloud
Kafka for Real-Time Replication between Edge and Hybrid Cloud
 
Apache Kafka for Predictive Maintenance in Industrial IoT / Industry 4.0
Apache Kafka for Predictive Maintenance in Industrial IoT / Industry 4.0Apache Kafka for Predictive Maintenance in Industrial IoT / Industry 4.0
Apache Kafka for Predictive Maintenance in Industrial IoT / Industry 4.0
 
Apache Kafka Landscape for Automotive and Manufacturing
Apache Kafka Landscape for Automotive and ManufacturingApache Kafka Landscape for Automotive and Manufacturing
Apache Kafka Landscape for Automotive and Manufacturing
 
Kappa vs Lambda Architectures and Technology Comparison
Kappa vs Lambda Architectures and Technology ComparisonKappa vs Lambda Architectures and Technology Comparison
Kappa vs Lambda Architectures and Technology Comparison
 
The Top 5 Apache Kafka Use Cases and Architectures in 2022
The Top 5 Apache Kafka Use Cases and Architectures in 2022The Top 5 Apache Kafka Use Cases and Architectures in 2022
The Top 5 Apache Kafka Use Cases and Architectures in 2022
 
Event Streaming CTO Roundtable for Cloud-native Kafka Architectures
Event Streaming CTO Roundtable for Cloud-native Kafka ArchitecturesEvent Streaming CTO Roundtable for Cloud-native Kafka Architectures
Event Streaming CTO Roundtable for Cloud-native Kafka Architectures
 
Apache Kafka in the Public Sector (Government, National Security, Citizen Ser...
Apache Kafka in the Public Sector (Government, National Security, Citizen Ser...Apache Kafka in the Public Sector (Government, National Security, Citizen Ser...
Apache Kafka in the Public Sector (Government, National Security, Citizen Ser...
 
Telco 4.0 - Payment and FinServ Integration for Data in Motion with 5G and Ap...
Telco 4.0 - Payment and FinServ Integration for Data in Motion with 5G and Ap...Telco 4.0 - Payment and FinServ Integration for Data in Motion with 5G and Ap...
Telco 4.0 - Payment and FinServ Integration for Data in Motion with 5G and Ap...
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 

Lessons learned: Use of Modern JVM Languages besides Java - JavaOne 2012

  • 1. Lessons Learned: Use of Modern JVM Languages Besides Java
  • 2. Kai Wähner (MaibornWolff et al GmbH) Main Tasks Evaluation of Technologies and Products Requirements Engineering Enterprise Architecture Management Business Process Management Architecture and Development of Applications Planning and Introduction of SOA Integration of Legacy Applications Cloud Computing Big Data Consulting Contact Developing Email: kontakt@kai-waehner.de Speaking Blog: www.kai-waehner.de/blog Coaching Twitter: @KaiWaehner Social Networks: Xing, LinkedIn Writing www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner
  • 3. Java platform www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 4. Variety of languages on the .NET platform C C++ C# F# .NET Silverlight Scala www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 5. Variety of languages on the Java platform Java Java Java Java Java Java www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 6. Characteristics of the Java language „It’s not all rainbows and unicorns in the land of Java“ http://batsov.com/Java/Groovy/2011/05/06/jvm-langs-groovy.html www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 7. Java platform www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 8. Java Virtual Machine (JVM) Java Runtime Environment (JVM + Java Standard Libraries) => JVM Bytecode -> VM-specific internal representation -> Native machine code www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 9. Java Virtual Machine (JVM) Ahead-of-time compiled Java Bytecode (.class) Java Runtime Environment (JVM + Java Standard Libraries) => JVM Bytecode -> VM-specific internal representation -> Native machine code www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 10. Java Virtual Machine (JVM) Ahead-of-time compiled Ahead-of-time compiled Java Bytecode (.class) Scala Bytecode (.class) Java Runtime Environment (JVM + Java Standard Libraries) => JVM Bytecode -> VM-specific internal representation -> Native machine code www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 11. Java Virtual Machine (JVM) Ahead-of-time compiled Ahead-of-time compiled Java Bytecode (.class) Scala Bytecode (.class) Java Runtime Environment (JVM + Java Standard Libraries) => JVM Bytecode -> VM-specific internal representation -> Native machine code Ahead-of-time compiled Groovy Bytecode (.class) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 12. Java Virtual Machine (JVM) Ahead-of-time compiled Ahead-of-time compiled Java Bytecode (.class) Scala Bytecode (.class) Java Runtime Environment (JVM + Java Standard Libraries) => JVM Bytecode -> VM-specific internal representation -> Native machine code Interpreted or Just-in-time compiled Groovy Bytecode Ahead-of-time compiled (In-memory) Groovy Bytecode (.class) Groovy Script Code www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 13. Languages for the Java platform 240+ further languages: http://tinyurl.com/3ql5m98 www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 14. "Escape from the Java language prison" www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 15. What is the key message? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 16. Key message Java is still the most important programming platform www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 17. Key message Java is still the most important programming platform Java is not the new Cobol www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 18. Key message Java is still the most important programming platform Java is not the new Cobol Modern JVM languages besides Java create added value www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 19. Agenda 1.  Reduced Efforts 2.  Increased Flexibility 3.  Reduced Complexity 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems 8.  Getting Started www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 20. Agenda 1.  Reduced Efforts 2.  Increased Flexibility Business 3.  Reduced Complexity Value 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems 8.  Getting Started www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 21. Agenda 1.  Reduced Efforts 2.  Increased Flexibility 3.  Reduced Complexity 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems Lessons 8.  Getting Started learned www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 22. Agenda 1.  Reduced Efforts 2.  Increased Flexibility Business 3.  Reduced Complexity Value 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems 8.  Getting Started www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 23. Lines of code (Java) employees.sort ( new Comparator{ public int compare(Object emp1, Object emp2){ int emp1Age = ( (Employee) emp1).getAge(); int emp2Age = ( (Employee) emp2).getAge(); if( emp1Age > emp2Age ) return 1; else if( emp1Age < emp2Age ) return -1; else return 0; } Java www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 24. Lines of code (Scala) employees.sort ( employees.sort (_.age > _.age) new Comparator{ public int compare(Object emp1, Object emp2){ int emp1Age = ( (Employee) emp1).getAge(); int emp2Age = ( (Employee) emp2).getAge(); if( emp1Age > emp2Age ) return 1; else if( emp1Age < emp2Age ) return -1; else return 0; } Java Scala www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 25. Lines of code (Scala) employees.sort (_.age > _.age) Scala API: Scala www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 26. Lines of code <books> <book isbn="…"> <title>Groovy in Action</title> <author>Dierk Koenig</author> <author>Paul King</author> … </book> <book isbn="…"> <title>Grails in Action</title> <author>Glen Smith</author> <author>Peter Ledbrook</author> </book> ... </books> (Making Java Groovy, Kenneth A. Kousen) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 27. Lines of code <books> <book isbn="…"> <title>Groovy in Action</title> <author>Dierk Koenig</author> <author>Paul King</author> … </book> <book isbn="…"> <title>Grails in Action</title> <author>Glen Smith</author> <author>Peter Ledbrook</author> </book> ... </books> (Making Java Groovy, Kenneth A. Kousen) Task: Get the title of the second book! www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 28. Lines of code (Java) <books> DocumentBuilderFactory factory = <book isbn="…"> DocumentBuilderFactory.newInstance(); <title>Groovy in Action</title> Document doc = null; <author>Dierk Koenig</author> <author>Paul King</author> try {DocumentBuilder b = factory.newDocumentBuilder(); … doc = b.parse("src/jag/xml/books.xml"); </book> } catch (Exception e) { // Parser, SAX, IO <book isbn="…"> <title>Grails in Action</title> e.printStackTrace();} <author>Glen Smith</author> if (doc == null) return; <author>Peter Ledbrook</author> NodeList titles = doc.getElementsByTagName("title"); </book> ... Element titleNode = (Element) titles.item(1); </books> String title = titleNode.getFirstChild().getNodeValue(); System.out.println("The second title is " + title); (Making Java Groovy, Kenneth A. Kousen) Task: Get the title of the second book! www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 29. Lines of code (Groovy) <books> <book isbn="…"> <title>Groovy in Action</title> <author>Dierk Koenig</author> <author>Paul King</author> … root = new XmlSlurper().parse('books.xml') </book> println root.book[1].title <book isbn="…"> <title>Grails in Action</title> <author>Glen Smith</author> <author>Peter Ledbrook</author> </book> ... </books> (Making Java Groovy, Kenneth A. Kousen) Task: Get the title of the second book! www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 30. Agenda 1.  Reduced Efforts 2.  Increased Flexibility Business 3.  Reduced Complexity Value 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems 8.  Getting Started www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 31. Increased flexibility Modularisation www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 32. Modularisation http://www.artima.com/scalazine/articles/package_objects.html www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 33. Increased flexibility Scripting www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 34. Scripting Change behaviour of an application dynamically at runtime Direct execution vs. JSR 233 Scripting for the Java Platform www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 35. Increased flexibility Meta programming www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 36. Meta programming (Runtime) // Java Code public class ABC() { public static ABC factory() { return new ABC(); } public static void main(String[] args) { ABC abc = ABC.factory()); } } www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 37. Meta programming (Runtime) // A little bit of (Groovy-) Magic: Class.metaClass.factory = { Object[] args -> delegate.metaClass.invokeConstructor(*args) } www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 38. Meta programming (Runtime) // A little bit of (Groovy-) Magic: Class.metaClass.factory = { Object[] args -> delegate.metaClass.invokeConstructor(*args) } // Now, all Java classes have a „factory()“ method: HashMap hashmap = HashMap. factory () Integer integer = Integer. factory (42) Dimension dimension = Dimension. factory (2, 3) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 39. Meta programming (Runtime) In Practice: „Finder“ in Grails www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 40. Meta programming replacement in Scala: Implicit Conversions www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 41. Meta programming replacement in Scala: Implicit Conversions Attention: Use it wisely! www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 42. Increased flexibility Build management www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 43. Build tools Ant vs. Maven www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 44. Build tools Ant Gradle vs. Maven www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 45. Build tools Ant Gradle vs. Maven www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 46. Build tools Ant Gradle vs. Maven www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 47. Build tools Further advantages (e.g. Scripting) Ant Gradle vs. Maven www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 48. Agenda 1.  Reduced Efforts 2.  Increased Flexibility Business 3.  Reduced Complexity Value 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems 8.  Getting Started www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 49. Reduced complexity www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 50. Reduced complexity Concurrency www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 51. Concurrency Current situation? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 52. Current situation „The Gigahertz Race is over!“ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 53. The industry has an answer Multicore CPUs www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 54. Concurrency The problem? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 55. The problem Process A Shared State Process B www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 56. The problem Thread-API   Deadlocks   Race Conditions   Exceptions www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 57. Reduced complexity Solution? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 58. Attempted rescue www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 59. Good books! However, the Thread API is still complex ... www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 60. Reduced complexity Better solution? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 61. Alternatives* for dealing with state (instead of Thread API) Shared Mutability => Software Transactional Memory (STM) versus Isolated Mutability => Actors * Purely Immutability => Tough to realize www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 62. Shared Mutability: Software Transactional Memory (STM) „Clojure does not replace the Java thread system, rather it works with it. [But there are] no locks! “ => An alternative to lock-based synchronization! http://www.heise.de/developer/artikel/Benefits-1030160.html www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 63. Isolated Mutability: Actors „Communicate by passing immutable Messages“ http://www.infoq.com/presentations/Actor-based-Programming (Jamie Ridgway) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 64. Actors in Scala val chatRoom = actor { while (true) { receive { case Subscribe(user) => // do something case Unsubscribe(user) => // do something case UserPost(user, post) => // do something }}} // send a asynchronous message to the Actor: chatRoom ! Subscribe(User("Bob")) No Thread API, Locks, Synchronisation (and therefore lower threat to deadlocks or race conditions) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 65. Actors in Groovy with GPars (Groovy Parallel Systems) „Give Actors an OO facade“ @ActiveObject class Decryptor { @ActiveMethod // asynchronous => return a Future object def decrypt(String encryptedText) { return encryptedText.reverse() } @ActiveMethod def decrypt(Integer encryptedNumber) { return -1*encryptedNumber + 142 } } final Decryptor decryptor = new Decryptor() def part1 = decryptor.decrypt(' noitcA ni yvoorG') def part2 = decryptor.decrypt(140) print part1.get() // == Groovy in Action print part2.get() // == 2 www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 66. Reduced complexity Domain Specific Languages (DSL) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 67. Domain Specific Languages (DSL) A [internal] DSL is a programming language that mimics the terms, idioms, and expressions used among experts in the targeted domain. Code written in a DSL reads like structured prose for the domain. Ideally, a domain expert with little experience in programming can read, understand, and validate this code. Sometimes, a domain expert might be able to write DSL code, even if he isn’t a professional programmer. http://ofps.oreilly.com/titles/9780596155957/DomainSpecificLanguages.html www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 68. Internal DSL in test frameworks www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 69. ScalaTest (Scala) Which code is easier to understand? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 70. ScalaTest (Scala) Which code is easier to understand? Java: assertTrue(map.containsKey(‘a’)); www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 71. ScalaTest (Scala) Which code is easier to understand? Java: assertTrue(map.containsKey(‘a’)); Scala: map should contain key ‘a’ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 72. Example for an internal Scala DSL Baysick DSL (simulates BASIC) http://blog.fogus.me/2009/03/26/ baysick-a-scala-dsl-implementing-basic/ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 73. Agenda 1.  Reduced Efforts 2.  Increased Flexibility Business 3.  Reduced Complexity Value 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems 8.  Getting Started www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 74. Reduced heterogeneity Install Source code script (Java) (Shell) Dynamic database script Build (JRuby) (XML) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 75. Reduced heterogeneity Source code Dynamic database script Install script Build (Groovy) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 76. Agenda 1.  Reduced Efforts 2.  Increased Flexibility Business 3.  Reduced Complexity Value 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems 8.  Getting Started www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 77. Innovation www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 78. Innovation New Technologies Concepts Solutions www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 79. Innovation New Technologies Concepts Solutions Marketing Article, blogs, conference sessions www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 80. Innovation New Technologies Concepts Solutions New Projects Marketing Consulting, Coaching, Development Article, blogs, conference sessions www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 81. Marketing „War for Talents“ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 82. Marketing „War for Talents“ „Follow the Leader“ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 83. Conclusion "business value" Reduced efforts Reduced complexity Increased flexibility Reduced Innovation Heterogeneity www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 84. Conclusion "business value" Reduced efforts Reduced complexity Increased flexibility Reduced Innovation Heterogeneity www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 85. Agenda 1.  Reduced Efforts 2.  Increased Flexibility 3.  Reduced Complexity 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems Lessons 8.  Getting Started learned www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 86. Languages for the Java platform 240+ further languages: http://tinyurl.com/3ql5m98 www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 87. Language selection <Excursus> www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 88. Excursus: Typing Dynamically typed Complexity languague Statically typed language Power www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 89. Excursus: Programming concepts Scala in Depth, Joshua D. Suereth www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 90. Language selection </Excursus> www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 91. Languages for the Java platform Which language(s) shall we use? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 92. Conclusion „language selection" The language has to be „Java Friendly“ and „Feature Rich“ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 93. Languages for the Java platform 240+ further languages: http://tinyurl.com/3ql5m98 www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 94. Languages for the Java platform Maturity? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 95. Maturity 240+ further languages: http://tinyurl.com/3ql5m98 www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 96. Maturity 240+ further languages: http://tinyurl.com/3ql5m98 www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 97. Languages for the Java platform Prevalence? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 98. Prevalence? 240+ further languages: http://tinyurl.com/3ql5m98 www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 99. Prevalence? 240+ further languages: http://tinyurl.com/3ql5m98 www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 100. Languages for the Java platform Platform integration? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 101. Syntax alignment import java.util.*; // Java Date today = new Date(); // Java www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 102. Syntax alignment import java.util.*; // Java Date today = new Date(); // Java today = new Date() // Groovy www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 103. Syntax alignment import java.util.*; // Java Date today = new Date(); // Java today = new Date() // Groovy import java.util._ // Scala var today = new Date // Scala www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 104. Syntax alignment import java.util.*; // Java Date today = new Date(); // Java today = new Date() // Groovy import java.util._ // Scala var today = new Date // Scala java_import ‘java.util.Date' # JRuby today = Date.new # JRuby www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 105. Syntax alignment import java.util.*; // Java Date today = new Date(); // Java today = new Date() // Groovy import java.util._ // Scala var today = new Date // Scala java_import ‘java.util.Date' # JRuby today = Date.new # JRuby (import '(java.util Date)) ; Clojure (def today (new Date)) ; Clojure (def today (Date.)) ; Clojure alternative www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 106. Good IDE-support: The Paranthesis Generator? (import '(java.util Date)) ; Clojure (def today (new Date)) ; Clojure (def today (Date.)) ; Clojure alternative www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 107. Plattform integration? => No syntax alignment! JRuby Feature Rich Clojure Jython JavaScript Java Friendly www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 108. Seamless integration? Java Groovy? „Other“ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 109. Seamless Integration? (Groovy) public class Article {     private String name;     private String price;     public Article(String name, String price) {         this.name = name;         this.price = price;     } class Article {     public String getName() {     String name         return name;     String price     } }     public void setName(String name) {         this.name = name;     }     public String getPrice() {         return price;     }     public void setPrice(String price) {         this.price = price;     } } Java Groovy www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 110. Seamless Integration? (Groovy) public class Article { public class Article {     private String name;     private String name;     private String price;     private String price;     public Article(String name, String price) {     public Article(String name, String price) {         this.name = name;         this.name = name;         this.price = price;         this.price = price;     }     }     public String getName() {     public String getName() {         return name;         return name;     }     }     public void setName(String name) {     public void setName(String name) {         this.name = name;         this.name = name;     }     }     public String getPrice() {     public String getPrice() {         return price;         return price;     }     }     public void setPrice(String price) {     public void setPrice(String price) {         this.price = price;         this.price = price;     }     } } } Java Groovy www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 111. Seamless integration? Java Groovy „Other“ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 112. Plattform integration? JRuby Groovy Feature Rich Clojure Jython JavaScript Java Friendly www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 113. Seamless integration? Java „Other“ Scala? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 114. Seamless integration? (Scala) => Bytecode != Bytecode Implicit Conversions Inexpressible vs. Language Object Identity / Equality Features Objects vs. Primitives Uniform Access Principle Java Bytecode Analysis www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 115. Seamless integration? (Scala) => Bytecode != Bytecode „Usually, it just works ... ... if not, define a Java Interface.“ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 116. Seamless integration? Java „Other“ „Scala“ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 117. Plattform integration? JRuby Scala Groovy Feature Rich Clojure Jython JavaScript Java Friendly www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 118. Languages for the Java platform 240+ Weitere: http://tinyurl.com/3ql5m98 www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 119. Languages for the Java platform 240+ Weitere: http://tinyurl.com/3ql5m98 www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 120. Conclusion „language selection" The language has to be „Java Friendly“ and „Feature Rich“ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 121. Conclusion „language selection" „The dynamic One“ „The functional One“ The language has to be „Java Friendly“ and „Feature Rich“ (Other JVM languages only if „forced“) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 122. Conclusion „language selection" www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 123. Agenda 1.  Reduced Efforts 2.  Increased Flexibility 3.  Reduced Complexity 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems Lessons 8.  Getting Started learned www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 124. Why use new languages? Java does the job, right? IT vs. Politics www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 125. Why use new languages? Java does the job, right? Cloud Computing will be requested by the customer... www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 126. Why use new languages? Java does the job, right? Cloud Computing will be requested by the customer... NoSQL will be required for big data and high scalability... www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 127. Why use new languages? Java does the job, right? Cloud Computing will be requested by the customer... NoSQL will be required for big data and high scalability... ... but modern JVM languages will probably never be demanded  www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 128. Problems with modern JVM Languages ‚Real life‘ problems www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 129. Problems with modern JVM Languages -  New Concepts for Java / OO Developers -  Powerful vs. Ease of Use -  Confusion due to Meta Programming -  Bytecode != Bytecode -  Trouble with Debugging -  Total Cost of Ownership (Skills, Training, Refactoring, Maintenance) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 130. Problems with modern JVM Languages -  New Concepts for Java / OO Developers -  Powerful vs. Ease of Use -  Confusion due to Meta Programming -  Bytecode != Bytecode -  Trouble with Debugging -  Total Cost of Ownership (Skills, Training, Refactoring, Maintenance) BUT: „Don't let yourself be fooled!“ (you also use a JAXB compiler, a GWT compiler, a WSDL compiler, etc., right?) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 131. Bytecode != Bytecode Java + Groovy = Good Java + Scala = Ok Non-Java + Non-Java = ??? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 132. Bytecode != Bytecode Ruby Scala JRuby + Scala: www.codecommit.com/blog/ruby/integrating-scala-into-jruby www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 133. IDEs do not have AS-GOOD maturity as Java (yet?) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 134. IDEs do not have AS-GOOD maturity as Java (yet?) www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 135. Agenda 1.  Reduced Efforts 2.  Increased Flexibility 3.  Reduced Complexity 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems Lessons 8.  Getting Started learned www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 136. Getting started... You can't make something out of nothing. www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 137. Getting started... Use new languages! Marketing Looking back at Channels finished projects Think about it BEFORE starting new projects Internal Projects Testing www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 138. Conclusion „lessons learned“ www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 139. Did the key message arrive? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 140. Key message Java is still the most important programming platform Java is not the new Cobol Modern JVM languages besides Java create added value www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 141. Did the key message arrive? www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  • 142. Thank you for your attention... Questions? Contact Kai Wähner MaibornWolff et al GmbH Mobile +49 151 544 277 88 IT Consultant Theresienhöhe 13 Email kontakt@kai-waehner.de D-80339 München Twitter @KaiWaehner www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012