Okay, you wanna PhD? I assume you already decided you want to get a PhD in Computer Science related field and you are currently in a research University doing undergrad or master. This article will not help you decide whether PhD suits your need, you will have to figure out by yourself. I assume your target is top PhD programs in U.S.
Something to consider:
whether a field will no longer be hot after you finish your PhD
giving the current economic situration, whether it is easier to get PhD or find a job
why do you want PhD right now and not years after industry
do you want to be a professor
Hardness: say you are in a top 3 research University in U.S., getting into a top PhD program in top 3 research University is not easier than you getting into your undergad program. In another word, say your current University accept 3% of applicants from all over the world, then it's like 3% of applicants from your current school will get into its PhD program. Machine Learning related research is 1~2 levels harder than regular Computer Science PhD.
You will need following things to get PhD:
Connections
Papers and Projects
GPA
Connections: this means making firends with professors.
A "do well in class" letter doesn't count as a recommendation letter. "Do well in class" letters may even hurt you for top PhD programs.
If you got a nice professor on your side and the professor is in the admission committee for his department, you can get admitted without him/her looking at your resume (This is a real example of my friend, and since being in admission committee is rolling based, it's purely by chance)
Industry connections are good only if your company is a well-known company in the field or your job is a research and development (R&D) job.
Doing TA, in my opinion, wouldn't help that much. To me, it is a waste of time.
Papers and Projects: less important than connections
You shouldn't feel safe unless: you developed a project on Github that many people actually use, or you have 5 research papers and some of them are accepted to top conferences
1st author in a lower tier conference is more useful than a 2nd or 3rd conference in a higher tier conference. But this isn't absolute, depending whether the professor stated your contributions in the rec. letter.
GPA: act only as a filters
as long as your GPA is greater than 3.5, don't put too much effort into it.
don't take too many classes, only take classes that fits into your major requirement
if you truly want to learn knowledge, you should
if you can, take gap semester of be a half-time student while doing research or project
Getting into a lab in a research University is easy. You can do it as a freshman! The earlier the better. Normally people do it in summer. But if you can devote 20 hours a week during school semesters, that's fine too. However, having a good project in a lab is hard. Most people who I know started their 1st research in freshman year and only in their 3rd year settled down to a publishable project. You have to be extremely lucky and skilled to get a good project.
You should do the following:
don't apply though university website, you don't want to get into the pool where you can hardly be found
figure out which professor or lab you want to work with
look at professor's homepage, find out contacting information and procedural
send professor's email with your resume, keep it short. Ask if you can meet in person
in the meeting, professor will ask your:
Or, if professors don't reply your email
see which course the professor is teaching, go to his Office Hour or after class to talk about your interest
sit around his/her office and wait for the professor pass by
Or, if you are afraid
find a PhD who is working on some projects you are interested in under professor's webpage
PhD should be: either 2nd year or 3rd year
PhD should have less or equal to 1 existing undergrad: so that you can get attention
Unless you can successfully pitch a project to a PhD and he/she has the ability to advice you, you will be assigned to a project. Depending on the ability of PhD and how he/she likes you, you may get good project or shitty project. Reason:
if they have a good project that is low-risk and publishable (defined later), PhD will take the project and do it himself
so what's left for you are either
if you think your project's risk is too high or not publishable, run away immediately!
if PhDs don't think you have skill, they will not assign you with publishable project
if you haven't read 20 papers in the field, your idea is guarantted already implemented by someone or does not work in practice or has low impact.
Low Risk: the idea will likely give SOTA result.
Publishable: the idea is novel enough and you can give insights to other researcher (usually with math and equations), not just pure engineering or doing application.
Nobody in Theoretical Computer Science like to have undergrads since theory has long learning curve. Don't do theory and math.
If you have 20 hours a week and/or wish to get a industry internship, choose a topic that is "hot" (Machine Learning), otherwise choose a cold project
it's easier to generate new ideas in hot area
you need to finish implement the idea fast, otherwise people will publish before you do (within a semester or two)
The professors will not meet you often, instead, your PhD advisor should arrange meetings with you once a week.
Steps:
While doing all these steps above, if you are in a hot area, subscribe to some Youtuber, newsletters about your research. You should be alerted if someone if doing similar things.
Research code base is very different from software code base:
your code will be messy since you can't predict what feature you will add
don't spend too much time organizing your code
don't strive for best performance
use comments to remind yourself what debugging parameters are set and remember to tweak things back
Once you ran a lot of experiment, you might be more capable of generating good ideas than your PhD advisor. At that time, take their word only as advice. Tweaking someting that you know will not work still have value and will build mental picture about your project, but you should stop implementing something you think will not work after you feel like you have a very good understanding of the field.
Table of Content