Most programmers I know seem to respond to job searches
by learning new programming languages. The logic there is
pretty weak. "I can't get a job with a language I know, so
why don't I see instead if I can get a job with a language
I don't know." Learning new languages is a good thing, but
there's a time and a place for everything. It's never a
matter of your skills being stale; there are still COBOL
jobs out there. If you're good at programming, and you
can't get a job, the skill to improve is not your
programming skill but your job-getting skill. If you've got
a task that requires two skills, and you have one of those
skills down solid, but you suck at the other skill, the
thing to do is not spend even more time perfecting the
skill you already have down solid.
As someone thinking about working in programming after not doing much real programming for a few years, I am interested in whether he's right or not. I am actually planning to dive into learning a new language or relearning C++ with its current set of metaprogramming features and extensive libraries.If you're interested in, say, web programming, you're probably going to have a hard time finding a job doing web programming in COBOL.. no matter how great your interviewing/job-hunting skills are.
The same goes for many other preferences regarding work, from location to the kind of company you'll be working at or people you'll be working with. If most jobs you're interested in largely have openings for people who know language X, you'll probably be better off knowing that language.
On the other hand, it's certainly a good idea to have well-rounded skills. So if you're particularly weak at people skills, or job-hunting skills, it's a good idea to work on improving those, as often being a good programmer is not enough to land the job you want.
Nah. See http://www.coboloncogs.org/ . :-)
Keep in mind, I'm 20, and I only really started working when I was 18. This all happened two years ago, and I seriously doubt they've stopped using COBOL in that time.
(Hypothetically assuming I wanted to apply to Google, Big Japanese Megacorp, and Cool Valley Startup, I'd be pitching myself in a very different way in the cover letters and resumes... why show them all the same portfolio? I mean, theoretically I'm supposed to be pretty good at this whole "Build a web page to sell stuff" thing -- if I can't build a web page to sell me, why should they hire me?)
If you don't already have a blog and social proof of value which you can quote to people, start building them. For example: you put a recommendation on your resume in the hope someone calls them, they agree to talk, and then they praise you, right? That's an awful lot of opportunities for the recommendation to not pan out well. Instead, when you ask for a recommendation, ask for a testimonial, too, which you will prominently quote in your Hire Me salesletter. And write the testimonial for them. "Hey boss, can I quote you on '$NAME_HERE is one of the best developers I've ever had the pleasure of working with. He has done things with $PROJECT that we never thought were possible. I'd hire him in a second.'?" (This presumes you have, actually, made a good impression on your boss. If not, then just write down their phone number and pray that no one calls it, because that is apparently what everyone else does.)
Networking is, obviously, another opportunity for improvement. Rather than spending time waiting for someone to call you back, it is (well past) time to start reacquainting yourself with friends and business associates (and mentioning, hey, you're on the market now) and making new friends/business associates.
Otherwise I agree with your advice.
I know that many jobs may hire by running "grep" on hundreds of resumes, but I don't think those jobs are the good ones. I think the good jobs want to hire your brain, not for any particular language, but for the overall value you can add to the company.
Working on open source projects and posting your own projects on sites like GitHub demonstrate your ability to understand architecture and write good code in any language.
This is what I'm looking for anyway, and it seems to be what Google is trying to get at with all the silly questions they ask during interviews. How good is your brain?
http://www.fireworksproject.com/pages/extraordinary_people.h...
The part I would agree with is that learning a new language != getting better at programming. When you learn a new language, you're increasing your breadth of knowledge - but most employers don't hire for breadth, they hire for depth. They want you to be good at the job they hire you for. And when you pick up a new language, you'll perform worse than on your existing languages, until you've had the practice to bring your skills up to where they were before.
Instead, spend time learning your language better. Most languages (even Python) provide different ways to accomplish the same task; try them all out, find out which is best, and most importantly, find out which is best for which tasks. Learn some libraries in depth. Write some actual code so you have something tangible on your resume - starting a project from scratching will teach you a lot that maintenance work at your employer won't, and even contributing some patches for an open-source project will teach you something new.
A big problem with many candidates is that their knowledge is very shallow: they'll claim to be an "expert JavaScript programmer", where "expert" means they can only use JQuery snippets they found on the web. And they don't even realize that their knowledge is shallow; they're completely oblivious to the depth of the subject until they meet someone who really does have deep knowledge (and even then, only rarely).
After reviewing these comments, it seems the interesting aspect of Giles Bowkett's paragraph is the emphasis on networking your way to a person with a need. It's easy to get blinded by the easy access to openings posted on job boards to the existence of non-advertised positions and enterprises you may not be familiar with. Rather than "job-getting" skill I'd call it "opportunity-finding" skills. Getting past HR can be a bear.
But there are exceptions. For instance if you don't have a programming background, learning the basics of something employable is a good idea. Also some things do become obsolete. For instance if your background is VB 5, you should update your skills to be more employable. (Actually you should have done that a few years back...)
Another exception is when a particular area is hot. If not many know a suddenly popular language or library, teaching yourself that tool can give you an edge on those jobs. Of course most jobs are maintaining something that already exists, and so don't need to cool new stuff. And more people try that strategy than there are jobs, so it may be a losing proposition to compete there. But, for instance, a lot of people learned Java back in the mid-90s to jump on a bandwagon, and it worked out for many of them.
Also it is fine to learn something for the job prospects when you have an obvious hole in your resume. For instance if you've been doing statistics professionally and you haven't learned R, you probably should. If you're a Perl web programmer and haven't learned Catalyst, it is at least worth playing with for a couple of weekends. A Java programmer is on solid ground in deciding to learn Spring better.
A special case of the obvious hole is when you need to learn something to get a certification. The whole certification treadmill is something I hate. But there is no question that it can help you, and acquiring relevant certifications is not a useless endeavor.
And a final exception is if there is a specific requirement for a job you want that you have a realistic shot at. For example I learned three languages before my Google interview. I knew that the interview would be in some combination of C++, Java and Python, and I knew none of them. So I learned the basics of all three, and made my lack of experience clear in the interviews. I was not hired for my knowledge of those languages. But without putting out that effort I couldn't have passed the interview. However this kind of situation is the rarest of them all. (This has only happened to me once.)
Then I ended up working in C++ and Flash once I was hired. Neither of which I had any prior experience with (well, I had a little Flash, mostly as a compiler target). Go figure.
It's all about bang for the buck. If you spend 100 hours learning, your programming skills and hence your ability to find a job might improve by a few percent; if you spend 100 hours on marketing yourself better, your programming skills stay the same but your chances of finding a job will improve greatly. It's like a lot of software... once the internals are good enough, it's much better to make the UI good than to keep the UI crappy while making the back end a little better.
Also, anecdotally, every good company that I've interviewed with has said that if I am the right person for the job, then they will give me the benefit of the doubt that I can pick up whatever technologies are necessary.
That said, hardcore C++ skills are in demand everywhere from audio software to robots to games to wall street to scientific research. Even "web" companies need C++, Google, OKCupid, Amazon, etc. If you're already good at it, it's a great skill to polish up.
I'm sure they've been other examples of people being hired (or not) after turning a cover letter into a dedicated web site for the employer they want - anyone remember any others?