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.

Automated programming revisited

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.

Parallel, low-power web browsers

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!

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.


Course on program synthesis

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.

Postdoc position position in synthetic biology

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.

NSF Expedition in Computing for program synthesis

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.

Looking for a postdoc position?

We are looking for postdocs in program synthesis and computer-aided programming.

2nd Dagstuhl Seminar in Program Synthesis

Several communities related to synthesis of programs and other computational artifacts will meet again in wine cellars of the castle.

Layout based on BASIC by Download Website Templates