The Quest for the Perfect Programming Language and Other Myths
by Jeffrey Sward
 
Very Brief History of Programming Languages
 

The first programming of computers was accomplished by hand coding the binary machine code. Since references were absolute addresses, insertion of instructions in the middle of existing lines of code was impossible, causing a branch out and branch back, thus inventing the first instances of spaghetti code. Assembly language was the first generation of any language which was symbolically based. Since assembly language is compiled into machine code, many advantages were realized, such as symbolic variables and easy insertion of new code. (However, by some peculiar part of human nature, spaghetti code exists in nearly every language although it can now be easily avoided.)

After assembly language, a variety of symbolic languages were invented, evolved, and subsequently reinvented. Various basic language precepts were created, such as imperative-procedural, functional, logic-based, object-oriented, etc. As noted in the Wikipedia article on the history of programming languages, "The 1990s saw no fundamental novelty, but much recombination as well as maturation of old ideas." For example:

  • Algol begat Pascal and Simula
  • Smalltalk begat Java and C#
  • Perl and Python begat Ruby
  • Lisp begat Scheme and ML
 
Commercial Adoption Rates
 

The very interesting Tiobe site maintains a current list of Programming Language Popularity. This chart is based on actual usage, not any technical characteristics. Already it is clear that commercial usage has nothing to do with language attributes or quality. Commercial usage is often determined by marketing, such as Microsoft marketing C# and Sun marketing Java. The best man does not win. Rather, the best marketed man often wins.

 
Commercial Objectives of Programming Languages
 
  • Ease of initial creation
  • Maintainability, including inherent clarity to subsequent developers
  • Efficiency (Execution time performance)
  • Agility and extensibility
  • Scalabiliy
  • Reliability
  • Availability of programmers (usage base)
 
Comparison of Programming Language Attributes
 
Consider the following summary of the advantages and disadvantages of programming language attributes:
 
Attribute Advantages Disadvantages
Terse
  • Fast coding through less data entry
  • Obfuscation of code, especially for subsequent programmers
Verbose
  • Clarity of code, especially for subsequent programmers
  • Slow coding through excessive data entry
Variables statically typed
  • Clarity of purpose and function
  • Lack of flexibility
Variables dynamically typed
  • Versatility of purpose and function
  • Obfuscation of behavior or purpose
Object-Oriented
  • Comes with A PIE (Abstraction, Polymorphism, Inheritance and Encapsulation).
  • Data and instructions carried together in single object
  • Subject to somewhat less spaghetti code
  • Slow coding speed through verbosity
  • Object constructs are not necessary
Procedural
  • Complexity of objects is avoided
  • Fast coding speed through terseness
  • Loose overall structure means A PIE (Abstraction, Polymorphism, Inheritance and Encapsulation) will not be on the dessert menu
  • Data and instructions are in more unpredictable locations
  • Subject to somewhat more spaghetti code
Loose syntax and dynamic execution time code generation
  • "It is clear what is meant," so automatically expand it
  • Fast coding speed through terseness
  • An expanded short hand may be clear to the creators of the language, but is by no means clear to everyone
  • Possibility for indeterminate or unpredictable results
Tight syntax and full definition at compile time
  • What you see is what you get
  • Predictable results, provable abstractly
  • Slow coding speed through verbosity
  • Repetition of common elements in code
     
 
Newton's Law of Programming Language Motion
 

As should be obvious by the above chart, every conceivable attribute of a language has an equal and opposite attribute which is employed by a different language. Obviously, the advantages of an attribute are equivalent to the disadvantages of the opposite attribute. Stated differently, the above chart illustrates Newton's Law of Programming Language Motion, namely:

For every programming language, for each attribute which can be construed as an advantage for one use, there is an equal and opposite disadvantage for a different use.

 
The Peculiar Notion of Progress, Holy Wars, and the Pitfalls of Advocacy
 

Periodically advocates of the most recent programming language will indicate that the newest language is the result of progress. As already noted, at this point in history, new programming languages are recombinations. Progress has nothing to do with recreation.

Yet, for both personal projects and commercial uses, a language must be selected. Often programmers who engage in personal projects adopt a language which is best suited for their personal style and personal preferences. Most often commercial languages are chosen by some combination of the implementation of commercial objectives listed above.

Some practitioners are even advocating, with apparent seriousness, the creation of a new specialized programming language for each project. Widespread implementation of a programming-language-per-project will certainly place us on the fast track to Babel.

Especially when personal projects are involved, programmers often develop a quasi-religious devotion to their selected language. Disputes over language choices in organizations with groups of programmers are often called "Holy Wars." Holy Wars can generate enormous amounts of unnecessary animosity over abstract principles and arbitrary choices. Ultimately, advocacy of programming languages is at best an expression of personal preferences and at worst interpersonal badgering. Applying personal preferences to larger groups is inherently flawed.

 
Summary and Conclusions
 
  • Languages will continue to be invented ad nauseam, but largely as clones of previous languages.
  • Many desirable attributes are mutually exclusive
  • Commercial language acceptance is related to market forces and unrelated to quality
  • Advantages and disadvantages of programming languages are expressions of personal preferences
  • There is no such thing as the perfect programming language
  • For commercial uses the best which can be expected is to pick a language appropriate to the task as hand which has the best compromise of attributes
  • Personal uses of programming languages is art not commerce.
 
And Yet The Quest Continues
 
Atención todos los Caballeros de la Triste Figura. Entren inmediatamente adelante en la búsqueda para la perfección. Just watch your rear for those windmill blades.
 

All written content of this web site is solely the editorial opinion of Jeffrey Sward. All images, graphics, and written content of this web site, including the html files, are creative products covered by copyright law. All content copyright Jeffrey Sward 1975-2017. All rights reserved. No portion of this web site or its constituent elements may be reproduced in any form, by any means, without prior written permission. So there.