I got a programming job offer from a really good, medium-sized, cutting-edge finance firm today. They don't develop software for sale but their internal systems were complex, distributed, and real-time; they paid a lot of attention to algorithms, systems and low-level knowledge, and coding, a lot like Google. More on that later. I mostly want to share my job search experience and point out some lessons I learned and tips and pitfalls for people like me. With faith and a bit of persistence, you can do it!
I graduated in June with a CS degree from a good state university on the west coast. Because of the economic environment and the fact that I need an H1B visa, I knew that things would be very tough. I had a high GPA and two successful internship experiences, but new grads just don't compete all that well, I thought.
I started looking for jobs in April. The company that I worked for during the last internship decided not to sponsor H1Bs and subsequently not offer me a full-time position during OPT, which was a big blow. I went on sites like Monster, Dice, CareerBuilder, etc. and browsed thousands of jobs. A lot of them necessarily wouldn't work because they required citizenship, gc, or experience. Some say that the requirement of 2-3 years of experience could be ignored if you present yourself really well or go through referrals, but I haven't had any luck. I talked to a pretty well-connected professor but all he could give me was job fairs and postings on the school site.
I applied for pretty much any jobs that didn't deny the possibility of H1B sponsorship, didn't look like they were looking for real experienced people or an array of technologies I don't know (I applied to some that required only 1-2 years of experience), and that didn't use technologies I have strong objections to professionally (PHP for example). I COULD be more non-discriminatory, but the most jobs I could apply to in one day was 3-4 (I semi-customized resumes/cover letters to target the jobs) and mediocre applications couldn't cut it nowadays. By the way, I think it's important to put as many buzzwords on your resume as you can without being called fake by a developer, because HR aren't technical, they can only screen based on text. You want to get through the first obstacle first. On the other hand, a job requiring too many buzzwords is probably a red flag for a new grad.
My first real thing came from a large medical software company in the Midwest. They are famous for paying a lot of attention to grades and hiring quite a few H1Bs, so it was a good shot. After a simple phone interview and a long written test that lacks in algorithmic content but heavy in measuring raw coding, I was flown there. I probably made the mistake of assuming I pretty much had the job, since a lot of people online commented that the written test was the toughest and their on-site didn't have much technical content. During the interview with a developer to talk about a project and answer behavioral questions (really dumb ones), I talked too much, was too eager to show my qualifications, and didn't notice his reactions. In hindsight he probably showed signs of disapproval. LESSON: pay attention to the interviewer's needs and focus on answering the questions; don't go on too much detail about anything. Not enough detail is better than being annoying.
Later with the HR woman, I asked a stupid question about stocks without knowing that you have to PAY for them, with stock options. They have Stock Appreciation Rights where they just give them to you. I struggled for a while before finally understanding what she meant. However, benefits questions can only be neutral for your impression on them, if not make you look greedy. LESSON: don't talk about benefits until receiving an offer. Secondly, she asked me what I liked least about their company. I was caught off-guard, the only thing I had in mind was I didn't like their buildings (too colorful, too geeky and immature). But that might have been offensive, so...I mumbled that I was worried how I'd be able to handle their “internship” program on my own. (It is where they put me on a 50% support role in the first 6 months.) She explained that I wouldn't be on my own – I'll have the support of experienced teams of support people. My answer was definitely bad though as it revealed my weakness and unwillingness to perform a job function. LESSON: think of answers to negative questions beforehand, even silly answers are better than improvised ones (I don't like food XX at your cafeteria, for example).
In the end were several written tests on brain teasers, basic math, and logic. I was a bit distracted at the time and thinking about my trip home a bit, but I think I did okay being a good test-taker and knowing the stuff. But it did remind me that I should be more focused and ready to have long interviews in the future.
I got rejected the following week, much to my surprise at the time. But the shock made me realize my problems and be prepared for next time. I was really glad I wouldn't have to use dinosaur technologies, too.
Between their code test and the on-site, I got an on-site interview with a San Diego Web startup. My excitement lasted less than an hour when I found out they had a terrible reputation of being spammers. They don't sponsor H1Bs either which makes my decision not to go easier. LESSON: research the companies briefly (at least before phone interviews), google them, save your time.
A couple other potential companies were a decent travel protection agency in San Diego (coincident?), a scientific software firm in the Midwest, and an automotive software firm in Texas. The first gave a simple resume-checking phone interview that I cleared, but I couldn't proceed because they didn't sponsor H1Bs. The second one had me code an algorithm while on the phone, which was too nerve-wrecking for me (and bad luck too). I flunked that last time I interviewed with Microsoft. LESSON: don't blame yourself too much, there are other companies that don't have this wacky practice. The Texas one didn't require a bachelor's which disqualifies H1Bs. I should have read the job description carefully. But, this is important, don't give up because of a few failures. It has more to do with them, their needs, and how they interview than with your abilities.
I'm still surprised that I got into this finance company, because they have the seemingly highest requirements. They posted on a specialty job board belonging to a software blog. Lack of any buzzwords indeed (only mentioned Java and C++), but they stressed things sounding like Google (see beginning) and their people (some PHDs, some really famous like a maintainer of NetBSD and a co-inventor of JSP) are among the best. But they do stress a variety of backgrounds and international aspects, so I may have impressed them with my CS knowledge and general likeability. I didn't do perfect on the algorithm questions – I stumbled and couldn't see that I could use binary search, but saw it immediately upon hints; and same with exploiting floating-point representation, I didn't even come up with the whole solution but apparently he was happy enough. All aspects of CS have been covered in two on-site interviews with seven people, so take out your operating system and algo/DS books. Also study up on their primary language and memorize some less-used features. Those get asked during interviews. This article helped a lot for Google-like jobs: http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
A few other interview tips: don't be afraid to speak your mind or ask questions; it's okay to say or whiteboard something you aren't sure about – it might be a good enough solution, and definitely better than silence. They usually ask you anyway after a few minutes. Don't assume interviewers are not happy about your performance. I guessed it wrong twice. If they are men they often don't show much approval. Read Programming Interviews Exposed to get used to interview questions. It uses C but it's good for C++ which is often expected of developers, and the C-style functions are typical of interview solutions.
Lastly, looking back, the companies that have shown an interest in me are either looking for entry-level or junior people, or don't care much about experience and definitely don't require a lot of technologies. They tend to like CS knowledge and general problem-solving abilities, and tend to hire more than one over a period of time or constantly. Jobs that don't mention the company at all or are looking to fill only one opening are bad shots – they just want someone who can get up to speed quick, usually experienced people. Recruiters aren't much use either because they don't have H1B jobs, or permanent jobs for that matter. The best strategy may be to use a variety of sites (school/career center job boards, internet sites, specialty software sites, etc.). Then when you see a job that matches desired qualities for grads, spend more time on the application.
Generally it takes at least 3 months to find a job, and two people I know took 6. So, keep trying, and good luck!