View this PageEdit this PageAttachments to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide

Exploratory Programming

"Exploratory programming is an important part of the software engineering cycle: when a domain is not very well understood or open-ended, or it's not clear what algorithms and data structures might be needed for an implementation, it's useful to be able to interactively develop and debug a program without having to go through the usual constraints of the edit-compile-run-debug cycle. Many languages provide support for exploratory programming via interactivity, dynamicity, and extensibility, such as Lisp, Smalltalk, Self, Obliq, Cecil, Dylan, and Python. "

— from

"One idea that hasn't been written much about lately in the computer press is "exploratory programming." This idea was very popular about a decade ago and it refers to powerful programming tools that make it easy and quick to try out different ideas. Smalltalk is one of the best examples of an exploratory programming environment. Smalltalk lets you make objects that "live" in your programming IDE and then you can play with them to see what happens. You don't need to compile a program at all to build software. Why does this matter? Exploratory programming helps make programming easier, more fun, and less intimidating. You can play around with little pieces of the program you're trying to create until you feel that you understand it well enough to put it all together."

— Carl Gundel, author of Liberty BASIC (from, 2005)

"For many (most?) AI programming problems, software engineering techniques such as stepwise refinement and development from formal specifications may not be that helpful. It is seldom possible to give a complete specification of an AI program before building at least a prototype - we just don't understand the nature of the problems well enough. AI programming is therefore inherently exploratory. We develop a program to explore the nature of the problem and domain, and discover good solution strategies as we go. This is not to say that we should abandon good software engineering techniques, just that we cannot rely on them, and that we require an environment that supports more exploratory styles of program development.

Features of a programming language/system that support exploratory programming include: extensibility - the ability to develop special purpose interpreters for solving classes of problems; and interactive development environments - where the programmer can flexibly and interactively test small sections of their program. "

— Alison Cawsey, Databases and Artificial Intelligence, 1994

"Exploratory programming may perhaps be regarded as a program development methodology. Systems supporting this methodology are characterized as being highly interactive and giving support for rapid program building, and ease of program modification and debugging. This is sometimes contrasted to more formal methodologies which emphasize that a program should be completely specified before it is implemented. The exploratory approach is motivated when we have insufficient knowledge about the application or about the interactions between the application and the environment. Powerful interactive programming environments are also necessary for efficient support and maintenance in the many cases where we have constantly changing requirements. Ideally we would like to merge the results from the formal school and the explorative school. We would like to build incremental programming environments which can support both maintenance of executable specifications and automatic transformation of these specifications into efficient executable code."

— Fritzson, P. (1986). Systems and Tools for Exploratory Programming Overview and Examples. Technical Report LiTH-IDA-R-86-36, Department of Computer and Information Science, Link�ping University, Sweden. Also presented at the Workshop on Programming Environments - Programming Paradigms, Roskilde, Denmark, October 22-24, 1986. (bibtex),


Link to this Page