Up until about a month ago, i focused almost exclusively on the .NET world, at least when it came to the purely technical stuff. I knew about the old advice of how important it is for programmers to learn a new language every year. I heard a lot of people mentioning it all the time. But at the same time i often thought "instead of learning a lot of languages, wouldn't it better to really focus on one and know it very thoroughly?". I figured that if i focused on C# and .NET that it would make me better at what i do: writing C# and .NET code.
But as i learned this month, there is a huge downside to that kind of thinking. Whether you realize it or not, you slip into a comfort zone if you're always dealing with the same environment. You're not often surprised anymore because you've probably already dealt with most issues that could come up already. If you stick to the same language, the same tools, the same libraries all the time, you'll easily start thinking that you're working with a stable basis. You know what works, and you know what to watch out for. Sure sounds like a great deal, no?
Well... the downside of that, and i'm basing this solely on what i've learned in the past month since starting my Ruby journey, is that you're not really learning anything new. Oh sure, you'll learn about the latest and greatest new features of your favorite Inversion Of Control Container or your favorite Object Relational Mapper. You'll pick up some new techniques for testing your code. You'll pick up some tricks about improving your design skills. But most of what you'll learn will be evolutionary improvement. You gradually learn small new things that incrementally improve the way you work. And that's only if you're a passionate, motivated developer.
And as great as continuous improvement is, sometimes you sort of need to give yourself a jump start, just to keep things interesting. The best way to do that is to get out of your comfort zone and learn something entirely new. Ideally, something that challenges the practices and principles that you're used to. In my case, Ruby did the trick. Now some of you are probably thinking "huh? C# is object oriented, and so is Ruby... what could possibly be so different?". Well, the whole static vs dynamic thing can really have a profound influence on how you think about OO design. It sure has had a huge influence on me already. To put it simply: it might still be OO, but the 'rules' are truly different.
And that's the key right there: the fact that learning about something makes you think different about something you already thought you had a pretty good idea about. And that really works on multiple levels. Do you think you need Visual Studio with its debugger support and intellisense? Well, i'm quite happy to say that i no longer feel that i need to rely on those tools. I now know that i don't need them and can be (way more) productive in other ways. I advise you to test yourself in a similar manner: you'll either learn that you don't need those tools, or you'll learn to appreciate them even more. You really can't lose. And to avoid any confusion: tooling is just one aspect of it. It applies to the way you think about stuff in general.
So seriously, do yourself a favor and go out and learn something new about what you thought you already knew. You'll either gain a new perspective on things, or you'll gain a renewed appreciation of whatever it is you already believe in. It's simply a win-win situation.
Pingback: Stepping out of my Comfort Zone | Senthil Kumar's Blog
Pingback: Learn To Work With The Web, Instead Of Against It | The Inquisitive Coder – Davy Brion's Blog
Pingback: Why We’re Going With HTML(5) Instead Of Silverlight