Thesis

Tangible Code
An interface onto the behavior of computer programs.

Idea/problem/context

Software development is an increasingly important and complex endeavor. As programs continue to grow, the difficulty of understanding and modifying existing source code strains new development. Languages and tools need to improve to reduce the cognitive burdens placed on programmers.

What it is

Tangible Code is a software environment for exploring the behavior of computer programs written in mainstream languages like C/C++ or Java. While traditional debuggers present frozen, disconnected snapshots of a program's state, forcing programmers to draw connections in their heads, Tangible Code provides a unified interface centered on code, the medium of programmers. Programmers can watch their program in operation on specific input and follow the progress of a program over time. Thus, they can see the precise spot where a bug occurs, or view the internal manipulation of data. Tangible Code also offers programmers an overview of a program: which parts are most frequently used and how different pieces depend on each other.

How it works

The interface consists of three main components: a timeline of the program's execution, a list of the parts of the program, and the source code itself. The timeline is organized as a hierarchical record of function calls. Clicking one opens its source code, integrated with the data being operated on at that particular moment in time. The list of program parts indicates the relationships between that function and the other components of the program. Pieces of the code become interface elements, providing links to related sections of code and allowing programmers to examine data in more detail or to flag specific problem spots.

An implementation of Tangible Code would gather detailed information during a program's execution and process it for display as described above.

Value/potential

By making it easier for programmers to understand and modify their code, Tangible Code extends the lifespan and complexity of programs. This promises better and more pleasurable software.