PC History | Internet History | Operating Systems | Languages | Language Examples
Most Popular | Best Environment/Application - Features | Imperative or Procedural | Machine Language (1GL) | Assembly Language (2GL) | Third Generation Languages (3GL) | 4GL | 5GL | Low Level 3GLs | Compilers, Interpreters, Bytecode: | Compilers | Hybrid | Performance and Ease of Use | Expressiveness | Performance: | RISC - Reduced Instruction Set Computers

Most Popular Languages (rank):   See also Language Examples

IE1 TIO2 UD3 CL Lang TIO2
2016 2014 change
1 1 3 6 Java 20.5% 16.1% 4.4%
2 2 1 4 C 14.6% 17.2% -2.6%
3 3 2 3 C++ 6.7% 8.7% -2.0%
4 4 8 10 Python 4.3% 3.1% 1.2%
5 5 4 7 C# 4.3% 5.7% -1.4%
6 16     R 1.3%    
7 6 6 1 PHP 3.0% 6.1% -3.1%
8 7 7 5 JavaScript 2.6% 2.0% 0.3%
15 8   9 Perl 2.5% 1.6% 0.9%
9 9 10 8 Ruby 2.3% 1.2% 1.0%
  10     Visual Basic .NET 2.3% 1.9% 0.7%
59 11     Object Pascal
(Delphi)
2.2% 0.7% 1.3%
IE1 TIO2 UD3 CL Lang TIO2
2016 2014 change
10 18 16   MATLAB 1.2% 0.6% 0.6%
11 19 9 2 SQL 1.2% 0.7% 0.5%
12       Shell      
13       GO      
14 12     Assembly 2.2% 0.5% 1.3%
16 14     Swift * 1.6%   1.6%
17 13   11 Visual Basic 1.7% 4.8% -3.1%
18       Arduino      
19 32     Scala 0.6    
20 15 5   Objective-C * 1.5% 9.0% -7.5%
  17     Groovy 1.2%    
25 20     D 1.1%  
36 34     Erlang 0.4%  
Pascal (), Lisp (30) and, COBOL (42) had made the top 20 in 2013 with less than 1%
* Apple replaced Objective-C with Swift, a language primarily for developing apps for Apple products iOS, OS X, watchOS, and tvOS.

Sources:
1. IE - The Top Programming Languages 2015 - IEEE Spectrum
2. TIO - TIOBE 2016 - The ratings are based on the number of skilled engineers world-wide, courses and third party vendors.
3. UD - Best Programming Languages to Learn according to udemy.com
  Udemy did not count special purpose languages like R for statistical computation and MATLAB for matrix manipulations, plotting of functions etc.

- CL - The most searches for programmers on Craigslist in 2011 according to LangPop.com (not around now)

What do the big web sites use:
Google: C, C++, Go, Java, Python, PHP, AJAX
Facebook: PHP, C++, Java, Python, FBML, AJAX, Erlang, D, XHP
Twitter: C++, Java, Scala
Amazon: Java, J2EE, C++, Perl

Books on Amazon: Java - 10,836; C - 32,259; C++ 7,020; Python - 1,925; C# - 2,780;
  R - 4,511; PHP - 1,849; JavaScript - 4,911; Ruby 739; MATLAB - 529;
  SQL - 7,548; GO - 454; Perl 4,545; Swift - 349; Objective-C - 19,042;
  Visual basic - 9,772

Best Environment/Application - Features:
Web | Mobile | Enterprise | Embedded (processor in your car etc)
Language Best Environment IMP OO Fun EX Per Typ GC Inh c/i
Java   I y F 1.4 2 s ms s cb
C   I     1 1 s     c
C++   I y F 1.4 1.5 s na m c
Python     I y F 3.7 51 d rc m i*
C#   I y F 1.4 3 s ms s cb
PHP       I y F 1.6 30 d y   I
JavaScript     I Y F 0.8 11 d y   I
Ruby     I y F 2.8 65 d ms s i
Shell                        
GO     I   F 3.7 1.8 s     c
Assembly       I     1         i
Perl     I Y F 3.7 50 d,s rc m a
Swift
(Objective-c)
    I y       s tp   i
(Visual) Basic       I y E     s rc na i
Scala   I y F 5.5 2.5        
Delphi
(Object Pascal)
    I y             c
SQL                        
Lisp           F            

Sources:
Programming Language Comparison | JVoegel.com
IEEE
Language Comparison Table - Rosetta Code

Imp - Imperative (see below)
Fun - Functional (see below)
OO - Object Oriented
Ex - Expressiveness - Higher=Easier to use relative to C (see below)
Per - Performance (speed) - Higher=slower relative to C (see below)
Typing: s - Static, d-Dynamic
Inh - Inheritance: s - Single class Multiple interfaces, m - multiple
GC - Garbage Collection: ms - Mark and Sweep, rc - reference counting
  tp- Template Partial
  See also MemoryManagement.org
c/i - Compiled or Interpreted
  cb Compiled into bytecode. (see below)
  * Some implementations of Python and PHP can create bytecode.   The ones I'm using here are interpreted.   a .pyc file is Python bytecode.  

Databases:
Google uses BigTable while others use MySQL (although Google also uses a heavily modified version of MySQL for advertising-related purposes).

Paradigms:
Language Comparison Table - Rosetta Code
Comparison of programming languages - Wikipedia

Imperative or Procedural languages specify how to solve a problem.
Declarative languages - 4th Generation Languages liks SQL specify what results you want.
The definition of a functional language is unclear and different lists vary as to what is a functional language.
Functional Languages treat computation as the evaluation of mathematical functions and avoids changing-state and mutable data. They use side effect free functions as a basic building block in the language. Programming is done with expressions [def func(a): return a*a] or declarations instead of statements [x=0 if x<0 else 1]. Rosetta Code lists Perl, JavaScript, Ruby and Scala as functional languages. Some list functional as a sub-category of Imperative.
Wikipedia includes Java, C++, Python, PHP as functional.
See Rosetta Code and Why functional languages? - Stack Overflow

Other Taxonomies of programming languages.
None of the main programming paradigms have a precise, globally unanimous definition.
One example:

Types of Languages:
 - Imperative/procedural languages ("block-structured")
    Pascal, Fortran, C, Ada...
 - Functional languages ("expression evaluation")
    Scheme, LISP, Haskell...
 - Object-oriented (encapsulation, "message passing")
      Smalltalk, Java, Objective-C, C++
 - Logic-programming
     Prolog
 - Scripting languages
     Perl, Ruby, Python
See:
Programming Languages and Software Engineering | Texas A&M (Power Point)
programming languages - Truly understanding the difference between procedural and functional - Stack Overflow
Comparison of programming paradigms - Wikipedia
Programming languages - truly understanding the difference between procedural and functional - Stack Overflow

In 2014 Python surpassed Java as the most popular introductory language in CS departments. Quora
How top 10 programming languages work | Jakub Jedryszek

See Compiled and Interpreted Languages below

Other Language references:
Python & Java: A Side-by-Side Comparison
Language Examples
Java vs. Python: Why Python can be more productive?
My programming language benchmark: analyses | Attractive Chaos
Language types | Curious Efficiency
Memory management in various languages - Memory Management Reference 4.0 documentation
YourLanguageSucks - Theory.org Wiki


Types of languages by Generation and level:
Examples to compute PAY = SALARY - TAXES
Machine Language First Generation Languages (1GL):
Computers were originally programmed in machine language with a numeric operator and
 operand (e.g. the memory location where data is stored).
The IBM 7074 (1959), which I used in the late 60's, did calculations on 3 special locations called accumulators. You moved data from memory to accumulators, did your calculation and moved the result back to memory. Op Operand e.g. +131002 : 13 - Clear and add to accumulator 1, 1002 is the memory location of SALARY. -141003 Subtract contents of memory addr 1003 (TAXES) from accumulator 1 +121004 Store results in memory addr 1004 (PAY) Because computers were expensive and programmers were cheap we did not have a development/test computer and had to wait for a midnight shift on a production computer to test. Assembling and testing a program was a time consuming task, so we wrote updates in machine code and inserted it in the previously assembled machine code. These modified section of code were called patches. They were inserted with decks of punch cards. which were read in to overlay the original machine code loaded from tape. See IBM 7070 Operation Codes The 7070 instructions had two parts an op code and an address. There were 115 op codes. An Intel x86-64 processor instruction has six parts and over 175 op codes. Over 1000 instructions with different options for each op code.
See intel instruction format. See also Reduced Instruction Set Computers (RISC) below. Assembly Language Second Generation Languages (2GL) In the 1950's allowed symbolic representation of commands and were usually translated 1 to 1, one assembly language instruction for 1 machine language instruction. e.g. Assembly code for above. Label OP Operand CALC ZA1 SALARY (Zero accumulator 1 and add SALARY to it) S1 TAXES (Subtract TAXES from accumulator 1) ST1 PAY (Zero PAY and store accumulator 1 in PAY) The assembler would assign an actual memory location for SALARY, TAXES AND PAY. Then would create machine code like that above which was then executed. See also Reference Manual: IBM 7070 Series Programin Systems: Autocoder at bitsavers Search for more on assembly language Higher Level Languages: Third Generation (3GL) FORTRAN, COBOL, BASIC, PASCAL, PL-1, PHP, Python Look more like english. e.g. PAY = SALARY - TAXES They are compiled to create either assembly code, which is then assembled to machine code or produce machine code directly which is run. Some (e.g. Perl, PHP, Python) are interpreted (You run the source code and an interpreter creates machine code on the fly.). In the 80's and 90's lower level 3GL's ( C, C++, C#, Java ) became popular. See Low level 3GLs
Very High-Level or Natural Languages: (Non-procedural languages) Fourth Generation (4GL)
There is no consensus about what constitutes a fourth or fifth generation language. Some say there is no consensus on any generation definition.
1GL thru 3GLs are procedural in nature i.e., They define HOW to do it. i.e., The procedures require the knowledge of HOW the problem will be solved.
Contrary to them, 4GLs are non procedural. That is only WHAT of the problem is coded.
Structured Query Language (SQL) is a variation on 4GLs.
  
e.g.  A SQL report showing the total units sold for each product, by customer, might look like this.
   TABLE FILE SALES
	SUM UNITS BY MONTH BY CUSTOMER BY PRODUCT
	ON CUSTOMER SUBTOTAL PAGE BREAK
	END
Other popular query languages are Query-by-Example, known as QBE, and Intellect.
Fifth Generation Language (5GL)
No consensus:
What is Fifth Generation Programming Language (5GL)? - Definition from Techopedia says,
Considerable research has been invested in the 1980s and 1990s, into the development of 5GLs. As larger programs were built, it became apparent that the approach of finding an algorithm given a problem description, was a very hard problem in itself.
Most of these efforts were abandoned. The term is now frequently misused.

Definition 1: Uses a visual or graphical development interface to create source language that is usually compiled with a 3GL or 4GL language compiler.
See:
See What is programming language generations? - Definition from WhatIs.com

YouTube VB.NET Tutorial For Beginners - Creating Classes
Overview of Visual Studio 2015 Products

Definition 2: A computer language in which a problem is presented as a series of facts or constraints instead of as a specific algorithm; the system of facts can then be queried; considered the most "natural" of languages.

- Wikipedia says Fifth-generation languages are used mainly in artificial intelligence research.
They also say, "Vendors have been known on occasion to advertise their languages as 5GL. Most of the time they actually sell 4GLs with a higher level of automation and knowledge base."

- PROLOG (acronym for PROgramming LOGic) is an example of a Logical Programming Language. It uses a form of mathematical logic (predicate calculus) to solve queries on a programmer-given database of facts and rules.

What is programming language generations?


Low Level 3GLs
In the 70's Bell Labs (Dennis Ritchie) developed the C language designed to write systems software (Operating systems, device drivers, etc.). It approaches assembly language in efficiency while still offering high-level language features.

It is now considered a general-purpose language, but is harder to learn than higher level languages.

As Object Oriented languages became popular in the 80's other lower level general purpose languages followed.
Examples are C++, C#, Java.
They are better for system programming and low level operations. But they are also general purpose in that they can address a wide variety of applications and the same code can be compiled for multiple computers. as opposed to assembly language which is unique for each computer processor. They are more complex and harder to learn but are more efficient when executed. See Expressiveness below.


   
Compilers, Interpreters, Bytecode:

1)  Compiled: Compilers take 3GL language code and create either assembly code,
 which is then assembled to machine code or directly to machine code.
  The executable code can be copied and run on any computer with the operating system it was compiled for.
 
or
2) Interpreted:    Interpreters - Interpreters skipped the step of
                       converting the whole program to machine language.
    They convert source code to machine code as they are run.
    You copy the source code and run it on an interpreter for each computer
  you want to use it with
    Interpreters convert the source to machine code on the fly 
 so run slower than compiled code.
      LISP, BASIC and Perl. JavaScript  are interpreted languages.
  
   Compiled languages tend to be 100 times faster for complex calculations
    than interpreted or other bytecode languages.
    There have been compilers written for many interpreted languages.

  Hybrid
     Java and C# are a hybrids.
     They compile to bytecode which will run on any computer with
     an interpreter for it.
     The Java bytecode interpreter, The Java Virtual Machine (JVM)
     is pretty common over a wide range of hardware.
     The bytecode can be run on different computer hardware because
     the JVM handles the hardware specific translation.
     This is often referred to as "write once, run anywhere" (WORA).
     
     Microsoft's Visual Basic .NET and Visual C# compile to Microsoft Intermediate Language (MSIL)
     
     Compilers, on the other hand, require a unique compilation
     for each piece of hardware where the code will run.
     
     The line between interpreted and compiled is no longer as clear as it was
     when such terms were coined. In fact, it's also something of a mistake to 
     consider languages as being either interpreted or compiled, as different 
     implementations of languages may do different things.
     See Is Python interpreted (like Javascript or PHP)? - Stack Overflow

Compilation steps:
Machine code is binary (1's and 0's) code that can be executed directly by the cpu.
Object code is a portion of machine code that hasn't yet been linked into a complete program. It's the machine code for one particular library or module that will make up the completed product.

In the 1980's Object-oriented programming (OOP) became popular, with languages like C++, Objective-C (now swift) & Smalltalk. Java and C# are also Object-oriented languages.

A object-oriented program is a collection of interacting objects, which can be viewed as independent "machines" with a distinct role or responsibility.
See Object-oriented Programming

See:
Basics of Programming: Assembler, Compiler, Interpreter, Linker, Loader

Web Programming:
In the 90's web-aware languages like like Java and Javascript became popular.

PHP, a higher level interpreted language, is the preferred language for dynamic web pages, but ruby and python are popular also.
See CGI (Common Gateway Interface) in examples
See:
PHP vs Python vs Ruby
Python vs. PHP: Choosing your next project's language - Techworld

See Web Programming


Performance and Ease of Use (Expressiveness):
Expressiveness: You will see the term "Expressiveness" applied to languages. An expressive language is easier to read and requires fewer lines of code. A less expressive language is more precise and generally results in improved performance. In the table below a 6 for Python means one statement in it would require 6 in C.
Lang Expressiveness Speed4
State-
ments
1
Lines2 Berkholz3
JavaScript 0.8 11
Assembly 1
C 1 1 1 1
C++ 2.5 1 1.4 1.5
Java 2.5 1.5 1.4 2
C# 1.4 3
PHP 1.6 30
Ruby 2.8 65
Perl 6 6 3.7 50
Python 6 6.5 3.7 51
Scala 5.5 2.5
GO 3.7 1.8
Expressiveness - Higher = Easier to program relative to C
Expressiveness in "Comparison of programming languages" - Wikipedia
1. Code Complete - Steve McConnell - Google Books
2. The Computer Language Benchmarks Game | Debian
3. Programming languages ranked by expressiveness - Donnie Berkholz's Story of Data
Speed-Performance - Higher = Slower relative to C
4. fastest? (64-bit Ubuntu quad core) | Computer Language Benchmarks Game | Debian
5. Programming Languages Benchmarks | github.io

Performance:
Low level languages usually produce faster execution.
Compiled languages are usually fater than interpreted languages.
However, compilers have been written for some interpreted languages like PHP and Python.

Algorithms are more important the processor speed or language efficiency.

Performance varies greatly depending on the type of problem.
Relative speed
Benchmark C Java CPython
3.2
Iron
Python
Jython
Sudoku solving 1.0 1.7 119.9 100.9 136.3
Matrix multiplication 1.0 1.1 53.0 88.1 318.0
Pattern matching 1.0 4.0 3.4 12.9 25.4
Complex Pattern matching 1.0 3.0 3.1 11.1 27.8
Benchmark C Java Python 3
Jovian planet orbits 1.0 2.0 50
Binary Tree 1.0 1.8 51
Chameneos, a Concurrency Game 1.0 1.7 217
Indexed-access to tiny integer-sequence 1.0 1.9 62
Sources: Programming Languages Benchmarks | github.io
The Computer Language Benchmarks Game
  Summary | Computer Language Benchmarks Game
  fastest? (64-bit Ubuntu quad core) | Computer Language Benchmarks Game

Shed Skin is an experimental Python compiler, that can translate pure, but implicitly statically typed Python into C++ and executes at C++ speeds.
PyPy is a just-in-time (Compiles as the first stage of execution) compiled version of Python that runs at about half the speed (takes twice as long) as Shed Skin but is significantly faster than interpreted versions.

Some of these use CPU seconds, which is not a real measure of total time. There are wait states when the program is reading files or library code.
I'm not well versed on benchmarks so a lot more research is needed to get good metrics.

Note: There is a big difference in speed depending on the implementation (who's version) of Python and some other interpreted languages.

At conclusions | The Computer Language Benchmarks Game they say,
"Programming languages are compared against each other as though their designers intended them to be used for the exact same purpose - that just isn't so.
  In order to find the optimal cost/benefit ratio, Wirth used a highly intuitive metric.


RISC - Reduced Instruction Set Computers RISC is a CPU design strategy based on the insight that simplified (as opposed to complex) instructions can provide higher performance. They require more instructions per operation but each instruction takes fewer CPU (Central Processing Unit) cycles. Early computers were RISC computers. Computers in the 70's got more complex with a instructions that included two or more operands. The modern version of RISC design dates to the 1980s. In particular, two projects at Stanford University and University of California, Berkeley.
Popular versions of RISC CPUs are MIPS, Sun SPARC, PowerPC, ARM (used in smart phones and tablets)
The ARM processor has 23 op codes.
See RISC vs. CISC at Stanford.edu
Historical Summary
When a new programming language is designed it is invariably strongly influenced by languages that preceded it. One thread of related languages is:
Algol CPL BCPL B C C++ Java
The list at Timeline of programming languages - Wikipedia shows the predecessor for each language.
Year Lang. Chief developer Company
1943 ENIAC coding system John von Neumann, John Mauchly, J. Presper Eckert, Herman Goldstine U. Penn/US Army
1955 702 Autocoder IBM
1957 Fortran I John Backus IBM
1958 ALGOL 58 ACM
1958 FLOW-MATIC Grace Hopper Rand
1959 LISP John McCarthy MIT
1959 7070 Autocoder IBM
1959 RPG IBM
1961 COBOL 61 Grace Hopper CODASYL commitee
1962 Fortran IV IBM
1962 SNOBOL
1963 CPL Barron, Strachey, et al. U. Cambridge,
U.London
1964 BASIC Kemeny and Kurtz Dartmouth
1964 JCL IBM
1966 APL Iverson IBM
1967 BCPL Richards Cambridge
1969 PL/I IBM
1969 B Bell Labs
1970 Pascal Wirth, Jensen ETH Zurich
1970 Yacc Stephen C. Johnson Bell Labs
1972 Smalltalk Alan Kay, Daniel Henry Holmes Ingalls, Jr., Xerox PARC
1972 SQL IBM
1972 C Dennis Ritchie Bell Labs
1968 LOGO Papert MIT
1975 Altair BASIC Gates, Allen Micro-Soft
1979 AWK Aho, Weinberger, Kernighan Bell Labs
1980 Ada 80 Ichbiah Honeywell
1982 Rexx Mike Cowlishaw IBM
1983 Objective-C Brad Cox Apple
1983 C++ Stroustrup Bell Labs
1986 Object Pascal Apple &
Niklaus Wirth
1987 HyperTalk Dan Winkler Apple
1987 Mathematica Wolfram Research
1987 Perl Wall SDC
1989 Object REXX Simon C. Nash IBM
1991 Python Van Rossum Python Software Foundation
1995 PHP Rasmus Lerdorf
1995 Java James Gosling Sun Microsystems
1995 JavaScript Brendan Eich Netscape
1995 Delphi Anders Hejlsberg Borland
1995 Ruby Yukihiro Matsumoto
2000 C# Anders Hejlsberg Microsoft (ECMA)
2001 Visual Basic Microsoft
See Timeline of programming languages - Wikipedia

Language Examples

Text Editors:
Simple text editors like notepad and textedit are not recommended for writing programs.
Recommended editors for Java
Windows: Notepad++ Sublime Text 2
Mac OS X: TextWrangler, Sublime Text 2 or Vim
Linux: Sublime Text 2 or Vim

Books:
- Beginning Programming in 24 Hours, Sams Teach Yourself, 3rd edition, 2013 - Java, HTML5, CSS, JavaScript, AJAX, PHP, C, C++, C#
- Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages (Pragmatic Programmers), 2010 - Ruby, Scala, Erlang

Links:
Programming Languages | thinkquest.org
Programming Languages | COSC1300/ITSC 1401/BCIS 1405 at Sonoma.edu
Programming paradigm - Wikipedia
Computer Programming/Hello world - Wikibooks print "Hello World" in 220 languages
Operating Systems and Architecture

See
Computer Programming | Victor Fay-Wolfe - Univ. of Rhode Island
Computer Programming | Victor Fay-Wolfe - Univ. of Rhode Island
History of Computer Languages - the classical decade, 1950s | i-programmer.info
List of programming languages by type - Wikipedia
History of programming languages - Wikipedia
Discussion of operators, expressions, statements, ... | The Definitive Guide to Jytho
what is the difference between an Expression and a Statement in Python? - Stack Overflow

last updated 10 Apr 2016