prose :: and :: conz

Find a bandwagon and jump on!

Jumping on a bandwagon can get you a bad rap. Nonetheless, I’d like to recommend that developers find a bandwagon and jump on. That’s what I’ve done with Scala, and it’s one of the best things I’ve done in my career. It’s not because I think that Scala is the cure all language (it isn’t), but my involvement in a vibrant and excited development community has been a game-changer. Let’s go back to my pre-Scala development days to gain some perspective on my transformation since jumping on the Scala bandwagon.

Roughly concurrent with the release of Java 5.0, I was a bright-eyed student of computer science at UAH enrolled in CS321 – Intro to Object-Oriented Programming in Java. While I had already fallen in love with software development and added CS as a second major to my math degree, I hadn’t fallen in love with a language. Thus far, I had only been exposed to C and C++. and what’s to love there? (Hint: NOTHING) That definitely changed with my exposure to Java in this class. Coming from C/C++, I felt that everything in Java had some abstraction to it. The documentation was far superior and maintained by the same people who maintain the language, compiler, and runtime. It felt so much more natural for this math guy.

Ultimately, my decision to join ADTRAN out of college was made largely in part due to the team I was offered to join worked exclusively in Java on a J2EE network element management system. I knew that I wanted to focus on solving problems rather than navigating the pitfalls of my tooling, and I was convinced a job developing Java code would be the right path. For the most part, I was right. I had a successful tenure at ADTRAN, solving a lot of interesting problems and creating plenty more in my wake. Anytime I needed to accomplish something new, I just searched the Java API for what I needed. When that didn’t suffice, I googled and found the library that I needed. I dropped it in, read the tutorial/API and was off to the races. Everything I ever needed was already done. While I knew that most of this stuff was open source that I could contribute to, I never had a reason to. It all seemed to just work without needing enhancements.

As I reminisce over my time at ADTRAN, I can only recall once dealing with a bug in a library. In particular, it was one of our legacy projects (ok, all of them were legacy projects per Michael Feathers) which still ran with JDK 1.4. I was using some of the handy Buffer classes for chewing through some binary data, and one of the method associated with marking my current position wasn’t working. After much frustration, I finally convinced myself that it indeed was the JVM which had a bug. That was an uneasy feeling because I had learned through experience that I’m far more likely to create a bug than those guys. Well, it turned out that it indeed was a bug in the JVM which fortunately had already been fixed in a later version of JDK 1.4.

Fast-forward to my introduction to Scala thanks to Martin Odersky‘s excellent online course. If you’re reading my blog, you already know how much I like Scala. As a math geek who discovered software development, a language heavily influenced by the functional programming paradigm is a natural fit. I was quickly drawn into the hype as I made my way through the seven weeks of that course. Everything I was learning that could be done in Scala was a breath of fresh air to all the stagnation and frustration I had been experiencing in my Java development. Prior to this exposure I had been playing with Groovy and Grails. While it was intriguing, my reaction to Scala was far more pronounced. Programming was fun again. I finally felt like I was working with a language that helped me do sane things, instead of leaving me to learn that I need things like immutable collections on my own.

I began trying Scala out at work on pet projects and proofs of concepts. While there are already numerous powerful libraries out there for Scala, one can imagine a legion of useful libraries waiting to be developed. Even though Scala projects can reuse Java libaries, many of them at best fit awkwardly into a Scala application or at worst flatly work against what we’re trying to accomplish, such as non-blocking I/O. Suddenly I find myself working in an ecosystem that is alive and in need of contributions. Even if it is only a DSL wrapper for an extant Java library, there are plenty of areas to contribute. Influenced by my work in telecom at ADTRAN, I founded (i.e. bought the domain name) SNMP4S and attempted to build an aesthetically-pleasing DSL for SNMP manipulation. I also began to get involved in the Lift community while building war with one. While my contributions were minimal and sometimes rejected, I was nonetheless contributing to open source projects for the first time. I also occasionally find issues in the libraries under development, and I am able to report these problems and help make the Scala world better. I’ve hit weird errors due to Scala’s major-release binary incompatibility and pattern match failures prior to the 2.10 rewrite. While these are indeed frustrating, I’ve become a better programmer through troubleshooting these types of problems.

So I implore you to try to find a language, library, framework, etc. which is currently trending and immerse yourself in it. I think you will find such a thing will make you a better programmer too. Perhaps that doesn’t seem exciting to you. I can only think of two reasons why that is: 1) You’re still so new to programming that whatever junk you’ve been subjected to still seems exciting or 2) programming was fun but you are already so comfortable with your familiar technology stack the prospect of learning a new one seems to be a needless hurdle between now and productivity. For the developers with the former syndrome, keep having fun but don’t get stuck into the rut of the latter guys. If you’re in the second group, then you are where I was. Programming really is fun, and I hope you take this chance to plunge into something new.

Tagged with: scala (41), java (22), grails (2), groovy (2)