Lately, I've been digging into Ruby trying to learn how to use Rails.
First off - I like it ... no, I love it. Ruby addresses many of the things I hate about static languages. No need for defined types, no forced inversion of control to make testing possible... I could go on but let's just say it's a great change of pace.
Unfortunately, development has been very slow. I'm basically learning a new language, new framework, new platform, new everything - all at the same time.
It's frustrating to know what you're trying to do but no have any idea how to make it happen. In many ways, if you want something done it is best to stick with what you know best.
I've been using ASP.NET MVC for years now and I'm able to create sites much faster than I can with Ruby. My first attempt at a Rails project has been to recreate a site that only took me a few hours to build in ASP.NET MVC. It's been 2 weeks and I've hardly made a dent in it!
But I've come to a realization...
As hard as it is to go from being an expert in one realm to a noob in another it is important to push your programming boundaries
I used to think getting onboard with something like Mono would have been enough to consider myself a cross-platform developer but using C# and .NET on a different platform isn't really learning anything new. Sure, it feels like you're branching out and trying new things but you really aren't.
Much like lifting weights or running, if you aren't pushing yourself past your limits then you aren't really getting better. If you're past the point of figuring things out in your current language then maybe it is time to try a new one.
But, Learning New Stuff Is Hard!
Jumping into something new is difficult and it's easy to call it quits after hitting a few roadblocks. I realize that everyone learns differently but here are a few things that have helped me.
- Learn first, build something later: Watch screencasts, read tutorials, buy books and follow along. Don't start by trying to build a complex system or framework - Chances are you're either going to re-invent the wheel or just write really poor code. Start with small, simple examples and build from there. Try and create a class you've seen before (For example, a calculator or a StringBuilder).
- Convert something you've already done: Create an application that you already know the gotchas and pitfalls for. This will allow you to focus on writing code in a new language to solve a problem you already understand.
- Don't give up: If you're already an expert with an existing framework then why go back to it? Embrace the challenge and expand your horizons. Don't focus on what you can already do - focus on what you can't do and find a way to make it happen.
So, am I abandoning .NET? Of course not. Is this blog going to be about Ruby development from now on? Nope!
But, what I have learned that if I stay focused on only what I know then I'm hurting myself.
June 5, 2011
Expanding Your Boundaries
Follow up post after a few weeks of using Ruby.