When we learn a new programming language there are often concepts that we can bring along from previous languages we have encountered. For example, most developers can articulate the guidelines concerning what constitutes a good variable name. These rules have evolved over a long period of time and apply with variations to virtually every language. Similar sorts of guidelines exist for other programming language elements such as control structures. But what if your new language doesn't have any variables or control structures?
Zoea is the biggest change in programming language evolution since high level languages were introduced in the 1950s. Instead of describing a program as an algorithm made up of a set of statements Zoea defines a program through examples of inputs and outputs - resembling a set of test cases. The Zoea language doesn't contain any variables, functions, statements or control structures. Rather programs in Zoea are largely just static data. The Zoea compiler uses AI to generate the required program from the test cases.
Not surprisingly software development with Zoea is a completely different experience. In terms of recognisable programming paradigms Zoea can be characterised as declarative which means that there is no attempt to specify the control structure. More remarkably there is no attempt to describe the algorithm except for the case where Zoea programs are included in other programs.
The task of creating a program in Zoea has more in common with software testing than with conventional software development. Zoea programs are composed of a set of test cases so it is natural to identify and develop the main cases first, and continue to add more cases until the behaviour of the program is complete.
Zoea's composition and derived value mechanisms can also influence the Zoea software development process. It is easiest to adopt a bottom up development approach when using composition. Derived values also facilitate an iterative development style but they afford complete freedom in terms of direction - front to back, back to front and middle out in any combination are equally possible.
In parallel with the development of the Zoea language a set of programming idioms has also evolved. Given that these are composed of static data they are unlike familiar examples from other languages. One early example is the use of symbolic logical values such as 'is_adult' or 'can_vote' rather than simple boolean values. This approach makes test cases more readable but also reduces the number of test cases required and speeds up compilation. Another related pattern is to factor complex conditional logic into a separate program that serves as a decision table. This strategy can prevent an excessive proliferation of test cases that might otherwise occur. Such decision tables can also be hierarchical if necessary. Many other Zoea idioms have been identified.
Zoea is a very different language that has the potential to revolutionise software development. While it is a simple language it is just as important that it is easy to use. Idioms play an important part in helping people to use Zoea effectively.