We had a lively twitter discussion today about whether learning Ruby on Rails is something that would be worth it for the average .NET developer and if the supposed productivity gains that people say that they’re getting from Ruby on Rails only come from the “smart people”. While this is a valid question, I think there is a bigger issue at hand.
The real question is whether the so-called “average” .NET developers are capable of learning new concepts. Certainly the “smarter” developers may learn faster, but I think it’s unfair to say that you have to be “really smart” in order to do good work and learn new things.
A similar argument that I’ve heard in the past is that we should not use certain tools or concepts like dependency injection or unit testing because it will be hard to find developers that understand these concepts or it will be difficult for people to learn them. I’m all for keeping things as simple as possible and not adding unneeded complexity, but if I’m tasked with completing a project, I’m going to use the best tools that I can to get the job done as fast as possible with the highest level of quality.
I think the heart of the matter comes down to expectations. If we tell “average” developers that learning Ruby on Rails or test-driven development is too hard or only for smarter people, then we’re expecting (and in a way, encouraging) them to be mediocre. I expect a lot from the people I work with. I expect them to want to do the best job that they can, create well designed code, write tests, complete tasks quickly, and not write bugs. Is that realistic? Well, not exactly (we’re not perfect, so we will make mistakes), but there’s no point in striving for anything less than the best.
I also expect that if you’re in this business, you’re always going to be having to learn new things. Most developers are good at lots of different advanced concepts, like how to optimize SQL queries, how CSS works, how .NET garbage collection works, and things like that. At one point, these people didn’t know or understand these concepts, but they learned and now they’re pretty good at it. Most developers with 5 years of experience will be experts at something.
The real problem is when people do not want to learn. Like I said, I think almost all developers are capable of learning and understanding advanced programming concepts. People are always finding better ways to develop software, so I would expect that I’m always going to have to be learning these new ways so that I can be as productive as I can be. I think we need to encourage and reward learning.
When it comes to Ruby on Rails, I think that if you want to succeed at Ruby, you will need to write tests. In .NET you have the compiler, so people feel like they can not write tests and get by just fine, and to some extent this works (although I personally would not recommend it). In Ruby, you are much more likely to get burned by not writing tests. But if you can learn TDD and Ruby and become a much more productive developer and write better code, isn’t it worth the effort in the long run?
Now if you want to see a productivity hit, take a Ruby on Rails developer and have him do WebForms.
Great post, but one minor mistake:
Now if you want to see a productivity hit, take any developer and have him do WebForms.
There, I fixed it for you. ;-)
On a serious note, I think you hit the nail on the head. Yes, it’s going to be harder to learn something new than to keep plodding along with your normal 9-5 grind. This much is obvious. However, you will be a better professional if you continue to better yourself.
Imagine a doctor telling his peers he refuses to learn any new techniques because they are too hard. I don’t know about you, but I won’t let that guy listen to my cough, let alone take care of me when I’m in serious need.
I agree with everything Andy said. Also, I don’t know if there really has to be too much time invested to learn new things. There are enough well written books, blog posts, etc to get you up and running pretty quickly on new technologies.
Currently reading “The Passionate Programmer” by Chad Fowler. My favorite line in the book so far…
“You don’t win a race by setting out not to lose.”
What if I’ve tried it out a little bit, recognize its strengths and weaknesses, and I just don’t feel comfortable using it? Does that mean I’m doing something wrong?
I know people have their preferences and what they’re good at. I don’t think that’s being irresponsible. Plus, Ruby can’t do everything that .NET can (e.g. thick client apps). Maybe there’s something else out there that makes you more productive.
I think my point is if there is something out there that might make me that much more productive, I’m almost obligated as a professional developer to really consider it, regardless of my preferences or experience.