Sunday, August 12, 2012

Advice for Ph.D. Students Seeking Industry Jobs

When I joined USC ten years ago, having followed my own Ph.D. directly with a job in academia, I naively thought a good number of my students would do the same.

But the reality of the matter is that there are few openings in academia for the large number of Ph.D.'s graduating each year from our universities. And these have become more competitive by the year.

To give you a more concrete idea, top departments may receive 200 or more applications for a single tenure track position. Consequently, young applicants for new faculty positions today are locked in an arms race that is spiraling out of control --- my colleagues and I sometimes joke when looking at applications for assistant professor positions that the presented credentials presented by many candidates would have been sufficient to get them tenure just a few years ago.

One could argue that academia has always been selective and competitive. But then, it used to be the case that there were many research labs in industry where the majority of Ph.D.'s could go if they weren't interested in academia or weren't able to find an academic job. For a number of socio-economic reasons, beginning with the late 90's and through the 2000's,  this ecosystem of industrial research has essentially collapsed. With a handful of exceptions like Microsoft Research, there are not a lot of jobs in industry today where a Ph.D.-graduate will be hired to write papers.

Life after the Ph.D. has therefore changed dramatically. A great majority of Ph.D. graduates in many EE/CS disciplines now go to work in development jobs in industry, often in areas that are quite different from the focus of their graduate studies. I have experienced this first-hand. Most of the graduated Ph.D. students from my own group at USC have gone on to software-related jobs in the networking industry.

Vivek Haldar, a Ph.D. graduate from UC Irvine who works at Google has written a nice blog post titled "what is life like for PhDs in computer science who go into industry?"  that echoes my thoughts on the subject (and motivated me to write this). He writes:

It was also around this time (early 2000’s) that the expectations of what PhDs should work on began to change. If you graduated with a PhD, the highest status job you could get was a tenure track university professorship. Indeed, most PhD programs implicitly gear graduates for that end. If you could not attain that, the next best thing to strive for was a researcher position in one of the aforementioned industrial labs. And, if you could not even land that, you would go looking for regular industry jobs with the unwashed masses. 
The problem with this picture is that there are 10 PhD graduates for every tenure-track position. And, while I don’t have figures, the industrial labs don’t hire at a much faster rate either. And that left regular industry jobs as the only viable option for the vast majority of PhDs. My guess is that the recruitment engines of most major tech companies also wised up to this fact, and started actively pitching to not just bachelors and Masters graduates, but PhDs as well. The new crop of web companies, with Google at the forefront, also started projecting the image that the work being done there and new and cool and challenging and important enough to keep PhDs engaged. Also, the pay was pretty good. When you saw that year after year a significant fraction of the outgoing PhD graduates from your CS department were happily ensconced in regular industrial jobs, option number 3 began rapidly catching up with the other options.

Over the years, I've kept in close touch with the alumni from my group, probing them on what they found helped them get jobs and do well in industry. Besides this, having myself worked with and consulted for industry partners at many places, I have observed what they look for in their employees.

It boils down to two pieces of advice that I convey to my own students:

First, they must be able to program well. This applies broadly to many EE/CS disciplines where the primary end-product is software, and even to many hardware-related disciplines where the design and testing process is done entirely in software (of course, in the latter case, additional hardware-related skills may be required). In particular, it's not enough to be good at algorithm design at the level of psuedocode. Besides what they have learned in introductory programming classes, and the ability to program in environments geared for scientific experiments (such as MATLAB), they should be familiar with state-of-the-art  programming languages, tools, and practices. It is very useful for them to do significant hands-on software projects and industry internships during their Ph.D to gain significant experience in this direction.

As Vivek Haldar puts it:
You must be a great coder. That is a minimum prerequisite. During one interview, I asked a candidate (a recent PhD graduate) to give me some pseudo-code for the solution he had just described, and he went “oh well, if you must make me code…” That pretty much made me go “no hire.” What did you think the job involved?
Where does this advice leave students with a more mathematical bent, those who are primarily interested in proving theorems, whose dissertations don't require the building and testing of any software artifact beyond some MATLAB code? Not much worse off. Complementing their strong theoretical abilities with practical coding skills will not harm them, even if they do plan to pursue a research career.

Second, they must be able to communicate well in diverse settings. They must learn to communicate their ideas effectively, not only in a deep and rigorous manner as they must when writing for and giving talks to a technical audience of researchers and faculty in their own field, but also in an accessible and engaging manner to a broader audience. In industry, they will need to be articulate in contributing ideas in informal brainstorming sessions and meetings with their colleagues, as well as in formal presentations and reports, when they need to convince managers and clients of the merits of their proposals and solutions. In an industry setting, unlike in academia, they will need to be able to communicate with people from diverse backgrounds. Towards this end, while doing a Ph.D., they should practice giving talks to people outside their immediate field, and writing for a broader audience.

This second piece of advice also works well for Ph.D. students who don't go on to industry positions. Even at academic interviews one is often talking to smart people who are not in one's own area of expertise. And whether it is writing grant proposals or talking to students, being able to communicate coherently and persuasively with diverse audiences is an essential career skill for academics as well.

In his post, Haldar points out that besides opportunities to hone their communication skills, a significant way in which a Ph.D. benefits someone in preparing them for a career is by giving them an ability to work on "ambiguous and ill-specified problems." I agree wholeheartedly.

A few months ago, I had lunch with some of my former students working in industry in the bay area. After our usual banter, the talk turned to this very topic. I asked them if they felt doing a Ph.D. had been worthwhile, given that they were now working in industry.

They unanimously said it had been worth it. Certainly, there is a spiritual satisfaction obtained from growing substantially in one's learning and from having contributed something new to humankind's collective knowledge. But several of them told me that they felt they also had a practical advantage over many non-Ph.D. colleagues at work. Their Ph.D. training gave them the ability to tackle new problems not only using what they already knew, but also by seeking and reading up on related work in the literature and evaluating different solution approaches to find one that is effective.