Chengnian Sun recently joined the David R. Cheriton School of Computer Science as an Assistant Professor. His research interests are in software engineering and programming languages. His work focuses on techniques, tools and methodologies for improving software quality and developers’ productivity.
He has a PhD in Computer Science from the National University of Singapore. Before joining the David R. Cheriton School of Computer Science, Chengnian was a software engineer at Google in Mountain View, California, and before that a postdoctoral researcher in the Department of Computer Science at the University of California, Davis.
Tell us a bit about yourself.
I grew up in north China, which is a cold part of the country but not nearly as cold as it is here — or will be once winter comes.
I did my bachelor’s degree in computer science in China. As an undergraduate, I went on a couple of internships — a year-long internship at IBM Research Labs as well as another internship at Intel for about half a year. I then moved to Singapore to pursue a PhD. I was at the National University of Singapore for five years, working mostly on software engineering problems.
After my doctorate, I moved to the United States to start a postdoc research position at UC Davis. I worked mainly on compiler testing. After my postdoc, I was hired by Google as a software engineer to work on Java compilers and then on ranking quality of Google search.
I’m married and my wife and I have been together for more than 14 years. She was a classmate of mine during my undergraduate studies. We have an active five-year-old son who keeps us busy.
When did you become interested in computer science?
I had a good friend in high school who had a computer. Yes, computers were not common then. We played on his computer a lot, mainly video games because we were young.
When I applied to university, I saw that studying computer science was a way to get a computer. So, initially, I was attracted to computers because of video games, and I picked computer science so I could have a computer. But the more I learned about computer science as an area of study the more it fascinated me. In a sense, choosing computer science as my undergrad field of study was a bit random — as a way to get a computer to play games — but it turned out to be a great choice.
Before joining the Cheriton School of Computer Science you were a software engineer at Google. What attracted you to the School of Computer Science?
I enjoyed my work at Google and it was both challenging and rewarding. If you work at a company you can do a lot of interesting work and you do have some freedom and flexibility to explore your interests, but not as much as you do in academia.
I’m really interested in solving puzzles, so I wanted to come back to an academy. I’m fortunate to have had an offer from the Cheriton School of Computer Science and to be able to pursue my research interests.
Tell us a bit about your research.
My research interests span software engineering and programming languages. I focus on how to improve software reliability and developers’ productivity by designing and developing novel, practical techniques, models and tools. My research philosophy values practicality. I choose real-world, important problems to work on and aim for novel solutions. For example, I have designed several effective techniques with my collaborators to find bugs in compilers, Android apps, and other reliability-critical software systems.
Do you see opportunities for new, collaborative research, given the breadth and depth of research conducted at the Cheriton School of Computer Science?
Very much so. I’m a software engineer, but my research is interdisciplinary and I combine techniques from several areas in computer science to solve problems in software engineering. In the past, I have applied techniques in information retrieval, machine learning and statistics to solve software testing and maintenance problems.
The software engineering group at the School of Computer Science is strong, as are many other groups here. It’s great that we can work with researchers in areas like machine learning and informational retrieval to solve problems in software engineering.
What do you consider your most significant contribution or work to date?
Without a doubt, it’s my work on complier testing. While I was at UC Davis, my colleagues and I found more than one thousand bugs in GCC and LLVM, two mainstream compilers for C and C++. The work has been well received. It was acknowledged by the LLVM community in their release notes, and I was listed as an official GCC contributor.
As a software engineer, I really value novel, practical work — research that has the potential to have a large impact by changing or improving a program, system or process.
Who has inspired you most in your personal and academic life?
In my personal life, it’s unquestionably my wife. She is smart and has been extremely supportive of me and my career. When I decided to do a PhD, she quit her master’s program midway and moved with me to Singapore for a PhD degree. I always discuss with her first when I need advice, and in fact she advised and encouraged me to go to the United States for a postdoc. She has moved yet again now to Waterloo so I could accept a faculty position at the Cheriton School of Computer Science.
In my academic life, it’s been my PhD and postdoctoral advisors and I have learned a lot from both. My postdoctoral advisor in particular taught me a lot by shaping my research philosophy and honing my research skills. He also helped me a lot during the job-hunting process.
What do you do in your spare time?
I love to go swimming. When I was doing my PhD in Singapore I woke up at 6:30 a.m. to go swimming almost every day for a year. Singapore is hot and a swim in the morning is a cool start.
I still enjoy swimming, but after my son was born I found I had little spare time. If you want to continue an interest or activity, you have to combine it with parenting, so I now take him swimming every day.