2. Kai Wähner (MaibornWolff et al GmbH)
Main Tasks
Evaluation of Technologies and Products
Requirements Engineering
Enterprise Architecture Management
Business Process Management
Architecture and Development of Applications
Planning and Introduction of SOA
Integration of Legacy Applications
Cloud Computing
Big Data
Consulting Contact
Developing Email: kontakt@kai-waehner.de
Speaking Blog: www.kai-waehner.de/blog
Coaching Twitter: @KaiWaehner
Social Networks: Xing, LinkedIn
Writing
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner
3. Java platform
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
4. Variety of languages on the .NET platform
C C++
C# F#
.NET
Silverlight Scala
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
5. Variety of languages on the Java platform
Java Java
Java Java
Java
Java
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
6. Characteristics of the Java language
„It’s not all
rainbows and unicorns
in the land of Java“
http://batsov.com/Java/Groovy/2011/05/06/jvm-langs-groovy.html
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
7. Java platform
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
8. Java Virtual Machine (JVM)
Java Runtime Environment (JVM + Java Standard Libraries)
=> JVM Bytecode -> VM-specific internal representation -> Native machine code
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
9. Java Virtual Machine (JVM)
Ahead-of-time compiled
Java Bytecode (.class)
Java Runtime Environment (JVM + Java Standard Libraries)
=> JVM Bytecode -> VM-specific internal representation -> Native machine code
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
10. Java Virtual Machine (JVM)
Ahead-of-time compiled Ahead-of-time compiled
Java Bytecode (.class) Scala Bytecode (.class)
Java Runtime Environment (JVM + Java Standard Libraries)
=> JVM Bytecode -> VM-specific internal representation -> Native machine code
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
11. Java Virtual Machine (JVM)
Ahead-of-time compiled Ahead-of-time compiled
Java Bytecode (.class) Scala Bytecode (.class)
Java Runtime Environment (JVM + Java Standard Libraries)
=> JVM Bytecode -> VM-specific internal representation -> Native machine code
Ahead-of-time compiled
Groovy Bytecode (.class)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
12. Java Virtual Machine (JVM)
Ahead-of-time compiled Ahead-of-time compiled
Java Bytecode (.class) Scala Bytecode (.class)
Java Runtime Environment (JVM + Java Standard Libraries)
=> JVM Bytecode -> VM-specific internal representation -> Native machine code
Interpreted or Just-in-time
compiled Groovy Bytecode
Ahead-of-time compiled (In-memory)
Groovy Bytecode (.class)
Groovy Script Code
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
13. Languages for the Java platform
240+ further languages:
http://tinyurl.com/3ql5m98
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
14. "Escape from the Java language prison"
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
15. What is the key message?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
16. Key message
Java is still the most important programming platform
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
17. Key message
Java is still the most important programming platform
Java is not the new Cobol
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
18. Key message
Java is still the most important programming platform
Java is not the new Cobol
Modern JVM languages besides Java create added value
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
19. Agenda
1. Reduced Efforts
2. Increased Flexibility
3. Reduced Complexity
4. Reduced Heterogeneity
5. Innovation
6. Language Selection
7. Problems
8. Getting Started
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
20. Agenda
1. Reduced Efforts
2. Increased Flexibility
Business
3. Reduced Complexity
Value
4. Reduced Heterogeneity
5. Innovation
6. Language Selection
7. Problems
8. Getting Started
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
21. Agenda
1. Reduced Efforts
2. Increased Flexibility
3. Reduced Complexity
4. Reduced Heterogeneity
5. Innovation
6. Language Selection
7. Problems
Lessons
8. Getting Started
learned
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
22. Agenda
1. Reduced Efforts
2. Increased Flexibility
Business
3. Reduced Complexity
Value
4. Reduced Heterogeneity
5. Innovation
6. Language Selection
7. Problems
8. Getting Started
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
23. Lines of code (Java)
employees.sort (
new Comparator{
public int compare(Object emp1, Object emp2){
int emp1Age = ( (Employee) emp1).getAge();
int emp2Age = ( (Employee) emp2).getAge();
if( emp1Age > emp2Age )
return 1;
else if( emp1Age < emp2Age )
return -1;
else
return 0;
}
Java
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
24. Lines of code (Scala)
employees.sort (
employees.sort (_.age > _.age)
new Comparator{
public int compare(Object emp1, Object emp2){
int emp1Age = ( (Employee) emp1).getAge();
int emp2Age = ( (Employee) emp2).getAge();
if( emp1Age > emp2Age )
return 1;
else if( emp1Age < emp2Age )
return -1;
else
return 0;
}
Java Scala
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
25. Lines of code (Scala)
employees.sort (_.age > _.age)
Scala API:
Scala
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
26. Lines of code
<books>
<book isbn="…">
<title>Groovy in Action</title>
<author>Dierk Koenig</author>
<author>Paul King</author>
…
</book>
<book isbn="…">
<title>Grails in Action</title>
<author>Glen Smith</author>
<author>Peter Ledbrook</author>
</book>
...
</books>
(Making Java Groovy, Kenneth A. Kousen)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
27. Lines of code
<books>
<book isbn="…">
<title>Groovy in Action</title>
<author>Dierk Koenig</author>
<author>Paul King</author>
…
</book>
<book isbn="…">
<title>Grails in Action</title>
<author>Glen Smith</author>
<author>Peter Ledbrook</author>
</book>
...
</books>
(Making Java Groovy, Kenneth A. Kousen)
Task: Get the title of the second book!
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
28. Lines of code (Java)
<books> DocumentBuilderFactory factory =
<book isbn="…"> DocumentBuilderFactory.newInstance();
<title>Groovy in Action</title> Document doc = null;
<author>Dierk Koenig</author>
<author>Paul King</author> try {DocumentBuilder b = factory.newDocumentBuilder();
… doc = b.parse("src/jag/xml/books.xml");
</book> } catch (Exception e) { // Parser, SAX, IO
<book isbn="…">
<title>Grails in Action</title> e.printStackTrace();}
<author>Glen Smith</author> if (doc == null) return;
<author>Peter Ledbrook</author>
NodeList titles = doc.getElementsByTagName("title");
</book>
... Element titleNode = (Element) titles.item(1);
</books> String title = titleNode.getFirstChild().getNodeValue();
System.out.println("The second title is " + title);
(Making Java Groovy, Kenneth A. Kousen)
Task: Get the title of the second book!
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
29. Lines of code (Groovy)
<books>
<book isbn="…">
<title>Groovy in Action</title>
<author>Dierk Koenig</author>
<author>Paul King</author>
… root = new XmlSlurper().parse('books.xml')
</book> println root.book[1].title
<book isbn="…">
<title>Grails in Action</title>
<author>Glen Smith</author>
<author>Peter Ledbrook</author>
</book>
...
</books>
(Making Java Groovy, Kenneth A. Kousen)
Task: Get the title of the second book!
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
30. Agenda
1. Reduced Efforts
2. Increased Flexibility
Business
3. Reduced Complexity
Value
4. Reduced Heterogeneity
5. Innovation
6. Language Selection
7. Problems
8. Getting Started
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
31. Increased flexibility
Modularisation
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
32. Modularisation
http://www.artima.com/scalazine/articles/package_objects.html
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
33. Increased flexibility
Scripting
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
34. Scripting
Change behaviour of an application
dynamically at runtime
Direct execution
vs.
JSR 233 Scripting for the Java Platform
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
35. Increased flexibility
Meta programming
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
36. Meta programming (Runtime)
// Java Code
public class ABC() {
public static ABC factory() {
return new ABC();
}
public static void main(String[] args) {
ABC abc = ABC.factory());
}
}
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
37. Meta programming (Runtime)
// A little bit of (Groovy-) Magic:
Class.metaClass.factory = { Object[] args ->
delegate.metaClass.invokeConstructor(*args)
}
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
38. Meta programming (Runtime)
// A little bit of (Groovy-) Magic:
Class.metaClass.factory = { Object[] args ->
delegate.metaClass.invokeConstructor(*args)
}
// Now, all Java classes have a „factory()“ method:
HashMap hashmap = HashMap. factory ()
Integer integer = Integer. factory (42)
Dimension dimension = Dimension. factory (2, 3)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
39. Meta programming (Runtime)
In Practice: „Finder“ in Grails
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
40. Meta programming replacement in Scala:
Implicit Conversions
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
41. Meta programming replacement in Scala:
Implicit Conversions
Attention: Use it wisely!
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
42. Increased flexibility
Build management
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
43. Build tools
Ant
vs.
Maven
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
44. Build tools
Ant
Gradle vs.
Maven
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
45. Build tools
Ant
Gradle vs.
Maven
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
46. Build tools
Ant
Gradle vs.
Maven
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
47. Build tools
Further advantages
(e.g. Scripting)
Ant
Gradle vs.
Maven
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
48. Agenda
1. Reduced Efforts
2. Increased Flexibility
Business
3. Reduced Complexity
Value
4. Reduced Heterogeneity
5. Innovation
6. Language Selection
7. Problems
8. Getting Started
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
50. Reduced complexity
Concurrency
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
51. Concurrency
Current situation?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
52. Current situation
„The
Gigahertz
Race
is over!“
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
53. The industry has an answer
Multicore
CPUs
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
54. Concurrency
The problem?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
55. The problem
Process
A
Shared
State
Process
B
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
56. The problem
Thread-API
Deadlocks
Race Conditions
Exceptions
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
57. Reduced complexity
Solution?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
59. Good books! However, the Thread API is still complex ...
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
60. Reduced complexity
Better solution?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
61. Alternatives* for dealing with state (instead of Thread API)
Shared Mutability => Software Transactional Memory (STM)
versus
Isolated Mutability => Actors
* Purely Immutability => Tough to realize
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
62. Shared Mutability: Software Transactional Memory (STM)
„Clojure does not replace the Java thread system,
rather it works with it. [But there are] no locks! “
=> An alternative to lock-based synchronization!
http://www.heise.de/developer/artikel/Benefits-1030160.html
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
63. Isolated Mutability: Actors
„Communicate by passing immutable Messages“
http://www.infoq.com/presentations/Actor-based-Programming (Jamie Ridgway)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
64. Actors in Scala
val chatRoom = actor {
while (true) {
receive {
case Subscribe(user) => // do something
case Unsubscribe(user) => // do something
case UserPost(user, post) => // do something
}}}
// send a asynchronous message to the Actor:
chatRoom ! Subscribe(User("Bob"))
No Thread API, Locks, Synchronisation
(and therefore lower threat to deadlocks or race conditions)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
65. Actors in Groovy with GPars (Groovy Parallel Systems)
„Give Actors an OO facade“
@ActiveObject
class Decryptor {
@ActiveMethod // asynchronous => return a Future object
def decrypt(String encryptedText) {
return encryptedText.reverse() }
@ActiveMethod
def decrypt(Integer encryptedNumber) {
return -1*encryptedNumber + 142 } }
final Decryptor decryptor = new Decryptor()
def part1 = decryptor.decrypt(' noitcA ni yvoorG')
def part2 = decryptor.decrypt(140)
print part1.get() // == Groovy in Action
print part2.get() // == 2
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
66. Reduced complexity
Domain
Specific
Languages
(DSL)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
67. 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
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
68. Internal DSL in test frameworks
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
69. ScalaTest (Scala)
Which code is easier to understand?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
70. ScalaTest (Scala)
Which code is easier to understand?
Java: assertTrue(map.containsKey(‘a’));
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
71. ScalaTest (Scala)
Which code is easier to understand?
Java: assertTrue(map.containsKey(‘a’));
Scala: map should contain key ‘a’
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
72. Example for an internal Scala DSL
Baysick DSL
(simulates BASIC)
http://blog.fogus.me/2009/03/26/
baysick-a-scala-dsl-implementing-basic/
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
73. Agenda
1. Reduced Efforts
2. Increased Flexibility
Business
3. Reduced Complexity
Value
4. Reduced Heterogeneity
5. Innovation
6. Language Selection
7. Problems
8. Getting Started
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
74. Reduced heterogeneity
Install
Source code script
(Java) (Shell)
Dynamic
database script
Build
(JRuby)
(XML)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
75. Reduced heterogeneity
Source code
Dynamic database script
Install script
Build
(Groovy)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
76. Agenda
1. Reduced Efforts
2. Increased Flexibility
Business
3. Reduced Complexity
Value
4. Reduced Heterogeneity
5. Innovation
6. Language Selection
7. Problems
8. Getting Started
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
77. Innovation
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
78. Innovation
New
Technologies
Concepts
Solutions
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
79. Innovation
New
Technologies
Concepts
Solutions
Marketing
Article, blogs, conference sessions
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
80. Innovation
New
Technologies
Concepts
Solutions
New Projects Marketing
Consulting, Coaching, Development Article, blogs, conference sessions
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
81. Marketing
„War for Talents“
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
82. Marketing
„War for Talents“
„Follow the Leader“
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
83. Conclusion "business value"
Reduced efforts
Reduced
complexity
Increased
flexibility
Reduced
Innovation Heterogeneity
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
84. Conclusion "business value"
Reduced efforts
Reduced
complexity
Increased
flexibility
Reduced
Innovation Heterogeneity
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
85. Agenda
1. Reduced Efforts
2. Increased Flexibility
3. Reduced Complexity
4. Reduced Heterogeneity
5. Innovation
6. Language Selection
7. Problems
Lessons
8. Getting Started
learned
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
86. Languages for the Java platform
240+ further languages:
http://tinyurl.com/3ql5m98
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
87. Language selection
<Excursus>
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
88. Excursus: Typing
Dynamically
typed
Complexity
languague
Statically
typed
language
Power
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
89. Excursus: Programming concepts
Scala in Depth, Joshua D. Suereth
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
90. Language selection
</Excursus>
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
91. Languages for the Java platform
Which language(s)
shall we use?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
92. Conclusion „language selection"
The language has to be
„Java Friendly“ and „Feature Rich“
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
93. Languages for the Java platform
240+ further languages:
http://tinyurl.com/3ql5m98
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
94. Languages for the Java platform
Maturity?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
95. Maturity
240+ further languages:
http://tinyurl.com/3ql5m98
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
96. Maturity
240+ further languages:
http://tinyurl.com/3ql5m98
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
97. Languages for the Java platform
Prevalence?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
98. Prevalence?
240+ further languages:
http://tinyurl.com/3ql5m98
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
99. Prevalence?
240+ further languages:
http://tinyurl.com/3ql5m98
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
100. Languages for the Java platform
Platform integration?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
101. Syntax alignment
import java.util.*; // Java
Date today = new Date(); // Java
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
102. Syntax alignment
import java.util.*; // Java
Date today = new Date(); // Java
today = new Date() // Groovy
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
103. Syntax alignment
import java.util.*; // Java
Date today = new Date(); // Java
today = new Date() // Groovy
import java.util._ // Scala
var today = new Date // Scala
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
104. Syntax alignment
import java.util.*; // Java
Date today = new Date(); // Java
today = new Date() // Groovy
import java.util._ // Scala
var today = new Date // Scala
java_import ‘java.util.Date' # JRuby
today = Date.new # JRuby
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
105. Syntax alignment
import java.util.*; // Java
Date today = new Date(); // Java
today = new Date() // Groovy
import java.util._ // Scala
var today = new Date // Scala
java_import ‘java.util.Date' # JRuby
today = Date.new # JRuby
(import '(java.util Date)) ; Clojure (def today (new Date)) ;
Clojure (def today (Date.)) ; Clojure alternative
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
106. Good IDE-support: The Paranthesis Generator?
(import '(java.util Date)) ; Clojure (def today (new Date)) ;
Clojure (def today (Date.)) ; Clojure alternative
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
107. Plattform integration? => No syntax alignment!
JRuby
Feature Rich
Clojure
Jython
JavaScript
Java Friendly
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
108. Seamless integration?
Java
Groovy? „Other“
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
109. 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
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
110. Seamless Integration? (Groovy)
public class Article { public class Article {
private String name; private String name;
private String price; private String price;
public Article(String name, String price) { public Article(String name, String price) {
this.name = name; this.name = name;
this.price = price; this.price = price;
} }
public String getName() { public String getName() {
return name; return name;
} }
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
public String getPrice() { public String getPrice() {
return price; return price;
} }
public void setPrice(String price) { public void setPrice(String price) {
this.price = price; this.price = price;
} }
} }
Java Groovy
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
111. Seamless integration?
Java
Groovy „Other“
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
112. Plattform integration?
JRuby
Groovy
Feature Rich
Clojure
Jython
JavaScript
Java Friendly
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
113. Seamless integration?
Java
„Other“ Scala?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
114. Seamless integration? (Scala) => Bytecode != Bytecode
Implicit Conversions Inexpressible
vs. Language
Object Identity / Equality Features
Objects
vs.
Primitives
Uniform
Access
Principle
Java Bytecode Analysis
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
115. Seamless integration? (Scala) => Bytecode != Bytecode
„Usually, it just works ...
... if not, define a Java Interface.“
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
116. Seamless integration?
Java
„Other“ „Scala“
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
117. Plattform integration?
JRuby Scala
Groovy
Feature Rich
Clojure
Jython
JavaScript
Java Friendly
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
118. Languages for the Java platform
240+ Weitere:
http://tinyurl.com/3ql5m98
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
119. Languages for the Java platform
240+ Weitere:
http://tinyurl.com/3ql5m98
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
120. Conclusion „language selection"
The language has to be
„Java Friendly“ and „Feature Rich“
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
121. Conclusion „language selection"
„The dynamic One“ „The functional One“
The language has to be
„Java Friendly“ and „Feature Rich“
(Other JVM languages only if „forced“)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
123. Agenda
1. Reduced Efforts
2. Increased Flexibility
3. Reduced Complexity
4. Reduced Heterogeneity
5. Innovation
6. Language Selection
7. Problems
Lessons
8. Getting Started
learned
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
124. Why use new languages? Java does the job, right?
IT
vs.
Politics
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
125. Why use new languages? Java does the job, right?
Cloud Computing will be requested by the customer...
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
126. Why use new languages? Java does the job, right?
Cloud Computing will be requested by the customer...
NoSQL will be required for big data and high scalability...
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
127. Why use new languages? Java does the job, right?
Cloud Computing will be requested by the customer...
NoSQL will be required for big data and high scalability...
... but modern JVM languages will probably never be demanded
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
128. Problems with modern JVM Languages
‚Real life‘ problems
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
129. Problems with modern JVM Languages
- New Concepts for Java / OO Developers
- Powerful vs. Ease of Use
- Confusion due to Meta Programming
- Bytecode != Bytecode
- Trouble with Debugging
- Total Cost of Ownership (Skills, Training, Refactoring, Maintenance)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
130. Problems with modern JVM Languages
- New Concepts for Java / OO Developers
- Powerful vs. Ease of Use
- Confusion due to Meta Programming
- Bytecode != Bytecode
- Trouble with Debugging
- Total Cost of Ownership (Skills, Training, Refactoring, Maintenance)
BUT:
„Don't let yourself be fooled!“
(you also use a JAXB compiler, a GWT compiler, a WSDL compiler, etc., right?)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
131. Bytecode != Bytecode
Java + Groovy = Good
Java + Scala = Ok
Non-Java + Non-Java = ???
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
132. Bytecode != Bytecode
Ruby
Scala
JRuby + Scala: www.codecommit.com/blog/ruby/integrating-scala-into-jruby
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
133. IDEs do not have AS-GOOD maturity as Java (yet?)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
134. IDEs do not have AS-GOOD maturity as Java (yet?)
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
135. Agenda
1. Reduced Efforts
2. Increased Flexibility
3. Reduced Complexity
4. Reduced Heterogeneity
5. Innovation
6. Language Selection
7. Problems
Lessons
8. Getting Started
learned
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
136. Getting started...
You can't make something out of nothing.
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
137. Getting started...
Use new languages!
Marketing
Looking back at Channels
finished projects
Think about it BEFORE
starting new projects
Internal
Projects
Testing
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
139. Did the key message arrive?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
140. Key message
Java is still the most important programming platform
Java is not the new Cobol
Modern JVM languages besides Java create added value
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
141. Did the key message arrive?
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012
142. Thank you for your attention... Questions?
Contact
Kai Wähner MaibornWolff et al GmbH Mobile +49 151 544 277 88
IT Consultant Theresienhöhe 13 Email kontakt@kai-waehner.de
D-80339 München Twitter @KaiWaehner
www.mwea.de Lessones learned: Use of modern JVM Languages besides Java - Kai Wähner 01.10.2012