Came to previous C4s for Io, Erlang. Have programmed for money in Java, JavaScript, C, PHP, Perl, Ruby, and Python. Have programmed for fun, love, or spite in x86 Assembly, Erlang, Lua, Objective-C, various Lisps, Haskell, O-Caml, C++, Io, Erlang.

Ruby&#x2019;s poor VM performance, monkeypatching and cultural issues, questionable for large systems. We had new services to build, didn&#x2019;t want to continue with Ruby.

Ruby&#x2019;s poor VM performance, monkeypatching and cultural issues, questionable for large systems. We had new services to build, didn&#x2019;t want to continue with Ruby.

Ruby&#x2019;s poor VM performance, monkeypatching and cultural issues, questionable for large systems. We had new services to build, didn&#x2019;t want to continue with Ruby.

My personal criteria for a good systems language.

Why not these languages? Talk about their issues. We ultimately knew we wanted a JVM language, just not Java.

Ruby&#x2019;s poor VM performance, monkeypatching and cultural issues, questionable for large systems. We had new services to build, didn&#x2019;t want to continue with Ruby.

The JVM has chops. Address Java interoperability, Martin Odersky&#x2019;s credentials, etc. Worse comes to worse, just fall back to Java. Most other JVM-hosted languages can&#x2019;t claim the same speed as Scala.

The &#x201C;concurrency crisis&#x201D; has been underway since the early 1990s. Ref: HOPL2 intro speech. Scala handles actors as nicely as Erlang and Io. Actors are neat, but we haven&#x2019;t made extensive use of them at Twitter just yet. Also Pi and Join Calculi.

A pragmatic approach to data structure mutability. Most data structures available in mutable and immutable flavors. Requires thoughtful decision-making, but that pays off.

Static typing is a blessing and a curse. Scala lets you ignore typing until you can put it to work for you.

Once you have this feature in a language, you simply can&#x2019;t do without it. Passing functions around is awesome - a bit like function pointers. Also: &#x201C;higher-order&#x201D; methods (methods that take other methods, like &#x2018;map&#x2019;), anonymous methods. Everything is an expression, everything has a value.

Once you&#x2019;ve gotten used to Ruby&#x2019;s modules, it&#x2019;s another difficult language feature to give up. Subclassing can be a nightmare, and isn&#x2019;t always the correct design solution. Traits enable powerful abstraction of cross-cutting concerns.

Every programmer matches patterns all day, every day. It&#x2019;s just that most languages don&#x2019;t have a lexical facility for making that task easier.

XML ain&#x2019;t going away any time soon. If you have to interact with XML a lot, Scala is an awesome choice. It&#x2019;s got that JavaScript+JSON peanut butter n&#x2019; jelly quality.