SlideShare une entreprise Scribd logo
1  sur  166
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

Contenu connexe

En vedette

Autobiografia ams
Autobiografia amsAutobiografia ams
Autobiografia amsalvaro_92
 
Sistema operativo windows (2)
Sistema operativo windows (2)Sistema operativo windows (2)
Sistema operativo windows (2)baez95
 
Cecilia quintas y su familia de dos mundos
Cecilia quintas y su familia de dos mundosCecilia quintas y su familia de dos mundos
Cecilia quintas y su familia de dos mundoslaquintafuente
 
La edad moderna
La edad modernaLa edad moderna
La edad modernaal3xg
 
Seminario metodología de la investigación científica
Seminario metodología de la investigación científicaSeminario metodología de la investigación científica
Seminario metodología de la investigación científicarelacionessociales
 
Departamento santander del sur cristian rincon 701
Departamento santander del sur cristian rincon 701Departamento santander del sur cristian rincon 701
Departamento santander del sur cristian rincon 701cristian2002
 
Tiristores
TiristoresTiristores
Tiristoresjosef_20
 
19682121 ronald bello
19682121 ronald bello19682121 ronald bello
19682121 ronald belloRonald Bello
 
5 expo planificacion gestion gerencial
5 expo planificacion gestion gerencial5 expo planificacion gestion gerencial
5 expo planificacion gestion gerencialHisdary Barrios
 
26. LTG-Sitzung am 27. März 2011
26. LTG-Sitzung am 27. März 201126. LTG-Sitzung am 27. März 2011
26. LTG-Sitzung am 27. März 2011Stephan Tauschitz
 
• Deutsch
•  Deutsch•  Deutsch
• Deutschhajj2013
 
Portafolio gestion empresarial yadith
Portafolio gestion empresarial yadithPortafolio gestion empresarial yadith
Portafolio gestion empresarial yadithyadith8014
 
Fotografía médica
Fotografía médicaFotografía médica
Fotografía médicaDanissalg
 

En vedette (19)

La tv digital
La tv digitalLa tv digital
La tv digital
 
Autobiografia ams
Autobiografia amsAutobiografia ams
Autobiografia ams
 
Sistema operativo windows (2)
Sistema operativo windows (2)Sistema operativo windows (2)
Sistema operativo windows (2)
 
Cecilia quintas y su familia de dos mundos
Cecilia quintas y su familia de dos mundosCecilia quintas y su familia de dos mundos
Cecilia quintas y su familia de dos mundos
 
La edad moderna
La edad modernaLa edad moderna
La edad moderna
 
Seminario metodología de la investigación científica
Seminario metodología de la investigación científicaSeminario metodología de la investigación científica
Seminario metodología de la investigación científica
 
Departamento santander del sur cristian rincon 701
Departamento santander del sur cristian rincon 701Departamento santander del sur cristian rincon 701
Departamento santander del sur cristian rincon 701
 
Tiristores
TiristoresTiristores
Tiristores
 
Tv digital
Tv digitalTv digital
Tv digital
 
Bullying
BullyingBullying
Bullying
 
19682121 ronald bello
19682121 ronald bello19682121 ronald bello
19682121 ronald bello
 
Neochamanica
NeochamanicaNeochamanica
Neochamanica
 
silvia
silviasilvia
silvia
 
Combinacion de teclas
Combinacion de  teclasCombinacion de  teclas
Combinacion de teclas
 
5 expo planificacion gestion gerencial
5 expo planificacion gestion gerencial5 expo planificacion gestion gerencial
5 expo planificacion gestion gerencial
 
26. LTG-Sitzung am 27. März 2011
26. LTG-Sitzung am 27. März 201126. LTG-Sitzung am 27. März 2011
26. LTG-Sitzung am 27. März 2011
 
• Deutsch
•  Deutsch•  Deutsch
• Deutsch
 
Portafolio gestion empresarial yadith
Portafolio gestion empresarial yadithPortafolio gestion empresarial yadith
Portafolio gestion empresarial yadith
 
Fotografía médica
Fotografía médicaFotografía médica
Fotografía médica
 

Similaire à [GER] Lessons learned: Modern JVM Languages besides Java

Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEEguestc44b7b
 
Endlich! Der Unterschied zwischen Java und JavaScript
Endlich! Der Unterschied zwischen Java und JavaScriptEndlich! Der Unterschied zwischen Java und JavaScript
Endlich! Der Unterschied zwischen Java und JavaScriptDieter Ziegler
 
Jalimo Slides Linuxtag2007
Jalimo Slides Linuxtag2007Jalimo Slides Linuxtag2007
Jalimo Slides Linuxtag2007smancke
 
2011_Herbstcampus_Rapid_Cloud_Development_with_Spring_Roo
2011_Herbstcampus_Rapid_Cloud_Development_with_Spring_Roo2011_Herbstcampus_Rapid_Cloud_Development_with_Spring_Roo
2011_Herbstcampus_Rapid_Cloud_Development_with_Spring_RooKai Wähner
 
Semantic Web Technologies - SS 2010 - 05 - RDF(S) Frameworks
Semantic Web Technologies - SS 2010 - 05 - RDF(S) FrameworksSemantic Web Technologies - SS 2010 - 05 - RDF(S) Frameworks
Semantic Web Technologies - SS 2010 - 05 - RDF(S) FrameworksSteffen Schloenvoigt
 
Reif? Scala für Enterprise-Applikationen
Reif? Scala für Enterprise-ApplikationenReif? Scala für Enterprise-Applikationen
Reif? Scala für Enterprise-Applikationenadesso AG
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsJavaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsStephan Kaps
 
Microservices mit Java und Go im Vergleich
Microservices mit Java und Go im VergleichMicroservices mit Java und Go im Vergleich
Microservices mit Java und Go im VergleichQAware GmbH
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampWerner Keil
 
Roadmap von Microsoft UI Technologien und Windows 8
Roadmap von Microsoft UI Technologien und Windows 8Roadmap von Microsoft UI Technologien und Windows 8
Roadmap von Microsoft UI Technologien und Windows 8chmoser79
 
Roadmap von Microsoft UI-Technologien und Windows 8
Roadmap von Microsoft UI-Technologien und Windows 8Roadmap von Microsoft UI-Technologien und Windows 8
Roadmap von Microsoft UI-Technologien und Windows 8chmoser79
 
Wie Azure Jakarta EE Nutzt
Wie Azure Jakarta EE NutztWie Azure Jakarta EE Nutzt
Wie Azure Jakarta EE NutztEdward Burns
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013Oliver Zeigermann
 
May the forge be with you
May the forge be with youMay the forge be with you
May the forge be with youSandro Sonntag
 
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenFortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenRalf Eggert
 

Similaire à [GER] Lessons learned: Modern JVM Languages besides Java (20)

Scala
ScalaScala
Scala
 
Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEE
 
Endlich! Der Unterschied zwischen Java und JavaScript
Endlich! Der Unterschied zwischen Java und JavaScriptEndlich! Der Unterschied zwischen Java und JavaScript
Endlich! Der Unterschied zwischen Java und JavaScript
 
Jalimo Slides Linuxtag2007
Jalimo Slides Linuxtag2007Jalimo Slides Linuxtag2007
Jalimo Slides Linuxtag2007
 
2011_Herbstcampus_Rapid_Cloud_Development_with_Spring_Roo
2011_Herbstcampus_Rapid_Cloud_Development_with_Spring_Roo2011_Herbstcampus_Rapid_Cloud_Development_with_Spring_Roo
2011_Herbstcampus_Rapid_Cloud_Development_with_Spring_Roo
 
Semantic Web Technologies - SS 2010 - 05 - RDF(S) Frameworks
Semantic Web Technologies - SS 2010 - 05 - RDF(S) FrameworksSemantic Web Technologies - SS 2010 - 05 - RDF(S) Frameworks
Semantic Web Technologies - SS 2010 - 05 - RDF(S) Frameworks
 
Reif? Scala für Enterprise-Applikationen
Reif? Scala für Enterprise-ApplikationenReif? Scala für Enterprise-Applikationen
Reif? Scala für Enterprise-Applikationen
 
JavaFX goes open source
JavaFX goes open sourceJavaFX goes open source
JavaFX goes open source
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsJavaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
 
Microservices mit Java und Go im Vergleich
Microservices mit Java und Go im VergleichMicroservices mit Java und Go im Vergleich
Microservices mit Java und Go im Vergleich
 
Zustand und Entwicklung von DSpace
Zustand und Entwicklung von DSpaceZustand und Entwicklung von DSpace
Zustand und Entwicklung von DSpace
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCamp
 
Roadmap von Microsoft UI Technologien und Windows 8
Roadmap von Microsoft UI Technologien und Windows 8Roadmap von Microsoft UI Technologien und Windows 8
Roadmap von Microsoft UI Technologien und Windows 8
 
Roadmap von Microsoft UI-Technologien und Windows 8
Roadmap von Microsoft UI-Technologien und Windows 8Roadmap von Microsoft UI-Technologien und Windows 8
Roadmap von Microsoft UI-Technologien und Windows 8
 
JM 08/09 - ScalaModules
JM 08/09 - ScalaModulesJM 08/09 - ScalaModules
JM 08/09 - ScalaModules
 
Wie Azure Jakarta EE Nutzt
Wie Azure Jakarta EE NutztWie Azure Jakarta EE Nutzt
Wie Azure Jakarta EE Nutzt
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
May the forge be with you
May the forge be with youMay the forge be with you
May the forge be with you
 
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenFortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
 

Plus de Kai Wähner

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

Plus de Kai Wähner (20)

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

[GER] Lessons learned: Modern JVM Languages besides Java

  • 1. Moderne Programmiersprachen für die Java-Plattform
  • 2. Was ist die Java-Plattform? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 3. 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
  • 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 .NET ganz 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 Java ein Unding Java Java Java Java Java Java 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 11. Was ist die Java-Plattform? 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. "Escape from the Java 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 Zu Java 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 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
  • 20. 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
  • 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 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
  • 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 es hohe 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 der Industrie Multicore CPUs 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 62. 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
  • 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, aber Thread-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 Scala mit Akka 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 81. 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
  • 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 in Test-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 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
  • 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 "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
  • 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 die Java-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 die Java-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 die Java-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 111. Sprachen für die Java-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 die Java-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 die Java-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: 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
  • 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 die Java-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 137. 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
  • 138. 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
  • 139. 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
  • 140. Fazit "Auswahl von Sprachen" 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 141. Fazit "Auswahl von Sprachen" 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 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
  • 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 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
  • 154. IDEs (noch) nicht auf "Java-Niveau" 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 155. IDEs (noch) nicht auf "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 bei MWEA" Von nichts kommt nichts! 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 158. "Getting Started bei MWEA" Bücher Einarbeitung Workshops (Technorunde) Weiterbildungs- budget 6. Dezember www.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 159. "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
  • 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 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
  • 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ü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