Marketing yourself as a programmer

A number of readers asked questions about programming careers, both about getting into game-development as well as staying employed in software engineering. I started writing a comment to JM about age-discrimination but it turned into this blog post about getting a great software engineering job.
JM asked: How did you manage to stay in this business for 22 years? I’ve been coding for 30 years now and when I try to find another job that inspires me I am either told to be overqualified or I am missing the basic prerequisites for Java when having a certificate for Hibernate.
Age discrimination is a very real problem for technical folks. Some hiring managers prefer younger candidates who they can bring aboard for lower wages, even though they might not be as productive as more experienced (and hence older) candidates. Regardless of any legal issues related to age discrimination, one reason for this behavior is many hiring managers don’t know how to evaluate whether any given programmer is going to be an asset, so they’ll use an easier determinant like “cheap”.
Good companies need you
There are actually plenty of good companies around who are absolutely desperate for programmers as there is a demographic shortage. Stanford University professors have talked about how enrollment in Computer Science (CS) fell after the 2000 “dot bomb” crash and has only recently started growing, and in fact skyrocketing. So there’s a ten year gap where fewer CS graduates were joining the workforce, while at the same time our society is becoming ever more dependent upon teams of software engineers.
Add in a further trend that many recent graduates see better opportunities in working for themselves, a trend that startup incubators like YCombinator and Tech Stars have popularized, which means that the most ambitious programmers are “off the market”.
Finally, with tech giants like Google, Amazon, Microsoft, Facebook and others vacuuming up talent by paying top-dollar, we’ve got a perfect storm for companies who want to find folks.
In the last company I worked at, it was so difficult to find good web developers that we stole someone from our operations automation efforts (even though we desperately needed someone there too), as well as relocating other folks from Florida and Eastern Washington.
So you’re probably asking — if all this is true, why can’t I use my expertise get a job?
Based on my experiences I believe there are several reasons programmers — of any experience level — have a hard time getting a job.
Not applying to the right companies
If you want a great programming job, join a business where the development team is the star of the company. Companies that create software products or develop software services are where you want to be. Why? Because they’re responsible for making money, and will be better treated as a result.
If you work at a company where you’re building internal tools or services, your team is a cost center, and there is an entirely different set of goals.
Joel Spoelsky talks all about this, but the guy is so damned prolific I can’t find the article to refer you to; it’s somewhere here in these 1108 articles: Historical Archive.
Not learning new skills
The computer industry is characterized by change. I know vast amounts about DOS, DBase III+, Real Mode, EMS, XMS, 68000/65816/8086/80386 assembly, FORTRAN, and all sorts of other useless cruft that I’ll probably never use again.
For over 10 years I’ve been primarily a Windows developer, but in the last few years I’ve learned something about Erlang, Ruby metaprogramming, Rails, Linux, vi, Racket, D and OCaml, and just recently completed my first C# project: IPC using named pipes. This is what keeps me relevant as a programmer, even though programming is only a part of what I do professionally.
When I talk to many programming candidates, it’s pretty clear they got off the learning train and became comfortable with the skills they had already acquired.
When you stop learning, you immediately become less employable. Keep learning.
I would add that this doesn’t mean you have to learn something awful. Spend some time looking at lots of technologies, then go deep on something you enjoy that you can use professionally.
Some areas that I think will continue to be in growth mode for the foreseeable future are network/server programming, web UI programming, mobile programming, operations automation (dev-ops), business intelligence, and security.
Not selling yourself
Steve Yegge, a brilliant guy who is my biggest blogging inspiration because he writes long-form blog posts (like this one, only 10x as long, and way more humorous) says that the most valuable skills programmers can develop is to market.
Ask yourself what you’re doing to sell yourself. A resume is important, obviously. Do you have a blog? Public github projects? A LinkedIn profile? Do you speak at technical conferences? Do you go to technical meetups in your city?
You can find a great job, but you’ll have to put yourself out there, and the jobs will start coming to you.
Addendum
A particularly relevant post along these lines can be found on the blog of Patrick McKenzie (patio11 from Hacker News): Don't Call Yourself A Programmer, And Other Career Advice.