Tuesday, July 7, 2009

"Safe" Choices

In my previous post, "Dangerous" Choices, I discussed the reasons why some of the more vocal members of the programming community advocate technology choices that are emerging. At the same time, today's most popular choices are considered somewhat boring, uninspired, and unexciting (since everybody's doing it). There are, however, a few things they got wrong:
  • Technologies like C# and Java are being constantly updated with new language features and technologies (LINQ, MVC, Silverlight, Hibernate, Spring, etc)
  • My own personal experience shows that under the right circumstances, you can work at a great place doing work that pushes you in technical directions you haven't been in before
  • Trying to switch technology stacks is difficult if you're not in the first wave of switchers, since you'll lag behind everyone else in experience, making your job search more difficult, as the pool of resources is smaller and their expertise is generally higher

I'm a C# developer by day, but play around with Ruby on Rails and Groovy on Grails at night. While it's true that C# is missing certain language features like duck typing and closures (although anonymous methods and delegates fill that gap in faily well), it's a language that has evolved signficantly since its first release, and it quite a capable language for most applications being developed. Between LINQ and the new MVC framework, there is little that other platforms can offer that are truly compelling (unless, you insist on avoiding Microsoft technology altogether, which is a close-minded and bigoted mindset in my opinion). In fact, I would argue that using the Microsoft technology stack is actually the more productive choice, given the tooling.

Visual Studio's intellisense, while often frowned upon, makes the .NET framework far more accessible than Grails or Rails, due to the discoverability of methods and properties. If I'm not sure what methods are available for strings, just typing a dot gives me a wealth of information. Yes, editors like Eclipse and IDEA are getting support for some of these budding technologies, but today, you have to rely heavily on documentation.

Then there's debugging and compilation. Hey, I'm a fan of static langauges, if for no other reason that the compilation feedback I can get. I don't have to take seconds/minutes to run unit or integration tests to see if my last commit is syntactically valid. I've also got a nice debugger that will let me step through the code without resorting to printing output to the console. Again IDE support will improve things for Grails/Rails, but it's not fully baked today.

Finally, I want to address the job market. There are great companies out there in the Microsoft space doing exciting and cutting edge work. Take Vertigo, Wintellect, and Thoughtworks (yes, that Thoughtworks). They're all doing large and small projects using the latest and greatest stuff. I'm sure that there are many other good companies out there with a great group of developers coding against the newest stuff.

In fact, if I had to define what I really believe "safe" versus "dangerous" to be, it's more about how soon you're willing to adopt new technologies, not what platform you're on. I've worked for some pretty big companies in the past, and I always found frustration in their reluctance to move to new offerings at a reasonable pace (over a 3 year wait on .NET, for example).

Don't get me wrong, if you want to work with some of the industry's current luminaries, you'll have to broaden your horizons beyond Microsoft, but in so doing, you'll probably pick up some things up you've never thought about if you don't anyway. Or worst case, you might be able to glean some wisdome from folks who have been doing it that way for years before Microsoft provided their own branded version. And since you're programming because you love it, wouldn't you love learning something completely new? The pragmatic programmers often instruct learning a new language a year to expand your horizons, and that's a good thing. Just don't turn your back on C# or Java because you've been doing it a while; there's still plenty to learn and new frameworks popping up all the time that expose something new to learn too.

No comments:

Post a Comment