SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
Scala – why you
should care
SJUG @ Atlassian HQ, 2009


Michael Neale
JBoss R&D
Red Hat Middleware




                      1
Michael Neale
R&D w. JBoss (specialise in drools)
Open source history (user -> fulltime
 developer “acquired” by jboss 2005).
Thanks Atlassian !


me on the web:

www.michaelneale.net, twitter.com/michaelneale,
 michaelneale.blogspot.com

Some slides borrowed from Jonas Boner !
                                2
Outline
 • The elevator pitch
 • Why another language?
 • Scala in more detail
 • Actors/concurrency
 • State of the tools
 • How to integrate/migrate
 • Q&A


                        3
Quick intro
• Scala is a OO/FP hybrid language
• Statically strongly typed
• Scala is a compiler + small (ish) rt.jar
• Compiles statically to bytecode
• Interops fawlessly with JVM/java code
  (in source**, or library form in both
  directions)
• FP favour (but not “pure”)
• Both more static and more OO then
  java
                     4
What's it like to drive




           5
The surface diferences...
public Integer methodName()... public void another(String s)...

def methodName : Integer = {...}

def another(s: String) = {...}



String x = “abc”; final String y = “def”;

var x = “abc”

val x = “def”



public class MyClass

class Foo



(punctuation generally optional: brackets, semi-colons etc..)


                                    6
final Map<String, Integer> m = new HashMap<String, Integer>();

m.put(“hello”, 42);

m.put(“goodbye”, 42);




val m = Map(“hello” -> 42, “goodbye” ->   42)




/* Actually a smaller grammar then java ! */




                                   7
Higher level




      8
9
Closures... fnally
Pascal has them, Even C has them...



    (age: Int) => println(“I am “ + age)



    val fn = (age: Int) => ....




                          10
Why another language
Java showing its age
Was built in a hurry, unable to shoe-horn
 enough in... (eg. unable to agree on
 Closures)
Well documented issues...
(and some don't want it to change)


But JVM is made of awesome...


                   11
12
But why Scala...
• Why not?
• Valid javac successor (true to the
  intentions of Java, static typed, fast
  etc)
• Designed by expert(s)
   – Based on hard won lessons
• Not dynamic, nice for “systems”
  programming
• Obey ! (and Gosling likes it)

                    13
Slightly deeper
• Scala is very deep, but you don't have
  to know that much (unless you are a
  library author, probably).
• Can write it as “nicer java” if you like,
  but lends itself to FP




                     14
15
Just so you know I am not making this up...




                      16
Using java libs..
• Just works
• Arrays in java are “decorated” to be
  like “Lazy sequences”
• (previous slide was JExcel API)
• Other common data types are “often
  decorated” to be scala-friendly
• Outgoing library: use java collections,
  Arrays etc as you would like to see
  them
                    17
Lazyness...
• Hard work pays of eventually
• (but lazyness pays of now)
• Lazy can be GOOD in a language
• “lazy” keyword, lazy sequences..
   – But can be some traps: put in a
     print statement and it will exec,
     remove and it won't... - heisenbugs



                   18
Dynamic language “magic”


 • Monkey patching → Implicits
 • Duck typing → Structural typing




                   19
Implicits...


.. Is how you “extend” a class
Anywhere “in scope” - called
automagically
With great power comes...
Its compile time and safe
                   20
Structural typing




         21
Traits...
• Like interfaces, but can have
  implementations in it
• “Mix ins” - compile time or
  construction time
        //Interface:
        trait Funny {
          def laugh
        }

        //With impl:
        trait Person {
           def tickle = println(“hahaha”)
        }

        class Michael extends Funny...

        val x = new Michael with Person
        //doesn't have to implement Person !



                         22
        e:
Pattern matching




        23
Everything is..
• An expression that returns a value
• “Unit” is like Void
• Even if “statements”, pattern matches
  etc.




                    24
DSL friendly
• Malleable syntax (internal DSLs)
• Parser combinator library (write
  parsers in scala)




                   25
Concurrency




        26
Option/Either
• “Monad” patterns
• Don't have to care, just return option if
  you are not sure if you will have a
  result
• (or either if its, well 1 of 2 things...)
• Very easy to use, correct code, very
  neat...



                      27
State of the tools
• IntelliJ demo time...
• Eclipse – well, maybe with 2.8
• Netbeans: Good !
• Emacs/textmate ??
• Maven works well (/me ducks)



                   28
Who is using it ?
• Big Important companies all over...
• Twitter !
• EPFL, Jetbrains etc committed to
  continuing development and stability
  and tools !




                   29
Some extra magic
• QuickCheck (ScalaCheck)
   – Demo
   –   import org.scalacheck.Prop.forAll

   –   scala> class FeeCalculator(val tax: Int) {

   –      | def howMuch(tx: Int) = tx + tax + 42

   –      |}

   –   val totals = forAll( (amounts: Int) => new FeeCalculator(2).howMuch(amounts) > amounts )

   –   totals.check




                                                    30
Mixed source...
• Scala compiler can work with mixed
  java and scala source
• (multiple passes) – similar to groovy
• Means you can migrate over only what
  you need
• Preferred: have modules in all scala or
  java.




                   31
Case classes
• Case classes help you out (equals,
   hashCode, pattern matching)
• No “new” needed
• Eg:
case class Car(type: String, cost: Int)
val c = Car




                        32
Anti static
• No statics in Scala
• But you can swap “class” for “object”
   and its kind of sort of the same (but
   better)


object MyObject { … }
val x = MyObject
MyObject.whatever




                        33
Resources...
 • scala-lang.org
 • A few good books (Programming In
    Scala) and growing
 • #scala on freenode




                    34
Conclusion...
• Very powerful, mature, fun !
• Would you use it over groovy?
• No “grails” or “rails” (Lift just Ain't It).
• Thanks !
• Discussion and Q&A


• twitter.com/michaelneale
• www.osdc.com.au - Brisbane in Nov.

                         35

Contenu connexe

En vedette

Scala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on HerokuScala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on Heroku
Havoc Pennington
 

En vedette (13)

A Tour Of Scala
A Tour Of ScalaA Tour Of Scala
A Tour Of Scala
 
Testing practicies not only in scala
Testing practicies not only in scalaTesting practicies not only in scala
Testing practicies not only in scala
 
Scala == Effective Java
Scala == Effective JavaScala == Effective Java
Scala == Effective Java
 
Scala-Ls1
Scala-Ls1Scala-Ls1
Scala-Ls1
 
MySQL Monitoring Shoot Out
MySQL Monitoring Shoot OutMySQL Monitoring Shoot Out
MySQL Monitoring Shoot Out
 
Why Scala for Web 2.0?
Why Scala for Web 2.0?Why Scala for Web 2.0?
Why Scala for Web 2.0?
 
MySQL DBA
MySQL DBAMySQL DBA
MySQL DBA
 
Scala
ScalaScala
Scala
 
Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009
 
A Brief Intro to Scala
A Brief Intro to ScalaA Brief Intro to Scala
A Brief Intro to Scala
 
Scala Days NYC 2016
Scala Days NYC 2016Scala Days NYC 2016
Scala Days NYC 2016
 
Real time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache SparkReal time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache Spark
 
Scala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on HerokuScala, Akka, and Play: An Introduction on Heroku
Scala, Akka, and Play: An Introduction on Heroku
 

Similaire à Scala Sjug 09

javascript teach
javascript teachjavascript teach
javascript teach
guest3732fa
 
JSBootcamp_White
JSBootcamp_WhiteJSBootcamp_White
JSBootcamp_White
guest3732fa
 
Ola Bini Evolving The Java Platform
Ola Bini Evolving The Java PlatformOla Bini Evolving The Java Platform
Ola Bini Evolving The Java Platform
deimos
 
Live coding scala 'the java of the future'
Live coding scala 'the java of the future'Live coding scala 'the java of the future'
Live coding scala 'the java of the future'
Xebia Nederland BV
 
J Ruby Power On The Jvm
J Ruby Power On The JvmJ Ruby Power On The Jvm
J Ruby Power On The Jvm
QConLondon2008
 
Rubish- A Quixotic Shell
Rubish- A Quixotic ShellRubish- A Quixotic Shell
Rubish- A Quixotic Shell
guest3464d2
 

Similaire à Scala Sjug 09 (20)

javascript teach
javascript teachjavascript teach
javascript teach
 
JSBootcamp_White
JSBootcamp_WhiteJSBootcamp_White
JSBootcamp_White
 
A Re-Introduction to JavaScript
A Re-Introduction to JavaScriptA Re-Introduction to JavaScript
A Re-Introduction to JavaScript
 
Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009
 
Ndp Slides
Ndp SlidesNdp Slides
Ndp Slides
 
Os Wilhelm
Os WilhelmOs Wilhelm
Os Wilhelm
 
Rubinius - A Tool of the Future
Rubinius - A Tool of the FutureRubinius - A Tool of the Future
Rubinius - A Tool of the Future
 
Ola Bini Evolving The Java Platform
Ola Bini Evolving The Java PlatformOla Bini Evolving The Java Platform
Ola Bini Evolving The Java Platform
 
Better code in JavaScript
Better code in JavaScriptBetter code in JavaScript
Better code in JavaScript
 
Scala: functional programming for the imperative mind
Scala: functional programming for the imperative mindScala: functional programming for the imperative mind
Scala: functional programming for the imperative mind
 
Martin Odersky: What's next for Scala
Martin Odersky: What's next for ScalaMartin Odersky: What's next for Scala
Martin Odersky: What's next for Scala
 
Live coding scala 'the java of the future'
Live coding scala 'the java of the future'Live coding scala 'the java of the future'
Live coding scala 'the java of the future'
 
Introduction to Scala : Clueda
Introduction to Scala : CluedaIntroduction to Scala : Clueda
Introduction to Scala : Clueda
 
Building a JavaScript Library
Building a JavaScript LibraryBuilding a JavaScript Library
Building a JavaScript Library
 
J Ruby Power On The Jvm
J Ruby Power On The JvmJ Ruby Power On The Jvm
J Ruby Power On The Jvm
 
Scala Days San Francisco
Scala Days San FranciscoScala Days San Francisco
Scala Days San Francisco
 
Scala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologistScala and jvm_languages_praveen_technologist
Scala and jvm_languages_praveen_technologist
 
Rubish- A Quixotic Shell
Rubish- A Quixotic ShellRubish- A Quixotic Shell
Rubish- A Quixotic Shell
 
Scala Workshop
Scala WorkshopScala Workshop
Scala Workshop
 
Efficient JavaScript Development
Efficient JavaScript DevelopmentEfficient JavaScript Development
Efficient JavaScript Development
 

Plus de Michael Neale

Plus de Michael Neale (16)

Jenkins X intro (from google app dev conference)
Jenkins X intro (from google app dev conference)Jenkins X intro (from google app dev conference)
Jenkins X intro (from google app dev conference)
 
Devoxx 2014 michael_neale
Devoxx 2014 michael_nealeDevoxx 2014 michael_neale
Devoxx 2014 michael_neale
 
Cd syd
Cd sydCd syd
Cd syd
 
Cross site calls with javascript - the right way with CORS
Cross site calls with javascript - the right way with CORSCross site calls with javascript - the right way with CORS
Cross site calls with javascript - the right way with CORS
 
Microservices and functional programming
Microservices and functional programmingMicroservices and functional programming
Microservices and functional programming
 
Cors michael
Cors michaelCors michael
Cors michael
 
Osdc 2011 michael_neale
Osdc 2011 michael_nealeOsdc 2011 michael_neale
Osdc 2011 michael_neale
 
Scala sydoct2011
Scala sydoct2011Scala sydoct2011
Scala sydoct2011
 
Java one 2011_michaelneale
Java one 2011_michaelnealeJava one 2011_michaelneale
Java one 2011_michaelneale
 
Errors and handling them. YOW nights Sydney 2011
Errors and handling them. YOW nights Sydney 2011Errors and handling them. YOW nights Sydney 2011
Errors and handling them. YOW nights Sydney 2011
 
Sjug aug 2010_cloud
Sjug aug 2010_cloudSjug aug 2010_cloud
Sjug aug 2010_cloud
 
SJUG March 2010 Restful design
SJUG March 2010 Restful designSJUG March 2010 Restful design
SJUG March 2010 Restful design
 
On Scala Slides - OSDC 2009
On Scala Slides - OSDC 2009On Scala Slides - OSDC 2009
On Scala Slides - OSDC 2009
 
Osdc Complex Event Processing
Osdc Complex Event ProcessingOsdc Complex Event Processing
Osdc Complex Event Processing
 
Jaoo Michael Neale 09
Jaoo Michael Neale 09Jaoo Michael Neale 09
Jaoo Michael Neale 09
 
Osdc Michael Neale 2008
Osdc Michael Neale 2008Osdc Michael Neale 2008
Osdc Michael Neale 2008
 

Dernier

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Dernier (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

Scala Sjug 09

  • 1. Scala – why you should care SJUG @ Atlassian HQ, 2009 Michael Neale JBoss R&D Red Hat Middleware 1
  • 2. Michael Neale R&D w. JBoss (specialise in drools) Open source history (user -> fulltime developer “acquired” by jboss 2005). Thanks Atlassian ! me on the web: www.michaelneale.net, twitter.com/michaelneale, michaelneale.blogspot.com Some slides borrowed from Jonas Boner ! 2
  • 3. Outline • The elevator pitch • Why another language? • Scala in more detail • Actors/concurrency • State of the tools • How to integrate/migrate • Q&A 3
  • 4. Quick intro • Scala is a OO/FP hybrid language • Statically strongly typed • Scala is a compiler + small (ish) rt.jar • Compiles statically to bytecode • Interops fawlessly with JVM/java code (in source**, or library form in both directions) • FP favour (but not “pure”) • Both more static and more OO then java 4
  • 5. What's it like to drive 5
  • 6. The surface diferences... public Integer methodName()... public void another(String s)... def methodName : Integer = {...} def another(s: String) = {...} String x = “abc”; final String y = “def”; var x = “abc” val x = “def” public class MyClass class Foo (punctuation generally optional: brackets, semi-colons etc..) 6
  • 7. final Map<String, Integer> m = new HashMap<String, Integer>(); m.put(“hello”, 42); m.put(“goodbye”, 42); val m = Map(“hello” -> 42, “goodbye” -> 42) /* Actually a smaller grammar then java ! */ 7
  • 9. 9
  • 10. Closures... fnally Pascal has them, Even C has them... (age: Int) => println(“I am “ + age) val fn = (age: Int) => .... 10
  • 11. Why another language Java showing its age Was built in a hurry, unable to shoe-horn enough in... (eg. unable to agree on Closures) Well documented issues... (and some don't want it to change) But JVM is made of awesome... 11
  • 12. 12
  • 13. But why Scala... • Why not? • Valid javac successor (true to the intentions of Java, static typed, fast etc) • Designed by expert(s) – Based on hard won lessons • Not dynamic, nice for “systems” programming • Obey ! (and Gosling likes it) 13
  • 14. Slightly deeper • Scala is very deep, but you don't have to know that much (unless you are a library author, probably). • Can write it as “nicer java” if you like, but lends itself to FP 14
  • 15. 15
  • 16. Just so you know I am not making this up... 16
  • 17. Using java libs.. • Just works • Arrays in java are “decorated” to be like “Lazy sequences” • (previous slide was JExcel API) • Other common data types are “often decorated” to be scala-friendly • Outgoing library: use java collections, Arrays etc as you would like to see them 17
  • 18. Lazyness... • Hard work pays of eventually • (but lazyness pays of now) • Lazy can be GOOD in a language • “lazy” keyword, lazy sequences.. – But can be some traps: put in a print statement and it will exec, remove and it won't... - heisenbugs 18
  • 19. Dynamic language “magic” • Monkey patching → Implicits • Duck typing → Structural typing 19
  • 20. Implicits... .. Is how you “extend” a class Anywhere “in scope” - called automagically With great power comes... Its compile time and safe 20
  • 22. Traits... • Like interfaces, but can have implementations in it • “Mix ins” - compile time or construction time //Interface: trait Funny { def laugh } //With impl: trait Person { def tickle = println(“hahaha”) } class Michael extends Funny... val x = new Michael with Person //doesn't have to implement Person ! 22 e:
  • 24. Everything is.. • An expression that returns a value • “Unit” is like Void • Even if “statements”, pattern matches etc. 24
  • 25. DSL friendly • Malleable syntax (internal DSLs) • Parser combinator library (write parsers in scala) 25
  • 27. Option/Either • “Monad” patterns • Don't have to care, just return option if you are not sure if you will have a result • (or either if its, well 1 of 2 things...) • Very easy to use, correct code, very neat... 27
  • 28. State of the tools • IntelliJ demo time... • Eclipse – well, maybe with 2.8 • Netbeans: Good ! • Emacs/textmate ?? • Maven works well (/me ducks) 28
  • 29. Who is using it ? • Big Important companies all over... • Twitter ! • EPFL, Jetbrains etc committed to continuing development and stability and tools ! 29
  • 30. Some extra magic • QuickCheck (ScalaCheck) – Demo – import org.scalacheck.Prop.forAll – scala> class FeeCalculator(val tax: Int) { – | def howMuch(tx: Int) = tx + tax + 42 – |} – val totals = forAll( (amounts: Int) => new FeeCalculator(2).howMuch(amounts) > amounts ) – totals.check 30
  • 31. Mixed source... • Scala compiler can work with mixed java and scala source • (multiple passes) – similar to groovy • Means you can migrate over only what you need • Preferred: have modules in all scala or java. 31
  • 32. Case classes • Case classes help you out (equals, hashCode, pattern matching) • No “new” needed • Eg: case class Car(type: String, cost: Int) val c = Car 32
  • 33. Anti static • No statics in Scala • But you can swap “class” for “object” and its kind of sort of the same (but better) object MyObject { … } val x = MyObject MyObject.whatever 33
  • 34. Resources... • scala-lang.org • A few good books (Programming In Scala) and growing • #scala on freenode 34
  • 35. Conclusion... • Very powerful, mature, fun ! • Would you use it over groovy? • No “grails” or “rails” (Lift just Ain't It). • Thanks ! • Discussion and Q&A • twitter.com/michaelneale • www.osdc.com.au - Brisbane in Nov. 35