A programming language or computer language is a standardized communication technique for expressing instructions to a computer. It is a set of syntactic and semantic rules used to define computer programs. A language enables a programmer to precisely specify what data a computer will act upon, how these data will be stored/transmitted, and precisely what actions to take under various circumstances.
==Features of a programming language==
Each programming language can be thought of as a set of formal specifications concerning syntax, vocabulary, and meaning. These specifications usually include: * Data and Data Structures * Instruction and Control Flow * Reference Mechanisms and Re-use * Design Philosophy Most languages that are widely used, or have been used for a considerable period of time, have standardization bodies that meet regularly to create and publish formal definitions of the language, and discuss extending or supplementing the already extant definitions.
Most languages also provide ways to assemble complex data structures from built-in types and to associate names with these new combined types (using arrays, lists, stacks, files). Object oriented languages allow the programmer to define data-types called "Objects" which have their own intrinsic functions and variables (called methods and attributes respectively). A program containing objects allows the objects to operate as independent but interacting sub-programs: this interaction can be designed at coding time to model or simulate real-life interacting objects. This is a very useful, and intuitive, functionality. Languages such as Python and Ruby have developed as OO (Object oriented) languages. They are comparatively easy to learn and to use, and are gaining popularity in professional programming circles, as well as being accessible to non-professionals. It is commonly thought that object-orientation makes languages more intuitive, increasing the public availability and power of customised computer applications.
===Instruction and control flow===
Once data has been specified, the machine must be instructed how to perform operations on the data. Elementary statements may be specified using keywords or may be indicated using some well-defined grammatical structure. Each language takes units of these well-behaved statements and combines them using some ordering system. Depending on the language, differing methods of grouping these elementary statements exist. This allows one to write programs that are able to cover a variety of input, instead of being limited to a small number of cases. Furthermore, beyond the data manipulation instructions, other typical instructions in a language are those used for control flow (branches, definitions by cases, loops, backtracking, functional composition).
For the above-mentioned purposes, each language has been developed using a special design or philosophy. Some aspect or another is particularly stressed by the way the language uses data structures, or by which its special notation encourages certain ways of solving problems or expressing their structure. Since programming languages are artificial languages, they require a high degree of discipline to accurately specify which operations are desired. Programming languages are not error tolerant; however, the burden of recognising and using the special vocabulary is reduced by help messages generated by the programming language implementation. There are a few languages which offer a high degree of freedom in allowing self-modification in which a program re-writes parts of itself to handle new cases. Typically, only machine language, Prolog, PostScript, and the members of the Lisp family (Common Lisp, Scheme) provide this capability. Some languages such as MUMPS and is called dynamic recompilation; emulators and other virtual machines exploit this technique for greater performance. There are a variety of ways to classify programming languages. The distinctions are not clear-cut; a particular language standard may be implemented in multiple classifications. For example, a language may have both compiled and interpreted implementations. In addition, most compiled languages contain some run-time interpreted features. The most notable example is the familiar I/O format string, which is written in a specialized, little language and which is used to describe how to convert program data to or from an external representation. This string is typically interpreted at run time by a specialized format-language interpreter program included in the run-time support libraries. Many programmers have found the flexibility of this arrangement to be very valuable.
==History of programming languages==
The development of programming languages, unsurprisingly, follows closely the development of the physical and electronic processes used in today's computers. Charles Babbage is often credited with designing the first computer-like machines, which had several programs written for them (in the equivalent of assembly language) by Ada Lovelace. In the 1940s the first recognisably modern, electrically powered computers were created. Some military calculation needs were a driving force in early computer development, such as encryption, decryption, trajectory calculation and massive number crunching needed in the development of atomic bombs. At that time, computers were extremely large, slow and expensive: advances in electronic technology in the post-war years led to the construction of more practical electronic computers. At that time only Konrad Zuse imagined the use of a programming language (developed eventually as [[Plankalk�l]]) like those of today for solving problems. Subsequent breakthroughs in electronic technology (transistors, integrated circuits, and chips) drove the development of increasingly reliable and more usable computers. This was paralleled by the development of a variety of standardised computer languages to run on them. The improved availability and ease of use of computers led to a much wider circle of people who can deal with computers. The subsequent explosive development has resulted in the Internet, the ubiquity of personal computers, and increased use of computer programming, through more accessible languages such as Python, Visual Basic, etc..
==Classifications of programming languages==
* Array programming language * Concatenative programming language * Concurrent programming language * Declarative programming language * Domain-specific programming language * Dynamic programming language * Educational programming language * Esoteric programming language * Functional programming language * General-purpose programming language * Logic programming language * Object-oriented programming language * Procedural programming language * Scripting programming language
The following are major programming languages used by at least several thousand programmers worldwide:
Special programming language and modules
The rigorous definition of the meaning of programming languages is the subject of Formal semantics.
*List of programming languages
**Alphabetical list of programming languages
**Categorical list of programming languages
**Chronological list of programming languages
**Generational list of programming languages
**List of esoteric programming languages
*Hello world program, examples of a simple program in many different programming languages
*Software engineering and List of software engineering topics
== External links ==
*Syntax Patterns for Various Languages *Wikisource Source Code Examples *99 Bottles of Beer - One application written in 621 different programming languages. *Open Directory - Computer Programming Languages af:Programmeertaal bg:Език за програмиране [[ca:Llenguatge Inform�tic]] cs:Programování da:Programmeringssprog de:Programmiersprache et:Programmeerimiskeel eo:Komputillingvo [[es:Lenguaje de programaci�n]] fr:Programmation he:שפת תכנות hr:Programski jezik ia:Linguage de programmation it:Linguaggio di programmazione ja:プログラミング言語 ko:프로그래밍 lt:Programavimo kalba hu:Programozási_nyelv nl:Programmeertaal [[no:Programmeringsspr�k]] [[pl:J%EAzyk programowania]] pt:Linguagens_de_programação fi:Ohjelmointikieli sl:Programski jezik [[sv:Programmeringsspr�k]] tokipona:toki pali tr:programlama dilleri zh-cn:程序设计语言 zh-tw:程式設計語言