I graduated in 2010, I got 3 job offers out of the 3 companies I applied to. However, none were exactly my dream job and the few companies I really wanted to work for didn't even talk to new grads. Today I can absolutely get those jobs.
My girlfriend went through the exact same evolution. It was brutal finding anything in 2010, and she just got her dream job with 2 years of work experience under her belt.
Those 2 years of work experience really open doors.
It's an enormous mistake to hold out for the 'perfect job'.
One of my roommates was a finance/econ/accounting triple major and wanted a Goldman Sachs job (not our cup of tea, but it's instructive). He didn't get that job, but saw the 'regional' banks as below his level, so he didn't take any job and brushed up his resume and applied again. Meanwhile another classmate with a less stellar but similar resume took a job at the regional bank. Two years later he switched into JPMorgan. My roommate who passed has basically been unable to get any job - even the regional bank jobs he once considered beneath him.
So don't let the frustration make you do something stupid and pass on the dumb job offers. You have to get a job right away. You can switch from that job after 6 months or 1 year or whatever, but do not make yourself unemployed. You only become less employable as your graduation date slips because it signals other employers that some have passed on you.
"You have to get a job right away." definitely isn't true or good advice for a programmer. You can learn a lot more a lot faster and add more impressive pieces to your portfolio by working on your own projects, open source, or contracting than by accepting a bad job at some dysfunctional company.
Getting a programming job at a company that uses the technologies you want to work with will seriously help you move into another role in the near future. Even if the company is crap.
It's nice that some people will care about your personal projects but A LOT of good companies won't see these in the same light as real professional experience dealing with real production, team and stake holder issues.
Also, how can anyone support themselves for months whilst they wait for the perfect job which may never come because it gets harder to find a job the longer you are unemployed?
As for contracting; to land a good contracting role (I'm talking stuff outside of rent-a-coder) is very difficult. Most companies wouldn't even consider you as a contractor unless you have several years of solid experience. I can only assume you mean the kind of 'contracting' that happens at places like rentacoder.com. If you think anyone will care about this then you are mistaken, plus, it's a waste of your time as you'll get paid peanuts and end up providing free support to the idiots that gave you the work in the first place.
If you're fresh out of education and will not be landing a role with Google (or the likes of) and you're struggling to get work at a good company then you should take the first job that comes along that works with the technology you want to specialise in.
It's also extremely difficult to build a strong portfolio working at a bad company, because bad companies by their nature rarely get anything done, and even if they do, they'll pigeonhole you into the most monotonous tasks and you'll get 0 experience making architectural decisions or working on anything outside whatever little gutter they throw you in.
On the contrary, doing your own projects or contracting (ideally with startups or small companies) will force you to learn every level of the tech-business stack, from feature planning to architecture to coding to design to deployment to launching and promotion. You can work on many projects in a short timespan, and you'll be left with numerous portfolio pieces that are all your own.
"Most companies wouldn't even consider you as a contractor unless you have several years of solid experience. I can only assume you mean the kind of 'contracting' that happens at places like rentacoder.com."
This simply isn't true. You just need to sell yourself and show that you have good ideas and get things done. I got paid $60 per hour on my first rails project with no experience whatsoever in rails. The client never asked. She just saw that I had several strong pieces of work in my portfolio (half of them personal projects), and told me to use whatever tools I thought best for the job. If you're considering rent-a-coder you're definitely doing it wrong.
Don't settle for mediocrity. Take the initiative and start building a portfolio any way you can. The sky's the limit once you have a solid body of work to point to. You can make good money contracting or you can have your pick of awesome jobs. Having experience in some crappy job isn't what matters, it's showing that you can build great software.
Most of the contracting positions available in London (where I live) are only available to experienced professionals. There's no way anyone is going to hire a nobody for £500 per day. Good luck finding much work available below this level, I used to contract myself at £200 per day but this only because I personally knew the manager on the project and I had worked with him as an engineer as an intern one year previously.
Showing you have good ideas and that you get things done means NOTHING. The other guy applying for the same job who has 6 years of experience will beat you every time. Maybe things are different where ever you are from but where I am from you don't get to work on anything that anyone cares about unless you have solid experience.
If you want to land a role at some small web dev shop where you will be stuck working on crappy rails or other nonsense things then go make your portfolio out of $60 a day "contracts" and have a great life. This does not exist in the UK and when people say 'contracting' they mean real work earning real money.
The best thing you can do is get an awesome internship then leverage that to get a good perm role somewhere else. This is exactly what I did. I didn't return to the place where I did my internship as I landed a better package elsewhere.
If you can afford to work for $60 a day and you are lucky to live in the Valley or somewhere where these roles are available, then lucky you. I prefer something a little more rigorous where I'm not a slave working on crap.
The web startups with rockstar job ads may wish they had John Carmack or Bill Gates sending them resumes but I doubt it happens much. Bill Gates doesn't need to work at a little company somewhere -- he made his own company and is now a billionaire. A skilled, motivated recent CS grad is probably a great candidate for most companies.
Contact this man.
Straight out of college, I got accepted by an outsourcing sweatshop early on, with whom I interviewed because I was bored and not necessarily because I wanted the job. I went ahead and took it anyway, thinking I'll learn do something for 6 months that I can put on my resume and move on.
During my spare time I made minor contributions to a couple of open source projects, then got an offer to hack on open-source software at Novell. I eventually turned it down to go work for a smaller company, which is where I am now, for the last 7 years.
Hell, I got an internship last year by cold-emailing someone from the HN Who's Hiring thread and asking what they were running this year. Just put yourself out there and you'll have no problem.
I also don't know rails, and I'm just now getting into web technologies, trying to decide what to really dig into (between node and rails really) . Is rails really that hot? Just starting out with rails now I feel like I'm really late to the party. I'm mostly interested in Clojure, but that's not exactly the hottest job market.
It's nice to hear that it really is that good though, It's hard to really get a feel from it living so far from any tech hubs, without many developer friends.
I once answered a job ad - on HN no less! - asking if I had ever wanted to create a programming language and saying I should contact this company to show them if I had.
Well, I was a PL researcher by the end of undergrad. So of course I sent them my research paper, my senior thesis, and my project link.
Turned out they make a mobile furniture-sale application. They've got really cool guys working on it who've done things like compilers or languages before, but when it came right down to it, they stopped calling me back when they realized I haven't done mobile development before.
<frustration>For fuck's sake, if you wanted an experienced mobile dev, ASK FOR ONE! And if you asked for a PL researcher, WHAT ELSE DID YOU EXPECT? AND WHY ARE YOU EMPLOYING COMPILER EXPERTS TO WORK ON SELLING FURNITURE?!</frustration>
It would be really nice certain companies stopped trying to make themselves sound cool or important, and just let job-seekers know what they are hiring for. Obscuring your intent, in hiring, is equivalent to wanting a bad match.
BTW, your HN email isn't visible unless you put it in the about section. You might get some more interest if you put it there with a webpage url.
And this is all I ever feel. I read dozens of job ads across the country (I look through all of them because I really want to get out and move some place new, see the world - being fresh out of college is the best time for me to do that and all) and in the process I see only two kinds of jobs for someone like me.
The ads either come across as wanting rock star geniuses that could develop in a month the entirety of the next facebook or google in their sleep, or they come off as grossly incompentant in that they don't know what they want from an employee.
When an ad lists skill sets from assembly to rails to genetic algorithms I just sigh because the company obviously doesn't know what they want, and I want to work some where that I can not only get better at my trade and create great things but also have confidence in the business not going under in a few months.
Simultaneously, the other set of job seekers want 5+ years experience for a startup and they use the rock star vocabulary, and I get turned off on that because I am not the second coming of John Carmack or Bill Gates, I wish I was, but I just am not that smart.
Compound that with the reality that I have a passion for software and as a result I only want to work on things I find interesting and useful myself (eating my own dog food) and I might consider one ad in a hundred. And I'm not even location limited!
It just seems to me like there is no middle ground, either you are a genius rock star or the employer appears clueless about what they are after in a developer. It really grinds my gears with all this job hunting shenanigans.