Conventional wisdom in the software community demands that software engineers program to interfaces just like engineers in physical disciplines construct artifacts from off-the-rack components with well-defined interfaces. Empirical data shows, however, that programmers do not use interfaces even in programming languages (such as C# and Java) that support them with explicit syntax.
The objective of this project is to investigate a radical approach to interface-oriented programming. The PI and his students will design and implement a programming language in which programmers must program to interfaces. Time permitting, they will also explore the construction of supportive software tools for refactoring existing programs into interface-oriented code. Based on these first steps, they will then explore how (student) programmers work in such a radically interface-oriented context and what effects it has on software design. The lessons learned from this investigation will have a broader impact than just the immediate academic research community. It will help the designers of programming languages with the next generation of OOP languages; it will suggest how programming environments can assist programmers with software tools to achieve certain standards; and it will provide guidance to software engineering educators who wish to teach interface-oriented programming.