However, efficient implementations for challenging programs require a combination of high-level algorithmic insights and low-level implementation details.
In the last 40 years, the major innovation in software engineering has been the development of what are called object-oriented programming languages.
A complex computer program, with millions of lines of code, can be distilled into some fairly intuitive interactions between objects. For programmers building a large application from scratch, object-oriented programming is a boon, allowing them to add new functions or make major revisions by changing just a few lines of code.
But for a programmer dropped into the middle of a massive development project, trying to navigate the thicket of existing objects can be bewildering. Learning what the objects are and what they do might take days or even weeks. The system could be of particular use to programmers working with open-source software, whose licensing terms require that its underlying code be publicly disclosed.
A programmer wishing to add a new window to an application, for instance, simply writes a line of code calling up a new window object; the window comes complete with things like scroll bars and size-adjustment tabs and a display line for text. If the programmer wants to add a button to the window, she calls up a new button object.
But after that, things can get more complicated. To describe the layout for the window, the programmer may have to invoke an object called Layout; to enable the button to register mouse clicks, she may have to invoke an object called EventListener. But the price of that is that you have to know how it works before you can use it.
To demonstrate how it works, the researchers applied it to an open-source program called Eclipse, which computer scientists use to develop programming tools for new computer languages. In the Eclipse framework, the window that displays code written in the new language is called an Editor; a function that searches the code for symbols or keywords is called a Scanner.
That much a seasoned developer could probably glean by looking over the Eclipse source code. But say you want to add a new Scanner to Eclipse, one that allows you to highlight particular symbols. It turns out that, in addition to your Editor and Scanner objects, you would need to invoke a couple of objects with the unintuitive names of DamageRepairer and PresentationReconciler and then overwrite a function called getPresentationReconciler in yet a third object called a SourceViewerConfiguration.
With Matchmaker, the developer would simply type the words "editor" and "scanner" into the query fields, and the program would return the names of the objects that link them and a description of the modifications required to any existing functions.
In the case of Eclipse, it noticed that every time a Scanner was invoked, so were the other objects. But even in those cases, Solar-Lezama argues, some guidance is better than none.
To test that thesis, Solar-Lezama and his colleagues did a user study with eight programmers new to Eclipse. All of them were asked to perform the same task, which required linking up two different types of objects. Moreover, the example was specifically chosen so that the instructions provided by Matchmaker were incomplete: They left out one crucial step.
Nonetheless, Solar-Lezama says, the programmer who completed the task most quickly without Matchmaker still took longer than the slowest of the programmers who used it.Armando Solar-Lezama Associate Professor Thesis Supervisor Accepted pfmlures.com R.
Meyer Chairman, Masters of Engineering Thesis Committee OCT29 Author. PAPERS. Structuring the Synthesis of Heap-Manipulating Programs, Nadia Polikarpova, Ilya Sergey, In submission.; Automatic Synchronization for GPU Kernels, Sourav Anand, Nadia pfmlures.com' Enforcing Information Flow Policies with Type-Targeted Program Synthesis, Nadia Polikarpova, Jean Yang, Shachar Itzhaky, Travis Hance, Armando .
When Armando Solar-Lezama was a third grader in Mexico City, his science class did a unit on electrical circuits. The students were divided into teams of three, and each team member had to bring in a light bulb, a battery, or a switch.
EECS faculty member Armando Solar-Lezama, the NBX Career Development Assistant Professor of Computer Science and Engineering in CSAIL has developed a new system that allows programmers to work faster even when they enter a project already in development.
In addition to Sam, Armando has been my other constant source of inspirations. As someone who knows a great deal about programming systems, computer science, and life in general, I learned a lot from Armando from our many hours of discussions and working through .
NIPS Spotlight: Xujie Si, Hanjun Dai, Mukund Raghothaman, Mayur Naik, Le Song. Learning loop invariants for program verification.