3 ms·
I really wanted to pursue Scala. It looked promising: runs on the JVM, is far saner than Java, has features that keep the "Java 1.4 was the last real Java" crow
by horusthecat 10y ago
I really wanted to pursue Scala. It looked promising: runs on the JVM, is far saner than Java, has features that keep the "Java 1.4 was the last real Java" crowd away, has a mixed-paradigm OO/FP approach, lots of features... things like all the FUD over compile times and performance didn't really bother me (if I cared about resource usage/performance, I wouldn't use the JVM, duh).
I found two classes of problems.
The first was the lack of practical guides. How do I access a database? Should I use a Java lib for that? What about a rudimentary CRUD app? What if i need something Java-EE-ish, like a message queue/IPC? I kept finding myself in scenarios where I had to reach out to Java, which I was deliberately trying to migrate away from.
Second, there's the fact that Scala has full OO along with the ML-style FP, which makes it hard to figure out if I was doing things the "right" way. Do i use traits and composition and case classes? Should methods go on classes? What's up with the Object pattern? Do I store state on classes or should I prefer case class/record types? When is it a judgment call... and if it is a judgment call... how do I make it without much experience in the language or having any experienced Scala users to guide me?
I'm not averse to spending $100 on books and working through them. I tried that with Scala, but somewhere around page 200 of Programming Scala, gave up.
Then there's the scare factor, there are so many "we're switching from Scala to Java 8" or "we already use Grails" that it was looking like it was turning into a dead end professionally very quickly, especially outside of DC/NY/SF/Chicago. One job I was looking at told me they were moving all their Scala work into Java because of client pressure.
The bigger irony being that I started using OCaml instead, a language where the documentation is usually just an interface file and type signatures.