[GER] Lessons learned: Modern JVM Languages besides Java

  • 906 views
Uploaded on

Lessons learned: Using modern JVM languages besides Java. Shows business value, but also disadvantages.

Lessons learned: Using modern JVM languages besides Java. Shows business value, but also disadvantages.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • it is a very interesting presentation, but why is it in dinglish?
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
906
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
1
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Moderne Programmiersprachen für die Java-Plattform
  • 2. Was ist die Java-Plattform? 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 4. Trends? Plattformen entwickeln sich stetig weiter! 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 10. Sprachen-Vielfalt in Java ein Unding Java Java Java Java Java Java 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 11. Was ist die Java-Plattform? 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 14. Sprachen für die Java-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 16. "Escape from the Java prison!" 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 17. Was ist die "Key Message"? 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 27. Lines of Code (Scala) employees.sort (_.age > _.age) Scala API: Java Scala 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 34. Erhöhung der Flexibilität Modularisierung 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 35. Modularisierung http://www.artima.com/scalazine/articles/package_objects.html 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 36. Erhöhung der Flexibilität Scripting 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 37. Scripting Skript von der Kommandozeile ausführen 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 38. Scripting Verhalten einer Anwendung dynamisch zur Laufzeit verändern 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 41. Erhöhung der Flexibilität Build-Management 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 42. Build-Management Was macht ein Build-Tool? 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 43. Build-Tools im Einsatz Ant vs. Maven 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 44. Build-Tools im Einsatz Ant Gradle vs. Maven 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 45. Build-Tools im Einsatz Ant Gradle vs. Maven 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 46. Build-Tools im Einsatz Ant Gradle vs. Maven 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 48. Erhöhung der Flexibilität Meta-Programming 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 52. Meta-Programming (Runtime ) (Praxisbeispiel: Finder in Grails) 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 53. Meta-Programming-Ersatz in Scala: Implicit Conversions 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 54. Meta-Programming-Ersatz in Scala: Implicit Conversions Achtung: Mit Bedacht einsetzen! 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 57. Reduzierung der Komplexität 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 58. Wo gibt es hohe Komplexität? Concurrency / Multicore Processing 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 59. Concurrency Aktuelle Situation? 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 60. Aktuelle Situation „The Gigahertz Race is over!“ 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 61. Die Antwort der Industrie Multicore CPUs 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 63. Concurrency Das Problem? 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 64. Das Problem Process A Shared Memory Process B 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 65. Das Problem Thread-API   Deadlocks   Race Conditions   Exceptions 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 67. Reduzierung der Komplexität Lösung? 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 68. Meistens versuchte Lösung 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 69. Gute Bücher, aber Thread-API bleibt sehr komplex! 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 70. Reduzierung der Komplexität Bessere Lösung? 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 71. Bessere Lösung „Share Nothing!“ 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 72. Viel bessere Lösung „Communicate by passing immutable Messages“ 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 74. Umsetzung Actors 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 75. Actors ... ... gibt es schon viele Jahre. 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 76. Actors http://www.infoq.com/presentations/Actor-based-Programming (Jamie Ridgway) 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 77. Actors ... ... sind impliziter Bestandteil von modernen Sprachen wie Groovy und Scala! 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 80. Actors in Scala mit Akka 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 83. Reduzierung der Komplexität Domain Specific Languages (DSL) 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 85. Interne DSL in Test-Frameworks 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 86. ScalaTest (Scala) Welcher Code ist klarer / sprechender? 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 87. ScalaTest (Scala) Welcher Code ist klarer / sprechender? Java: assertTrue(map.containsKey(‘a’)); 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 93. Reduzierung der Heterogenität Quellcode Dynamisches Datenbank-Skript Install-Skript Build (Groovy) 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 95. Schaffung von Innovation 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 96. Schaffung von Innovation Neue Technologien Konzepte Lösungen 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 104. Sprachen für die Java-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 105. Auswahl von Sprachen <Exkurs> 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 106. Exkurs: Typisierung Dynamisch getypte Komplexität Sprache Statisch getypte Sprache Mächtigkeit 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 107. Exkurs: Objektorientierte vs. funktionale Programmierung Scala in Depth, Joshua D. Suereth 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 108. Auswahl von Sprachen </Exkurs> 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 110. Sprachen für die Java-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 111. Sprachen für die Java-Plattform Reifegrad? 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 112. Reifegrad? 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 113. Reifegrad? 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 114. Sprachen für die Java-Plattform Verbreitung? 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 115. Verbreitung? 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 116. Verbreitung? 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 117. Sprachen für die Java-Plattform Plattform-Integration? 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 118. Syntax-Alignment? import java.util.*; // Java Date today = new Date(); // Java 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 124. Seamless Integration? Java „Andere“ „Andere“ 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 127. Seamless Integration? Java Groovy „Andere“ 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 130. Seamless Integration? Java „Andere“ „Scala“ 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 131. Seamless Integration? Java EE Integration? 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 133. Plattform-Integration? „Andere“ „Andere“ Feature Rich „Andere“ „Andere“ Java Friendly 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 134. Plattform-Integration? „Andere“ „Andere“ Groovy Feature Rich „Andere“ „Andere“ Java Friendly 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 135. Plattform-Integration? „Andere“ Scala „Andere“ Groovy Feature Rich „Andere“ „Andere“ Java Friendly 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 136. Sprachen für die Java-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 137. Sprachen für die Java-Plattform 240+ Weitere: http://tinyurl.com/3ql5m98 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 139. Fazit "Auswahl von Sprachen" Noch ein Satz zu den „besseren“ Java‘s: 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 140. Fazit "Auswahl von Sprachen" 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 141. Fazit "Auswahl von Sprachen" 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 143. Wieso neue Sprachen? Java passt doch? IT vs. Politik 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 144. Wieso neue Sprachen? Java passt doch? Cloud Computing wird der Kunde fordern... 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 147. Vorurteile Einarbeitungsaufwand? Kunde überzeugen? 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 148. Vorurteile Einarbeitungsaufwand? Kunde überzeugen? „Dont let yourself be fooled!“ 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 149. Nachteile Tatsächliche Probleme 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 151. Bytecode != Bytecode Java + Groovy = Gut Java + Scala = Ok Non-Java + Non-Java = ??? 6. Dezemberwww.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. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 154. IDEs (noch) nicht auf "Java-Niveau" 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 155. IDEs (noch) nicht auf "Java-Niveau" 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 157. "Getting Started bei MWEA" Von nichts kommt nichts! 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 158. "Getting Started bei MWEA" Bücher Einarbeitung Workshops (Technorunde) Weiterbildungs- budget 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 160. Fazit „Lessons learned“ 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 162. Ist die "Key-Message" angekommen? 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 164. Ist die "Key-Message" angekommen? 6. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011
  • 165. Buchempfehlungen 6. Dezemberwww.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. Dezemberwww.mwea.de Moderne Programmiersprachen für die Java-Plattform 2011