views:

3955

answers:

18

Note: I asked this question in early 2009. A couple of months later, I found a great job. I've previously updated this question with some tips for whoever ends up in a similar situation, and now cleaned it up a little for the benefit of the fresh batch of graduates.


Original post:

In my early 20s I abandoned a great C++ development career path in a major company to go to graduate school and get a research masters (3 years). I did another year in industrial research, and then moved to the US to attend graduate school again, getting another masters and a Ph.D in software engineering from a top school (another 6 years down the drain). I was coding the whole way throughout my degrees (core Java and Eclipse plug-ins) and working on research related to software engineering (usability of APIs).

I ended up graduating the year of the recession, with a son on the way and the prospects of no healthcare. Academic jobs and industrial research jobs are quite scarce. Initially, I was naive, thinking that with my background, I could easily find a coding job. Big mistake. It turns out that I'm in a complicated position.

Entry level positions are usually offered to college undergraduates. I attended my school's career fairs, but you could immediately see signs of Ph.D. aversion and overqualification issues. Some of the recruiters I spoke with explicitly told me that they wanted 20 year olds with clean slates, and some were looking for interns since they are in various forms of hiring freezes.

I managed to get a couple of interviews from these career fairs and through recruiters. However, since I've been out of school for a long time and programming primarily in Java, I am also no longer proficient in C/C++ and the usual range of college-level interview questions that everyone uses. I had no problems with this when I was 19 and interviewing for my first job since a lot of what you do in C is manipulate pointers and I was coding C++ for fun and for school. Later I was routinely doing pointer manipulation on the job, and during my first masters taught college courses with data structures and C++. But even though I remember many properties of C++ well, it's been close to ten years since I regularly used C++ and pointers. As a Java developer I rarely had to work at this level, but experience in OOD and in writing good maintainable code is meaningless for C++ interviews. Reading books as a refresh and looking at sample code did not do the trick.

I also looked at mid-to-senior level Java positions, but most of them focused on J2EE APIs rather than on core Java and required a certain number of years in industrial positions. Coding research tools and prior C++ experience doesn't count.

So that sends me back to entry-level jobs that are posted through job-boards, and these are not common (mostly they are Monster junk), and small companies are even less likely to answer a Ph.D. compared to the giants who participate in top-10 career fairs. Even worse, in many companies initial screening is done by HR folks who really don't want to deal with anything anomalous like a Ph.D.

Any tips on how I should approach this intractable position? For example, what should I write in cover letters?

Note that while immigration is not an issue for me, I cannot go freelance as I need the benefits (and in particular group health insurance). During my studies I had no time to contribute to open-source projects or maintain a popular blog, so even if I invested in that now there would be no immediate benefit.


Updates:

In the two months after posting this I received several offers to work as a core Java developer in the financial industry and accepted one from a firm where I am working to this day. For those who find themselves in similar situations, here are my tips:

  • Give up on trying to find an entry level positions. You can't undo time.

  • Accept the fact that there is Ph.D. discrimination in the job market (some might say rightfully so). It is legal to discriminate based on education. No point fighting it.

  • The most important tip is to focus on the language you are comfortable with. The sad truth about programming in a particular language is that it is not like riding a bike. If you haven't used a language in the last few years, and can't actually apply it routinely (not just as a refresher) before you start your search, it is going to be very difficult to do well in an interview. Now that I'm interviewing others, I routinely see it in folks with a mixed C++/Java background. We maintain "a shadow" of the old language but end up with a weird mix that makes it hard to interview on either. Entry-level folks are at an advantage here since they usually have one language. Memory can help you do great in a screening interview, but without recent day-to-day experience, code tests will be difficult.

  • Despite the supposed relation, core Java programming and J2EE programming are two different things with different skillsets. If you come from academia, you likely have very little J2EE experience and may find it hard to get accepted for a J2EE job. J2EE jobs seem to have a larger list of acronyms in their requirements. In addition, from interviewing J2EE developers it seems that for many there is a focus on mastering specific APIs and architectures, whereas core Java development tends to be secondary. In the same way that I can no longer manipulate pointers well, a J2EE developer may have difficulties doing low level Java manipulation. This puts you at a relative advantage in competing for core Java jobs!

  • If you are able to work for startups (in terms of family life and stability) or migrate to startup-rich areas such as the west coast, you can find many exciting opportunities where advanced degrees are a benefit. I've since been approached by several startups, although I had to decline.

  • Work through a recruiter if possible. They have direct contacts with the hiring parties, allowing you to "stand out". It is better to get a clear yes/no confirmation from a recruiter on whether a company might be interested in interviewing you, than it is to send your resume and hope that someone will ever see it. Recruiters are also a great way of bypassing HR. However, also beware of recruiters. They have a vested interest and will go to various shady practices and pressure tactics. To find a good recruiter, talk to a friend who declined a job offer he got through a recruiter. A good recruiter, to me, is measured in how they handle that.

  • Interview for the jobs that require your core strength. If you're rusty or entirely unfamiliar with a technology around which the job revolves, you're probably not a good match. Yes, you probably have the talent to master them, but most companies would want "instant gratification". I got my offers from companies that wanted core Java developer. I didn't do well on places that wanted advance C++ because I am too rusty and not up to date on recent libraries. I also didn't hear from companies that wanted lots of J2EE experience, and that's ok. Finding companies that want core Java without web is harder, but exists in specific industries (e.g., finance, defense). This requires a lot more legwork in terms of search, but these jobs do exist.

  • There are different interview styles. Some companies focus on puzzles, some companies focus on algorithms, and some companies focus on design and coding skills. I had the most success in places where the questions were the most related to the function I would have been performing. Pick companies accordingly as well.

+2  A: 

Do you have any experience with any well-known open-source projects? If so, that would be worth moving high-up your cover letter. If not, then, depending on your time-frame, it might be worth joining one.

Demonstrable contribution to a well-run open-source project shows an employer that you have valuable, "real world" experience (builds, SCC, working with others, etc).

The concern a lot of employers (in my experience) have with people from academia is that they don't have the wider life-cycle experience and that they are not used to working to tight deadlines. You could convince them otherwise if you have the right open-source experience.

dommer
Unfortunately, no. When I was in college, open-source was really just beginning to take hold (beyond UNIX/Apache). And then in school, I was working on other things and coding my own programs, didn't get to contribute directly to OSS.
Uri
+4  A: 

I can think of thee ways of dealing with this issue.

  • Find a job with a smaller company, possibly doing consulting, where ability and diversity of skills count (over just paper).
  • Write something outstanding, something that will be popular enough to get noticed by a company.
  • Work on finding and joining a network of people that are already employed in development. User group meetings, social networking, etc.
Vertis
Good points, although the second one takes time, and the first one is exactly the problem that I have...
Uri
+2  A: 

I think you should start with exactly what kind of position you are looking for, title and all. Senior Developer? Development Lead? If coding is what you want to do all day for your daily bread, that title is pretty much the top of the heap. Everything beyond that is architecture and management.

If it feels like a tedious step backward going back to the days of linked lists, design patterns, and annoying Napoleonic project managers who don't know code from their own a## (but think they do,) you may need to reassess your career path.

Dave Swersky
I would love to be an architect or team lead, and if I had been smart enough to stay at work or take the job offers I got along the way I would have been there by now. But with a few years of industrial experience close to a decade ago, nobody will let me jump.
Uri
I'm 35 and I just made the transition from "Sr. Developer" to "Application Architect." No degree whatsoever, took me 10 years to get to this point. I'd bet big bucks you'll have NO trouble making up the same ground in less than half the time. Press on ;)
Dave Swersky
The problem is finding the entry point, hence this question :)
Uri
The problem is there is no entry point, you have to jump in anywhere. Your question you can't find an entry point, the answer is that there isn't one, you have to make one.
Fire Crow
A: 

Don't tell prospective employers about your graduate work upfront if looking for something entry level. Leave that ambiguous or completely out of your resume. It's not like they're going to fire you if they find out later.

apphacker
Yea, but you have to explain where you've been for the past 6 years.My last recorded professional experience is an internship in 2004, and before that one year full time in 2003.
Uri
You might want to think about just going into teaching. :o
apphacker
I've tried that with a major company, and didn't pass the coding part since I was out of touch with my C skills... :) As for academia, schools are not hiring anymore and besides, I wanted to code too.
Uri
If you were unable to pass the coding interview, why would companies want to hire you for a coding job?
Andrei Krotkov
I was interviewing for a teaching job, but I would naturally have to relearn the C material to teach C...
Uri
Look in the back of Communications of the ACM. There are several pages of want-ads for professors. Problem is that hiring at colleges is cyclical: they recruit in early spring for positions that start in the fall. Once the hiring cycle is over, you have to wait almost a whole year.
Barry Brown
See my reply to Charles above. I've tried that earlier in the year (though I really wanted to go on coding), and the cycle is over. Neither me nor most of my fellow graduates got anywhere. With all research labs in a freeze and top names not hiring, it's been crazy.
Uri
+2  A: 

I have been tagged as the tech-interview guy at the last several companies I have been at. Almost universally, the more formal CS education the candidate has, the less likely I am to recommend them for hiring. There are two reasons for this :

1) People who are really good at something tend to be drawn to it informally. IT is one of the few areas where a non-formal person can be successful. Those that have natural aptitude and passion for the art tend to pick up the skills on their own, faster than they could have been taught them in school. You can find people in highschool who would be worthy of hiring (from a tech perspective, maybe not social/otherwise).

2) The trained people tend to be too much theory, not much practice. They show me very over-engineered solutions to simple problems (here are my 40 one function classes than I chain together to solve your problem, just because i'm following the "a class should only have one purpose" rule.

This is true in general IT, but if you are writing OS/AI/Something really complex, then the math/theory degrees start being more useful.

Admitedly, I may be prejudiced. However, I'm the person that is hiring you. You have to break through my prejudices.

The suggestions in previous posts are on the money. Get involved in a "real" open source project. Don't pick something too theoretical or esoteric. It has to be something that I could relate to a standard IT job.

This will both give you good paper experience, and teach you some practical experience. the more core to the project you can make yourself the better. (Remember if its open source, they can probably go find your checkins!)

Write a techninal blog for a month or two, posting practical answers to problems you encounter in code. This will show you can find the "real world" answer to a problem, and expose some of your coding and writing skills.

Both of these things will be fairly "google-able" which will help.

Jason Coyne
I agree with your point about graduate school prejudice. There was a good question about this on SO a while ago. The problem is that at this point I can't hide what I've learned, and I can't get the same jobs I could when I Was 19. Open source would be great, but I have a family to feed...
Uri
A: 

A few more ideas :

Get some certifications. Pick your target specialty, and get some Java/Microsoft certifications.

Consulting companies will often hire based on the results of technical test results. Get a consulting company to hire you, and work there for a few years, that will give you all the paper experience you need. Likely all the practical experience you need, and make lots of nice buisness ocntacts for you.

Just realize that you are starting at the bottom of the heap, and people with less education, who are likely younger than you are going to be telling you what to do, or getting into debates with you on the right way to do things.

If you pull out your "I learned this in school" card, you are gonna get all the stereotypes I discussed above going. Be humble, and take it as a learning tool and you will accelrate quickly.

In the end, if you learn the practical lessons, that knowledge added to your education will make you a powerhouse.

Jason Coyne
I like most of the post, I disagree with certification though. Most organizations don't care about certifications unless you don't have your bachelors. With my background, I need less paper on the wall and more years under the deck. I'm ok with starting at the bottom, I have to eat.
Uri
+6  A: 
  1. It's an unlucky time to be graduating. There's not much you can do about that.
  2. People with Ph.D.'s in Software Engineering or CS do not find appropriate jobs by going to career fairs for undergraduates, or by looking on Monster. You should be networking like crazy. You should be figuring out which companies have projects for which your dissertation topic is relevant. Then you scour your network of friends, fellow students, and collaborators to find someone who can introduce you to folks at those companies. Have you been going to conferences and giving talks? Chat up people who attend your talks and let it be know that you are graduating soon and are looking for a position. Where is your advisor? Their network is part of your network. They should be helping you meet people who might be able to hire you. Set your own open source project using all, or some of you doctoral work.
  3. If (2.) doesn't workout, bear in mind (1.) and think about taking a post-doc. It pays better then being a grad student and it might get you through our current financial embarrassment, and then you can go back to (2.)
  4. Failing (2.) and (3.) go back to the company where your worked earlier. Assuming you had a good record there, they may be willing to hire you back. A proven track record with a company is very valuable to them.
  5. Failing (2.), (3.), and (4.), you have no choice but to buck up and get your coding skills back up to scratch. It doesn't have to be 'C', Java is fine, but you really need to work on your fluency. Do contract work for a year or so.

Good luck.

Charles E. Grant
Charles, these are all good points, but things have been very bad this year, at least here on the east coast. I have friends with amazing publication records that can't get an interview, not even a postdoc. Many powerhouses canceled their searches. Unrated schools get top graduates. It's bad...
Uri
Cornell (which is top-10) had >350 apps for few positions. Every post-doc gets hammered. It's bad. I don't know anyone from my graduating class who got a job at Google whereas in the past tons of people did. It's crazy.
Uri
If you apply for a post-doc you may only have once chance in 350. If you don't apply for the post-doc you have 0 chances in 350. The fact that times are hard doesn't mean you can give up, it mean you have to pursue every reasonable lead. Again, get your advisor to help you pick some places.
Charles E. Grant
I applied for a variety of faculty jobs but that didn't pan out. I tried a few post-docs but so far nothing. My topic (the fact that people don't write or read documentation) isn't that popular (and sometimes a hearsay) in a field where the holy grail is often formal spec.
Uri
+24  A: 
tgamblin
tgambling, just a clarification: I do a lot of coding. In fact, I got stuck at school for so many years since I was coding so much. But what I code doesn't exercise the same skills that the interviews that I've done do.
Uri
Nobody ever asked me to show a good design, or debug a problem. Not even a real systems problem. It's always those usual algorithms, which I was focused on in college but not anymore.
Uri
I don't doubt it, I just think you could easily learn enough to impress the interviewers!
tgamblin
By the way, where did you end up getting hired? Last time I looked at your webpage ( a couple months ago) you seemed to be looking.I've tried IBM research, heck, I always assumed I'll go back. They're in a freeze and so are many other research organizations. Academic hiring has been bad too.
Uri
At this point I usually can't even get to the interview. I give out my resume at the career fair or mail it on craiglist, and I am sure the HR person sees the Ph.D. and automatically dumps it in the trash.
Uri
It's too bad IBM is in a freeze -- I thought about going back there, too, and I really liked my group. I ended up at LLNL, doing a postdoc with a committee member (scalable performance tools for things like Sequoia). I'm hoping to defend in May and start ASAP.
tgamblin
Government hiring has been good, it seems (stimulus anticipation?). I have a few friends heading to JPL. Unfortunately, I'm a permanent resident, not a US Citizen so all that is blocked for me. Congrats!
Uri
IBM has been great for me (both in Haifa and in Cambridge) and I really enjoyed what I did there (and you get to code a lot!), but they've been relatively frozen.
Uri
The NNSA labs *do* hire foreign nationals for postdocs, but it's hard to convert to full-time. Look at the Office of Science labs (Argonne, Oak Ridge, LBNL) because they hire plenty of non-citizens, and you might actually be able to use their machines.
tgamblin
Great comment tgamblin "Stop perpetuating the nasty stereotypes...", "Sell yourself better" my sentiments exactly
Fire Crow
Good answer! +1 from me
the_drow
+2  A: 

I think you just have to practice the basic stuff that they might ask you in the interviews. If you do that for a few weeks, refresh your C++, coding data structures and practice published job interview questions then you should be fine.

Finally a sensible and practical answer :) I've actually practiced for my last interview, but I tried to focus on learning Linux stuff I wasn't familiar with, I should have just done down-and-dirty C. Hindsight is 20/20.
Uri
Being sensible can keep you broke. Go out and build a career.
Fire Crow
+1  A: 

Let me tell you something that was very hard for me to hear and has made all the difference in my job search:

you don't know what your talking about

I mean that in the kindest of ways. Your better off than you think because what you think is not true. You don't know what people will/wont wont in a job search, because every company is different, don't prejudge yourself.

you can speculate and as a highly educated person argue well thought out reasons for why you can't find a job to yourself. But, realistically, it's your responsability to represent your value to companies, regardless of your situation.

Go out and put your Ph.D to work regardless of your experience, the economy, or whatever else. It will take alot of effort to get over the innertia of renetering the job market but it's worth it.

Fire Crow
I'm not asking for a pity party, and I don't mean to be snappy, but this does sound a little like those general advice people give on a show like the view. I have a week-old baby that I need to feed and get insurance for, and there are more entry-level jobs than PhD level jobs around.
Uri
There are also more entry level applicants than PhD's. There's a reason why this is general sounding advice, it's true for a lot of people. here's more general advice: read "What Color Is Your Parachute" and like everything else something I ignored for a long time before I read it.
Fire Crow
btw I just sent out 60 applications over 4 weeks and got 1 job, and it's well paying with benefits for what I'm looking for. Hope that lends some credibility to my job hunt advice.
Fire Crow
+1  A: 

From my experience interviewing a lot of candidates with varying levels of education from no degree up through PhD, the thing I am looking for the most is the ability to work through a problem and come up with a solution using all the resources at hand. When we ask a candidate to code an algorithm during an interview we are not looking for them to have it memorized and write it out on the first try, we are looking for someone who can start breaking down the problem and then deal with the edge cases. The worst answer to a question is "I don't know"...The better answer is "I haven't worked with that for a while, but this is how I would come up with a solution".

Mark Goddard
I've tried that strategy. The problem is that a lot of these companies are interviewing people straight out of college who just did their intro-level courses. When you're a PhD and can't yank these things immediately, explaining that you've been doing complex class hierarchies or database work doesn't help. I have not used a pointer for day-to-day stuff in a long time. It has an impact and it's not easy to relearn.
Uri
If the company you are interviewing for has no use/interest in the fact that you have an advanced degree, then they won't think you are a fit for their position. You should definitely sell your ability to analyze and solve complex problems. In my experience, those skills are a lot harder to find.
Mark Goddard
The problem is that a lot of companies equate problem solver with being able to solve small-scale textbook questions rather than presenting real world problems. I have had very few interviews where I was asked real engineering questions.
Uri
+6  A: 

Dude...if you have a PhD and claim to have been able to code all those algorithms in your early college career then there is no excuse for you to not be able to remember your C coding with barely a day's effort. Stop whining and making excuses for yourself. There's no pity party for you here. Most people have a difficult time finding a new job. Most people haven't worked on the particular tasks they are being interviewed for in years (if ever). The difference is that most people begin studying for positions they apply for when they apply; Not after hearing back from the company. If you want a job, put in the effort it takes to find one. Finding a job is a full-time job. While there are some exceptions, your PhD gives you an enormous advantage. Maybe you are short selling yourself and that is your problem. Rather than entry level positions, you should be looking for senior level positions. I've never worked at a company that has hired a PhD at an entry level position. They always come in at a more senior positon. If I had a PhD willing to come at entry level I'd be wondering what's wrong with them? Rather than having an attitude that you lack too many skills, you should have an attitude that you have skills that others will never have, because you do. Otherwise, why do you have a PhD? People pick up on your confidence level. If you don't have confidence in yourself then how are they supposed to have confidence enough to hire you?

Dunk
Dunk, there's a mental mode where you're doing those low-level things and you do lose it after college and after not working any more with C/C++. Reviewing it doesn't help that much. I dislike the notion that I just went to the job and then realized I had to practice.
Uri
And I'm not asking for a pity party. I am unfortunately aware of the fact that there are very few jobs out there that want to use PhDs, and a lot more jobs that want to use programmers. But as someone who was in school, I don't have 6+ years of industry experience, and I can't find jobs that can use my 3 years that are entry-level equivalent.
Uri
IS it ideal? Of course not. Do I wish I had graduated on a different year? Of course. One that had academic and research jobs? Sure. But I have a week-old baby to feed even if it means dumping my career into the toilet and going back to entry-level.
Uri
"lose it after college....reviewing doesn't help much". I graduated 16 years ago. I have had to use only very limited calculus since then (if at all). On my current project we needed to perform some computer vision type processing. Since no one had experience in this area, I volunteered. This required me to have to relearn a whole lot of calculus, learn DSP programming and computer vision, all in a few weeks. My nose was buried in books during most of that time. I got it working. And you....
Dunk
who has (or is getting) a PhD is complaining that pointers are hard? All I read are excuses. Like the Nike commercials say, "Just Do It". Stop with the excuses. You don't know how lucky you are to have that PhD and you think it is a black mark on you. If you aren't getting responses to your resume it is probably because your resume sucks, not your experience. If you aren't getting job offers it is because they are picking up on your negative attitude. To get a PhD requires a tremendous.....
Dunk
ability to learn. So go do what you spent your years learning how to do. Stop making excuses.
Dunk
Uri, your negative attitude toward the whole job search (i.e. you don't really seem to want those jobs) could in fact be part of the problem. You are saying that you're dumping your career into the toilet by applying to these jobs. I think two things happen as a result of this attitude: ...
... (1) It stops you from preparing properly. It seems like even after having trouble answering questions about pointers etc. you are still not brushing up on it. (2) It makes the interviewers uncomfortable with you. They sense that here is someone who doesn't really want the job.
Imagine someone told you to go on a date with that one girl you think is really ugly. You do it, but I think there's no way you'll end up having a great romantic date together, because you didn't like her in the first place. It will be awkward. It's this psychological barrier that makes your job search hard. Try to find out what you really want. Don't go on a date with someone you don't like. Or try changing your attitude toward it.
Count me in on not understanding how a Ph.D can't go spend a day studying at the library and remind themselves how half a dozen data structures are implemented. I know that they don't give those out to people who don't know how to study and learn things, much less things they already knew.
mquander
Slam dunk post!
Alex Baranosky
It does really boggle me the whole attitude that you can't relearn a couple data structures. What gives man?
Alex Baranosky
+6  A: 

It's a bit late, since you are already graduating, but taking an undergrad algorithms or systems course would have helped. I pushed down my "but I am a grad student!" pride and took the Systems class (15-213), even though I took an equivalent in my undergrad, much like you did. It's been a blessing -- apparently the most common screening question during this interview season is "write strcmp or strcat in C." (but I am a systems/databases guy, your experience may be different).

Since you don't have time for that sort of thing -- get on the course websites, download the posted slides, and go through them. You already know this stuff, you just need a refresher.

In terms of getting the job -- the resume is critical. I took the liberty of checking yours out on your website. The first thing you list is work experience -- that's good. But it ends in 2004 -- that's bad. Can't change the facts, so change the appearance. The first thing on your resume should be a summary. Something along the lines of "Software Engineer with 11 years of experience. Expert in Java/J2EE and the Eclipse development. Extensive experience in both industry and academia."

Your software development skills section is a bit soft -- it lists too many things you are probably not an expert in (Pascal?), thereby casting the things you probably do know well as being just so much alphabet soup. Get rid of the cruft. Focus on the stuff you are great at, and show it. Almost everyone says they know Java and Eclipse. Unlike most other people, you are probably a veritable Java and Eclipse GURU. "Development of eclipse plugins" doesn't quite carry that message.

The same kind of critique can be applied to the other sections -- you are severely underselling yourself, and this is not the market to do that in. Don't just say "several projects" -- briefly describe them in such a way that makes a programmer who is reviewing your resume say, "I want to find out more about that." You need to make yourself look like an absolute rock star.

Finally, as others have suggested, this is all about networking. Develop your LinkedIn profile, make sure your friends and acquaintances and former colleagues know you are available.

SquareCog
@SquareCog: I value the resume feedback. I agree that I undersell myself, and I am shooting myself in the leg by not doing the overselling. I just see so many resumes that do that and it makes me uncomfortable. The problem of a programmer personality.
Uri
@SquareCog: As for a refresher course, it's not as much an issue of that since I just taught a course on algorithms in October, and still could fumble algorithm questions in interviews. For example, I have never ever had a practical need for dynamic programming, so I always feel I mess that at interviews.
Uri
Uri, you can't oversell by stating what you actually did in a manner that makes someone want to discuss it. I agree that you shouldn't say words I used above like 'guru' and 'rockstar', in the actual resume. But there is a large range between "worked on several projects" and "revolutionized the field through my god-like skills" :-).
SquareCog
+1 for the resume review
Alex Baranosky
+4  A: 

The PhD sometimes can be a problem for simple programming jobs. Even though you are screaming at your prospective employer, saying "yes I've done all the crazy stuff during the PhD, but now just want a job to code to feed my family", they may not hire you not so much of over-qualification, but rather over-thinking. For basic developer jobs, usually employers look for someone that codes like a robot, and not having any academic questions of whether we should use this or that design for the application etc.

Having been to that exact situation myself - trying to get a plain ol' developer position but got rejected because I have a PhD, I felt really-really bad (and constantly asking the question: shouldn't the PhD provide me with all the opportunities?). But I kept searching and found something more suited to my PhD skills, and more intellectually rewarding.

That is both the curse and the advantage of the PhD; it opens you the doors for higher quality jobs, but given not the state of economy, but the state of society - how fast things change and similarly how software comes and goes - companies want the 20 year-olds to code quick and turn out an app with a 6-month lifetime.

But still as other people mentioned in their responses, there are places both in private and government sector that invest in long-term budgeted and well researched software projects. So you should be looking for a place like that, but it takes time; It took 6-8 months for me, almost 10 phones interviews and 3 on-site.

And most important get your ego up. I completely understand how you feel, 6-8 years in graduate school under constant stress torn your ego into to pieces. But once you get through that - let's say - psychological training, you can stand any stressful deadline, juggle many things in your head from software design to implementation, think more broadly etc. These are qualities which none of the 20-year old developers have. Many employers look for those traits, and again get your ego up, think that after 8 years of graduate school you went through things that few people could stand, and get out there and snatch that job.

But I'm still having trouble see why a PhD would want to aim for simple programming jobes in the first place.
BobbyShaftoe
+1  A: 

Have you talked to anyone at CMU, particularly your dissertation adviser? I don't know of any computer science PhD students in any department having trouble finding a job. I've just never heard of it. I don't really know of any masters students around here having trouble. Here is my question, why are you trying to get entry level programming jobs when you have completed a PhD? Have you looked at any PostDoc stuff. Google and many other big companies (IBM etc) are still recruiting PhDs (though I think Google is really not putting out as much research as they should be given the amount of PhDs they have).

If you really want these kinds of entry level programming jobs, I don't know why a PhD would hurt you. You could downplay it on your cv. Honestly, there are many people with significantly less experience as you that are getting pretty lucrative jobs so I do wonder how you are in this situation. Nevertheless, WHY are you trying to get entry level jobs with a PhD?

Please talk to your faculty. I find it hard to believe that CMUs is letting their PhDs go out into the wild without things work.

BobbyShaftoe
@BobbyShaftoe: I'm quite surprised your CS people don't have problems finding jobs. Things here at CMU have been pretty awful, and a lot of brilliant people are going to engineering rather than research. The academic well have dried up - schools ranked #40 get 400 applications for single academic positions. Powerhouses only hire a few people. Places like IBM are essentially in a freeze.
Uri
@BobbyShaftoe: I know a few people that did the whole Google process, passed, and still didn't get an offer, so Google has some slowdown. IBM Research is not recruiting at all and has a handful of postdocs, etc. It seems that in this economy, research gets shut down first.
Uri
Honestly, I haven't seen any slowdown. I've seen universities get funding gets but there are still academic positions open. Are you trying to stay in PA? You may need to look at some land grant schools and other public universities
BobbyShaftoe
@Uri - I just did a quick check and there are 2,618 accredited universities in the US. They all don't have Computer Science Departments but I'll bet many (if not most) of them do. You make it sound like #40 is bad. I just read so much negativity out of all your comments. That is your biggest reason for not finding a job, not the economy. Out of probably 500 to 1000 schools, 40 is really good and you make it sound like the bottom of the barrel. Even if you get a research job at #1000 out of 1000, that would still be great, as maybe you can help the school reach #40 by being there.
Dunk
A: 

I suggest you get yourself a copy of "Programming Interviews Exposed" [http://www.piexposed.com/] and try to understand the solutions to the problems instead of memorizing them. Once you do this, low level programming questions should no longer be a problem (most of them are similar).

I understand most of the work in the "Real world" doesn't require you to code these things, but I think employers feel a little bit more comfortable knowing that you know what goes on under the hood.

sjobe
@sjobe: I'm familiar with the book and also with the style of questions. I think that my problem is that my C/C++ is very rusty (last used in 2000) and without actually writing real code for real purposes I can't really restore my skills in it. I seem to be doing fine on Java interviews...
Uri
+3  A: 

A few suggestions, from someone who's about to be in the same position:

Go to conferences (even better if you're speaking)

This could be any type of conference, academic, industrial, or just a local Python/Java/whatever User Group thing. If there are name badges, attach "hire me" to yours. The people you're talking to will notice, and someone will probably have both be looking for someone, and think you're smart from talking to you.

If you give a talk its even better. You can probably offer to give a talk at your local Java User Group thing. People love to hear about academic research. I gave a Google Tech Talk, spoke at some companies, and some more local things. Afterwards, people were very interested in hiring me. I'm giving a SO devdays talk in London in October, and I expect it to be great job-seeking opportunity.

Call old acquaintances

Presumably you've been to a ton of conferences, and gotten a ton of business cards. Send them a "I hope you remember me, we met at X, I'm looking for a job". They probably won't, but they'll likely pretend they do and might help anyway.

LinkedIn

I'm actually shocked at how easy finding jobs via Linkedin is. I fixed up my profile a small bit, "friended" old colleagues, and joined a "Compiler Experts" group and posted an introduction. In 12 hours I had three "please send me your CV" messages.

The best part about LinkedIn is that its designed for that, so there isn't any awkwardness about contacting people out of the blue.

Recruiters

There are recruiters who specialize in placing PhD graduates. In compilers, Julia Cort seem to be the go to people. There's probably something like that in your area.

Practice

Presumably, you're worried about the algorithm portion. Its not your fault -- if you're anything like me you spent 80% of your research time engineering, 19% reading related work, and a scant 1% doing anything cool. So brush up. I plan on spending two weeks perusing topcoder, reading Skiena, Cormen and Programming Pearls, and generally practicing before applying to Google. Practice writing on paper, do them in C/C++ if that's what you need. I was recommended reading how others solved topcoder problems. Don't just look at the problems, do them. Consider it an investment.

Treat it like a research problem

Its important to read what others have said/done, to experiment and to talk to peers. The best thing you could probably have done is post this question -- I wouldn't be surprised if you don't get a couple of people asking you to apply to their companies after this.

Pretty it up

Your resume makes it look like you have a lot of experience, and are smart and good. But it might be worth making it a lot prettier. Your website is very attractive, so you probably have some idea of how important this is.

Paul Biggar
+1  A: 

If you're genuinely looking for something entry-level, why not stop including the fact that you have a Ph.D. when you apply? "Ph.D. aversion" doesn't usually mean they want 20-yr-olds with clean slates, it means they don't want to pay a Ph.D.-level salary for an entry-level position. Snag the job, then out-perform the position like crazy. This will leverage your skills into something better internally, or into a position at a similar company, and at in the meanwhile you'll (1) have an income, (2) polish up whatever low-level skills you feel are rusty, and (3) gain valuable time of "experience in the industry" for your resume.

DreadPirateShawn