The methodology I have described in this article involves creating a special-purpose, problem-oriented language. I use a base language (Forth) that permits users to get involved in the creation of the programming language. Forth provides access to memory, the input stream(s), and the process of compilation. (Note 12) With this access one can implement almost any type of data structure or language syntax. (Note 13)
A special-purpose language provides a means of expression that is conceptually closer to the application area. In Groups32 I have used the ability to conceptualize in terms of groups, subgroups, sets, etc. Notice that, while early definitions are in terms of integers and addresses, later definitions are expressed more in terms of group elements, subgroups, etc.
I have used a "middle out" approach to the design and implementation of a software system: A rudimentary, functional, system is created first. This core system is the major tool in the development of more extensive and refined systems.
I have used this methodology to produce systems for research as well as for instruction. These systems provide an interactive computing environment. They are extensible: In research, a system can be extended and modified to meet the needs that arise as a project progresses; in instruction, a system can be tailored to the needs of a particular class.