Tuesday, May 03, 2005

Categories of programming languages

The scope of our discussions in articles presented in this blogger is automation through language, also known as programming, software development and software engineering. Since language is consequential, we should study the categories of problem domains first. The current universe of programming can be divided into four main categories of device, system, technology and application. Paradigm contest presents the view for turning our attention away from programming paradigms.

This note also discusses the validity of the term “Software Engineering” with regard to the domain of applications.

Device Category

The device category comprises of isolated hardware components such as graphic or sound card. Programs in this context are generally known as device drivers. The standard language for programming devices is C, which also facilitates inline assembly.

System Category

A system is a coherent set of devices. An operating system is a driver for a complex system providing a sophisticated abstraction, which is more than the sum of its hardware parts. The system category includes system programs such as virtual memory manager. Experience shows that C is the appropriate language for dealing with internal components of an operating system.

A component like the memory manager must interact with low-level device drivers written in C. It is possible to use C++ at this low level so long as the role of C++ is confined to providing an interface to users of memory manager. However, memory manager is for internal use by the operating system, and provides a few system calls for higher-level system programs. It is wise to avoid forcing the use of C++ and object-oriented software at low levels of an operating system.

System programs cover a range of software specific to a particular platform. For instance a BASIC interpreter or a file manager are system programs. This category also includes compilers. Once a C++ compiler becomes available for a particular platform, it is better to use C++ for developing other higher-level system programs.

Technology Category

An Internet browser is actually an application. However, it is significant enough to be treated like a technology in a manner similar to a database technology. The characteristic of this category is the fact that these technologies have their own programming medium.

We use SQL to deal with a database and HTML to interact with a browser. PHP is the imbedded language that allows browsers to interact with other technologies such as database, or Z++ components. However, database is a pure technology and does not need a parallel similar to PHP for the browser technology.

Application Category

The space of applications is of particular interest to us. This category consists of problems for which software are designed and developed in isolation. That is, when developing an application one does not write a program because nothing is being programmed. Instead, one solves the problems in this domain by crafting software entirely within the abstractions of a language, thus the term software engineering.

Indeed, the scientifically significant characteristic of this category of problems is the fact that the category lends itself to an abstract language. This separates the domain of applications from programming in that a programmer must be aware of characteristics of the target device.

A programmer needs to be aware of the target device because he must write code to program the target. A software engineer, on the other hand, deals with abstractions that he/she learned at college. It is the responsibility of tools to preserve the abstractions uniformly on all platforms.


Each technology deals with a different form of abstraction, and therefore, we have created a different language for interacting with each of them, such as SQL or HTML. However, the software in the domain of applications must be able to interact with such technologies as well as the operating system in a manner that is usually referred to as technology-neutral.

The term software engineering is only applicable to the domains that lend themselves to formalization. The application category admits an abstract language analogous to a formalism so engineers can learn abstract and technology independent techniques. Obviously, a software engineer needs some form of specialization in areas such as email protocols, insurance or finance.

Z++ programming language is the formalism for solving problems in the category of applications.

Labels: , , , ,