Moderne Programmiersprachen für die Java-Plattform
Was ist die Java-Plattform?




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Was ist die Java-Plattform?

                                                         Extremely
      Enterprise-ready                                    Stable               Highly Customizable
                                                                            (e.g. GC- / Heap-Settings)



  Extremely
     Fast
                                                                                                 Major
                                                                                               Platforms




                Terrific                                             So many awesome Projects
              Community                                              (Apache, Spring, Eclipse, ...)

                                                                                          6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                          2011
Trends?




              Plattformen entwickeln
                           sich stetig weiter!


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Entwicklung der .NET-Plattform (Microsoft)




                        2004: .NET 2.0
                        2006: .NET 3.0
                        2007: .NET 3.5
                        2010: .NET 4.0

                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Entwicklung der Java-Plattform




                                      2004: Java 5
                                      2006: Java 6
                                    5 Jahre nichts
                                    2011: Java 7
                                    2013: Java 8 ???
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Die Sprache „Java“ hat einige Probleme




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




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



                                                                                            6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                            2011
Abwärtskompatibilität stört Weiterentwicklung




               Sprachen können sich
              aber nicht stetig sinnvoll
                 weiterentwickeln!


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Sprachen-Vielfalt in .NET ganz normal




                                                    C              C++

                       C#                                             F#
                                                      .NET
                       Silverlight                                 Scala


                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                           2011
Sprachen-Vielfalt in Java ein Unding




                                       Java                        Java


                        Java                           Java
                                                                    Java
                                          Java

                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                           2011
Was ist die Java-Plattform?




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Was ist die Java-Plattform?




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




                                                                          6. Dezember
www.mwea.de    Moderne Programmiersprachen für die Java-Plattform
                                                                          2011
Was ist die Java-Plattform?


              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

                                                                                          6. Dezember
www.mwea.de        Moderne Programmiersprachen für die Java-Plattform
                                                                                          2011
Sprachen für die Java-Plattform




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

                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Sprachen für die Java-Plattform bei uns vor einiger Zeit*




                                                                   * Manchmal „aus Versehen“ auch andere im Einsatz

                                                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                                   2011
"Escape from the Java prison!"




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Was ist die "Key Message"?




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Key Message




 Zu Java gibt es gute Ergänzungen für die JVM!




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Key Message




 Zu Java gibt es gute Ergänzungen für die JVM!
 Die zusätzlichen Sprachen schaffen „Business Value“!



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Key Message




 Zu Java gibt es gute Ergänzungen für die JVM!
 Die zusätzlichen Sprachen schaffen „Business Value“!
 Entwickler und Entscheider sollten sich dafür interessieren!

                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Agenda


    1.  Reduzierung des Aufwands
    2.  Erhöhung der Flexibilität
    3.  Reduzierung der Komplexität
    4.  Reduzierung der Heterogenität
    5.  Schaffung von Innovation
    6.  Auswahl von Sprachen
    7.  Probleme
    8.  Getting Started
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Agenda


    1.  Reduzierung des Aufwands
    2.  Erhöhung der Flexibilität
                                                                   Business
    3.  Reduzierung der Komplexität
                                                                    Value
    4.  Reduzierung der Heterogenität
    5.  Schaffung von Innovation
    6.  Auswahl von Sprachen
    7.  Probleme
    8.  Getting Started
                                                                       6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                       2011
Agenda


    1.  Reduzierung des Aufwands
    2.  Erhöhung der Flexibilität
    3.  Reduzierung der Komplexität
    4.  Reduzierung der Heterogenität
    5.  Schaffung von Innovation
    6.  Auswahl von Sprachen
    7.  Probleme
                                                                   Lessons
    8.  Getting Started
                                                                   learned
                                                                      6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                      2011
Agenda


    1.  Reduzierung des Aufwands
    2.  Erhöhung der Flexibilität
                                                                   Business
    3.  Reduzierung der Komplexität
                                                                    Value
    4.  Reduzierung der Heterogenität
    5.  Schaffung von Innovation
    6.  Auswahl von Sprachen
    7.  Probleme
    8.  Getting Started
                                                                       6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                       2011
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



                                                                      6. Dezember
www.mwea.de      Moderne Programmiersprachen für die Java-Plattform
                                                                      2011
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



                                                                                              6. Dezember
www.mwea.de      Moderne Programmiersprachen für die Java-Plattform
                                                                                              2011
Lines of Code (Scala)




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

        Scala API:




                Java                                                        Scala



                                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                           2011
Lines of Code

     (Making Java Groovy, Kenneth A. Kousen)


     <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>




                                                                        6. Dezember
www.mwea.de        Moderne Programmiersprachen für die Java-Plattform
                                                                        2011
Lines of Code

     (Making Java Groovy, Kenneth A. Kousen)


     <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>




     Aufgabe: Gib den Titel des zweiten Buchs aus!

                                                                        6. Dezember
www.mwea.de        Moderne Programmiersprachen für die Java-Plattform
                                                                        2011
Lines of Code (Java)

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




     Aufgabe: Gib den Titel des zweiten Buchs aus!

                                                                                                                   6. Dezember
www.mwea.de        Moderne Programmiersprachen für die Java-Plattform
                                                                                                                   2011
Lines of Code (Groovy)

     (Making Java Groovy, Kenneth A. Kousen)


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




     Aufgabe: Gib den Titel des zweiten Buchs aus!

                                                                                                               6. Dezember
www.mwea.de        Moderne Programmiersprachen für die Java-Plattform
                                                                                                               2011
Viel mehr APIs und Sprachfeatures



                        Pattern                                        Immutable
                       Matching                                          Objects


                                                                                      Implicit
              SQL / XML                                                             Conversions
              Integration                                          Traits




                                                                                   Weitere ...
                                                              Collection
          Closures
                                                             .map / .fold

                                                                                         6. Dezember
www.mwea.de       Moderne Programmiersprachen für die Java-Plattform
                                                                                         2011
Agenda


    1.  Reduzierung des Aufwands
    2.  Erhöhung der Flexibilität
                                                                   Business
    3.  Reduzierung der Komplexität
                                                                    Value
    4.  Reduzierung der Heterogenität
    5.  Schaffung von Innovation
    6.  Auswahl von Sprachen
    7.  Probleme
    8.  Getting Started
                                                                       6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                       2011
Erhöhung der Flexibilität




                      Modularisierung



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Modularisierung




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




                                                                                            6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                            2011
Erhöhung der Flexibilität




                                              Scripting



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Scripting



                  Skript von der
              Kommandozeile ausführen




                                                                    6. Dezember
www.mwea.de    Moderne Programmiersprachen für die Java-Plattform
                                                                    2011
Scripting



          Verhalten einer Anwendung
       dynamisch zur Laufzeit verändern




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Scripting



          Verhalten einer Anwendung
       dynamisch zur Laufzeit verändern


              JSR 233 Scripting for the Java Platform
                                               groovy.util.Eval
                                   groovy.lang.GroovyShell


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Scripting



          Verhalten einer Anwendung
       dynamisch zur Laufzeit verändern



                    Achtung:
       Viele Anwendungen benötigen es nicht!


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Erhöhung der Flexibilität




                    Build-Management



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Build-Management




          Was macht ein Build-Tool?



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Build-Tools im Einsatz




                                                                    Ant
                                                                     vs.


                                                                   Maven
                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                           2011
Build-Tools im Einsatz




                                                                    Ant
    Gradle                                                           vs.


                                                                   Maven
                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                           2011
Build-Tools im Einsatz




                                                                    Ant
    Gradle                                                           vs.


                                                                   Maven
                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                           2011
Build-Tools im Einsatz




                                                                    Ant
    Gradle                                                           vs.


                                                                   Maven
                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                           2011
Build-Tools im Einsatz



    Weitere Vorteile
    (z.B. Scripting)
                                                                    Ant
    Gradle                                                           vs.


                                                                   Maven
                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                           2011
Erhöhung der Flexibilität




                    Meta-Programming



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Meta-Programming (Runtime )



              // Java Code
              public class ABC() {

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

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


                                                                         6. Dezember
www.mwea.de         Moderne Programmiersprachen für die Java-Plattform
                                                                         2011
Meta-Programming (Runtime )




              // Ein bißchen (Groovy-) Zauberei:
              Class.metaClass.factory = { Object[] args ->
                delegate.metaClass.invokeConstructor(*args)
              }




                                                                     6. Dezember
www.mwea.de     Moderne Programmiersprachen für die Java-Plattform
                                                                     2011
Meta-Programming (Runtime )




              // Ein bißchen (Groovy-) Zauberei:
              Class.metaClass.factory = { Object[] args ->
                delegate.metaClass.invokeConstructor(*args)
              }

              // Java-Klassen haben nun eine „factory()“-Methode:
              assert new HashMap() == HashMap. factory ()
              assert new Integer(42) == Integer. factory (42)
              assert new Dimension(2, 3) == Dimension. factory (2, 3)


                                                                     6. Dezember
www.mwea.de     Moderne Programmiersprachen für die Java-Plattform
                                                                     2011
Meta-Programming (Runtime )




                            (Praxisbeispiel: Finder in Grails)


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Meta-Programming-Ersatz in Scala: Implicit Conversions




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Meta-Programming-Ersatz in Scala: Implicit Conversions




                      Achtung: Mit Bedacht einsetzen!
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Meta-Programming (Compiletime)




      @Immutable // Die Implementierung ist nicht trivial!
      class Customer {
       String first, last
      }

      def c = new Customer(first:‘Kai‘, last:‘Wähner‘)


      c.first = ‚Otto‘ // throws ReadOnlyPropertyException




              Abstract Syntax Tree (AST) Transformations
                                                                      6. Dezember
www.mwea.de      Moderne Programmiersprachen für die Java-Plattform
                                                                      2011
Agenda


    1.  Reduzierung des Aufwands
    2.  Erhöhung der Flexibilität
                                                                   Business
    3.  Reduzierung der Komplexität
                                                                    Value
    4.  Reduzierung der Heterogenität
    5.  Schaffung von Innovation
    6.  Auswahl von Sprachen
    7.  Probleme
    8.  Getting Started
                                                                       6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                       2011
Reduzierung der Komplexität




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Wo gibt es hohe Komplexität?




                Concurrency /
              Multicore Processing


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Concurrency




                    Aktuelle Situation?



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Aktuelle Situation




     „The
  Gigahertz
     Race
   is over!“


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Die Antwort der Industrie




                                                                   Multicore
                                                                    CPUs
                                                                         6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                         2011
Die Antwort der Industrie




     „ ... das Ergebnis unserer Studie zeigt,
     dass sich die Unternehmen stärker mit
     der Multicore-Thematik befassen sollten.“
                                                                   Fraunhofer Institut, 2010



                                                                                  6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                  2011
Concurrency




                                Das Problem?



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Das Problem




              Process
                 A


                                                                      Shared
                                                                      Memory
              Process
                 B



                                                                           6. Dezember
www.mwea.de      Moderne Programmiersprachen für die Java-Plattform
                                                                           2011
Das Problem




      Thread-API
        Deadlocks
        Race Conditions
        Exceptions




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Das Problem




      Thread-API
        Deadlocks
        Race Conditions
        Exceptions

          „Threads themselves are not the main problem, the
              shared memory model is the real problem!“

                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Reduzierung der Komplexität




                                             Lösung?



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Meistens versuchte Lösung




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Gute Bücher, aber Thread-API bleibt sehr komplex!




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Reduzierung der Komplexität




                          Bessere Lösung?



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Bessere Lösung




                      „Share Nothing!“




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Viel bessere Lösung




          „Communicate
            by passing
            immutable
            Messages“
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Viel bessere Lösung


       Konzepte von
   funktionale Sprachen




          „Communicate
            by passing
            immutable
            Messages“
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Umsetzung




                                         Actors



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Actors ...




     ... gibt es schon
         viele Jahre.




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Actors




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




                                                                                               6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                               2011
Actors ...




              ... sind impliziter Bestandteil
                 von modernen Sprachen
                   wie Groovy und Scala!
                                                                    6. Dezember
www.mwea.de    Moderne Programmiersprachen für die Java-Plattform
                                                                    2011
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"))


                 Keine Thread-API, Locks, Synchronisierung
   (und dadurch auch geringere Gefahr für Deadlocks oder Race Conditions)

                                                                                6. Dezember
www.mwea.de        Moderne Programmiersprachen für die Java-Plattform
                                                                                2011
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"))


                            Aber Achtung: Anderes Programmiermodell
                          (und damit neue Konzepte, Denkweisen, APIs)

                                                                                6. Dezember
www.mwea.de        Moderne Programmiersprachen für die Java-Plattform
                                                                                2011
Actors in Scala mit Akka




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Actors in Groovy mit 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


                                                                               6. Dezember
www.mwea.de         Moderne Programmiersprachen für die Java-Plattform
                                                                               2011
Concurrency mit Clojure (rein funktional)


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




                                                               http://clojure.org/concurrent_programming



                                                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                                           2011
Reduzierung der Komplexität




                                        Domain
                                        Specific
                                       Languages
                                         (DSL)

                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
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

                                                                                                 6. Dezember
www.mwea.de    Moderne Programmiersprachen für die Java-Plattform
                                                                                                 2011
Interne DSL in Test-Frameworks




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
ScalaTest (Scala)


   Welcher Code ist klarer / sprechender?




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
ScalaTest (Scala)


   Welcher Code ist klarer / sprechender?


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




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
ScalaTest (Scala)


   Welcher Code ist klarer / sprechender?


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




   Scala:                    map should contain key ‘a’


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Beispiel für eine interne Scala-DSL




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




                                                                                          6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                          2011
Reduzierung der Komplexität



              Höheres
          Abstraktionslevel
                                                                      Sprechender,
                                                                      klarer, kürzer




              Nichts komplett neues,
              sondern „Added Value“

                                                                        Anpassbarkeit
                                                                       („mix in traits“)


                                                                                       6. Dezember
www.mwea.de      Moderne Programmiersprachen für die Java-Plattform
                                                                                       2011
Agenda


    1.  Reduzierung des Aufwands
    2.  Erhöhung der Flexibilität
                                                                   Business
    3.  Reduzierung der Komplexität
                                                                    Value
    4.  Reduzierung der Heterogenität
    5.  Schaffung von Innovation
    6.  Auswahl von Sprachen
    7.  Probleme
    8.  Getting Started
                                                                       6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                       2011
Reduzierung der Heterogenität




                                                                     Install-
                      Quell-code                                      Skript
                        (Java)                                       (Shell)




                    Dynamisches
                   Datenbank-Skript
                                                                   Build
                       (JRuby)
                                                                   (XML)


                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                           2011
Reduzierung der Heterogenität




                                                     Quellcode

                             Dynamisches Datenbank-Skript

                                                  Install-Skript

                                                          Build

                                                       (Groovy)



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Agenda


    1.  Reduzierung des Aufwands
    2.  Erhöhung der Flexibilität
                                                                   Business
    3.  Reduzierung der Komplexität
                                                                    Value
    4.  Reduzierung der Heterogenität
    5.  Schaffung von Innovation
    6.  Auswahl von Sprachen
    7.  Probleme
    8.  Getting Started
                                                                       6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                       2011
Schaffung von Innovation




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Schaffung von Innovation




                                                                   Neue
                                                                   Technologien
                                                                     Konzepte
                                                                     Lösungen




                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                           2011
Schaffung von Innovation




                                                                     Neue
                                                                     Technologien
                                                                       Konzepte
                                                                       Lösungen




                                                                   Marketing
                                                                   Artikel, Blogs, Vorträge

                                                                              6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                              2011
Schaffung von Innovation




                                                                     Neue
                                                                     Technologien
                                                                       Konzepte
                                                                       Lösungen




  Neue Projekte                                                    Marketing
  Consulting, Coaching, Entwicklung                                Artikel, Blogs, Vorträge

                                                                              6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                              2011
Marketing


      “Mehr als 80 Prozent der IT-Fachkräfte in Deutschland
      können sich vorstellen, ihren Arbeitgeber zu wechseln.“
                                                                       IT-Szene München (Sept 2011)




                                                                   „Follow the Leader“

                                                                                        6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                        2011
Marketing



  "Es wird sich eine Zweiklassengesellschaft
  unter den Hochschulabgängern herausbilden.“
                                                                          manager magazin 04/2011




                                                                   „War for Talents“

                                                                                    6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                    2011
Fazit "Business Value"



               Aufwand
              reduzieren                                               Komplexität
                                                                       reduzieren


                                              Flexibilität
                                               erhöhen




              Schaffung von                                          Heterogenität
                Innovation                                            reduzieren



                                                                                6. Dezember
www.mwea.de     Moderne Programmiersprachen für die Java-Plattform
                                                                                2011
Fazit "Business Value"



               Aufwand
                                                                       Komplexität
              reduzieren
                                                                       reduzieren


                                                 Flexibilität
                                                  erhöhen




                 Schaffung von
                                                                     Heterogenität
                   Innovation
                                                                      reduzieren

                                                                                 6. Dezember
www.mwea.de     Moderne Programmiersprachen für die Java-Plattform
                                                                                 2011
Agenda


    1.  Reduzierung des Aufwands
    2.  Erhöhung der Flexibilität
    3.  Reduzierung der Komplexität
    4.  Reduzierung der Heterogenität
    5.  Schaffung von Innovation
    6.  Auswahl von Sprachen
    7.  Probleme
                                                                   Lessons
    8.  Getting Started
                                                                   learned
                                                                      6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                      2011
Sprachen für die Java-Plattform




            240+ Weitere:
    http://tinyurl.com/3ql5m98
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Auswahl von Sprachen




                                      <Exkurs>


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Exkurs: Typisierung




                                                                           Dynamisch
                                                                            getypte
        Komplexität


                                                                            Sprache


                                               Statisch
                                               getypte
                                               Sprache



                                                                  Mächtigkeit
                                                                                       6. Dezember
www.mwea.de           Moderne Programmiersprachen für die Java-Plattform
                                                                                       2011
Exkurs: Objektorientierte vs. funktionale Programmierung




                                            Scala in Depth, Joshua D. Suereth



                                                                                6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                2011
Auswahl von Sprachen




                                      </Exkurs>


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Sprachen für die Java-Plattform




               Welche Sprache(n)
              sollen wir auswählen?


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Sprachen für die Java-Plattform




            240+ Weitere:
    http://tinyurl.com/3ql5m98
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Sprachen für die Java-Plattform




                                          Reifegrad?



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Reifegrad?




            240+ Weitere:
    http://tinyurl.com/3ql5m98
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Reifegrad?




            240+ Weitere:
    http://tinyurl.com/3ql5m98
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Sprachen für die Java-Plattform




                               Verbreitung?



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Verbreitung?




            240+ Weitere:
    http://tinyurl.com/3ql5m98
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Verbreitung?




            240+ Weitere:
    http://tinyurl.com/3ql5m98
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Sprachen für die Java-Plattform




              Plattform-Integration?



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Syntax-Alignment?


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




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Syntax-Alignment?


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

     today = new Date() // Groovy




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Syntax-Alignment?


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

     today = new Date() // Groovy

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




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
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




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
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

                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Guter IDE-Support: Der Klammern-Generator ???




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

                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Seamless Integration?




                                                            Java



              „Andere“                                             „Andere“


                                                                         6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                         2011
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
                                                                                               6. Dezember
www.mwea.de        Moderne Programmiersprachen für die Java-Plattform
                                                                                               2011
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
                                                                                                            6. Dezember
www.mwea.de        Moderne Programmiersprachen für die Java-Plattform
                                                                                                            2011
Seamless Integration?




                                                            Java



                  Groovy                                           „Andere“


                                                                         6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                         2011
Seamless Integration? (Scala) => Bytecode != Bytecode



     Usually, it just works ...




                                                                   ... if not, define a Java Interface.
                                                                                          6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                          2011
Seamless Integration? (Scala) => Bytecode != Bytecode


   Implicit Conversions                                                        Inexpressible
             vs.                                                                 Language
  Object Identity / Equality                                                     Features



                                                                                    Objects
                                                                                      vs.
                                                                                   Primitives
      Uniform
      Access
      Principle
                                                                   Java Bytecode Analysis

                                                                                     6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                     2011
Seamless Integration?




                                                            Java



              „Andere“                                             „Scala“


                                                                        6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                        2011
Seamless Integration?




              Java EE Integration?



                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Plattform-Integration




                                                                   http://java.dzone.com/articles/basic-mdb-scala-sbt-and-jee-6


                                                                                           6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                           2011
Plattform-Integration?




                               „Andere“
                             „Andere“
        Feature Rich




                                                                              „Andere“
                                                                            „Andere“

                                                                   Java Friendly
                                                                                   6. Dezember
www.mwea.de            Moderne Programmiersprachen für die Java-Plattform
                                                                                   2011
Plattform-Integration?




                               „Andere“
                             „Andere“                                         Groovy
        Feature Rich




                                                                              „Andere“
                                                                            „Andere“

                                                                   Java Friendly
                                                                                   6. Dezember
www.mwea.de            Moderne Programmiersprachen für die Java-Plattform
                                                                                   2011
Plattform-Integration?




                               „Andere“ Scala
                             „Andere“                                         Groovy
        Feature Rich




                                                                              „Andere“
                                                                            „Andere“

                                                                   Java Friendly
                                                                                   6. Dezember
www.mwea.de            Moderne Programmiersprachen für die Java-Plattform
                                                                                   2011
Sprachen für die Java-Plattform




            240+ Weitere:
    http://tinyurl.com/3ql5m98
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Sprachen für die Java-Plattform




            240+ Weitere:
    http://tinyurl.com/3ql5m98
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Fazit "Auswahl von Sprachen"




       „Java Friendly“ und „Feature Rich“
       muss die auserwählte Sprache sein

              (Andere JVM-Sprachen nur, wenn wirklich benötigt)


                                                                      6. Dezember
www.mwea.de      Moderne Programmiersprachen für die Java-Plattform
                                                                      2011
Fazit "Auswahl von Sprachen"



                      Noch ein Satz zu den „besseren“ Java‘s:




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Fazit "Auswahl von Sprachen"




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Fazit "Auswahl von Sprachen"




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Agenda


    1.  Reduzierung des Aufwands
    2.  Erhöhung der Flexibilität
    3.  Reduzierung der Komplexität
    4.  Reduzierung der Heterogenität
    5.  Schaffung von Innovation
    6.  Auswahl von Sprachen
    7.  Probleme
                                                                   Lessons
    8.  Getting Started
                                                                   learned
                                                                      6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                      2011
Wieso neue Sprachen? Java passt doch?




                                                            IT
                                                              vs.



                                              Politik
                                                                    6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                    2011
Wieso neue Sprachen? Java passt doch?




    Cloud Computing wird der Kunde fordern...




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Wieso neue Sprachen? Java passt doch?




    Cloud Computing wird der Kunde fordern...

              NoSQL werden die Anforderungen
                 unumgänglich machen...




                                                                    6. Dezember
www.mwea.de    Moderne Programmiersprachen für die Java-Plattform
                                                                    2011
Wieso neue Sprachen? Java passt doch?




    Cloud Computing wird der Kunde fordern...

              NoSQL werden die Anforderungen
                 unumgänglich machen...

      ... aber moderne JVM-Sprachen werden
            wohl nie gefordert werden 

                                                                    6. Dezember
www.mwea.de    Moderne Programmiersprachen für die Java-Plattform
                                                                    2011
Vorurteile




              Einarbeitungsaufwand?


               Kunde überzeugen?


                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Vorurteile




              Einarbeitungsaufwand?


               Kunde überzeugen?

     „Don't let yourself be fooled!“
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Nachteile




              Tatsächliche Probleme



                                                                    6. Dezember
www.mwea.de    Moderne Programmiersprachen für die Java-Plattform
                                                                    2011
Nachteile von neuen Sprachen


      -  Mächtiger != Einfacher => Wissen, wie und was man von
      einer Sprache lernen und einsetzen muss
      -  Nicht nur neue Sprache, sondern (für Java- bzw. OO-
      Entwickler) neue Konzepte (Funktional, Actors, ...)
      -  Funktional vs. OO vs. Mischmasch
      => „the Java way“ is not the good way
      -  Debugging der tollen Sprachfeatures (Closures, Implicit
      Conversions, ...)
      -  Kosten „Produktlebenszyklus“ (weniger Skills verfügbar,
      Schulungen, Wartung)
      -  Bytecode != Bytecode
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Bytecode != Bytecode




                                                                   Java + Groovy = Gut
                                                                   Java + Scala = Ok
                                                                   Non-Java + Non-Java = ???




                                                                                     6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                     2011
Bytecode != Bytecode




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



                                                                                                                  6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                                                  2011
Nachteile speziell von dynamischen Sprachen




      -  Meta-Programming, DSLs, etc.
          => Was passiert hier eigentlich?

      -  Exceptions erst zur Laufzeit
           => Run-time type errors

      -  Schlechtere Lesbarkeit

      -  Refactoring? Wartbarkeit? (CRs etc.)




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
IDEs (noch) nicht auf "Java-Niveau"




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
IDEs (noch) nicht auf "Java-Niveau"




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Agenda


    1.  Reduzierung des Aufwands
    2.  Erhöhung der Flexibilität
    3.  Reduzierung der Komplexität
    4.  Reduzierung der Heterogenität
    5.  Schaffung von Innovation
    6.  Auswahl von Sprachen
    7.  Probleme
                                                                   Lessons
    8.  Getting Started
                                                                   learned
                                                                      6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                      2011
"Getting Started bei MWEA"




         Von nichts kommt nichts!
                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
"Getting Started bei MWEA"




                Bücher




                                                              Einarbeitung

            Workshops
          (Technorunde)                                            Weiterbildungs-
                                                                       budget


                                                                               6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                               2011
"Getting Started bei MWEA"



                                                                      Rückblick auf bereits
               Interne                                                umgesetzte Projekte
               Projekte




                                Einsatz                                          Testing




              Bereits bei Planung von neuen
                Projekten berücksichtigen
                                                                                 Marketingkanäle
                                                                                     nutzen

                                                                                              6. Dezember
www.mwea.de      Moderne Programmiersprachen für die Java-Plattform
                                                                                              2011
Fazit „Lessons learned“




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Agenda




                                        1.       Reduzierung des Aufwands
                                        2.       Erhöhung der Flexibilität
                                        3.       Reduzierung der Komplexität
                                        4.       Reduzierung der Heterogenität
                                        5.       Schaffung von Innovation
                                        6.       Auswahl von Sprachen
                                        7.       Probleme
                                        8.       Getting Started
                                                                                 6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                 2011
Ist die "Key-Message" angekommen?




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Key Message




 Zu Java gibt es gute Ergänzungen für die JVM!
 Die zusätzlichen Sprachen schaffen „Business Value“!
 Entwickler und Entscheider sollten sich dafür interessieren!

                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Ist die "Key-Message" angekommen?




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Buchempfehlungen




                                                                   6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                   2011
Vielen Dank für Eure Aufmerksamkeit... Fragen?




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



                                                                                          6. Dezember
www.mwea.de   Moderne Programmiersprachen für die Java-Plattform
                                                                                          2011

[GER] Lessons learned: Modern JVM Languages besides Java

  • 1.
  • 2.
    Was ist dieJava-Plattform? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 3.
    Was ist dieJava-Plattform? Extremely Enterprise-ready Stable Highly Customizable (e.g. GC- / Heap-Settings) Extremely Fast Major Platforms Terrific So many awesome Projects Community (Apache, Spring, Eclipse, ...) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 4.
    Trends? Plattformen entwickeln sich stetig weiter! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 5.
    Entwicklung der .NET-Plattform(Microsoft) 2004: .NET 2.0 2006: .NET 3.0 2007: .NET 3.5 2010: .NET 4.0 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 6.
    Entwicklung der Java-Plattform 2004: Java 5 2006: Java 6 5 Jahre nichts 2011: Java 7 2013: Java 8 ??? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 7.
    Die Sprache „Java“hat einige Probleme „It’s not all rainbows and unicorns in the land of Java“ http://batsov.com/Java/Groovy/2011/05/06/jvm-langs-groovy.html 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 8.
    Abwärtskompatibilität stört Weiterentwicklung Sprachen können sich aber nicht stetig sinnvoll weiterentwickeln! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 9.
    Sprachen-Vielfalt in .NETganz normal C C++ C# F# .NET Silverlight Scala 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 10.
    Sprachen-Vielfalt in Javaein Unding Java Java Java Java Java Java 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 11.
    Was ist dieJava-Plattform? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 12.
    Was ist dieJava-Plattform? Java Runtime Environment (JVM + Java Standard Libraries) => JVM Bytecode -> VM-specific internal representation -> Native machine code 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 13.
    Was ist dieJava-Plattform? 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 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 14.
    Sprachen für dieJava-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 15.
    Sprachen für dieJava-Plattform bei uns vor einiger Zeit* * Manchmal „aus Versehen“ auch andere im Einsatz 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 16.
    "Escape from theJava prison!" 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 17.
    Was ist die"Key Message"? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 18.
    Key Message ZuJava gibt es gute Ergänzungen für die JVM! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 19.
    Key Message ZuJava gibt es gute Ergänzungen für die JVM! Die zusätzlichen Sprachen schaffen „Business Value“! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 20.
    Key Message ZuJava gibt es gute Ergänzungen für die JVM! Die zusätzlichen Sprachen schaffen „Business Value“! Entwickler und Entscheider sollten sich dafür interessieren! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 21.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität 3.  Reduzierung der Komplexität 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme 8.  Getting Started 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 22.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität Business 3.  Reduzierung der Komplexität Value 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme 8.  Getting Started 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 23.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität 3.  Reduzierung der Komplexität 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme Lessons 8.  Getting Started learned 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 24.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität Business 3.  Reduzierung der Komplexität Value 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme 8.  Getting Started 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 25.
    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 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 26.
    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 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 27.
    Lines of Code(Scala) employees.sort (_.age > _.age) Scala API: Java Scala 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 28.
    Lines of Code (Making Java Groovy, Kenneth A. Kousen) <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> 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 29.
    Lines of Code (Making Java Groovy, Kenneth A. Kousen) <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> Aufgabe: Gib den Titel des zweiten Buchs aus! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 30.
    Lines of Code(Java) (Making Java Groovy, Kenneth A. Kousen) DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); <books> Document doc = null; <book isbn="…"> <title>Groovy in Action</title> try {DocumentBuilder b = factory.newDocumentBuilder(); <author>Dierk Koenig</author> doc = b.parse("src/jag/xml/books.xml"); <author>Paul King</author> } catch (Exception e) { // Parser, SAX, IO … </book> e.printStackTrace();} <book isbn="…"> if (doc == null) return; <title>Grails in Action</title> NodeList titles = doc.getElementsByTagName("title"); <author>Glen Smith</author> <author>Peter Ledbrook</author> Element titleNode = (Element) titles.item(1); </book> String title = titleNode.getFirstChild().getNodeValue(); ... </books> System.out.println("The second title is " + title); Aufgabe: Gib den Titel des zweiten Buchs aus! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 31.
    Lines of Code(Groovy) (Making Java Groovy, Kenneth A. Kousen) <books> <book isbn="…"> <title>Groovy in Action</title> <author>Dierk Koenig</author> root = new XmlSlurper().parse('books.xml') <author>Paul King</author> println root.book[1].title … </book> <book isbn="…"> <title>Grails in Action</title> <author>Glen Smith</author> <author>Peter Ledbrook</author> </book> ... </books> Aufgabe: Gib den Titel des zweiten Buchs aus! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 32.
    Viel mehr APIsund Sprachfeatures Pattern Immutable Matching Objects Implicit SQL / XML Conversions Integration Traits Weitere ... Collection Closures .map / .fold 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 33.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität Business 3.  Reduzierung der Komplexität Value 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme 8.  Getting Started 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 34.
    Erhöhung der Flexibilität Modularisierung 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 35.
    Modularisierung http://www.artima.com/scalazine/articles/package_objects.html 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 36.
    Erhöhung der Flexibilität Scripting 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 37.
    Scripting Skript von der Kommandozeile ausführen 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 38.
    Scripting Verhalten einer Anwendung dynamisch zur Laufzeit verändern 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 39.
    Scripting Verhalten einer Anwendung dynamisch zur Laufzeit verändern JSR 233 Scripting for the Java Platform groovy.util.Eval groovy.lang.GroovyShell 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 40.
    Scripting Verhalten einer Anwendung dynamisch zur Laufzeit verändern Achtung: Viele Anwendungen benötigen es nicht! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 41.
    Erhöhung der Flexibilität Build-Management 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 42.
    Build-Management Was macht ein Build-Tool? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 43.
    Build-Tools im Einsatz Ant vs. Maven 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 44.
    Build-Tools im Einsatz Ant Gradle vs. Maven 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 45.
    Build-Tools im Einsatz Ant Gradle vs. Maven 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 46.
    Build-Tools im Einsatz Ant Gradle vs. Maven 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 47.
    Build-Tools im Einsatz Weitere Vorteile (z.B. Scripting) Ant Gradle vs. Maven 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 48.
    Erhöhung der Flexibilität Meta-Programming 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 49.
    Meta-Programming (Runtime ) // Java Code public class ABC() { public static ABC factory() { return new ABC(); } public static void main(String[] args) { assert(new ABC() == factory()); } } 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 50.
    Meta-Programming (Runtime ) // Ein bißchen (Groovy-) Zauberei: Class.metaClass.factory = { Object[] args -> delegate.metaClass.invokeConstructor(*args) } 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 51.
    Meta-Programming (Runtime ) // Ein bißchen (Groovy-) Zauberei: Class.metaClass.factory = { Object[] args -> delegate.metaClass.invokeConstructor(*args) } // Java-Klassen haben nun eine „factory()“-Methode: assert new HashMap() == HashMap. factory () assert new Integer(42) == Integer. factory (42) assert new Dimension(2, 3) == Dimension. factory (2, 3) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 52.
    Meta-Programming (Runtime ) (Praxisbeispiel: Finder in Grails) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 53.
    Meta-Programming-Ersatz in Scala:Implicit Conversions 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 54.
    Meta-Programming-Ersatz in Scala:Implicit Conversions Achtung: Mit Bedacht einsetzen! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 55.
    Meta-Programming (Compiletime) @Immutable // Die Implementierung ist nicht trivial! class Customer { String first, last } def c = new Customer(first:‘Kai‘, last:‘Wähner‘) c.first = ‚Otto‘ // throws ReadOnlyPropertyException Abstract Syntax Tree (AST) Transformations 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 56.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität Business 3.  Reduzierung der Komplexität Value 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme 8.  Getting Started 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 57.
    Reduzierung der Komplexität 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 58.
    Wo gibt eshohe Komplexität? Concurrency / Multicore Processing 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 59.
    Concurrency Aktuelle Situation? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 60.
    Aktuelle Situation „The Gigahertz Race is over!“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 61.
    Die Antwort derIndustrie Multicore CPUs 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 62.
    Die Antwort derIndustrie „ ... das Ergebnis unserer Studie zeigt, dass sich die Unternehmen stärker mit der Multicore-Thematik befassen sollten.“ Fraunhofer Institut, 2010 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 63.
    Concurrency Das Problem? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 64.
    Das Problem Process A Shared Memory Process B 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 65.
    Das Problem Thread-API   Deadlocks   Race Conditions   Exceptions 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 66.
    Das Problem Thread-API   Deadlocks   Race Conditions   Exceptions „Threads themselves are not the main problem, the shared memory model is the real problem!“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 67.
    Reduzierung der Komplexität Lösung? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 68.
    Meistens versuchte Lösung 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 69.
    Gute Bücher, aberThread-API bleibt sehr komplex! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 70.
    Reduzierung der Komplexität Bessere Lösung? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 71.
    Bessere Lösung „Share Nothing!“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 72.
    Viel bessere Lösung „Communicate by passing immutable Messages“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 73.
    Viel bessere Lösung Konzepte von funktionale Sprachen „Communicate by passing immutable Messages“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 74.
    Umsetzung Actors 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 75.
    Actors ... ... gibt es schon viele Jahre. 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 76.
    Actors http://www.infoq.com/presentations/Actor-based-Programming (Jamie Ridgway) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 77.
    Actors ... ... sind impliziter Bestandteil von modernen Sprachen wie Groovy und Scala! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 78.
    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")) Keine Thread-API, Locks, Synchronisierung (und dadurch auch geringere Gefahr für Deadlocks oder Race Conditions) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 79.
    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")) Aber Achtung: Anderes Programmiermodell (und damit neue Konzepte, Denkweisen, APIs) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 80.
    Actors in Scalamit Akka 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 81.
    Actors in Groovymit 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 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 82.
    Concurrency mit Clojure(rein funktional) „Clojure does not replace the Java thread system, rather it works with it. [But there are] no locks! “ http://clojure.org/concurrent_programming 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 83.
    Reduzierung der Komplexität Domain Specific Languages (DSL) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 84.
    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 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 85.
    Interne DSL inTest-Frameworks 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 86.
    ScalaTest (Scala) Welcher Code ist klarer / sprechender? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 87.
    ScalaTest (Scala) Welcher Code ist klarer / sprechender? Java: assertTrue(map.containsKey(‘a’)); 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 88.
    ScalaTest (Scala) Welcher Code ist klarer / sprechender? Java: assertTrue(map.containsKey(‘a’)); Scala: map should contain key ‘a’ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 89.
    Beispiel für eineinterne Scala-DSL Baysick DSL (simuliert BASIC) http://blog.fogus.me/2009/03/26/ baysick-a-scala-dsl-implementing-basic/ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 90.
    Reduzierung der Komplexität Höheres Abstraktionslevel Sprechender, klarer, kürzer Nichts komplett neues, sondern „Added Value“ Anpassbarkeit („mix in traits“) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 91.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität Business 3.  Reduzierung der Komplexität Value 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme 8.  Getting Started 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 92.
    Reduzierung der Heterogenität Install- Quell-code Skript (Java) (Shell) Dynamisches Datenbank-Skript Build (JRuby) (XML) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 93.
    Reduzierung der Heterogenität Quellcode Dynamisches Datenbank-Skript Install-Skript Build (Groovy) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 94.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität Business 3.  Reduzierung der Komplexität Value 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme 8.  Getting Started 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 95.
    Schaffung von Innovation 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 96.
    Schaffung von Innovation Neue Technologien Konzepte Lösungen 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 97.
    Schaffung von Innovation Neue Technologien Konzepte Lösungen Marketing Artikel, Blogs, Vorträge 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 98.
    Schaffung von Innovation Neue Technologien Konzepte Lösungen Neue Projekte Marketing Consulting, Coaching, Entwicklung Artikel, Blogs, Vorträge 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 99.
    Marketing “Mehr als 80 Prozent der IT-Fachkräfte in Deutschland können sich vorstellen, ihren Arbeitgeber zu wechseln.“ IT-Szene München (Sept 2011) „Follow the Leader“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 100.
    Marketing "Eswird sich eine Zweiklassengesellschaft unter den Hochschulabgängern herausbilden.“ manager magazin 04/2011 „War for Talents“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 101.
    Fazit "Business Value" Aufwand reduzieren Komplexität reduzieren Flexibilität erhöhen Schaffung von Heterogenität Innovation reduzieren 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 102.
    Fazit "Business Value" Aufwand Komplexität reduzieren reduzieren Flexibilität erhöhen Schaffung von Heterogenität Innovation reduzieren 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 103.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität 3.  Reduzierung der Komplexität 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme Lessons 8.  Getting Started learned 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 104.
    Sprachen für dieJava-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 105.
    Auswahl von Sprachen <Exkurs> 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 106.
    Exkurs: Typisierung Dynamisch getypte Komplexität Sprache Statisch getypte Sprache Mächtigkeit 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 107.
    Exkurs: Objektorientierte vs.funktionale Programmierung Scala in Depth, Joshua D. Suereth 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 108.
    Auswahl von Sprachen </Exkurs> 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 109.
    Sprachen für dieJava-Plattform Welche Sprache(n) sollen wir auswählen? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 110.
    Sprachen für dieJava-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 111.
    Sprachen für dieJava-Plattform Reifegrad? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 112.
    Reifegrad? 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 113.
    Reifegrad? 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 114.
    Sprachen für dieJava-Plattform Verbreitung? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 115.
    Verbreitung? 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 116.
    Verbreitung? 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 117.
    Sprachen für dieJava-Plattform Plattform-Integration? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 118.
    Syntax-Alignment? import java.util.*; // Java Date today = new Date(); // Java 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 119.
    Syntax-Alignment? import java.util.*; // Java Date today = new Date(); // Java today = new Date() // Groovy 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 120.
    Syntax-Alignment? import java.util.*; // Java Date today = new Date(); // Java today = new Date() // Groovy import java.util._ // Scala var today = new Date // Scala 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 121.
    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 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 122.
    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 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 123.
    Guter IDE-Support: DerKlammern-Generator ??? (import '(java.util Date)) ; Clojure (def today (new Date)) ; Clojure (def today (Date.)) ; Clojure alternative 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 124.
    Seamless Integration? Java „Andere“ „Andere“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 125.
    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 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 126.
    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 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 127.
    Seamless Integration? Java Groovy „Andere“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 128.
    Seamless Integration? (Scala)=> Bytecode != Bytecode Usually, it just works ... ... if not, define a Java Interface. 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 129.
    Seamless Integration? (Scala)=> Bytecode != Bytecode Implicit Conversions Inexpressible vs. Language Object Identity / Equality Features Objects vs. Primitives Uniform Access Principle Java Bytecode Analysis 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 130.
    Seamless Integration? Java „Andere“ „Scala“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 131.
    Seamless Integration? Java EE Integration? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 132.
    Plattform-Integration http://java.dzone.com/articles/basic-mdb-scala-sbt-and-jee-6 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 133.
    Plattform-Integration? „Andere“ „Andere“ Feature Rich „Andere“ „Andere“ Java Friendly 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 134.
    Plattform-Integration? „Andere“ „Andere“ Groovy Feature Rich „Andere“ „Andere“ Java Friendly 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 135.
    Plattform-Integration? „Andere“ Scala „Andere“ Groovy Feature Rich „Andere“ „Andere“ Java Friendly 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 136.
    Sprachen für dieJava-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 137.
    Sprachen für dieJava-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 138.
    Fazit "Auswahl vonSprachen" „Java Friendly“ und „Feature Rich“ muss die auserwählte Sprache sein (Andere JVM-Sprachen nur, wenn wirklich benötigt) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 139.
    Fazit "Auswahl vonSprachen" Noch ein Satz zu den „besseren“ Java‘s: 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 140.
    Fazit "Auswahl vonSprachen" 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 141.
    Fazit "Auswahl vonSprachen" 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 142.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität 3.  Reduzierung der Komplexität 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme Lessons 8.  Getting Started learned 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 143.
    Wieso neue Sprachen?Java passt doch? IT vs. Politik 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 144.
    Wieso neue Sprachen?Java passt doch? Cloud Computing wird der Kunde fordern... 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 145.
    Wieso neue Sprachen?Java passt doch? Cloud Computing wird der Kunde fordern... NoSQL werden die Anforderungen unumgänglich machen... 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 146.
    Wieso neue Sprachen?Java passt doch? Cloud Computing wird der Kunde fordern... NoSQL werden die Anforderungen unumgänglich machen... ... aber moderne JVM-Sprachen werden wohl nie gefordert werden  6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 147.
    Vorurteile Einarbeitungsaufwand? Kunde überzeugen? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 148.
    Vorurteile Einarbeitungsaufwand? Kunde überzeugen? „Don't let yourself be fooled!“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 149.
    Nachteile Tatsächliche Probleme 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 150.
    Nachteile von neuenSprachen -  Mächtiger != Einfacher => Wissen, wie und was man von einer Sprache lernen und einsetzen muss -  Nicht nur neue Sprache, sondern (für Java- bzw. OO- Entwickler) neue Konzepte (Funktional, Actors, ...) -  Funktional vs. OO vs. Mischmasch => „the Java way“ is not the good way -  Debugging der tollen Sprachfeatures (Closures, Implicit Conversions, ...) -  Kosten „Produktlebenszyklus“ (weniger Skills verfügbar, Schulungen, Wartung) -  Bytecode != Bytecode 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 151.
    Bytecode != Bytecode Java + Groovy = Gut Java + Scala = Ok Non-Java + Non-Java = ??? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 152.
    Bytecode != Bytecode Beispiel JRuby + Scala: www.codecommit.com/blog/ruby/integrating-scala-into-jruby 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 153.
    Nachteile speziell vondynamischen Sprachen -  Meta-Programming, DSLs, etc. => Was passiert hier eigentlich? -  Exceptions erst zur Laufzeit => Run-time type errors -  Schlechtere Lesbarkeit -  Refactoring? Wartbarkeit? (CRs etc.) 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 154.
    IDEs (noch) nichtauf "Java-Niveau" 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 155.
    IDEs (noch) nichtauf "Java-Niveau" 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 156.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität 3.  Reduzierung der Komplexität 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme Lessons 8.  Getting Started learned 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 157.
    "Getting Started beiMWEA" Von nichts kommt nichts! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 158.
    "Getting Started beiMWEA" Bücher Einarbeitung Workshops (Technorunde) Weiterbildungs- budget 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 159.
    "Getting Started beiMWEA" Rückblick auf bereits Interne umgesetzte Projekte Projekte Einsatz Testing Bereits bei Planung von neuen Projekten berücksichtigen Marketingkanäle nutzen 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 160.
    Fazit „Lessons learned“ 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 161.
    Agenda 1.  Reduzierung des Aufwands 2.  Erhöhung der Flexibilität 3.  Reduzierung der Komplexität 4.  Reduzierung der Heterogenität 5.  Schaffung von Innovation 6.  Auswahl von Sprachen 7.  Probleme 8.  Getting Started 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 162.
    Ist die "Key-Message"angekommen? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 163.
    Key Message ZuJava gibt es gute Ergänzungen für die JVM! Die zusätzlichen Sprachen schaffen „Business Value“! Entwickler und Entscheider sollten sich dafür interessieren! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 164.
    Ist die "Key-Message"angekommen? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 165.
    Buchempfehlungen 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 166.
    Vielen Dank fürEure Aufmerksamkeit... Fragen? Kontakt Kai Wähner MaibornWolff et al GmbH Mobil +49 151 544 277 88 IT-Consultant Theresienhöhe 13 Email kai.waehner@mwea.de D-80339 München Twitter @KaiWaehner 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011