Pete On Software

RSS Feed

How Deep is the Rabbit Hole

Programming is Hard, Let's go Shopping. From http://memegenerator.net/instance/30286782Rob Conery tweeted about a blog post that “Kakubei” made back in May of 2012. You can read about it over here.

I find it interesting that the author starts off the post making a comparison between himself and his brother. That his brother’s academic success and his own academic failings (and subsequent self-taught programming skills) are at odds and that the industry would view one of them as a “real programmer” and the other one as not a “real programmer”.

As I often like to point out, every programmer is a self taught programmer. You may get the fundamentals at college and learn some things that can make you more efficient or a better designer of computer systems, but with the pace that technology is changing, you have to constantly learn to keep up.

That being said, Kakubei’s main complaint is that Rails is hard to learn. He compares the canonical “15 minute blog” demos to what it takes to do “real world” Rails development and he comes up with a big differential.

What I find funny is that he seems to have come from a PHP background. That means that he had to know the PHP language, possibly a PHP framework (like Cake), HTML, CSS, JS, probably MySql, etc. I say that to say this, he had to know a lot to work and he wasn’t coming to Rails from zero.

The author complains that to use Rails, you have to know Ruby and that you have to know MVC, Gems, RVM, Active Record, HomeBrew, HTML, CSS, JavaScript/jQuery, Rake, Capistrano, etc. My point is that he probably already knows HTML, JS, and CSS. If he owns a Mac, he has probably already encountered HomeBrew (it isn’t just for developers). If not, this was a fine time to learn.

I think this all boils down to something else, though. What does it take to be productive or at least “mildly useful” in a language/framework?

To me, I was able to follow a simple Rails tutorial and starting using Rails almost immediately. Know what I didn’t need? RVM. Just starting out, I just used one version of Ruby and Rails. As for Gems, in order to do my tutorial, I had to say “gem install rails”, so I already had an idea how it worked. After that, you can pretty much avoid using it if you don’t mind rewriting code that is already a “solved problem”.

What about HomeBrew? Don’t need it. Active Record? All you need to know to actually make stuff happen is in the “15 minute” video. Same with the MVC pattern. I didn’t know anything about making MVC websites and I was up and moving with minimal instruction from the video. Rake? Didn’t need anything special there, either, because I hadn’t created a very complicated system yet. Capistrano? I need an automated deployment on day one?

My point is that every rabbit hole is very deep. .Net? WebForms or ASP.Net MVC? HTML, CSS, JS/jQuery. Dependency Injection with AutoFac/AutoMapper/Ninject. ORMs like Entity Framework, NHibernate, etc. Don’t forget the language (C# or VB.Net or F# or whatever). How about Nuget for package management? Don’t forget source control, like TFS or Git. What about knowing testing like NUnit, xUnit, MSTest? Deploying with MSBuild and MSDeploy or one of the bajillion open source tools?

I could follow the same path to describe getting started in web development with Node.js or Python or whatever you could think of. It is silly to think that you can go from 0 to Amazing in 15 short minutes. That pattern doesn’t work.

What you have to know is how to learn. You have to know how to Just-In-Time the information so that you can be productive from the jump off. Yes, that means that you’ll always be learning, but if that concept doesn’t excite you, then you are probably in the wrong field.

I believe that that sort of complaining (“The development stack is too deep/rich”) shows a certain level of professional immaturity.

I realize that after Rob tweeted, Kakubei added an update after people started commenting, saying:

“I’ve been using Rails for more than a year and I still use it. In fact, I’m in the process or rewriting our main application’s API in Padrino with ActiveRecord, Thinking Sphinx and deploying to Heroku and it has been a primarily positive experience despite some teething issues. The admin for our database I’ve written in Rails 3.2 and there is a lot to like there. The idea was to write another post after this one titled “Why I love Rails” but I never got around to it. Even though this post is a rant, I still feel that way about Rails, so keep those comments coming, but don’t feel you have to convince me that Rails is good, I just take umbrage with some of its complexities and with the people who sell it as being simple and easy to learn. In the meantime, I’ll keep ranting.”

I understand his response and understand that he was probably frustrated when he wrote the post and he is not really apologizing for it. That leaves me to still consider my criticism valid that I believe that he faced the problem all wrong (or at least described a method that did just that).

To me, you learn the basics of the thing. You see what skills you have that you can already reuse (HTML, CSS, JS, SQL, whatever). Then, you pick up what you need, working with the “training wheels” that the frameworks or languages give you. Then, steadily over time you start to grow and move deeper in the tooling until one day you are someone that others look to for advice.

That’s the only way we’re going to make it in this crazy development world.

2 Comments

mattmc3  on March 6th, 2013

Pete – I think you’re spot on in a lot of respects with this post. When I look to hire a developer, I don’t necessarily care if there’s a technology we use that the developer doesn’t know. I look for someone with a breadth of knowledge and a quick study. If I get someone who knows what’s being used today, but can’t learn and adapt with where we need to be tomorrow, then I’m in trouble. Our skill at learning is as important as our skill at programming.

That said – there’s something to be said for individual style and taste when learning (or choosing not to learn) a technology. I’m probably one of a small population of people who like Ruby, but am “meh” about Rails. I like Rails only in that Ruby is so phenomenal that it makes things like Rails possible. But the Rails abstraction can be too abstract, and doesn’t fit my mental model of how I would solve a complex problem. So when I go to do something outside the “rails” imposed by Rails, the rabbit hole goes too deep too fast and instead of producing something you’ve just lost an hour to the Google help desk. Sinatra on the other hand, better fits my mental model and my style of development. To each his own.

And C#/ASP.NET MVC pays the bills, so there’s also an element of necessity too when diving in to a new technology. While I wouldn’t touch PHP with a 10-foot pole, I was a classic ASP fiend back in the day. Do I sometimes write off a perfectly good technology due to fuzzy metrics like whether I *enjoy* using it? You betcha. There are plenty of others people latch on to for equally silly reasons (Microsoft made it/It’s NOT from M$!). The fact that development is full diversity (and diverse opinions) is the fun part. Now, back to my WebMatrix project inside Parallels on my Mac…

Pete  on March 7th, 2013

Matt,

Thanks so much for the comment. I totally agree with you about personal taste and technology. Sometimes, there are just things that “click” with your mental model of how something should be done (like you and Sinatra vs Rails).

When I interview people, one thing I like to do is actually present them with something that is sure to be a little new to them. I give them an overview, offer them Google, and promise to answer any and all questions they have. I then give them a few simple things to do (some of which just follow established patterns in the code). Everyone says they learn quickly and I like to see how they think and learn in action. That’s all I really care about.