Alumni Spotlight: Ras Bodik
Ras Bodik got his PhD at Pitt in 2000 under the guidance of Rajiv Gupta and Mary Lou Soffa. He then went on to work as an assistant professor at the University of Wisconsin. After two happy years in Madison, he moved to the University of California at Berkeley, where he is now a tenure-track assistant professor. He has won the ACM SIGPLAN Doctoral Dissertation Award and the NSF CAREER Award, as well as two teaching awards at the University of Wisconsin.
Ras' core research interests are in program analysis and compilation, but in his search for important problems he also ventures into computer architecture and software engineering, as has happened with his two recent projects: BAFL and Programming by Sketching. BAFL, which stands for bottleneck analysis for fine-grain parallelism, developed a suite of techniques for designing and controlling processors, a sort of Hennessy-Patterson quantitative analysis for the era of billion-transistor chips and low-power constraints. One interesting open problem solved in BAFL was how to build a self-aware processor that can identify which of its instruction executions were critical. His team reduced the problem essentially to computing a longest path in a dag with the twist that one doesn't know edge latencies and must process the graph in the direction of edges without storing it.
The goal of the Programming by Sketching project is to make real the long-standing promise of software synthesis. In classical software synthesis, the programmer doesn't write the code; instead, he only gives a functional specification and the desired code is automatically generated for him. Not surprisingly, this problem turns out to be too hard, so the key idea in sketching is to make the life of a synthesizer easier by providing a sketch of the desired code. The sketch is an outline of the desired implementation, a kind of subprogram with holes; the synthesizer fills in the holes such that the completed sketch implements the given spec. In one effort, sketching was used to synthesize provably correct high-performance cipher implementations. Because the completed sketch was guaranteed to implement the reference cipher, the programmer was allowed to explore clever implementation ideas without worrying about introducing bugs, without reasoning about tedious details, and even without being certain that these ideas were sound.
In another effort, sketching ideas are used to develop a code-synthesizing “programmer's search engine.” The problem addressed here is how to reuse the functionality available in rich software libraries, which often contain tens of thousands of procedures. The problem is hard even when the libraries are carefully designed for reuse: like LEGO pieces, library components snap together nicely--if you can find the right ones. Prospector is a tool that, metaphorically speaking, looks through this bottomless box of LEGO's, finds the right pieces including suitable connectors and connects them all together in a such a way that the result can be directly inserted into the construction that is being developed. Prospector does this for software, relying on what is called jungloid mining.
Ras has also been active in course development. In particular, he has been evolving the undergraduate compiler course into a course targeted to the many future software engineers, rather than to the very few future compiler writers. In his course, students still learn how to build a compiler, but they develop their own “lex” and “yacc.” The idea is that these two tools are examples of small languages and code generators, which, unlike writing a compiler, are common and very beneficial uses of compilation technology in practice.
Ras is the proud father of Hugo, a curious two-year old. In their time together, they fix their house or hike in the canyons of Berkeley hills.