You Need To Step Out Of Your Comfort Zone

20 commentsWritten on September 7th, 2010 by
Categories: Opinions, work/career

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.

  • Copenhas

    Great little post. I had very similar feelings after I had worked with Python for awhile and I still prefer the greatly reduced developer drag of working with Python, VIM, and a command prompt (at least on Linux/Mac) over the big GUI tools usually involved in .NET development. I don’t hate Visual Studio or anything like that but the other environment seems more enjoyable.

    Also I will say that learning some of the ideas and idioms behind a different technology and its community is a great way to gain a completely different point of view on problems. I know working with Python started effecting my C# code (for better or worse). I would find myself missing some of Python’s dynamism at times.

    I also have taken a peek into Erlang and that is a huge departure. It’s sort of bizarre how easy concurrency and writing a server style app seems in Erlang. If you listen to Joe Armstrong give a talk about Erlang, you can tell that he thinks about concurrency in a different manner then most others. I’m going to guess because of how differently and deeply Erlang provides those features. I haven’t done anything beyond exercises but I find myself sometimes thinking “if I just had processes like Erlang right now”.

    All this seems to give me a little more respect for the phrase “right tool for the job” because I like C# in scenarios, Python in some, and I respect what Erlang could give me in others.

  • Alex Simkin

    “the whole static vs dynamic thing can really have a profound influence on how you think about OO design”

    … and performance.

  • Roco

    Care to back up the vague performance comment?

  • http://davybrion.com Davy Brion

    when it comes to performance, just keep this in mind:
    http://davybrion.com/blog/2009/02/performance-rules-of-thumb/

    those are the things that will truly hurt your performance… execution speed of a language is hardly ever a true factor, except in some very specific scenarios or niche markets

  • Alex Simkin

    @Roco

    Just Google it.

    @Davy

    Why go defensive when nobody even attacking? I meant that most of the time with languages it expressiveness vs performace / memory consumption. In our company we use C#, F# and Erlang (IronRuby was terminated recently) and can compare these. By the way we are adopters of your Agatha framework from the very first post where you described the idea, but we had to replace DI container with Hiro for performance reason. All other fluent, dynamic, feature rich containers are just freakingly slow for highspeed message processing that we do.

  • Roco

    @Alex

    Thanks buddy, great response. Bye bye.

  • http://davybrion.com Davy Brion

    @Alex

    i wasn’t being defensive, but it does appear that what you guys are working on does fit within “except in some very specific scenarios or niche markets”

    but anyways, this post is about something completely different…

  • Alex Simkin

    @Roco

    That was rude I admit. For this I appologize. But if Ruby outperformed C# you wouldn’t even asked for clarification

  • http://davybrion.com Davy Brion

    Guys,

    again, this isn’t about performance, and not even about Ruby vs C#… if you want to discuss that, i’m sure you’ll find other places to do so but there’s no reason to pollute the comments of this post with it

  • Alex Simkin

    @Davy,

    One may learn new stuff in a seek of illusory beauty, the other in a search of raw power. And while beauty is in the eye of the beholder, raw power can be measured.

  • Roco

    @Alex – Apology accepted, but please refrain from making judgments about me. You have no idea of who I am, how much experience I have, etc. As Davy said, let’s get back on topic.

    I picked up on this post because I have recently undertaken a similar journey with Ruby, as I have with other languages in the past. The advice given in the post is 100% spot on. Quite frankly, what language you choose is really secondary to the act of learning a new language.

  • Roco

    @Alex

    “And while beauty is in the eye of the beholder, raw power can be measured.”

    Do you know what else can be measured? Development time, time to market, etc. Regardless, Davy’s post was about the value of the experience of learning a new language. For him, right now that language is Ruby. This is not about the performance of X vs Y. There are trade-offs everywhere in life, however, that’s not what this post was about anyway.

  • Alex Simkin

    @Roco

    “It’s all the fun of learning, without the work” – Kristin Appelget

  • Copenhas

    @Alex

    You seem almost jaded towards the post due to your current work situation. I have run into this before when I discuss some new technology with someone. They come back at me with a “this wouldn’t work because of …”. The reasoning seems to be from the assumption that they will always need what they need now and that any features they don’t have they wouldn’t have wanted anyway.

    I think getting the exposure to new ideas is great even if they are not directly applicable. The more you have had exposure to the more likely you’ll be able to relate to a new idea, which allows you to digest the new idea easier and more quickly. You do run the risk I suppose of getting overly excited about something and it becomes your new favorite toy for a little while.

    As software starts to store more and more knowledge, I think we’ll need a better way to represent that knowledge and we’ll find that a more polyglot environment will become more common. Most of us are probably already in one, but I think this will become beyond just C#, SQL, and Javascript. Perhaps mixing of general purpose languages but more likely DSLs depending on how thins like language workbenches and Boo work out.

    @Davy

    You have any good Ruby links? Some friends of mine and I are just starting to get into Ruby.

  • http://davybrion.com Davy Brion

    @Copenhas

    i’ve gotten the most value so far from reading books, but there are a couple of ruby-related aggregators and blogs that i routinely check. Not all of the stuff that gets linked to is interesting, but it always has the good stuff as well (kinda like the .NET link blogs):

    http://rubylearning.com/
    http://rubycorner.com/
    http://rubyflow.com/
    http://www.reddit.com/r/ruby/
    http://planetruby.0×42.net/
    http://www.rubyinside.com/

  • 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

  • GoingToBeOld

    Learning the same thing (ex. C#) every year sure makes you great. I agreed.
    Learning something new like Ruby ? woohoo… sure thing. Lots of people said it good. I curious too.
    If only I got the time. More language render you able go wide. Focusing will make you sharp (not meaning only C-sharp please).
    The older I am, the more fragile I become, the more slow I perceived, the less aware I’d be.
    One should think to enjoy things that he already planted at younger age.
    Why not learn something that is totally forked out from programming ? Like, farming ? investment ? business ? Ahh….
    My current skill have sustained me until I married. Will it sustained me until I am a grandfather ?
    Just in my opinion. :)

  • kam

    Although it may sound reasonable what you say, but in most case, people have several projects on a daily basis and learning to use new tools and their corks is not an option. As an engineer, I just need a program that works well! All that matters to me is a tool that let me achieve that in shortest time possible, in this case Visual Studio is a head and shoulder above any programming IDE. My 2 cents.