3

TIOBE index has been tracking the most popular programming languages since 2001, which reflects the dominance of C/C++/Java in the first score of 21st century. However C derivatives hadn't beat Pascal until the 90s and Java wasn't even a thing before 1995.

There is a video showing Most Popular Programming Languages since 1965, but it obviously left out many, many other languages applied extensively (see chart below), undermining its credibility.

So, what were, based on either statistics/investigation or personal experience, the top-10 popular programming languages in each decades of the 60s, 70s, 80s, and, if considered retro enough, in the 90s?

enter image description here

Anecdote by Dani Richard:

By the end of 20th Century professors had abandoned Pascal and replaced it with Java for their textbooks. For example Dr. Sedgwick wrote his first “Algorithm” textbook in 1983. It used only Pascal. His 2nd editions came out: 1988 in Pascal, 1990 in C, 1992 in C++, and 1993 in Modula. His 3rd edition Volumes 1–4 came out in 1997 in C, in 1998 in C++, and 2002 in Java. Volume 5 came out in 2001 in C and C+and in 2002 in Java. His 4th edition came out in 2011 is availed ONLY in Java.

Link:
What languages are better fit for generating efficient code for 8-bit CPU's than C?
What caused the downfall of Pascal?
Why has C prevailed over Pascal? - Software Engineering Stack Exchange

Reference:

Schezuk
  • 3,752
  • 1
  • 17
  • 40
  • 9
    What criterion do you use to decide whether a language is "popular"? – Toby Speight Feb 03 '23 at 15:09
  • Fortran and COBOL and, in the 80's, C. That would be my guess. There were many other languages, but the were probably the most popular. – JeremyP Feb 03 '23 at 15:25
  • 4
    @TobySpeight Like jobs and applicants, clubs and lectures, appearance in publications, count of lines of codes, etc. You name it. – Schezuk Feb 03 '23 at 15:33
  • 2
    According to a similar video, the languages that have held the #1 position are Fortran (-1979), Pascal (1980-85), C (1985, 1986-2001), Ada (1985-1986), Java (2001-2018), JavaScript (2018), and Python (2019-). – dan04 Feb 03 '23 at 17:34
  • 1
    I'm pretty sure that Visual Basic dominated in the early to mid-1990s. I'm also pretty sure that it never showed up in a university course. Microsoft's Basic and then VB made an awful lot of amateurs into programmers – Flydog57 Feb 03 '23 at 20:57
  • 2
    You needed a machine to run it on. Those were very expensive before around 1980, meaning that either an employer paid it and paid you to use it, or your educational institution paid for it, and you used it to pass exams. Two very different worlds... – Thorbjørn Ravn Andersen Feb 05 '23 at 13:16
  • 2
    Cobol had a rather famous surge of popularity in 1999. – Neil Meyer Feb 07 '23 at 18:54
  • I dont see why the language is important for algorithm study. Algorithms are basically logic puzzles. Google will let you choose the language when they test your algorithms. – Neil Meyer Feb 07 '23 at 18:57
  • 1
    @dan04 - I find it hard to believe that Ada was ever - not even in the heyest of its heyday - #1 on anyone's list of popular languages. The hatred against Ada in its time was incredible. And very uninformed, in my opinion! It was a good - even ambitious - language with features we didn't see in other mainstream languages for decades - or even now. It did things right that C++, for example, still hasn't got right (not to mention Java). But it was "designed by committee" and even worse, that committee was paid for by the DoD. It was cool to hate Ada. No good person had any choice ... – davidbak Feb 08 '23 at 23:32
  • @NeilMeyer - it certainly had a surge of use! A surge of job opportunities! A surge of publicity! But I question whether it had a surge of popularity ... – davidbak Feb 08 '23 at 23:35
  • BTW, I would take that diagram of language relationships as an approximation - and some areas of it are not even a good approximation. Look at the arrows leading to JavaScript, for example ... – davidbak Feb 08 '23 at 23:42
  • 1
    @NeilMeyer - are you speaking of interviews at Google? Just curious. They will certainly let you choose the language. But you're mistaken if you think they're not judging you on your choice! But more to your point: I believe it is important which language you choose. A badly chosen language will mean you spend a lot of time working around its issues, rather than learning how to program properly. Or at all. If your language doesn't have recursion, for example, how are you going to learn about recursive algorithms? Etc. etc. – davidbak Feb 08 '23 at 23:46
  • @davidbak What a silly mistake I have made! Of course Poweshell has little to do with JS. Are there any other faults and mistakes in the chart? Most of the languages are beyond my own programming experience and I depended mainly on second hand sources. – Schezuk Feb 09 '23 at 00:04
  • @davidbak This videodid claim ada was #1 sometime between 1985 and 1986. – Schezuk Feb 09 '23 at 00:37
  • @Schezuk - I didn't realize you created the diagram! Well done! (even if there are small flaws) W.r.t. the idea that Self influenced JavaScript. They're both "prototype-based" object-oriented languages (as opposed to the much more widespread "class-based"). But even so I wouldn't have thought it was that strong an influence on it. Do you have a reference? I'm interested! – davidbak Feb 09 '23 at 00:53
  • @davidbak Thank you! Wiki says JavaScript was based on scheme and self, and there is no space for an arrow from scheme to JavaScript thus omitted. Syntax similarity with Java is self-explanatory. – Schezuk Feb 09 '23 at 01:21
  • @Schezuk - huh. IDNKT. Thanks! – davidbak Feb 09 '23 at 16:10
  • @davidbak yes don't choose a procedural or a functional language. Do choose a high-level language with OOP built into it but more importantly learn to think algorithmically. Learn to program. Don't just learn a language. – Neil Meyer Feb 09 '23 at 16:34
  • @Schezuk - you know I just took a look at that wiki article you linked to and it is notable for its complete lack of references that justify its categorizations. Not a word about who/what claimed any of those derivations. It says at the top "Unsourced material may be challenged and removed". By that standard the entire article should be deleted! – davidbak Feb 09 '23 at 18:44
  • No HyperTalk? No ActionScript? – Glen Yates Feb 09 '23 at 22:37
  • Relevant: https://www.youtube.com/watch?v=kECnb_aKoyk – Arthur Kalliokoski Jun 17 '23 at 14:13

1 Answers1

6

As a starting point, contrary to the claims NEW! Most Popular Programming Languages 1965 - 2022 by Data Is Beautiful where FORTRAN ranked the first until 1980 and COBOL was surpassed by Pascal in 1977Q2, according to DoD's "TINMAN" Language Evaluation, Jan. 1977, COBOL seemed to be the most widely used higher order language (pp.54), and FORTRAN was still the most widely used language after COBOL (pp.52). The experience with PASCAL was largely in a research environment. It had not been widely used for large production programs. (pp.24)

PL/I was more widely used by an order of magnitude than any of the other proposed base languages (pp.21), claims High Order Language Working Group (HOLWG), which is totally left out by the video.

Link: Ada and its candidate languages

Candidates evaluated were:

A: Recommended Languages
(These languages each represent a different synthesis of large amount of previous experience,
and constitute the nucleus of a family of derived languages).
1. PL/I: Includes concepts from FORTRAN, ALGOL 60 and COBOL
2. PASCAL: A successor of ALGOL 60 emphasizing simplicity
3. ALGOL 68: A successor of ALGOL 60 emphasizing generality

B: Languages which are Relevant and Deserving of Further Consideration 4. HAL/S: PL/I based, NASA Language, strongly typed, real-time 5. PEARL: PL/I-based, German process control language 6. SPL/I: PASCAL-based NRL real-time signal processing language 7. PDL/2: PASCAL with parallel processing, independent module facilities, Texas Instr. 8. LTR: PASCAL-based official French common language 9. CS-4: PASCAL-based real-time with extension facilities, Intermetrics 10. LIS: PASCAL-based French system implementation language 11. EUCLID: PASCAL-based experimental language emphasizing verification 12. ECL: Extensible language with good support environment, Harvard University 13. MORAL: New British language for embedded computer applications 14. RTL/2: Real-time British language developed at ICI

C: Languages Not Acceptable 15. FORTRAN: Developed by IBM in 1954-58 16. COBOL: Business data processing language developed in 1959-61 17. ALGOL 60: Block structure language developed in 1957-60 18. TACPOL: Army language developed in the late 1960's 19. CMS-2: Navy language developed in 1966-69 20. SIMULA 67: Simulation language developed in Norway 21. JOVIAL J3B: Air Force language developed in 1972 22. JOVIAL J73: Air Force language developed in 1969-73 23. CORAL 66: British common language for real-time applications

The 98 specific TINMAN language requirements are grouped into the following 13 categories:

2.1 Data and Types
The requirements in the "Data and Types" category may be summarized as follows:
A1. Date types determinable at compile time and unalterable at run time.
A2. Integer, fixed, float, Boolean, character, array and record types.
A3. Precision specs for floating point arithmetic and variables.
A4. Exact fixed point numbers with user specified range and fractional part.
AS. Character sets with user defined collating sequence.
A6. Arrays with static lower bound and dynamic upper bound.
A7. Variant records fully discriminated at run time.
A1 is a general requirement on data types.
A2 specifies the set of required data types.
The remaining requirements specify in greater detail the characteristics of required data types. 
Requirement A7 is intended as a substitute for the union data types.

2.2 Operations The TINMAN requirements on operations may be summarized as follows: B1. Assignment and reference operations for data types B2. Equivalence operator for all data types B3. Relational operations for numeric and enumeration types B4. Arithmetic operations +, -, *, /, ÷, ↑, unary minus B5. Truncation and rounding of least significant digits B6. Boolean operators and, or, not, xor, short circuit mode B7. Direct assignment for conformable composite data types B8. No implicit type conversion B9. No conversion required for numeric ranges, range checking optional B10. I/0 operations for files, channels, terminals B11. Power set operations (logical operations on Boolean vectors). B1 and B2 specify operations applicable to all data types. B8 specifies a restriction on conversion between types. The remaining requirements indicate specific types required by the language and properties of some of these types.

2.3 Expressions and Parameters The TINMAN requirements on expressions and parameters may be summarized as follows: C1. Side effects evaluated left to right C2. Readable expressions with few levels of operator precedence C3. Expressions permitted whenever constants and variables allowed C4. Constant expressions evaluated before run time. C5. Consistent rules for parameters of procedures, arrays, declarations, etc. C6. Type agreement of formal and actual parameters C7. Classes of formal parameters C8. Optional parameter attributes in procedure declaration C9. Procedures with variable number of parameters C1 - C4 are concerned with properties of expressions. C5 - C9 are concerned with parameters of procedures and arrays.

2.4 Variables, Literals, and Constants The TINMAN requirements on variables, literals and parameters may be summarized as follows: D1. Identifiers with constant values may be defined D2. Constants will have some value in programs and data D3. Declared variables may be initialized. No default initial values D4. Range and step size for fixed point variables must be specified D5. Arrays and records may have components of any type D6. Pointer variables must be as safe as other variables D1 and D2 specify properties of literals and constants. D3 - D6 specify certain properties of variables.

2.5 Definition Facilities The TINMAN requirements on definition facilities may be summarized as follows: E1. Users will be able to define new data types E2. Defined types will behave like built-in types E3.- There will be no default declarations E4. Operations will be extendable to new data types E5. Type definitions do not automatically inherit operations E6. New types may be defined by enumeration, Cartesian product, discriminated union, power set E7. Type definition by free union and subsetting is not desired E8. Type initialization and finalization procedures are definable

2.6 Scopes and Libraries F1. Distinction between scope of allocation and scope of access F2. Access to identifiers can be limited both at their point of definition and point of call F3. Scope of identifiers will be determined at compile time F4 Libraries will be supported and easily accessible F5. Libraries will not exclude routines written in other languages F6. Libraries and compools will be indistinguishable F7. Standard library definitions for machine dependent interfaces F1 - F3 are concerned with scopes and rules for accessing identifiers, while F4 - F7 are concerned with the interface between the language and libraries.

2.7 Control Structures The TINMAN requirements on control structures may be summarized as follows: G1. Structured control mechanisms, parallel processing, exception and interrupt handling G2. Go-to only within most local access scope G3. Fully partitioned if-then-else, case statement, Zahn's device G4. Iterative control with local control variable G5. Recursive and non-recursive routines G6. Parallel processes, synchronization, critical regions G7. User defined parameterized exception handling G8. Real and simulated time, relative priorities, synchronization G1 lists the desired control mechanisms. G2 - G5 indicate desired conventional control structures. G6, G7, G8 respectively indicate requirements for parallel processing, exception handling and real-time.

2.8 Syntax and Comment Conventions H1. Free format, statement delimiter, easily parsed H2. No modification of source language syntax H3. Language definable in 64-character ASCII set H4. Formation rules for identifiers and literals H5. No continuation of lexical units across lines H6. Keywords will be few, reserved, informative, not confusable with identifiers H7. Uniform readable comment convention H8. No unmatched parenthesis are permitted H9. No language imposed distinction between function calls and data selection H10. Symbols in same context cannot have different meaning

2.9 Defaults, Conditional Compilation, Language Restriction I1. No undefined defaults which affect result of computation I2. Defaults which optimize implementation of language features are encouraged I3. Compile time variables which specify object computer environment I4. Conditional compilation I5. Simple base language which allows efficient definition of complete language I6. Translator restrictions should be part of language definition I7. Object machine restrictions should not be part of language definitions

2.10 Efficient Object Representation J1. No run-time costs for unused generality J2. Language design should allow safe optimizations J3. Encapsulated access to hardware facilities and machine code J4. Object representation of data structures can be specified J5. Programmer can specify routine calls to be open or closed

2.11 Program Environment K1. Language will not require an operating system K2. Language will support integration of independent modules K3. Linkers, loaders, -debuggers, and other systems software available K4. Documentation, editing, testing and other support software available K5. Optional assertions, debugging specs, measurement probes

2.12 Translators L1. No supersets. Features not permitted are forbidden L2. No subset implementations will be allowed L3. User control of optimization and compile time costs L4. Translators for a variety of object machine; L5. Translator is not required to run on object machine L6. Syntax checking but not error correction by translator L7. Error diagnostics specified as part of language definition L8. Internal translator structure not part of language standard L9. Translators will be written in the source language

2.13 Language Definition Standards and Control M1. Individual features must be state of the art M2. Unambiguous and clear language definition M3. Tutorial and reference documents, defined by abstract comput M4. Configurations control to ensure translators conform to standard M5. Support agent responsible for maintaining language and support software M6. Standards and support agents for libraries

Schezuk
  • 3,752
  • 1
  • 17
  • 40
  • Cobol being a business oriented language must have made it the most popular. Algo being algorithm oriented made it much more niche. Fortran was science orientated. All had there uses but the one making the most money was always going to be the business one. – Neil Meyer Feb 09 '23 at 16:29
  • 1
    IIRC ALGOL was widely regarded as being a "European" language, which made it more niche. IIRC. Then ALGOL 68 was seen to be an "academic" language with a completely impractical specification - the absolute worst kind of ivory-tower academia - and that of course killed all the ALGOLs completely. (I know about Burroughs. I don't think that changed the perception of ALGOL much.) – davidbak Feb 09 '23 at 16:38