This is all good advice. But there are two even more important things that I'd add:
• Specialize. It's way easier for an in-demand specialist to find work and also it's much easier to answer who you'd like to work for once you've got a narrower focus.
• If you're applying for a job that's posted internet, you're already behind the curve. Build a network. Make sure that you know other programmers and that they know you're looking for a job. If you know specific companies you want to work for, make an effort to meet people at those companies.
The two points interact because if you specialize, you tend to get to know the other specialists in your field. I've done a lot of audio software in C++ and did that in my last job. Even before working there I knew a bunch of the other people that did C++ audio software and one of them did an intro for me that got me the job. This wasn't even theoretical -- I actually had filled out the online job form a few weeks prior and gotten the, "This position has already been filled." mail. When I used a personal intro instead I had an interview inside of a week and they wanted to know how quickly I could start.
There is literally nothing more powerful than having someone within the business introducing you.
Your points about specialising are 100% valid and it is very good advice however I would add that people need to think carefully about what they want to specialise in as if you make the wrong choice you are stuck with a career you hate and will struggling to move out of that speciality.
It occurs to me that this may be precisely the reason why specialists command higher rates and find it easier to sell their services: Specialization is a risk. Sometimes it's a big risk. The reason why you pay extra for a specialist in $FIELD_X is that you're compensating that expert for having taken the risk of specializing in $FIELD_X.
There were NeXTSTEP programming experts in 1998. Those people sure ended up hitting the jackpot, though nobody could have predicted it at the time. I assure you that there were also AOLServer Tcl programming experts in 1998. Nobody remembers them. :] (At least, not for that.)
This line of thinking makes me wonder if the standard "be a specialist" advice is yet another example of sample bias: Because the lucky and successful specialists make money, stay in business, and eventually retire and spend their time writing articles and talks about how great it is to be a specialist, we may think specialization is a better idea than it actually is. Make sure to balance your approach by talking to some of the poor folks who specialized in Pascal programming, or Palm WebOS. Or ask an expert Flash programmer how they feel about the rise of the iPad. Keep your escape routes handy!
You can get trapped by a specialty, but there are ways to get out of that. Open source opens up a lot of doors there.
For two of my three post-college jobs I had no professional experience in the area that I was going into, but had a decent body of open source work (on projects that were being used already by my future employers) that established that I was a credible specialist.
If you're unemployed and looking for a job, it's not a huge gamble to roll the dice and try to learn a lot about an area you're interested in. Just do so realizing that you may have to repeat that process again at some point.
As a side-note, just because a specialization is seemingly on the way out doesn't mean that it's not lucrative. I remember when in college, in 1999, I was probably one of the youngest people in the world that knew COBOL. The offers that I was getting at the ripe age of 19 were $200k+ because everyone was terrified of Y2K stuff. Since then I've mostly worked as a C++ developer. While there's less new software being written in C++ today relative to a decade ago, it's still a very marketable skill precisely because the number of people that are good at it is smaller than the number of jobs available.
Be careful specializing on technologies; that's a hamster wheel of a career. Better to specialize in application domains. Lord knows where ObjC will be 10 years from now, but search engine discoverability is probably going to be important for a long time.
This has gotten my 90% of my fulltime jobs, and 100% of my contract gigs.
If you are well connected, job boards and listings become a distraction.
If you are not, there is still hope. This is a highly valuable and transferable skill (and part of the overall career-building skillset involving self-marketing and interview skills).
Being well-connected isn't just for the rich and lazy, it helps in all aspects of your career.
Specializing is a very good idea ... for some people. It does however have it's down sides. One of those is that you can end up quite restricted geographically. Ie, you specialize in industry A or technology B and want to live in city X or country Y and unfortunately those options are not compatible. People optimize for different things and I've deliberately stayed a generalist to enable me to move to wherever I want to live and have no problems finding employment.
Specialization often pays well because there aren't enough skilled practitioners of the specialty.
There are two types: legacy specialties (like COBOL and C++), and cutting edge specialties (Java in 1998, Ruby in 2005, Objective-C in 2008).
Even though the cutting edge is a lot less stable, it's by far the better investment, since the technology's lifespan is longer. Plus, generally a lot more pleasant to deal with.
> Even though the cutting edge is a lot less stable, it's by far the better investment, since the technology's lifespan is longer. Plus, generally a lot more pleasant to deal with.
I'd disagree on both counts there actually.
First, if something has already become a notable "legacy" technology then it's probably going to exist for a long while yet. There will still be people writing C++ in 20 years. I'd feel a lot less confident saying that about Node.js. When balancing the equation you have to factor in that most new technologies will never gain significant traction.
Second, there are different sorts of evolution around technologies. C++ or Java as a speciality now aren't inherently interesting, but they're disproportionately used in fields that I find interesting (information retrieval, real-time systems, signal processing, low-level programming, finance, big data, etc.). I find all of those more interesting than Rails in 2005. Much of that is personal preference, but again in older stacks the interesting things are the problem space, not the stack itself, while with newer stacks, there's more novelty value.
You don't need a network. You can just cold-call. If you find a company that you think you will fit it, you can just contact them and ask if they have positions. That's what recruiters do, except they don't know what kind of company you would fit in, so they call everyone.
You will face the exact same issues recruiters do. Gatekeepers telling you the person you are looking for is 'in a meeting' or to email them your CV and they will get back to you etc.
It takes me a minimum of 20 calls to actually speak to a person in a position to hire people and my hit rate is better than most.
You do face a two less barriers - employers don't hate talking to engineers, and you know you are a good fit for the org. Employers don't want to talk to requiters, because they are afraid they will just get a stack of un-targeted resumes, probably from job seekers who have never even heard of them.
Yes, and applying for multiple jobs is also a PITA. There's no ideal way. Targeting employers has the advantage that the manager isn't looking at a pile of 500 mostly unqualified resumes, just yours.
It's not easy. But it's obviously a reasonable way to do it, as that's what professional requiters do.
Not quite but generally with start-ups the person you need to speak to is ridiculously busy so you will simply struggle to get 5 minutes of their time.
Depends on the size, but I've found startups pretty responsive via email. I haven't asked for a job, but I'd imagine there's a good chance a real human will read it, and might remember you if your skills are relevant and they later need someone in that area.
I don't think you need to actually get a hold of the person you want to talk to on the phone. Simply initiating contact like this outside of a job posting will show that you are extremely interested.
A good start. The thing to remember is that there is absolutely no difference between looking for a job and looking for customers while running a business. You have to market your product – which, in this case, is yourself.
This kind of thing is pretty culture-specific. Here in Argentina, it matters a lot if someone can introduce you — even if it's your accountant's uncle. Also, for some reason, people don't answer email. You have to call them on the phone or talk to them in person.
• Specialize. It's way easier for an in-demand specialist to find work and also it's much easier to answer who you'd like to work for once you've got a narrower focus.
• If you're applying for a job that's posted internet, you're already behind the curve. Build a network. Make sure that you know other programmers and that they know you're looking for a job. If you know specific companies you want to work for, make an effort to meet people at those companies.
The two points interact because if you specialize, you tend to get to know the other specialists in your field. I've done a lot of audio software in C++ and did that in my last job. Even before working there I knew a bunch of the other people that did C++ audio software and one of them did an intro for me that got me the job. This wasn't even theoretical -- I actually had filled out the online job form a few weeks prior and gotten the, "This position has already been filled." mail. When I used a personal intro instead I had an interview inside of a week and they wanted to know how quickly I could start.