Computer science student David Cao was awarded second place at the Symposium on Principles of Programming Languages' Student Research Competition for his research analysis tool. Cao shares how he got interested in computer science, what is exciting about the field, and advice for students, in this Q&A.
Could you summarize the high level takeaways from your Automatic Dependent Resource Analysis work?
There are many existing tools which can analyze the upper bounds on the time and resource complexity of programs. Some tools can automatically determine these upper bounds, but the bounds they come up with aren't very specific. Other tools can tell you if a given upper bound is valid for a program, but these involve a lot of error-prone manual labor. Our technique combines the best of both worlds and can automatically infer more specific valid upper bounds on resource use.
Why did you decide to study computer science, and how did you wind up working with Prof. Polikarpova?
I first started developing some cursory CS experience in high school, with most of my CS knowledge coming from building side projects and Googling whatever I didn't know. Over time, I gained a particular interest in how programming languages worked, and since I heard the programming systems community here at UCSD was particularly active, applying to the CSE program was a no-brainer.
In the summer leading up to my first year at UCSD, I was a part of SPIS, where Prof. Polikarpova gave a presentation about her work on program synthesis. Her presentation piqued my interest in her work, so I reached out and arranged to meet and discuss some of it with her. Since then, I've been super fortunate to have been able to work with her on research in this field.
What do you enjoy about computer science and CS research?
Generally, being able to quickly iterate on and build programs to solve real-world problems has been super compelling to me, as it was my original interest into the field in the first place. With research in programming systems in particular, there are a few aspects which make it very interesting. For one, much of the work in this field combines theoretical elegance with the real-world applicability of software engineering. Additionally, research in this area is extremely foundational; since research in this area involves the tools used to create programs in the first place, innovations in this field can have potentially wide-ranging effects on how programs and software are built generally. And in general, it's super rewarding and exciting to create something which nobody has done before.
Additionally, working with Prof. Polikarpova in particular has been an incredible experience. Along with being a brilliant professor who has done tons of amazing work in a wide range of areas, she's been super supportive and has given great feedback on how I can improve my work. While working with her, I've learned a ton about program synthesis and PL research in general which I knew nothing about a year or so prior.
Are you involved in any groups/clubs/other activities on campus?
Currently, I'm a part of UCSD Wushu, where I help coordinate demos, and Alter Ego, an inclusive choreography-based dance team, where I help coordinate media projects. I've also just started getting involved with the YDSA chapter here at UC San Diego, and I'm also a part of KASA and VSA.
Any advice for future CS students?
The biggest piece of advice I would give is to be open to reaching out to other (grad) students and faculty. There's a ton of cool stuff happening within the CSE department, and the faculty are all super friendly and open to talking about their work! Plus, one of the benefits of virtual learning is that it's pretty easy to set up Zoom meetings with professors to discuss their work over virtual coffee or lunch.
Any plans/goals for your future?
Right now, I'm leaning towards going into a career in academia and pursuing a career as a professor, so that I can teach and research programming languages as a profession. Doing research in this field so far has been a ton of fun, and I'd love to be able to explore this field further and teach about it for a living. Broadly, my general goal is to help build tools which make programming more accessible and less error-prone for everyone. But it's still pretty early days, so we'll see what the future holds!