Monday, April 10, 2006

The evolution of software formalism

The purpose of this article is to illustrate the nature of software formalism, its historical evolution, and its role in designing and developing application software. In previous articles I have clarified the differences between programming devices, and developing applications. Briefly stated, software applications are abstractions independent of computing devices on which they run.

From this point on the term software will mean application software, as opposed to system programs. A program is a sequence of code composed with focus mainly on the device being programmed. An application, on the other hand, is composed with no attention to any particular device.

Initially, automation was conceived as a direct encoding of algorithms in a programming language, such as FORTRAN. Later, software formalism was conceived as paradigms, such as logic or functional paradigms. Whether object-orientation is a paradigm or not is still a subject for debate.

A scientific formalism goes through several phases. Initially, the process of divesting abstractions takes place over a relatively long period of time. Isolated abstract concepts then begin forming a coherent linguistic medium for expressing problems in a particular domain. Eventually, the medium is enriched with techniques for solving the problems that can be modeled within the formalism. At its final stage of maturity, the formalism is studied for its own sake, dusted and polished.

Software formalism is distinct from mathematical formulations of theories. Nonetheless, it is applied precisely in the same manner as mathematics is applied in modeling real-world problems. An application is composed of loops, selections, threads, components and template patterns, in the same sense that a theory is formulated in terms of tangents, derivatives and differential equations.

An important aspect of formalism is its ability to grow monotonically in order to extend the scope of its problem domains. Unlike mathematics, however, software applications are sensitive to fluctuations in the linguistic medium of formalism. Presently, we have reached the proper understanding of a reasonable formalism for all conceivable domains of applications. There is no scientific or technological reason for the existence of languages supporting a certain set of devices or platforms.

The discoveries of the past few decades indicate that future extensions will not contradict our current view of abstractions. Instead, new abstractions will be orthogonal to the existing ones, and the formalism will continue to grow monotonically. For instance, object-orientation extends the notion of abstract data type, and component-orientation is orthogonal to object-orientation.

Developers build metal patterns for techniques that they learn or create. Patterns are linguistic entities associated with metal images corresponding to relevant abstractions. When learning software engineering, initial patterns are almost identical to the linguistic constructs of the language providing the medium for software formalism. However, even the patterns of an experienced engineer resemble the statements of some programming language.

It goes without saying that learning patterns in English and implementing software in French is not an ideal scenario. For instance, geometrical figures provide a natural medium for dealing with patterns in geometry, while equations are more natural for dealing with algebraic patterns. However, in terms of programming, algebra and geometry interoperate with no consideration for incompatibility.

Attempting to map a pattern to different languages will result in unavoidable defects. Unlike other branches of engineering, a book of patterns illustrated with pseudo-code is not the proper way to train software engineers. The state of software formalism is quite mature and ready for a linguistic approximation. The programming language Z++ approximates the software formalism quite closely. This closeness of medium and formalism avoids the English/French effect in software development.

Z++ is a monotonic linguistic foundation for future research, just as it is a firm abstract medium for developing platform independent applications.

Z++ is freely available from ZHMicro.

Labels: , , ,