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