I am no doubt hopelessly old fashioned, but personally my brain works well with statically typed compiled languages. When done well, it helps me get (non-trivial) stuff done faster. This is definitely a suitable-for-how-my-mind-works preference: many people I hugely respect get on much better with dynamic languages. Suck 'em all and see. Scala is static typing done well: its type inference means it just happens most of the time and only occasionally do I need to be explicit.
I've enjoyed scala so much programming in Java now seems so "yuk".
A simple example of what I love about scala: futures done well. Want to kick a long running activity off in another thread? Here's how:
import scala.actors.Futures._ object App { def main(args: Array[String]) = { println("About to do something...") future { Thread.sleep(500) println("Slow thing finished") } println("I don't wait") } } // output is: // About to do something... // I don't wait // Slow thing finished
This isn't a language feature of course: it's just part of the library.
Want to do a whole bunch of things in parallel and wait for them all?
package scala_actor import scala.actors.Future import scala.actors.Futures._ object App { def main(args: Array[String]) = { var results = List[Future[Int]]() for (i <- 1 to 10) { println("Sending " + i + "...") val f = future { println("Processing " + i + "...") Thread.sleep(500) println("Processed " + i) i } println("Sent " + i) results = results ::: List(f) } results.foreach(future => println("result: " + future())) } } // output is: (on my machine) // // Sending 1... // Processing 1... // Sent 1 // Sending 2... // Processing 2... // Sent 2 // Sending 3... // Processing 3... // Sent 3 // Sending 4... // Processing 4... // Sent 4 // Sending 5... // Processing 5... // Sent 5 // Sending 6... // Processing 6... // Sent 6 // Sending 7... // Processing 7... // Sent 7 // Sending 8... // Processing 8... // Sent 8 // Sending 9... // Processing 9... // Sent 9 // Sending 10... // Processing 10... // Sent 10 // Processed 1 // result: 1 // Processed 2 // Processed 3 // result: 2 // result: 3 // Processed 4 // Processed 5 // result: 4 // Processed 6 // result: 5 // result: 6 // Processed 7 // Processed 8 // result: 7 // result: 8 // Processed 9 // Processed 10 // result: 9 // result: 10
I'm loving it.