Tuesday, October 21, 2008

Language Specialization

Didn't you just totally sell out? -- Obie Fernandez @ Rails Summit Latin America
Obie and I are good friends. He wasn't trying to insult me. I was talking about how much I liked my new job (at DRW Trading), and the different aspects of the job. One aspect of my job is that I spend a fair amount of my time working with Java. I do some C# and some Ruby also, but these days it's more Java than anything else. I believe Obie was genuinely curious if I felt like I sold out since I'm not doing Ruby full-time anymore.

It's an interesting question, but it comes packed with all kinds of assumptions. For the question to be valid, I would have had to trade something I truly care about for the combination of something I did and did not like. Luckily, that wasn't the case.

Obie isn't the first person to be surprised that I'm no longer working full-time with Ruby. Truthfully, I find it a bit funny that people think I would base a career move on a language. Ruby is my favorite language, but it's not the correct choice for every problem that needs to be solved. And, languages have never been my primary concern when deciding what job to take.

My first job primarily used Cold Fusion. When I joined AOL Time Warner I gave up Cold Fusion for PHP. When I joined IAG I gave up PHP for C#. And so on. As you can see, I've never been too tied to a language. I've always been most interested in learning and growing. I love jobs that help me improve my skills.

Chad Fowler talks about something similar. In the section "Don’t Put All Your Eggs in Someone Else’s Basket" of My Job Went to India, Chad says the following:
While managing an application development group, I once asked one of my employees, “What do you want to do with your career? What do you want to be?” I was terribly disppointed by his answer: “I want to be a J2EE architect.” ...

This guy wanted to build his career around a specific technology created by a specific company of which he was not an employee. What if the company goes out of business? What if it let its now-sexy technology become obsolete? Why would you want to trust a technology company with your career?
I think Chad got it right, but it's not just companies you shouldn't trust. I wouldn't base my career on any technology, whether it was produced by a company or an open source community.

I prefer jobs that allow me to learn new things. Think of it as job security -- I shouldn't ever be out-of-date when it comes to technology experience. Think of it as an investment -- everything I learn creates a broader range of experience that I can leverage for future projects or jobs. Think of it as experimenting -- by trying many different solutions I may find ways to combine them and innovate.

I've turned down several jobs that paid more or offered comfort. I've never regretted it. Your career is long and (as Chad says) you should treat it as a business. When you look at it from that perspective it obviously makes sense to spend the early years learning and deciding which is the best direction to take.

The truth is, if you focus on one technology you'll never be as good as your teammates who have more experience mixing technologies to produce the best solution.

As I told Obie, I definitely don't feel like I sold out. In fact, one of the reasons I joined DRW was because they use Java. I've never worked with Java, messaging, or the financial domain. Having experience with those 3 things will make me better. And, diversifying your experience will make you better as well.


  1. When we were at QCon SF 2007 and we were getting significantly inebriated (a pattern pleasingly repeated many times since), you made a statement that you only wanted to work on projects that were Ruby, Python, or similar - explicitly excluding Java.

    I'm glad to see the transformation in just 12 months. It seems like you're leveraging your experiences well.

    Next shout is mine! :-)

  2. Anonymous2:03 AM

    why is this entry categorized as "success"?

  3. "Java" isn't a dirty word after all! :-)

    Nice to read your comments on what matters most in a technical career and correctly point out how wrong it is to tie your colours exclusively to one language 'mast'.

  4. I couldn't agree with this blog post more. I was thinking these exact things the other day and how many people completely miss the bigger picture.

  5. I think for very talented developers Chad was right, but far to often my experience is of developers who are a jack of all tardes and master of none. This in turn leads to projects that fail because team members are writing Ruby code as if it was Java, PHP, Python. For framework developers theres a definate need to master the tool and deliver the best product you can.

  6. Just so I'm very clear:
    I think there are far too many developers who are deep in nothing. I'm not advocating being a generalist. There's a sweet spot somewhere in between. Upcoming blog post on that one.

    What I probably should have named the entry is Language Monogamy, which is just silly.

    Cheers, Jay

  7. There are more challenges than just the language. Finance has lots of challenges that will keep your mind occupied. Java, C#, Ruby, Python, C++ - whatever. I imagine you are adept at using many languages. What else? Can you coerce a team to get the job done? Can you use CEP software, can you use messaging systems. How can you put it all together to trade a pile of money? There are plenty of programming challenges that are beyond what language you use.

  8. Jay,

    Funny - I recently had to revisit Java for a Ruby project that needs asynchronous messaging.

    To distance myself from the technology, I put on my CTO/VP of Dev hat and asked what was the most appropriate solution for the task at hand.

    After looking at several options, I decided on ActiveMQ. This brings me back to Java after 2 years of being pure Ruby and Java free.

    While I can't say that I didn't flinch when looking at some of the things the Java community has done (and not done) in the last 2 years, it was refreshing to know I had other choices than what was provided by Ruby without requiring the time to learn a new language with my limited timeframe. I would have loved to learn Erlang and give RabbitMQ a shot if time had allowed.

    The point is that to be a developer and architect, it takes more than one operating system, one programming language, and one architecture to solve problems.

    Thanks for reminding us!

  9. Your friend Obie is an asshole. Everybody here think that he is kind of caveman. Most of us here are java boys and we read his article "Why Java devels are idiots" or something like that.
    You can critize a lang but not in that idiot way.

    After say that obie is an idiot I will say something good about your article.

    Architects have to address solutions using ideas, not languages, you are doing very good grabing those jobs. Learn is daily must in our careers.


Note: Only a member of this blog may post a comment.