I address this article to mathematicians and mathematics educators. It is not about the use of a piece of software but rather about a methodology for producing software and about the electronic representation and manipulation of mathematics. In the article I show how a mathematician can produce a special purpose language for a subject area to facilitate writing programs in that area.
Computer programs are often "end products" like books -- they remain relatively fixed after creation. The design and implementation of large software projects are most often in the hands of teams of experts in computer programming. The end user is not interested in the programming language or the developmental techniques, and, in fact, these things become invisible in the end product. The choice of language, however, can be a significant factor for ease in development, maintenance, and modification.
In this article I discuss production of dynamic software systems that are targeted at specialized research and instructional areas and are extended and modified as part of their use. The user, designer, and implementer are often the same person. We need, for this work, a language and methodology that allow software to be developed and modified easily. We need to make it feasible for a mathematician, whose expertise lies in other areas, to become involved in the task of creating languages and software systems.
A source of difficulty in programming with conventional general purpose languages is the gap between the means of expression provided by the language and the concepts of the subject area. We can reduce this gap by using a language specifically designed for a particular subject area. To do this in the realm of conventional compiled languages would require writing a custom compiler -- a formidable task. I will discuss and illustrate an approach that is the moral equivalent of writing a compiler but that is viable for a working mathematician.
It has been clear for some time that one cannot portray the process of creation by writing an article that describes it. The reader must have direct experience with the systems under discussion. This journal facilitates exposition that combines written material and access to software. We are interested in electronic representation and manipulation of mathematics and in factors that influence the development of software. The best way to address these matters is to discuss the development and evolution of a particular software system. I have chosen a system written for elementary group theory, Groups32, because the subject matter is familiar to most mathematicians.
I will not distinguish in this article between research and instructional systems. Groups32 is not an "instructional program" -- that is, it does not contain expository material to teach group theory. Rather, it is a research program that has been made suitable for instructional use. It provides students with a tool for experimentation. In a theoretical abstract algebra course, I have found it a good system for providing experience, examples, and experimentation.
My first step in developing what came to be Groups32 was inspired by Kenneth Almquist’s electronic publication in 1989 of a set of tables for groups of orders 1-16. I wrote the first stages of the program (then Groups16) just to solve a problem stemming from an accident: Almquist's posting contained some tables that represented isomorphic groups. A natural question was to determine what one must know about groups of orders 1-16 to determine quickly whether two tables represent isomorphic groups. Eventually, Groups32 evolved into a more substantial program that now contains tables for all groups of orders 1-32 and a collection of algorithms to compute a variety of information about these groups. I developed the program using the same techniques as for several special-purpose research systems.