Penguin
Note: You are viewing an old revision of this page. View the current version.
If the Tao is great, then the operating system is great. If the operating system is great, then the compiler is great. If the compiler is great, then the application is great. The user is pleased and there is harmony in the world.

[...?

The Tao gave birth to machine language. Machine language gave birth to the assembler. The assembler gave birth to the compiler. Now there are ten thousand languages.

Each language has its purpose, however humble. Each language expresses the Yin and Yang of software. Each language has its place within the Tao.

But do not program in COBOL if you can avoid it.

-- Geoffrey James, The Tao of Programming

A human-readable language to control computers. SourceCode written in a ProgrammingLanguage may either be compiled into a BinaryExecutable or ByteCode by a Compiler or executed directly by means of an Interpreter.

Very high level general purpose languages

Machine oriented general purpose languages

Lisp is not included here, because while Lisp is closely tided to the lisp machines, the lisp machines were derived from the structure and purpose of lisp and not visa versa.

Systems programming languages

These languages are designed for low-level software: drivers, OperatingSystems?, game engines, any code that has to go really fast. They tend to be simplistic languages that closely follow the VonNeumann architecture CPUs are based on which allows skilled programmers to predict and control exactly how their code will be executed.

Strangely, to date they tend to be very "unsafe" languages too. In code written in C, the systems programming language for Unix, it's easy to introduce tiny bugs that mysteriously screw everthing up from time to time -- not something you want your OperatingSystem to do. Modula2 is the exception to this rule.

Imperative programming languages

Imperative programming languages are those in which the program tells the computer do this, do that and do this next thing. The implementation is responsible for making sure that the results were as if these things had all been done, and in the specified order.

Functional programming languages

Functional programming is a paradigm based loosely on the LambdaCalculus approach to ComputerScience, in which everything in a program is a function.

In pure functional programming, there are no side effects; you cannot assign a value to a variable more than once, only return values from functions. Therefor, a function's return value depends only on the parameters passed. As a result, you can even mathematically prove the correctness of a program. You can also easily "memoize" functions, ie shortcircuiting their execution by looking up the return value of a previous call to a computationally expensive function for the same set of arguments in a cache. It also allows the computer to execute all parts of the program in arbitrary order to arrive and the desired result.

Programmers generally prefer imperative programming as they find it easier to understand and build practical applications with. Indeed, some things that depend on side effects and are easy in imperative programming are unreasonably hard to solve in pure functional programming - I/O is an example. However, problems that may seem terribly difficult in imperative programming are often trivial in pure functional programming.

It has been theorised this preference for imperative programming is a result of most people learning imperative programming languages (C++, BASIC, Java etc). If they even learn functional programming at all, it is usually much later and in much less depth, so they never really learn to think like a functional programmer. Perhaps if more programmers were taught to think in a functional style from their infancy we would see more applications written in functional languages.

Object oriented programming languages

As that page, ObjectOrientation is mostly a style and only to an extent a paradigm of programming, and so need not be supported by a ProgrammingLanguage to write programs in object oriented fashion. The following languages are ones which do support this style directly:

Obfuscated languages

These languages are not intended to be used for serious work, but to stretch the brain.

You might also be interested in PolyGlot.

Special purpose languages

Special purpose languages are designed to solve a very narrow problem very well. Generally they imbbed domain-knowledge about the domain in which they are specialised, which makes them great in the domain but less good outside it.

Deprecated languages

Deprecated languages are still around because there are many millions of lines of code and many thousands of systems that depend on them. Generally depricated due their their age and cruftiness, in times of crisis (such as the y2k debarkle) programmers who are willing to speak these languages can have great leverage.