Programming Language Design and Implementation (PLDI) this year (June 15-19, 2020) was held virtually due to COVID-19. I took this opportunity to attend the conference, but at the same time, I honestly did not expect to get much out of it. That’s because I thought the conference would be mostly about discussing publications of technical papers by much more experienced people in the field. Hence, I initially thought I’d give it a try and see what kind of work people publish in such a renowned conference as a way to get myself familiar with what I am expected to produce further down the road.
But I was wrong! There were these Programming Languages Mentoring Workshop (PLMW) as well as “Ask Me Anything” track, discussing effective habits for navigating the research landscape and providing opportunities for students to interact with researchers in the field, among other things. In some of these sessions, experienced, senior people were genuinely sharing their research experience and other stories of building their (research) career in non-technical, everyday English, which was enlightening and encouraging for newbies like me. What I enjoyed the most was the Slack’s
#mentoring channel, where attendees could reach out to volunteer mentors and have 1:1 meetings. Through the channel, I could talk to 14 people in total – either professors, professionals or PhD students. I enjoyed these individual meetings so much that I decided to write a blog post about it and share with anyone who might be interested. Below are their responses to the questions I asked.
Question 1: What are some good ways to come up with research topics, especially for junior PhD students? How can I figure out what I am interested in?
- Many advisors do not expect their early-stage graduate student to come up with original research topics. They may offer you some options and let you work on one of them. It is recommended that you work closely with your advisor or other senior students (if possible) for the initial projects, so you learn how the process works.
- If you end up working on existing project as a junior student, your contribution may primarily be on implementation (e.g., working on small fixes to make the implementation work).
- As you gain more experience, your contribution will become more significant (e.g., working on phrasing the problem, coming up with solutions, etc.).
- That being said, it is good to think of the problems and application domains. For example, are you interested in verification problem, synthesis, and/or language design? In which contexts and applications?
- You can go through research topics from PL conferences for the past 5+ years. Go through sessions and pick the topics that pique your interest. If there is any interesting topic, watch the talk. If you find the talk interesting, read relevant papers on the topic, and discuss the following with your advisor:
- why you are considering the topic, and
- what you like about the topic.
- Don’t worry too much about what you are in love with. Often, initial ideas may look silly. Don’t be afraid to bring it up to your advisor. And when approved, start working on the idea. You may end up liking what you end up working on, since there are often a lot of freedom and various approaches in most research projects.
- Don’t limit your network to the PL community. You can learn from people in other communities. In the long run, there could be collaborative work with other fields. New ideas may come up by mashing up two different fields. In this sense, reading non-PL papers could be helpful.
- Make use of graduate course projects to try out some crazy ideas or explore ideas that you are interested in. Explore the current topics and see who’s been working on the area. Brainstorm ideas and discuss them if you come across these people at the conferences.
Question 2: What are some useful techniques when it comes to reading papers?
- Survey papers are typically a good introduction to a topic. They tend to be easier to understand than other technical papers.
- Well-written dissertations can be helpful too as they tend to include survey of the corresponding research area.
- Read papers as your daily ritual. You will have to spend a lot of time reading papers before they start making sense.
- Don’t just skim through them but make conscious efforts to remain critical when reading. If there’s anything that does not make sense to you, take notes and ask your advisor or other senior students about them. Make sure you understand them.
- One thing you can do when figuring out whether to thoroughly read the paper or not is first by going over the Abstract, Introduction, and Evaluation. If you find the evaluation interesting, then go to the middle part and dig further.
- Make use of reading groups and graduate courses. Explaining and presenting to others is a way to force yourself to understand the papers. Also, taking more advanced graduate courses will help you better understand the papers.
Question 3: How can I better manage my time as a PhD student?
- Set aside time for things you have to do every day. Enumerate your tasks and break them down into smaller tasks, and make sure you do them.
- For example, there could four things to work on, such as reading papers, doing math, programming, and writing. As you do one thing, cross one off and move it to the bottom. The following day, start from what is on top.
- Spending the whole day doing one thing will not make you very productive.
- Using a task management system can help you.
- As a first- or second-year PhD student, you may have to take classes. Let your advisor know of your schedule.
- Make sure you take your time off. It affects your productivity.
Question 4: Would you recommend going for an internship during PhD?
- There are people who take it as a personal choice. Regardless, the response was overall YES.
- Internship is a great opportunity for you to figure out whether you want to stay in the academia or work in the industry after PhD. Working in the industry can enable you to see more direct impact of your research, but your freedom in research may be limited by your employer.
- Internship will help you change your perspective and learn different things by working with different people.
- Students are usually recommended to go for an internship in either earlier or later – after passing Qualifying Exam and achieving Candidacy – stages of the PhD program. That’s because you may need the summer in 2nd or 3rd year to work on developing ideas for your thesis/research project(s).
Question 5: Any other useful tips or advice for PhD students?
- Maintaining a research blog is highly recommended. By doing so, you can better organize your thoughts, make sure you understand the materials, and it can be a good way for you to get connected with people from other fields. This may lead to a new research project further down the road.
- The more constructive criticism you receive from your advisor and other people, the faster you will grow as a student.
- Don’t think you should learn everything. People are specialized in their own field. Don’t let “not knowing so much of all CS fundamentals” bother you so much.
- When you have time, study math such as Order Theory or Category Theory. Math can be a useful tool to help you better understand which mathematical structures a particular technique is working with.
- Take advantage of the teaching opportunities. The best way to learn a new subject/topic is by teaching a course on it. External motivation plays an important role.
- Don’t compare yourself with others. There are always people who are better than you. Everyone feels this way. You have something that is great in you.
- Understand that your advisor wants you to succeed! Good communication with your advisor is critical. Students may not always bring up what they want to discuss or complain about. If you don’t bring it up, your advisor does not know. Don’t be afraid to talk about your concerns and what is happening to you.
- And as a PhD student, it’s important to make your advisor HAPPY.
- It’s great to have many mentors!
- Everything can be learned. You just need to put in a lot of time. Hard work is like a compound interest. Doing one percent more work than what is required over sustained period of time will make a huge difference.
- Don’t ignore or overlook your health. Pulling an all-nighter is never recommended.
- Knowledge can be learned, but genuine desire to excel cannot be taught.
- There is no short cut. Be patient, perseverant and learn from your mistakes!
- Socialize. Doing research can be a very lonely process. As you start making progress, you may get stuck and feel desperate. Having a nice social network in or outside your lab can be useful to go through these hard times.
Follow-up question: How do I better manage the blogging process?
- It hardly matters what you write about. You can write about anything you are reading. Write about your perspectives, anything you find interesting and/or surprising.
- E.g., how SMT solvers work, how it uses algorithms for optimization problems, etc.
- Ask yourself, “how would you explain it to yourself 5 years ago?”. The blog posts don’t have to be everything to everyone. Think of it as a service to the community.
- It could be an example that somebody else had come up with, where you fixed minor issues. Then you can write a blog post about it.
- Your goal is to become better at (technical) writing. This will improve your paper-writing skills.
Question 6: What are some useful resources or background materials for me to review as a junior student in the PL field?
- Oregon Programming Language Sumer School (OPLSS) talks
- Coursera Programming Languages Part A, B, C by Dan Grossman (a good intro before reading TAPL)
- Types and Programming Languages by Benjamin C. Pierce (a bible for PL)
- Practical Foundations for Programming Languages by Robert Harper
Overall, what I found truly amazing was that all the people I’ve talked to, without any exception, were genuinely encouraging and very much willing to help. It felt as if they were freely offering their service without asking for anything in return. Almost all the professors and PhD students I’ve talked to mentioned that I can reach out to them anytime in the future, if I need their help. I personally don’t know much about how other fields are like. But, I have been so touched and have this feeling that, going forward, I will come to appreciate being part of the PL community even more.
Lastly, I would like to thank my advisor, Ilya Sergey, for encouraging me to reach out to mentors via PLDI
#mentoring, as well as the following professors, professionals, and PhD students for their guidance:
Karim Ali, Benjamin Delaware, Ranjit Jhala, Jeehoon Kang, Paulette Koronkevich, Lindsey Kuper, Santosh Nagarakatte, Phitchaya Mangpo Phothilimthana, Nadia Polikarpova, Roopsha Samanta, Kartik Singhal, Manu Sridharan, Emma Tosch, and Xinyu Wang.