The Major Paradigms

A paradigm specifies a particular way of thinking about computation. It is a complete, closed system that gives the programmer a metaphor about the underlying model of computation. It is easy to switch between languages within a paradigm and relatively difficult to switch between paradigms.


Typical procedural languages are C, Pascal, and Cobol. These are characterized by procedures, loops, assignment statements and consideration by the programmer of successive changes to the underlying machine memory state. Work gets done by executing assignments which change the state and using loops to make large numbers of state changes. These languages grew naturally out of the Von Neumann computer architecture.

Object Oriented

Typical OO languages are Smalltalk, Java, and Eiffel. These are characterized by classes and objects. The client-server model of computation is inherent in this model. Work gets done by sending messages from clients to servers which execute methods to fulfill the services. The focus of design is on the servers and their services. Object oriented languages permit excellent coherence between external systems being modelled and the program that corresponds to them. These languages originated in the world of simulation.


Typical functional languages are lisp, ML, and Haskel. These are characterized by heavy use of recursive functions, including higher ordered functions which are functions that take other functions as parameters and return functions as return values. Work gets done by evaluating expressions that consist mostly of function calls. Artificial intelligence is usually explored with functional languages. The best existing Y2K analyzer (of Cobol programs) is written in ML. Functional languages originated in the world of mathematics and recursive function theory.


Prolog is the most commonly known logic language. It is characterized by the definitions of relationships between elements. Work gets done by querying the system for consequences of the defined relationships. It does not have the "feel" of being an algorithmic language as the method of computation is built into the system.


Concurrent Pascal, Linda, and Java are concurrent programming languages. They are characterized by processes and threads. Work gets done by executing independent or cooperating processes on actual or simulated parallel hardware. There are also fine-trained concurrent languages, such as Occam, intended for specific parallel architectures, in this case the Transputer.

High Performance

High performance languages are usually simple and static, permitting compilers to do a very good job of optimization. Fortran is often used this way. Highly numeric computing on Cray supercomputers is usually done in such languages. The simplicity of the language aids the compiler in mapping operations (usually loops) to the various parallel hardware elements.