Learn a dynamic language now. Why? Because you can do more with less code and get better quality too. How can you argue with that?
Where does the benefit come from? First, the languages are less verbose more expressive, so you type less and say more. Second, metaprogramming takes the place of dev-time code-gen, shortening your dev/test loop (always a goal) and simplifying your continuous integration build. Third, the ability to redefine methods means you can mock anything without adding zillions of interfaces and all that IoC crap.
Having spent the last 8 months working with Ruby and dabbling with Python, I just can't look at C# or Java code the same way. There's so much more of it than there needs to be. It's just like the step from C++ up to those languages, details that are unnecessary for most developers were removed and everything got simpler, leaving you to focus on solving your problem. So it is with this next step up to dynamic languages.
I'm not just making this up. I spent the last eight months working in Ruby. The velocity our team achieved with it was amazing, and for the first time ever I saw components reaching and staying at 100% test coverage. The common criticisms that dynamic languages aren't understood by most developers and don't work for large projects just don't hold water. The lack of compiler (and some dynamic languages have compilers) is a non-issue to. The normal testing the compler does (and that's the right way to think of it) is superceded by the better overall test coverage you can achieve. And while they may not be as fast as C# and Java (which weren't as fast at C++ when they started), they scale fine if you've app's architecture is solid (and a bad architecture will cripple scaling no matter what language you use).
All this benefit comes at no risk because there are versions that run on the platform you already use, so all your existing code and libraries are still accessible, in addition to all the libraries written in the dynamic language you choose. If you run on the .NET platform, take a look at IronPython, and soon, IronRuby (the most important project at MS today IMO). If you run on the JVM, check out Jython or JRuby (or Groovy).
Or, if you're looking for nirvana, check out Clojure. It's a new LISP dialect that's dynamic, functional, and, most importantly, provides a concurrent programming model based on immutable data structures and in-memory transactions that promises to make multi-core programming tractable for mere mortals. That's where I'm headed (with a tangent into Python for another project) and its fantastic.
I know I don't post very often (I took the last year off and spent my time just building stuff), so maybe you won't take me seriously. But really, now's the time. If you haven't already, you owe it to yourself to try a dynamic language today. Is it the right answer for everything? Of course not. But it's the right answer for an awful lot of things, and if you can get more done with less effort, how can you say no?
Posted
Oct 25 2008, 09:13 PM
by
tim-ewald