Lessons Learned:Use of Modern JVM Languages Besides Java
Kai Wähner (MaibornWolff et al GmbH)                                                                                      ...
Java platformwww.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                            ...
Variety of languages on the Java platform                                       Java                                      ...
Characteristics of the Java language             „It’s not all      rainbows and unicorns        in the land of Java“     ...
Java platformwww.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 -...
Java Virtual Machine (JVM)              Ahead-of-time compiled               Java Bytecode (.class)                Java Ru...
Java Virtual Machine (JVM)              Ahead-of-time compiled                                                         Ahe...
Java Virtual Machine (JVM)              Ahead-of-time compiled                                                         Ahe...
Java Virtual Machine (JVM)              Ahead-of-time compiled                                                          Ah...
Languages for the Java platform       240+ further languages:     http://tinyurl.com/3ql5m98www.mwea.de   Lessones learned...
"Escape from the Java language prison"www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähne...
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 platformwww.mwea.de   Lessones learned: Use of modern JVM Languag...
Key message Java is still the most important programming platform Java is not the new Cobolwww.mwea.de   Lessones learned:...
Key message Java is still the most important programming platform Java is not the new Cobol Modern JVM languages besides J...
Agenda    1.  Reduced Efforts    2.  Increased Flexibility    3.  Reduced Complexity    4.  Reduced Heterogeneity    5.  I...
Agenda    1.  Reduced Efforts    2.  Increased Flexibility                                                                ...
Agenda    1.  Reduced Efforts    2.  Increased Flexibility    3.  Reduced Complexity    4.  Reduced Heterogeneity    5.  I...
Agenda    1.  Reduced Efforts    2.  Increased Flexibility                                                                ...
Lines of code (Java)        employees.sort (        new Comparator{        public int compare(Object emp1, Object emp2){  ...
Lines of code (Scala)        employees.sort (                                                                             ...
Lines of code (Scala)                                                                                   employees.sort (_....
Lines of code     <books>        <book isbn="…">          <title>Groovy in Action</title>          <author>Dierk Koenig</a...
Lines of code     <books>        <book isbn="…">          <title>Groovy in Action</title>          <author>Dierk Koenig</a...
Lines of code (Java)     <books>                                                        DocumentBuilderFactory factory =  ...
Lines of code (Groovy)     <books>        <book isbn="…">          <title>Groovy in Action</title>          <author>Dierk ...
Agenda    1.  Reduced Efforts    2.  Increased Flexibility                                                                ...
Increased flexibility                         Modularisationwww.mwea.de   Lessones learned: Use of modern JVM Languages be...
Modularisation                            http://www.artima.com/scalazine/articles/package_objects.htmlwww.mwea.de   Lesso...
Increased flexibility                                              Scriptingwww.mwea.de   Lessones learned: Use of modern ...
Scripting     Change behaviour of an application          dynamically at runtime                                          ...
Increased flexibility                    Meta programmingwww.mwea.de   Lessones learned: Use of modern JVM Languages besid...
Meta programming (Runtime)              // Java Code              public class ABC() {                  public static ABC ...
Meta programming (Runtime)              // A little bit of (Groovy-) Magic:              Class.metaClass.factory = { Objec...
Meta programming (Runtime)              // A little bit of (Groovy-) Magic:              Class.metaClass.factory = { Objec...
Meta programming (Runtime)                                In Practice: „Finder“ in Grailswww.mwea.de   Lessones learned: U...
Meta programming replacement in Scala: Implicit Conversionswww.mwea.de   Lessones learned: Use of modern JVM Languages bes...
Meta programming replacement in Scala: Implicit Conversions                                            Attention: Use it w...
Increased flexibility                   Build managementwww.mwea.de   Lessones learned: Use of modern JVM Languages beside...
Build tools                                                                                         Ant                   ...
Build tools                                                                                         Ant    Gradle         ...
Build tools                                                                                         Ant    Gradle         ...
Build tools                                                                                         Ant    Gradle         ...
Build tools    Further advantages    (e.g. Scripting)                                                                     ...
Agenda    1.  Reduced Efforts    2.  Increased Flexibility                                                                ...
Reduced complexitywww.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Reduced complexity                                   Concurrencywww.mwea.de   Lessones learned: Use of modern JVM Language...
Concurrency                      Current situation?www.mwea.de   Lessones learned: Use of modern JVM Languages besides Jav...
Current situation     „The  Gigahertz     Race   is over!“www.mwea.de   Lessones learned: Use of modern JVM Languages besi...
The industry has an answer                                                                                    Multicore   ...
Concurrency                                The problem?www.mwea.de   Lessones learned: Use of modern JVM Languages besides...
The problem              Process                 A                                                                        ...
The problem      Thread-API        Deadlocks        Race Conditions        Exceptionswww.mwea.de   Lessones learned: Us...
Reduced complexity                                          Solution?www.mwea.de   Lessones learned: Use of modern JVM Lan...
Attempted rescuewww.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 beside...
Reduced complexity                             Better solution?www.mwea.de   Lessones learned: Use of modern JVM Languages...
Alternatives* for dealing with state (instead of Thread API)   Shared Mutability => Software Transactional Memory (STM)   ...
Shared Mutability: Software Transactional Memory (STM) „Clojure does not replace the Java thread system,  rather it works ...
Isolated Mutability: Actors              „Communicate by passing immutable Messages“                   http://www.infoq.co...
Actors in Scala         val chatRoom = actor {              while (true) {                  receive {                     ...
Actors in Groovy with GPars (Groovy Parallel Systems)                                         „Give Actors an OO facade“  ...
Reduced complexity                                        Domain                                        Specific          ...
Domain Specific Languages (DSL)     A [internal] DSL is a programming language that mimics the terms,     idioms, and expr...
Internal DSL in test frameworkswww.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01....
ScalaTest (Scala)   Which code is easier to understand?www.mwea.de   Lessones learned: Use of modern JVM Languages besides...
ScalaTest (Scala)   Which code is easier to understand?   Java:                     assertTrue(map.containsKey(‘a’));www.m...
ScalaTest (Scala)   Which code is easier to understand?   Java:                     assertTrue(map.containsKey(‘a’));   Sc...
Example for an internal Scala DSL                                                                                         ...
Agenda    1.  Reduced Efforts    2.  Increased Flexibility                                                                ...
Reduced heterogeneity                                                                                          Install    ...
Reduced heterogeneity                                                  Source code                                    Dyna...
Agenda    1.  Reduced Efforts    2.  Increased Flexibility                                                                ...
Innovationwww.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2012
Innovation                                                                                        New                     ...
Innovation                                                                                        New                     ...
Innovation                                                                                        New                     ...
Marketing                                                        „War for Talents“www.mwea.de   Lessones learned: Use of m...
Marketing                                                        „War for Talents“                                        ...
Conclusion "business value"         Reduced efforts                                                                       ...
Conclusion "business value"         Reduced efforts                                                                       ...
Agenda    1.  Reduced Efforts    2.  Increased Flexibility    3.  Reduced Complexity    4.  Reduced Heterogeneity    5.  I...
Languages for the Java platform      240+ further languages:    http://tinyurl.com/3ql5m98www.mwea.de   Lessones learned: ...
Language selection                               <Excursus>www.mwea.de   Lessones learned: Use of modern JVM Languages bes...
Excursus: Typing                                                                                           Dynamically    ...
Excursus: Programming concepts                                            Scala in Depth, Joshua D. Suerethwww.mwea.de   L...
Language selection                               </Excursus>www.mwea.de   Lessones learned: Use of modern JVM Languages be...
Languages for the Java platform                  Which language(s)                   shall we use?www.mwea.de   Lessones l...
Conclusion „language selection"              The language has to be         „Java Friendly“ and „Feature Rich“www.mwea.de ...
Languages for the Java platform      240+ further languages:    http://tinyurl.com/3ql5m98www.mwea.de   Lessones learned: ...
Languages for the Java platform                                             Maturity?www.mwea.de   Lessones learned: Use o...
Maturity      240+ further languages:    http://tinyurl.com/3ql5m98www.mwea.de   Lessones learned: Use of modern JVM Langu...
Maturity      240+ further languages:    http://tinyurl.com/3ql5m98www.mwea.de   Lessones learned: Use of modern JVM Langu...
Languages for the Java platform                                Prevalence?www.mwea.de   Lessones learned: Use of modern JV...
Prevalence?      240+ further languages:    http://tinyurl.com/3ql5m98www.mwea.de   Lessones learned: Use of modern JVM La...
Prevalence?      240+ further languages:    http://tinyurl.com/3ql5m98www.mwea.de   Lessones learned: Use of modern JVM La...
Languages for the Java platform                Platform integration?www.mwea.de   Lessones learned: Use of modern JVM Lang...
Syntax alignment     import java.util.*; // Java     Date today = new Date(); // Javawww.mwea.de   Lessones learned: Use o...
Syntax alignment     import java.util.*; // Java     Date today = new Date(); // Java     today = new Date() // Groovywww....
Syntax alignment     import java.util.*; // Java     Date today = new Date(); // Java     today = new Date() // Groovy    ...
Syntax alignment     import java.util.*; // Java     Date today = new Date(); // Java     today = new Date() // Groovy    ...
Syntax alignment     import java.util.*; // Java     Date today = new Date(); // Java     today = new Date() // Groovy    ...
Good IDE-support: The Paranthesis Generator?     (import (java.util Date)) ; Clojure (def today (new Date)) ;     Clojure ...
Plattform integration? => No syntax alignment!                              JRuby        Feature Rich                     ...
Seamless integration?                                                            Java               Groovy?               ...
Seamless Integration? (Groovy)     public class Article {            private String name;            private String price;...
Seamless Integration? (Groovy)     public class Article {                                                  public class Ar...
Seamless integration?                                                            Java                  Groovy             ...
Plattform integration?                              JRuby                                                                 ...
Seamless integration?                                                            Java                „Other“              ...
Seamless integration? (Scala) => Bytecode != Bytecode   Implicit Conversions                                              ...
Seamless integration? (Scala) => Bytecode != Bytecode     „Usually, it just works ...                                     ...
Seamless integration?                                                            Java                „Other“              ...
Plattform integration?                              JRuby                                           Scala                 ...
Languages for the Java platform            240+ Weitere:    http://tinyurl.com/3ql5m98www.mwea.de   Lessones learned: Use ...
Languages for the Java platform            240+ Weitere:    http://tinyurl.com/3ql5m98www.mwea.de   Lessones learned: Use ...
Conclusion „language selection"              The language has to be         „Java Friendly“ and „Feature Rich“www.mwea.de ...
Conclusion „language selection"              „The dynamic One“                                                           „...
Conclusion „language selection"www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01....
Agenda    1.  Reduced Efforts    2.  Increased Flexibility    3.  Reduced Complexity    4.  Reduced Heterogeneity    5.  I...
Why use new languages? Java does the job, right?                                                            IT            ...
Why use new languages? Java does the job, right?              Cloud Computing will be requested by the customer...www.mwea...
Why use new languages? Java does the job, right?              Cloud Computing will be requested by the customer...        ...
Why use new languages? Java does the job, right?              Cloud Computing will be requested by the customer...        ...
Problems with modern JVM Languages                ‚Real life‘ problemswww.mwea.de   Lessones learned: Use of modern JVM La...
Problems with modern JVM Languages     -  New Concepts for Java / OO Developers     -  Powerful vs. Ease of Use     -  Con...
Problems with modern JVM Languages     -  New Concepts for Java / OO Developers     -  Powerful vs. Ease of Use     -  Con...
Bytecode != Bytecode                                                                   Java + Groovy = Good               ...
Bytecode != Bytecode                                                       Ruby          Scala                            ...
IDEs do not have AS-GOOD maturity as Java (yet?)www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java -...
IDEs do not have AS-GOOD maturity as Java (yet?)www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java -...
Agenda    1.  Reduced Efforts    2.  Increased Flexibility    3.  Reduced Complexity    4.  Reduced Heterogeneity    5.  I...
Getting started...You cant make something out of nothing.www.mwea.de   Lessones learned: Use of modern JVM Languages besid...
Getting started...   Use new languages!                                                                                   ...
Conclusion „lessons learned“www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10....
Did the key message arrive?www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2...
Key message Java is still the most important programming platform Java is not the new Cobol Modern JVM languages besides J...
Did the key message arrive?www.mwea.de   Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner   01.10.2...
Thank you for your attention... Questions?   Contact              Kai Wähner                         MaibornWolff et al Gm...
Upcoming SlideShare
Loading in...5
×

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

10,628

Published on

Learn when to use which language? What are the benefits? What is the added business value?

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
10,628
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
33
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

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

  1. 1. Lessons Learned:Use of Modern JVM Languages Besides Java
  2. 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 Writingwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner
  3. 3. Java platformwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  4. 4. Variety of languages on the .NET platform C C++ C# F# .NET Silverlight Scalawww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  5. 5. Variety of languages on the Java platform Java Java Java Java Java Javawww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  6. 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.htmlwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  7. 7. Java platformwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  8. 8. Java Virtual Machine (JVM) Java Runtime Environment (JVM + Java Standard Libraries) => JVM Bytecode -> VM-specific internal representation -> Native machine codewww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  9. 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 codewww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  10. 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 codewww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  11. 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. 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 Codewww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  13. 13. Languages for the Java platform 240+ further languages: http://tinyurl.com/3ql5m98www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  14. 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. 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. 16. Key message Java is still the most important programming platformwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  17. 17. Key message Java is still the most important programming platform Java is not the new Cobolwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  18. 18. Key message Java is still the most important programming platform Java is not the new Cobol Modern JVM languages besides Java create added valuewww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  19. 19. Agenda 1.  Reduced Efforts 2.  Increased Flexibility 3.  Reduced Complexity 4.  Reduced Heterogeneity 5.  Innovation 6.  Language Selection 7.  Problems 8.  Getting Startedwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  20. 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 Startedwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  21. 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 learnedwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  22. 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 Startedwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  23. 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; } Javawww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  24. 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 Scalawww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  25. 25. Lines of code (Scala) employees.sort (_.age > _.age) Scala API: Scalawww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  26. 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. 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. 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. 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. 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 Startedwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  31. 31. Increased flexibility Modularisationwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  32. 32. Modularisation http://www.artima.com/scalazine/articles/package_objects.htmlwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  33. 33. Increased flexibility Scriptingwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  34. 34. Scripting Change behaviour of an application dynamically at runtime Direct execution vs. JSR 233 Scripting for the Java Platformwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  35. 35. Increased flexibility Meta programmingwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  36. 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. 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. 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. 39. Meta programming (Runtime) In Practice: „Finder“ in Grailswww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  40. 40. Meta programming replacement in Scala: Implicit Conversionswww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  41. 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. 42. Increased flexibility Build managementwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  43. 43. Build tools Ant vs. Mavenwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  44. 44. Build tools Ant Gradle vs. Mavenwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  45. 45. Build tools Ant Gradle vs. Mavenwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  46. 46. Build tools Ant Gradle vs. Mavenwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  47. 47. Build tools Further advantages (e.g. Scripting) Ant Gradle vs. Mavenwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  48. 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 Startedwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  49. 49. Reduced complexitywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  50. 50. Reduced complexity Concurrencywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  51. 51. Concurrency Current situation?www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  52. 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. 53. The industry has an answer Multicore CPUswww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  54. 54. Concurrency The problem?www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  55. 55. The problem Process A Shared State Process Bwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  56. 56. The problem Thread-API   Deadlocks   Race Conditions   Exceptionswww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  57. 57. Reduced complexity Solution?www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  58. 58. Attempted rescuewww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  59. 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. 60. Reduced complexity Better solution?www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  61. 61. Alternatives* for dealing with state (instead of Thread API) Shared Mutability => Software Transactional Memory (STM) versus Isolated Mutability => Actors * Purely Immutability => Tough to realizewww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  62. 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.htmlwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  63. 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. 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. 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() // == 2www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  66. 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. 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.htmlwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  68. 68. Internal DSL in test frameworkswww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  69. 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. 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. 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. 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. 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 Startedwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  74. 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. 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. 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 Startedwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  77. 77. Innovationwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  78. 78. Innovation New Technologies Concepts Solutionswww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  79. 79. Innovation New Technologies Concepts Solutions Marketing Article, blogs, conference sessionswww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  80. 80. Innovation New Technologies Concepts Solutions New Projects MarketingConsulting, Coaching, Development Article, blogs, conference sessionswww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  81. 81. Marketing „War for Talents“www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  82. 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. 83. Conclusion "business value" Reduced efforts Reduced complexity Increased flexibility Reduced Innovation Heterogeneitywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  84. 84. Conclusion "business value" Reduced efforts Reduced complexity Increased flexibility Reduced Innovation Heterogeneitywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  85. 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 learnedwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  86. 86. Languages for the Java platform 240+ further languages: http://tinyurl.com/3ql5m98www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  87. 87. Language selection <Excursus>www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  88. 88. Excursus: Typing Dynamically typed Complexity languague Statically typed language Powerwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  89. 89. Excursus: Programming concepts Scala in Depth, Joshua D. Suerethwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  90. 90. Language selection </Excursus>www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  91. 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. 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. 93. Languages for the Java platform 240+ further languages: http://tinyurl.com/3ql5m98www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  94. 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. 95. Maturity 240+ further languages: http://tinyurl.com/3ql5m98www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  96. 96. Maturity 240+ further languages: http://tinyurl.com/3ql5m98www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  97. 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. 98. Prevalence? 240+ further languages: http://tinyurl.com/3ql5m98www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  99. 99. Prevalence? 240+ further languages: http://tinyurl.com/3ql5m98www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  100. 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. 101. Syntax alignment import java.util.*; // Java Date today = new Date(); // Javawww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  102. 102. Syntax alignment import java.util.*; // Java Date today = new Date(); // Java today = new Date() // Groovywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  103. 103. Syntax alignment import java.util.*; // Java Date today = new Date(); // Java today = new Date() // Groovy import java.util._ // Scala var today = new Date // Scalawww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  104. 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 # JRubywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  105. 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 alternativewww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  106. 106. Good IDE-support: The Paranthesis Generator? (import (java.util Date)) ; Clojure (def today (new Date)) ; Clojure (def today (Date.)) ; Clojure alternativewww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  107. 107. Plattform integration? => No syntax alignment! JRuby Feature Rich Clojure Jython JavaScript Java Friendlywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  108. 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. 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 Groovywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  110. 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 Groovywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  111. 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. 112. Plattform integration? JRuby Groovy Feature Rich Clojure Jython JavaScript Java Friendlywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  113. 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. 114. Seamless integration? (Scala) => Bytecode != Bytecode Implicit Conversions Inexpressible vs. Language Object Identity / Equality Features Objects vs. Primitives Uniform Access Principle Java Bytecode Analysiswww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  115. 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. 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. 117. Plattform integration? JRuby Scala Groovy Feature Rich Clojure Jython JavaScript Java Friendlywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  118. 118. Languages for the Java platform 240+ Weitere: http://tinyurl.com/3ql5m98www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  119. 119. Languages for the Java platform 240+ Weitere: http://tinyurl.com/3ql5m98www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  120. 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. 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. 122. Conclusion „language selection"www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  123. 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 learnedwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  124. 124. Why use new languages? Java does the job, right? IT vs. Politicswww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  125. 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. 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. 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. 128. Problems with modern JVM Languages ‚Real life‘ problemswww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  129. 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. 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: „Dont 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. 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. 132. Bytecode != Bytecode Ruby Scala JRuby + Scala: www.codecommit.com/blog/ruby/integrating-scala-into-jrubywww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  133. 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. 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. 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 learnedwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  136. 136. Getting started...You cant make something out of nothing.www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  137. 137. Getting started... Use new languages! Marketing Looking back at Channels finished projects Think about it BEFORE starting new projects Internal Projects Testingwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  138. 138. Conclusion „lessons learned“www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  139. 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. 140. Key message Java is still the most important programming platform Java is not the new Cobol Modern JVM languages besides Java create added valuewww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
  141. 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. 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 @KaiWaehnerwww.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012

×