In this post, we continue our ongoing series on PL researchers who are about to start independent research positions. This week, we feature Cindy Rubio Gonzalez, who is starting as an assistant professor at the University of California, Davis in the Fall.
Tell us a bit about your academic background.
I am currently a postdoctoral researcher at the University of California, Berkeley. I will be joining the department of Computer Science at the University of California, Davis as an assistant professor in fall 2014. I received a Ph.D. in Computer Science from the University of Wisconsin-Madison in August 2012. Prior to this, I earned an M.S. in Computer Science from the University of Wisconsin-Milwaukee, and a B.S. in Computer Engineering from Saltillo Institute of Technology (Mexico). From a young age, I received training as a professional concert pianist. I was granted admission to enroll in an eight-year Bachelor’s of Music program in Piano Performance at the Autonomous University of Coahuila (Mexico) at the age of 11. It was not until after high school that I became interested in computers (following my dad’s advice on giving Computer Engineering a try!). I was introduced to PL research in the courses I took at UW-Milwaukee.
What is the sort of research that you like to do?
I like to work on finding scalable solutions to challenging problems in real-world software. My work spans the areas of programming languages and software engineering, with a specific focus on program analysis. In my research, I aim to design and build program-analysis tools that help developers write more reliable and efficient software. For my doctoral dissertation, I developed and applied static program analyses to find error-propagation bugs in large software systems such as the Linux kernel and the Firefox web browser. At UC Berkeley, I have been leading the development of dynamic program analyses to improve the performance and reliability of numerical programs. Most recently, I have also been exploring the use of database technologies to reduce resource requirements when performing program analysis.
We would like to read one paper of yours to get a flavor of your work. Which one should that be, and what’s it about?
I would like to cite two of them: one applies static program analysis for bug finding, and the other applies dynamic program analysis for performance improvement. The first paper (PLDI’09) is about finding error-code instances that vanish before proper handling is performed. We identify common scenarios in which run-time errors are dropped, and develop a static program analysis to automatically find these error-propagation bugs. We apply our analysis to five widely-used Linux file systems, including ext3 and ReiserFS, where the analysis finds 312 confirmed error-propagation bugs and a critical bug in heavily tested code used by the NASA/JPL Laboratory for space missions. The second paper (SC’13) presents Precimonious, a dynamic program analysis tool to assist programmers in tuning the precision of floating-point programs. Precimonious systematically searches for a type assignment for floating-point variables so that the resulting program (1) produces an accurate enough answer given an error threshold, and (2) is faster with respect to the original program. We observe performance improvements as high as 40% when applying the analysis to a set of numerical programs, including programs using the GNU Scientific Library.
What new problems are you exploring, or plan to explore once you start your faculty job?
A direction I plan to explore is to analyze error recovery code in systems software and scientific applications. In my previous work, I took a first step towards understanding error handling by analyzing how errors propagate. I found hundreds of instances in which software fails to propagate errors correctly. The next step is to understand how errors are handled. If an error is correctly propagated, we should ensure it is also correctly handled. To this end, there are many areas left to be explored to better understand and improve error handling in real-world applications. In the near future, I plan to explore error-handling specification inference and testing of error-handling code. I would also like to investigate ways to provide language support to prevent the introduction of error-handling bugs in the first place. Another future direction is to explore effective ways to incorporate developers’ domain-specific knowledge into program analyses to improve analysis precision; for example, developing an interactive program analysis that allows users to easily specify program specifications using natural language or graphical interfaces.
What are the things about PL research and the PL community that you like the most?
I like the fact that PL research faces important challenges and it has the opportunity to impact the world in countless ways. In my own research, I am excited to touch, to some extent, millions of people’s lives by making widely-used software better. I also like that PL research has a mix of both theory and practice. I have the opportunity to design, implement, and apply new analyses to real-world software! Finally, PL research offers plenty of interesting opportunities for interdisciplinary work within and outside Computer Science. In that respect, I have had the opportunity to collaborate with researchers in file systems, databases, and numerical analysis. All these collaborations have provided me with unique opportunities to tackle interesting problems and learn more about other Computer Science research areas.
The PL community offers a friendly and supportive environment to conduct research. The members of our community are welcoming and open to collaboration and free exchange of ideas. I find it very stimulating to find students and researchers brainstorming and discussing ideas at conferences and other venues. Senior members of the PL community are very approachable, and offer encouragement and advice to students and young researchers whenever needed. At different stages of my life as a graduate student and young researcher, I have always received prompt, friendly and thoughtful advice.
What would you like to see more of in the PL community?
I would like to see more diversity in the PL community. Diversity is also an important issue in Computer Science, and STEM fields, in general. Women and other minorities are still underrepresented. Being from Latin America, I would love to see more involvement of Latin American researchers and students in our community. I think one way to encourage further involment would be to hold one of our conferences in Latin America. For example, I would love to see a PL conference held in Mexico in the near future! I would also like to see a closer connection between PL academia and industry. I believe we as a community could accomplish more if both academia and industry worked in closer collaboration. For example, I think internships are good opportunities to make these connections. One of many ways to further increase collaboration could be to modify Computer Science curriculums to require at least one internship for academic credit to be supervised by a professor and a mentor from industry.
What advice would you have for graduate students who want a faculty job in the next couple of years?
Job hunting is a busy and stressful time. Unfortunately, there will be many factors out of your control. Instead of worrying about the things you cannot control, spend your time and energy preparing for the things you can control, such as your job application materials, your job talk, and your job interviews. There are several online resources that offer great advice on how to prepare for academic job interviews, but I would like to highlight a few points:
Job applications: The academic application package consists of a research statement, teaching statement, curriculum vitae, and 3-5 references. The application deadline depends on the university and ranges from mid November to late January. Prepare your materials well in advance, and also give plenty of time for your letter writers to prepare their letters. Ask mentors and friends to give their opinion on your materials. Set aside at least one full week to submit your job applications. Make sure to submit the applications in a timely manner.
Job talk: Unlike other talks you might have given in the past, the job talk is unique in many aspects. It should be targeted to a broad audience while still containing material appealing to experts in your field. Practice several times before your first interview, and continue to polish the talk throughout the interview season. Your attitude can make a difference. Be passionate about your work!
Job interviews: Be ready to talk about your work at different levels of detail and various time lengths (elevator speech, 10 minutes, 30 minutes, 1 hour). Be ready to discuss what your future research plans are and how you plan to support your research. Ask questions and be genuinely interested in what others have to say. Be energetic. Be yourself!