I am a computer scientist at UC Berkeley. I work on various flavors of program synthesis, from programming by demonstration, to sketching, design of programmer-accessible oracles, and compilers for declarative languages. My group has applied synthesis to high-performance computing, web browser construction, algorithm design, document layout, and biology. While my work on synthesis seeks to make programmers more productive, the web browser project investigates how to run client application stacks on low-power devices. I have also designed a course on programming languages where student learn hands-on small-language design by constructing a modern web browser.
Programmers cannot live without syntax checkers, type checkers and editor auto-completion. These are useful tools but they hardly exploit the vast computer power at our disposal. We are developing computer-aided programming that brings the computational power to the process of constructing programs. We pose this problem as synthesis of programs from multi-modal specifications: templates of programs, declarative assertions, executable specifications, examples and demonstrations. We are developing synthesis theories and algorithms, language constructs and tools that embed synthesis into the programming process.
Web browsers popularized smart phones but—unlike on laptops—failed to gain dominance as the application platform. The reason is that browsers are prohibitively slow on the power-constrained mobile devices. As a workaround, mobile applications are developed in the more efficient frameworks such as Android, iPhone SDK or Silverlight. These frameworks are not only less productive but also give rise to platform balkanization which hampers the application progress compared to we had seen in early Web 2.0, which enjoyed the unified platform of the web browser. This project investigates future browsers from two perspectives: energy-efficient implementation of the browser and programmability of client applications.
Program synthesis for biology
Recently, my group began work on synthesis of concurrent programs that model how stem cells determine their fate. We also started work on synthesis of metabolic pathways.
Hack Your Language! is a senior course (CS164) on programming languages in which students build their own coroutine interpeter, parser generator, and a web browser. These projects are vehicles for learning modern software design principles; we design new programming abstractions and embody them in small, domain-specific languages (DSLs). Students construct DSLs to help in the construction of their browsers and also extend the browser with small languages for DOM manipulation (a'la jQuery) as well as a reactive language (a'la Rx) . As a final project, students design and implement a DSL of their own choice.
- Contact Information
- Download CV
- Current and Recent Courses
Emina Torlak and I have given an invited tutorial at CAV 2012. The tutorial is being expanded this semester into a graduate course, which you can follow as we add lectures and homeworks. CAV tutorial slides: (ppt, pdf, screencast). The graduate course.
We are looking for postdocs in synthetic biology. We need curious, well-rounded computer scientists with expertise in algorithms, hacking, and with interest in biology.
The multi-university ExCAPE project aims to change computer programming from the tedious task to one in which a programmer and an "automated program synthesis tool" collaborate to generate software that meets its specifications.
We are looking for postdocs in program synthesis and computer-aided programming.
Several communities related to synthesis of programs and other computational artifacts will meet again in wine cellars of the castle.