After going through the 2008 recession, to see the money flourish again in 2010, we've had an interesting three years of interviewing potential graduate students. My hope is to guide potential graduate students through the admissions and interview process I've experienced at UCI.
The biggest difference between interviewing for a for profit company and a non-profit educational institution is that there is a fixed length term. Companies hire employees to produce for a few years, with at will employment. This means the person can leave at any time and the company can fire the employee at anytime. Getting a PhD involves the applicant attending school, and graduating in 5 - 6 years. This really changes the interview game because you aren't necessarily looking for someone who is productive from day one. Nor are you really looking for a specific set of technical skills because everything can change within six years. It forces you to look for fundamental character requirements and focus strictly on potential more than current skill, although current knowledge is always a bonus. Also, interviewing graduate students is also a relatively rare and recent opportunity for our lab. I don't remember interviewing any graduate students in 2008 and only a few in 2009. The UC budget cuts really limited the number of graduate students who could enroll and there wasn't enough money to commit to a new student because if a new student enrolled, current students couldn't finish their degree.
The actual process, from a prospective student's case is very much like what happens when you interview with a company. First, we take a look at your graduate application. If you look interesting on paper, we contact you and setup a Skype session. We talk with you in a very casual manner to see what you're interested in, some of your background, and a few technical questions. We also ask for a piece of code that you wrote and are particularly proud of. Systems software requires a lot of hacking skill, so we want to see what you can do. If the Skype session works well and you live in the United States, we fly you out for a few days, wine and dine grad student style, and see what topics come up. At this point, everything is pretty standard. The hard stuff is what defines "good enough" to grant admission?
A really difficult question to answer is how much technical skill should an incoming graduate student know? Do we test based on their educational background? Is the bar higher if someone has a masters? What if they don't have an undergraduate degree in computer science, but have self taught themselves everything? As an educational institution, rather than a corporate entity, the expectation is that the person can learn fast enough to get a PhD in five years. We don't need specific technologies that are useful today. We don't even need compiler background experience because you can learn the basics in six months, which is a short time compared to the time it takes to receive a PhD. By definition, a university can and should spend more time training people.
Of course, there is a lower bound on what kind of student can really accomplish a PhD. Just like you would never let a baby drive a car, someone who has never hacked a single line of code in their life could never finish a PhD. You don't want to admit a student who is so under prepared that they would never finish a PhD. It's unfair for both the student and the university.
On the flip side, there isn't an upper bound. The exceptional applicant has already written their own virtual machine, their own garbage collector, and developed their own programming language. If you have done this, by all means please join us. The bar for a normal applicant is somewhere in the middle and setting that bar is really difficult. In our evaluation of a new applicant, they have to pass the lower bar, which is much lower than a corporations. A corporation like Google wants to ensure you can be productive and make them money within six months. The graduate school timeline is two years. We know that the first two years of your graduate career, you will not be productive. You'll be learning, taking courses, and if you're lucky touch some research. If you're really lucky, you'll have a paper. The technical question is, can you learn what you need to in two years? The lowest bar, requires the following technical skills:
- Basic data structures and algorithms
- The ability or experience of developing, maintaining, and testing programs. It doesn't have to be system software.
- Some notion of software design / architecture.
- The ability articulate technical issues - eg, describe a memorable or cool bug you've had.
- Likes to hack - Probably the most important.
- Compiler or system software experience.
- Knowledge of garbage collection
- C / C++ / Assembler
It's a pretty short list and a low bar. Some may even say how could such people even possibly accomplish a PhD? Fundamentally, there is a philosophical difference in how we want to admit graduate students. People are here to learn a new skill. People are here to perhaps change their background. And a University should support these endeavors rather than try to make money or papers off these students. Fundamentally, graduate students are training and learning a new skill set. They aren't technically here to produce a product. Papers and software are a by-product of the graduate school experience. The main product is a graduate who has the ability to learn, the opportunity to learn, and the advice of your fellow students.
Culture fit is one of the most important things we absolutely look for. Tony Hseih nailed it on the head when he built Zappos. You really need to like going to work, like your coworkers, and be able to hang out with them outside of a professional work environment. Likeability is especially important in graduate school because working in a lab sits somewhere between real friends and a professional corporation on the social connection scale. For example, do you need to invite everyone in your lab to a colleagues personal birthday party? It's ambiguous. In a real friend group setting, the answer is yes. In a corporate setting, the answer is no. In grad school, maybe.
Your colleagues live a 5 minute walk away from you. You see them everyday, live with them, and have to generally enjoy their company. If you can't get along, the next five years are ruined for everyone. We really look for people who we can actually be real friends with, not just professional friends. This means have a beer, ask for advice about not just professional issues but personal issues, and go to Vegas together. So what's the culture fit requirement? Be cool. Sorry to be so vague. (The be cool is my personal culture fit).
When a graduate student is admitted, they usually receive a multi year funding package. Funding is broken down by each academic year with each year paid for by a different department or entity, and thus a different pocket of money within the university. For example, UCI has three year packages for the average admitted graduate student. If you are highly ranked, you may get four years. Less ranked, two years. A standard three year package is broken down via:
- One year paid for by the advisor.
- One year paid by the CS department.
- One year being a Teaching Assistant / Grader.
The remaining years, 4 - 6, are paid for by the advisor or you've already dropped out of graduate school. However, the important kicker is that after your second or third year, you should have advanced to candidacy. At this point, the tuition for a student is reduced to the same price as a domestic in state resident which is a key milestone because international students cost 2-3x more than an in state resident. The university reduces tuition because the university has already committed enough resources such that is has a vested interest in ensuring you graduate.
GRE scores questionably reflect an applicant's intelligence, but for the purposes of funding, they are important. Even if your Skype interview is great, we probably won't admit you unless your GRE scores are high enough to secure a department funding package. It simply costs too much to admit you.
On the flip side, if you are a stellar student, we might not admit you. If the department reserves a package for a student, but the student has a very high chance of going somewhere else such as Stanford, the money goes away if the student doesn't actually come to UCI. Most graduate students don't understand that the advisor matters more than the actual institution. And so many students who can get admitted to UCB but with a smaller package, will go to the more prestigious universities. UCI attempts to lure students with four year packages, but it doesn't always work. Instead, admissions try to target those students who would probably accept UC Irvine's offer, taking the middle chunk rather than the superb student.
For example, this year, we had a stellar student who currently has a masters degree. He has been working for a major industrial research lab for a few years and is going back to school to get his PhD. He already knew everything about virtual machines, had stellar code, and could probably be the post doc for the lab rather than an incoming graduate student. He got an offer just because he was fantastic, but we are reluctant to believe that he will actually come to UC Irvine. We'll see what happens.
Admission decisions are made by a committee comprised of all the university faculty. A specific advisor may want to admit you, but the admissions committee must agree to the admissions unless there are some extraordinary circumstances. If you are a stellar applicant and impress the faculty member, you will have a very very high chance of being admitted to the university. However, at the end of the day, the committee is the one who decides admissions, and therefore nothing is ever really final until the committee approves.
What I Look For
Disclaimer: This is what I, Mason, look for and is not indicative of the general lab policy. There isn't even an official lab policy rather than what's happened in the past. Everyone has their own thing they are looking for, their own style, and how they see "fit".
Coach Wooden - "Nobody cares how much you know (until they know how much you care)"
Personally, I try and follow Coach Wooden. I give a lot of leeway for not knowing anything about compilers, although it does make me question as to how and why you want to join a systems software lab. I care much more about whether or not a person likes to hack. How much they care about their code quality, how much they care about the presentation of themselves and their code, matters much more to me than any particular domain knowledge. One of the things I like to do is ask prospective students to send us some of their code. Just by looking at the code, you can see how much they care about programming. You can gleam how much experience they have and whether or not they are trying to improve the quality of their code.
Outside of their technical abilities, I'm also trying to see if this person is someone who is constantly improving themselves. If they are committed to improving their skills, and genuinely interested in the field, the get more bonus points than someone who is just applying. They may even be better off than someone who has some experience in systems software. If they have shown that they have the hard work ethic required to actually generate some results, awesome.
Of course, accurately gauging an applicant's ability to not only program, but project into the future whether or not they are suitable to accomplish a PhD is incredibly difficult. You will never really know, and each person is a bet.
Personally, I like voting for the underdog, because I'm a terrible interviewee and I've been given so many lucky breaks because I didn't know anything about VMs when I entered. I don't think I would be able to get through the interview process we have today because enough students have some compiler experience. I forgot where I read it, but some CEO of a startup said their engineering culture and interview process became so rigorous and tough that the original engineers didn't think they'd be able to get in. It hurts my ego, but I feel like we're at that point today. The students are getting better and better and that's for the best.
Side Note: International students, the informatics and software engineering department at UCI study software methods (eg waterfall method, agile development). It is not a major you should apply to, at least at UCI, if you want to do lots of programming.
P.S: Any feedback on how we should admit prospective graduate students is appreciated.