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.