Scala is EJB2? I don’t think so

I just read Stephen Colebourne’s blog entry that is circulating the twittersphere. I’m about to post some comments, so I guess this means that I don’t “tolerate dissent.”

First of all, please don’t pull out the infamous “(0 /: l)(_ + _)” argument okay? I get it that not everyone understands foldLeft’s, but it’s not that hard!?! I hadn’t done this type of thing since college, and after about 5 minutes of reading, I grokked it pretty well. I went on to give a presentation on functional programming at NJUG and even used this as one example of programming that is an option in your toolbox. I can’t really say much more other than a) don’t use it or b) read In Defense of (0 /: l)(_ + _) by Ricky Clarkson.

I think someone else already captured my opinion regarding discussion about loving/hating scala: “In my experience this is completely inaccurate, dissent is constant in the community. What is not tolerated is stupidity, unthink or fud. The Scala community contains amongst it a very bright set of individuals who do not let even confirmed Scala enthusiasts get away with the slightest exaggeration and will passionately debate many a sacred cow.” —jed.

I just don’t understand the “scala is complex” idea. We have to solve complex problems! Get it? Things aren’t easy. We are having to evaluate frameworks and tools to build systems. So many new, hot things are being built. Why was Ruby On Rails so popular? Because it enabled us to build e-commerce sites a lot faster than before. Same thing for Grails and Spring Roo. Neither Java nor Ruby by itself was enough for people to do their jobs. Well, I shouldn’t say that. Lots of people built lots of systems using Java and Ruby, but once these rapid app development tools came out, people ate them up fast! It’s because we have tough jobs and anything than can bend the curve helps us out. The same can be said for scala. We are able to bend the curve and write more functionality that captures what we are thinking with it.

Love it or hate it, I really liked PERL. I built mean systems using it, and that was because it was the first language I met that made regular expressions incredibly accessible. Today, I don’t think of using it, because Python has what PERL had and more. If I didn’t have anything like Python, Ruby, or Groovy to do pattern matching, then I wouldn’t hesitate to grab PERL. Now as scala emerges, it’s ability to do algebraic type matching is incredible. I think it sets a new standard in what other languages should offer in pattern matching abilities. So, just because I can write some bad patterns, I should chuck it and move on? I don’t think so.

Some of the criticisms are dead on and point out where effort must be heavily invested. Lack of test suite is critical in my book. Instead of dumping scala due to a lack of a test suite, how about bolstering it as the thing to improve its quality? How many systems have you dropped or discarded because they just didn’t have enough automated testing? I hope not too many, because it’s only recently that I have seen automated testing really take off as the way to go, despite years of preaching.

To me, learning new languages has always been part of the fun of programming. I studied many languages, worked on lots of projects using several including BASIC, C, C++, Assembly, Ada, Tcl, Tk, Expect, Bash, SQL, Java, XML, JavaScript, Scala, Groovy, Clojure, Prolog, and others. Each of these has some amazing aspects as well as funny quirks. It has always been exciting to move to a new technology and discovered what I can really do. As I’ve learned new languages and new paradigms, I feel it has made me a better programmer because I am more rounded. I’m not confined to my provincial thinking that was the result of tinkering with BASIC as a kid. Now I think of big and complex concepts and immediately start chopping them down to small solutions in my mind before my fingers even hit the keyboard. Scala is another one I would be chomping at the bit to work on for a full blown project.

Leave a Reply

Your email address will not be published. Required fields are marked *