Learning Is More Important Than Knowing

Apr 18, 2012

Although DuckDuckGo's success is based more on ideology than technology, you'd have to be a pretty arrogant technologist to not appreciate and be impressed with what this small team (for a long time, 1 person) has accomplished. And while DuckDuckGo teaches us a number of valuable lessons (about business, and privacy), to me, the most important, is that good programmers should be measured by what they can learn, not what they already know.

Gabriel Weinberg, DuckDuckGo's creator, has been wonderfully transparent about his love-child. One theme which has come up a few times is his lack of experience with certain tools. He had never used memcachd or nginx with FastCGI and setting up RAID0 on EC2 ephemeral disks was a slight struggle.

Talking of their switch to python, Reddit co-founders pointed out that they had yet to hire an employee who knew python. That might say a lot about python, but I think it says more about the type of people working at Reddit and the type of people they are hiring.

However, favoring learning over knowing seems to be in conflict with how a lot (most?) companies hire. Teams are often looking for "rockstar Rails coder" or "ninja Java developers". Unless you are specifically looking for people to contribute to Rails source, or hack the JVM, I believe that such specific requirements not only betray a company's lack of understanding on hiring programmers, but also a lack of understanding on actual programming. This is worrisome when you consider that many such job postings are put together by programmers.

You should mention what technologies you are using (because listing WCF or Java will save me the hassle of applying, and you the hassle of rejecting me), but don't list specific tools, languges and frameworks as requirements. Good developers who know Rails can learn Django or Node. Going between Oracle, SQL Server, MySQL and Postgres is all pretty trivial. The only exception to this is if you are expecting people to dig deep into the guts of the tools (like, "hey, let's make MySQL faster when searching against an indexed boolean"), or you are using somewhat esoteric tools (say, Erlang...that's right, I said it.)

I remember being asked quite eagerly, during a pre-interview, if I knew a specific view engine (like erb, or haml...). Seriously, a view engine!?!? A shitty programmer can learn a new view engine in 10 minutes. Or a more common one that always gets to me is listing some specific version control software. Or a specific library that solves a trivial problem (I see this all the time from the .NET world with DI and mocking frameworks)

Good programmers not only learn, but they want to learn. They often know enough about a technology so that they have a good feel for what problems it might solve; and only invest time truly learning it when it's needed.

Sometimes I wonder if Gabriel would have been able to get a job working at Bing or Google.