How to prepare for a Ph.D interview?

In our computer science department at IIT Delhi, typically 500 candidates apply for Ph.D admission. Based on some shortlisting criteria, we interview 100-200 candidates, and typically 5-10 candidates are ultimately selected. I believe that if there is a better flow of information, we can make the acceptance ratio slightly better, and students will have a clear idea about our expectations.

Before reading ahead, note that these are my personal views. They do not represent the views of the computer science department at IIT Delhi. Furthermore, reading this article and following the suggestions does not guarantee acceptance in our Ph.D program or in any other program for that matter, nor does it claim to increase your chances. I am writing this article for the benefit of the student community, and would urge the reader to use his sense of judgement while interpreting my thoughts.

Let us start out by considering the B.Tech, M.Tech, and Ph.D programs from the eyes of a common man. The common man perceives the B.Tech program as a program that imparts basic engineering skills, and he looks at the M.Tech program as a program that teaches a student advanced engineering skills, and also provides him some expertise in a certain area. An M.Tech in engineering is viewed as similar to an M.Phil in liberal arts, or an M.D in medicine. For example, a doctor with an M.D in surgery is expected to carry out complex operations. We trust our lives in the hands of such people. Clearly, the expectation is that once a student has finished his post-graduation he is fairly knowledgeable about his area, and has received advanced training in a particular discipline.

Now, a Ph.D is one step ahead. Once a person knows a lot about a certain area, he will also know about some of the limitations of existing methods, techniques, and theories. He and his Ph.D advisor will then have certain ideas to improve certain concepts/methods in his area. Such ideas make a Ph.D. A student will then take several years to refine and polish the basic idea to bring it to a shape in which it can be sent to a conference or journal for publication. Here again, reviewers might have a host of concerns and comments that need to be addressed. At the end of his Ph.D, a person is expected to know almost everything about the little tiny area that he has been working in, and to also be a very technically proficient person. Ph.D is also a license to teach, conduct research, and join academics.

Advanced degrees such as a Ph.D thus need to have very strict entry criteria such that we can ensure that the student meets the prerequisites. The prerequisite is that students must be very thorough in the basics of computer science, and should be able to answer questions of moderate difficulty fairly easily. If this is not happening, then the student is not eligible to join the Ph.D program.

In our department, we mainly focus on basic mathematical skills, basic programming language skills, and a knowledge of basic computer science (algorithms/ OS/ architecture). Let me give examples of some questions.

1) I roll two dice. What is the probability that the sum of the numbers is equal to 7?
2) In C, how do function pointers work?
3) How can I sort an array in-place (without using extra space)?

We expect that students will be able to answer such questions with minimal amount of assistance during the interview. Students, who are not admitted to the program face a significant amount of difficulty while answering such questions; whereas, students who are admitted answer these questions satisfactorily. Our interview process typically has two rounds. In each round 3-4 main questions, and many more sub-questions are asked. A student gets many chances to answer questions, and most of the time the answers are not satisfactory (as the acceptance figures indicate).

Let us go into the reasons for this. I feel that we have not been able to communicate our requirements very clearly, as a result the student community is not getting the right information. We expect that all our candidates will come to the interview prepared. This is often not the case. Additionally, a lot of part-time candidates have the perception that their job experience substitutes for good interview performance. This is also not the case. In the age of RTI, we need to maintain transparency and fairness. After shortlisting, the only thing that counts is performance on the interview table. Discussing prior experience, professional contributions, and details of any prior research work, is pointless. All the candidates are on a level playing field, and they need to be able to answer the questions that are asked to them. This is the only thing that counts.

Let me now discuss the term, ``prepared''. It means different things to different people. Here is the way that I interpret it. If I were to prepare for a Ph.D interview, this is what I would do. I would pick up some of the recent books on probability, C/Java programming, algorithms, operating systems, and computer architecture from reputed publishers. Subsequently, I would read them thoroughly (cover to cover), and solve all the exercises given at the end of the chapters. I would also look at a basic engineering first year math textbook and brush up my mathematical fundamentals, especially regarding transcendental functions, trigonometry, and linear algebra. I don't think that any amount of slides and online courses will really help. They are valid supplementary material, but cannot be the primary means for imparting education. Additionally, it is necessary for a student to write long programs to really understand programming, and solve complex problems to actually understand subjects like algorithms and computer architecture. Merely reading articles on the web, and listening to lectures is not sufficient, and this clearly shows up in interviews.

What the interviewers are looking for is actually depth. Most questions start out to be simple. The follow-up questions are more complicated, and typically expose the weaknesses. For example, a question might be of the form, ``What is the time complexity of merge sort?''.  Most students will answer, O(n log(n)). However, the follow up questions will be more difficult, ``Does the base of the log matter? What is a natural logarithm? How are log_2(x) and log_e(x) related?''. This is where students typically lose their way. The only way to be thorough is to read a lot, solve a lot of problems, and always try to go deep.

We often ask students about the number of lines of code that they have written just to get a sense of their background (not a part of the interview per se). Students who do not get selected typically reply: 100 lines, 300 lines, 500 lines. This is not enough in my opinion. 500 lines of C or Java code do not achieve much. We should be looking at a minimum of a few thousand lines with a lot of object oriented constructs. Only then, can we say for sure that a student can write complicated programs. The same holds true for theoretical questions also. Before coming to the interview, a student should have answered hundreds of similar questions. They can be found in reputable textbooks, and over the web (see some popular job interview sites). These questions need to be solved in entirety. We often ask students to go to the board and write the answer. Thus, the student needs a lot of practice in writing precise answers that are easy to understand. In my opinion, nobody should come to an interview under-prepared. It does not serve any purpose.

There are some other aspects also regarding soft skills. It is necessary for the student to accurately understand what the interviewer is asking. This is not as easy as it sounds. Not understanding a question correctly is very frequent, and takes the candidate off course. After multiple clarifications, if the student is still not able to comprehend the question, the interviewer needs to give up. There are issues with the answers as well. Many a time the answers are not well structured, and because of poor English the meaning is not clear. Candidates need to work on this area. It is necessary to read as much as possible such that understanding a complex multi-part question is not difficult. I have found that students who read more textbooks tend to understand questions much better as compared to students who do not read them. It is also very important to read other written material such as novels, newspapers, and magazines such that language skills are high. This will also ensure that students can properly formulate their answers.

Let us now come to the time and effort required in this process. Students from top institutes with good GPAs, or students with great GATE scores, are already prepared to a large extent. They typically don't spend a lot of time preparing. However, for students who do not know a certain subject very well for a variety of reasons, need to put in some solid effort such that they can come to the level of students that enter our Ph.D program. We are easily looking at several months of intense study for a student who is perceived to have a weak background. In my opinion other than a traditional way of preparing (read the book + answer the questions + revise), other methods have limited utility. It definitely does not make sense to try to memorize the answers to a large number of possible questions. The chances that a question out of that set will be asked in the interview is abysmally low. It is instead a better idea to harp on the basics.