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
Many mathematicians, however, use computer programs to represent and manipulate mathematics. They are used in research projects and in instruction. The abundance of inexpensive and powerful computers
has fostered growth of the experimental side of mathematics. The choice of language can be a significant factor for ease in development, maintenance, and modification of software systems targeted at
specialized research and instructional areas. The user, designer, and implementer are often the same person. 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 good approach for developing software is to use evolutionary (or "middle out") design. A skeleton system is written to meet the initially known requirements for the work. As research progresses the
skeleton is "fleshed out" and modified to meet the emerging needs of the project. We need, for this work, a language and methodology
that allow software to be developed and modified easily.
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 allowing a mathematician to create a language specifically designed for a particular subject area.
In the realm of conventional compiled languages this would require writing a custom compiler – a formidable task. I have used Forth as a base
language. Forth is a language suited for writing application-oriented languages. It provides the moral equivalent of writing a compiler, but is viable for a working mathematician.
The JOMA article "Evolution of a Computer Application" introduces the Forth language and illustrates the evolutionary approach. It uses, as an example, the development of Groups32 over a ten year
period. [ JOMA article preprint(pdf) ]