Ratings of Computer Programming Languages

This page provides a summary of the key results from a paper called Guidelines for Choosing A Computer Language: Support For The Visionary Organization, 2nd Edition by Patricia K. Lawlis (1997). This paper rates several popular computer languages on a scale of zero to ten for each of fourteen criteria. It does not rate scripting languages such as Perl and Python, but it does rate assembly language just for reference. The results appear in the Table below. The fourteen categories are briefly explained below the Table, but they are listed here for reference:

A. Clarity of source code   H. Portability
B. Complexity management   I. Real-time support
C. Concurrency support J. Reliability
D. Distributed system support       K. Reusability
E. Maintainability L. Safety
F. Mixed language support   M. Standardization
G. Object-oriented support   N. Support for modern methods
 
A B C D E F G H I J K L M N
Ada 95 9 9 8 5 9 8 10 8 7 9 8 6 10 9
Java 8 7 7 9 5 5 10 9 0 8 8 4 8 9
C++ 6 6 0 0 7 7 10 7 7 5 8 3 5 7
C 5 5 0 0 2 5 0 5 7 1 3 0 5 1
Fortran 5 4 0 0 2 5 0 3 5 1 3 0 5 1
Smalltalk 9 6 2 0 7 3 10 3 0 3 8 0 3 7
COBOL 7 2 0 0 2 0 0 3 0 3 3 0 5 1
Assembly 1 2 2 0 0 0 0 1 5 0 1 0 0 0
  1. Clarity of source code - the extent to which inherent language features support source code that is readable and understandable and that clearly reflects the underlying logical structure of the program.
  2. Complexity management (architecture support) - the extent to which inherent language features support the management of system complexity, in terms of addressing issues of data, algorithm, interface, and architectural complexity.
  3. Concurrency support - the extent to which inherent language features support the construction of code with multiple threads of control (also known as parallel processing).
  4. Distributed system support - the extent to which inherent language features support the construction of code to be distributed across multiple platforms on a network.
  5. Maintainability - the extent to which inherent language features support the construction of code that can be readily modified to satisfy new requirements or to correct deficiencies.
  6. Mixed language support - the extent to which inherent language features support interfacing to other languages.
  7. Object-oriented programming support - the extent to which inherent language features support the construction of object-oriented code.
  8. Portability - the extent to which inherent language features support the transfer of a program from one hardware and/or software platform to another.
  9. Real-time support - the extent to which inherent language features support the construction of real-time systems.
  10. Reliability - the extent to which inherent language features support the construction of components that can be expected to perform their intended functions in a satisfactory manner throughout the expected lifetime of the product.
  11. Reusability - the extent to which inherent language features support the adaptation of code for use in another application.
  12. Safety - the extent to which inherent language features support the construction of safety-critical systems, yielding systems that are fault-tolerant, fail-safe, or robust in the face of systemic failures.
  13. Standardization - the extent to which the language definition has been formally standardized (by recognized bodies such as ANSI and ISO) and the extent to which it can be reasonably expected that this standard will be followed in a language translator.
  14. Support for modern engineering methods - the extent to which inherent language features support the expression of source code that enforces good software engineering principles.

In order to make use of this Table of ratings, an organization would assign weights to each criterion according to their own particular needs, then sum the weighted results.

If each criterion is weighted equally, Ada 95 comes out the overall winner. This may be surprising to many, considering that Ada seems all but forgotten in many quarters. Many software professionals are unaware of the many advanced capabilities of Ada 95. This is partially due to the fact that Ada 83 was considerably less advanced, and its popularity was fading well before Ada 95 became available.

Java comes in a strong second behind Ada. Java has advanced considerably since 1997, of course, but the ratings probably wouldn't change significantly except perhaps for the real-time support criterion. The Table shows a zero for that criterion, but a major effort has been undertaken since then to adapt Java for real-time applications. The success of that effort is debatable, but the rating should obviously now be higher than zero. Note, however, that even if it were ten (and it is certainly not), Java would still trail Ada 95 in the total rating sum.

Professional software development managers might argue that the Table omits an important practical criterion: the availability of programmers who know the language. Indeed, that is certainly an important practical consideration. However, it may also be an overrated one. In practice, it is often used to narrow the choice of languages down to two or three, typically C, C++, and Java. Ada is increasingly ruled out of bounds on this criterion alone, even for safety-critical systems. But this could be a serious mistake, considering that Ada was designed for safety-critical systems, and experienced, competent programmers can learn a new language in a matter of a few weeks.

back to My Ada Page

RussP.us