Since computers' internals are all zeroes and ones, it well behooves us humans to come up with some more convenient way to tell the computers what to do. Thus programming languages. By learning a few arcane incantations, you can command your computer to do ANYTHING! Well, unless there is a bug, of course. Some people think we just be able to speak naturally to the computer and have it understand.

High level abstraction for specifying the data manipulations that occur inside a computer. Different programming languages embody different ideas on good abstractions. The most common language paradigms are object-oriented, procedural, and functional. Examples of object-oriented languages are Simula, Java, and Smalltalk. Examples of procedural languages are Fortran, Cobol, and C++. Examples of functional languages are Lisp, and Forth.See also religion.

A specification of tokens, a grammar,
and (if you're lucky) formal semantics. Usually degrades into a lot of hand waving and holy wars. Computers ultimately read things written in programming languages, but most of the fuss is about whether or not a human enjoys reading, writing, and maintaining the programs.

One of the more irrelevant parts of designing a computer system. All too often, the programming language is chosen even before the requirements of the computer system are known.

Why? Well, the considerations in choosing a particular programming language include the following:

the problem domain
Unarguably, some programming languages are better-suited to particular problem domains than others. However, the real restriction here is availability. If you could get OO-COBOLscript, I'm sure it would be a reasonable choice for web development in some places (see available resource below).
the exising system
it may be that the development means changes to an existing system. Budgetry restraints usually preclude rewriting in a different programming language.
available resource
Further constraints in choosing a programming language arise from the day-to-day availability of appropriately-skill programmers. Your fancy new ASP server might be best written in C++ but all your C++ coders may be working on something more important. You either delay the project or rethink.

So, even before you've got the user requirements written, you know it's being coded in Visual Basic...

There are three main types of programming languages. Imperative programming languages are the most commonly used languages. Examples of this type of language are C, C++, Ada, Fortran, Algol, Java, Python, Perl, and so on. Programming in an imperative language is generally easier than in functional or declarative languages since it involves a more linear process of solving problems. These languages have been evolving more and more toward the object-oriented paradigm.

Functional programming languages are different from imperative languages in the fact that everything is written and utilized as functions. Lisp, Scheme, ML, and Haskell are examples of functional programming languages. The artificial intelligence programming domain has been heavily influenced by Lisp, and some of its successors. Over time some of the functional programming languages have begun to add certain concepts from imperative languages, but they still remain remarkably different in almost every area.

Declarative programming languages, more often called logic programming languages, consist of declarations -- statements or propositions -- written in mathematical logic. The only real language of note within this type of languages is Prolog, which stands for programming logic. Prolog is based on predicate calculus and an inference rule called resolution, which only works on a special kind of proposition called a Horn clause. The process of resolution is really proof by contradiction. Declarative programming languages require a totally different mindset to program in than imperative or functional languages. A declarative language allows a programmer to describe the desired results using declarations, and the computer figures out how to achieve those results. An imperative language makes the programmer tell the computer both what they want, as well as the exact way to achieve the goal.

Programming languages as a whole can also be divided into two groups. Compiled languages, and interpreted languages. Examples of compiled languages are C++, Ada, and Fortran. Interpreted languages include Lisp, and Perl. Java does not fall completely into either of these categories as the source code is compiled into Java bytecode which, when executed, is interpreted by the Java Virtual Machine. Python is also slightly skewed in the fact that it is interpreted, but can interface with or be interfaced with compiled languages. Python can also be compiled into Java bytecode. Thus, Java and Python beg the addition of a third group of languages that are both compiled and/or interpreted.

Log in or register to write something here or to contact authors.