Invited Speaker: Martin Rinard
Thursday, Oct. 26 from 13:30 to 15:00
Minimizing Understanding in the Construction and Maintenance of Software Systems
Traditional approaches to building software systems have emphasized the key role of understanding—the developer understands the problemto be solved, understands the solution, then, working with understood tools in an understood environment, implements and maintains the solution in light of all of these understandings. But understanding is a difficult and perilous business—it can require substantial time and effort to obtain, and in some cases may be inherently beyond the capabilities of the developers building or maintaining thesystem. This situation leads to the question: How much understanding must we have to deliver acceptable software systems? Or perhaps more to the point: How much understanding can we aspire to and still deliver acceptable systems?
Viewed from this perspective, it becomes clear that many advances are valuable precisely because they reduce the amount of understanding required for developers to operate effectively. In this talk I will explore the reasons why past advances have made developers more effective. I will also discuss new techniques that promise to increase our productivity and extend our collective reach by reducing our need to understand the systems we build and maintain.
Biography: Martin Rinard is a Professor in the MIT Department of Electrical Engineering and Computer Science and a member of the MIT Computer Science and Artificial Intelligence Laboratory. His research interests have included parallel and distributed computing, programming languages, program analysis, program verification, and software engineering. Much of his current research focuses on techniques that enable software systems to execute successfully in spite of the presence of errors. Results in this area include acceptability-oriented computing (a framework for ensuring that software systems satisfy basic acceptability properties), failure-oblivious computing (a technique for enabling programs to execute successfully through otherwise fatal memory addressing errors), and a technique for providing probabilistic bounds on the accuracy of program outputs in the presence of failures.