PC History | Internet History | Operating Systems | Languages | Language Examples

last updated 5 Dec 2018
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

Note IE (IEEE) and TIOBE were updated in 2018
IE1 TIO2 UD3 CL Lang TIO2
2018 2014 change
3 1 3 6 Java 15.9% 16.1% -0.2%
4 2 1 4 C 14.3% 17.2% -2.9%
1 3 8 10 Python 8.4% 3.1% +5.3%
2 4 2 3 C++ 7.6% 8.7% -1.1%
5 6 4 7 C# 3.5% 5.7% -2.2%
6 8 6 1 PHP 2.4% 6.1% -3.7%
8 7 7 5 JavaScript 3.1% 2.0% 1.1%
7 16     R 1.1%    
9 15 GO 1.2%
10 12     Assembly 1.4% 0.5% 0.9%
11 13 16   MATLAB 1.3% 0.6% 0.7%
13 9 10 8 Ruby 1.1% 1.2% -0.1%
14 HTML
15 Arduino
16 Shell
17 18   9 Perl 1.0% 1.6% -0.6%
IE1 TIO2 UD3 CL Lang TIO2
2016 2014 change
5   Visual Basic .NET 2.3% 1.9% 0.7%
11     Object Pascal
(Delphi)
2.2% 0.7% 1.3%
26   11 Visual Basic 1.7% 4.8% -3.1%
11 19 9 2 SQL 1.2% 0.7% 0.5%
18 14     Swift * 1.6%   1.6%
26 5   11 Visual Basic 1.7% 4.8% -3.1%
12 32     Scala 0.6    
20 12 5   Objective-C * 1.5% 9.0% -7.5%
  17     Groovy 1.2%    
25 20     D 1.1%  
36 46     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 2018 - 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)

AI - Deep Learning

The 5 best programming languages for AI development | InfoWorld
PythonJ
ava
LISP
Prolog
C+

AI + Probabilistic programing
Pyro - Uber
Edward - Columbia U.
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.

Operation Codes
The IBM 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.

  3. 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

    At Is Node.js is a platform, or a runtime environment They talk about concepts relative to javascript.

    • Interpreters actually perform the execution semantics by operating some machine—usually your computer. You can think of them as a little man inside your computer flipping switches like "print this character" based on instruction written in your JavaScript program.
    • Compilers try to convert the JavaScript text to a new set of text which has execution semantics for a different language—perhaps one with the special property that computers can directly execute it.
    • Transpilers are a generalized form of compiler in that they take JavaScript text in and output text of some other language. The difference is thus a little subjective, but usually one thinks of a compiler as outputting very low level code and a transpiler as outputting high level code.
    • Linters, highlighters, type checkers, etc. all take in JavaScript text and output some kind of analytical product, highlighted text e.g., which is influenced by the execution semantics, but not actually representative of it.

    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
    LOC/commit
    Low is better
    JavaScript 1500 11
    Assembly 1050
    C 1 1 1100 1
    C++ 2.5 1 800 1.5
    Java 2.5 1.5 800 2
    C# 850 3
    PHP 750 30
    Ruby 400 65
    Perl 6 6 300 50
    Python 6 6.5 350 51
    Scala 200 2.5
    GO 250 1.8
    Expressiveness - 1. 2. Higher = Easier to program relative to C
    3. Higher = More lines of code per commit (harder)>BR? Expressiveness in "Comparison of programming languages" - Wikipedia
    1. Code Complete - Steve McConnell - Google Books
    2. The Computer Language Benchmarks Game | Debian
    3. LOC (lines of code) per commit. A commit is storing or outputting the result of a process.
    Programming languages ranked by expressiveness - Donnie Berkholz's Story of Data 2013 plots data from The Ohloh Open Source Project on Open Hub.

    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 Comparison of programming languages" - Wikipedia

    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
    Operating Systems and Computer Architecture