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.
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;
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)
Programming Language Comparison | JVoegel.com
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.
Google uses BigTable while others use MySQL (although Google also uses a heavily modified version of MySQL for advertising-related purposes).
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].
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.
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++
- Scripting languages
Perl, Ruby, Python
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
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).
Very High-Level or Natural Languages: (Non-procedural languages) Fourth Generation (4GL)
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.
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
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
Other popular query languages are Query-by-Example, known as QBE, and Intellect.
Fifth Generation Language (5GL)
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.
Uses a visual or graphical development interface to create source language
that is usually compiled with a 3GL or 4GL language compiler.
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.
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.
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.
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.
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
Basics of Programming: Assembler, Compiler, Interpreter, Linker, Loader
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
PHP vs Python vs Ruby
Python vs. PHP: Choosing your next project's language - Techworld
See Web Programming
Performance and Ease of Use (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.
Expressiveness - Higher = Easier to program relative to C
|Lang ||Expressiveness ||Speed4
|Lines2 ||Berkholz3 |
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
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.
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
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.
See Timeline of programming languages - Wikipedia
|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, |
|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 & |
|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 ||Delphi ||Anders Hejlsberg ||Borland |
|1995 ||Ruby ||Yukihiro Matsumoto || |
|2000 ||C# ||Anders Hejlsberg ||Microsoft (ECMA) |
|2001 ||Visual Basic || ||Microsoft |
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
- Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages (Pragmatic Programmers), 2010 - Ruby, Scala, Erlang
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
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
last updated 10 Apr 2016