Yesterday, I read the section "Your Knowledge Portfolio" from The Pragmatic Programmer. The term "knowledge portfolio" isn't the clearest thing, so here's their definition: "all the facts programmers know about computing, the application domains they work in, and all their experience."
The PragProg's idea that you should invest heavily in your knowledge portfolio ties in with a talk I heard from Chad Fowler at RubyNation last weekend. One of his points is that you should decide what you want to do, and then do it. There's no permission slip or secret test one has to pass in programming. If there's a language that you'd like to be a programmer in, call yourself that and learn quickly.
I've been dabbling in Scala for the past year, and am good enough with it that I can give a great introductory talk on it, but I haven't used it on anything serious. I don't call myself a Scala developer. It's an emerging language, so where would I get experience, right?
There's often joking around my office about how I'd like to be like Marcel Molina Jr. I think I'm older than him, but he's sort of a hero, not because he's some sort of unattainable plateau of a dude, but because he's out there. He talks about what makes code beautiful and grows snazzy facial hair and has a style. And now, of course, he's a Scala developer at Twitter, which, you know, I love my job and all, but is kind of a dream job.
The killer part: I totally could have done that. (Again, not that I would. This is starting to feel like a conversation about how I of course would never leave my wife for Zooey Deschanel, but we can all appreciate that she is fantastic.) I've managed to have a small conversation with their lead developer, and know Scala pretty well. I didn't because I didn't call myself a Scala developer.
Anyway, this is a long way to the point that one should re-evaluate their knowledge portfolio regularly. Here's my executive summary for June 2009:
Balance sheet
Investment in my Scala knowledge has slowed. In order to keep up with inflation, I need to redouble my efforts here.
In terms of diversification, something necessary in a tightened economy, I continue to improve my Ruby knowledge (I'm not yet an expert, but I'm getting close), I have my Scala knowledge, and a smattering of Java and Scheme. Ruby and Scala both support functional programming pretty well, but outside of Scheme, these are all primarily object-oriented languages, and still pretty high level. I need to investigate how to diversify without taking too much time away from my current investments.
Goals for the next three months
- Read The Well-Rounded Rubyist and re-read The Pragmatic Programmer cover to cover.
- Write a web application in Scala.
- Check-in with Carrboro Creative Coworking about teaching a Scala class there.
- Use Linux as my primary platform at work for one month.
- Choose a purely-functional language to learn in the future.