Is Scala DICEE?

NOTE: I originally wrote this article in 2013, and five years later I still think Scala is DICEE (and that’s a great thing).

If you’ve never heard of the term DICEE, it was coined by Guy Kawasaki. Mr. Kawasaki was a developer evangelist for the original Macintosh team in the 1980s, and used the term in at least one subsequent book to refer to great products.

“DICEE” is an acronym that stands for Deep, Indulgent, Complete, Elegant, and Emotive:

  • Deep — It doesn’t run out of features and functionality after a few weeks of use. Its creators have anticipated what you’ll need once you come up to speed. As your demands get more sophisticated, you discover that you don’t need a different product.
  • Indulgent — A great product is a luxury. It makes you feel special when you buy it (and use it). It’s not the least common denominator, cheapest solution in sight.
  • Complete — A great product is more than a physical thing. Documentation counts. Customer service counts. Tech support counts.
  • Elegant — A great product has an elegant user interface. Things work the way you’d think they would. A great product doesn’t fight you, it enhances you.
  • Emotive — A great product incites you to action. It is so deep, indulgent, complete, and elegant that it compels you to tell other people about it. You’re bringing the good news to help others, not yourself.

A few days ago I thought, “I’ve been working with Scala for a couple of years now, and at least once a week I learn something new about the language.” I meant that in a good way, that even though I’ve been very productive with the language, it’s so deep that I keep learning new and better ways to do things (such as the Exception object's allCatch object).

When I thought of the word “deep”, I immediately thought of the term “DICEE”, and wondered, “Is Scala DICEE?” Let's take a look.

Deep

As mentioned, thinking of Scala as being “deep” led me to the DICEE phrase, so this is an easy “yes”.

Indulgent

This one is a little trickier, because Mr. Kawasaki was thinking about physical products that have a cost.

Is Scala a luxury? Hmm ... maybe? I guess you can keep developing apps with Java, and think of Scala as being a luxury. But I don’t view it that way. As I’ve written before, once you grok Scala, you’ll never want to go back.

The second part of the definition is, “does it make you feel special when you use it”? If making me happy means making me feel special, than this is also a yes. Not to beat specifically on Java, but once I discovered Ruby I didn’t want to write Java any more. And once I learned about Scala, I haven’t looked back at Ruby.

Complete

“Is the support system as good as the product?” This is an easy yes. The Scaladoc is excellent. The mailing lists are incredibly active and helpful.

Elegant

Does Scala have an elegant user interface? Do things work the way you expect?

In the context of a programming language, this must refer to the language’s syntax and its APIs. Scala code is as concise and expressive as any language I’ve ever used. I enjoy writing code like this:

val z = for {
    a <- Try(x.toInt)
    b <- Try(y.toInt)
} yield a * b

and this:

user.address.foreach { a =>
    println(a.city)
    println(a.state)
    println(a.zip)
}

I could go on for a while ... shoot, I’ve already written that Scala is a better Java.

So does it feel elegant? Hell yeah.

Emotive

Does Scala compel you to tell other people about it?

Personally, I’ve written over 150 Scala tutorials, and I’m also writing the Scala Cookbook, so that’s a definite yes for me. The basic feeling is, “Hey, I’ve found something I really like, here’s some information about it.”

I know I’m not alone. As I mentioned, the mailing lists are busy and helpful. Many Scala tutorial websites have sprung up. It feels like there’s a Scala conference every month.

Summary

Is Scala DICEE? My answer is a clear yes. If you’ve used Scala, I’m sure you’ll agree.

A more interesting question is, “Did Martin Odersky and everyone else involved in creating Scala set out to make it DICEE?” I doubt it. Like anything else that ends up DICEE, I suspect that they probably just scratched an itch, trying to create a modern programming language that was as concise and expressive as Ruby, but also statically typed, and through continuous hard work and refinement, they came up with a DICEE language.

(I’ll bet there’s an interesting story here. For instance, I’ve read that Scala 2.x is different than 1.x, but how much different it is, I don’t know. The important thing is they kept pushing on the language and refining it.)

Getting back to this article ... in summary, I think Scala is indeed a DICEE programming language, and that’s a good thing.