Since the advent of modern computers, hundreds of “high-level” programming languages have been developed. Since the earliest (Fortran – 1957), many different directions have been taken, depending on whether the language designers wished to emphasize features, speed, error handling, pedagogy, theories of computation, correctness, or simplicity.
At least since the invention of BASIC (“Beginner’s All-purpose Symbolic Instruction Code”), there have been computer programming languages which have catered to the needs of learners—few data types, automatic conversion, free form statements, case insensitivity. Often such languages have been “interpreted” rather than “compiled”, meaning that they can be altered in the middle of a run rather than having to start the program over. Several languages have even been developed for young children, such as LOGO which creates graphic images, and Alice, which permits the design of simple video games. As many features as possible are made automatic in these languages, so that the learner can concentrate on program creation rather than being bogged down in machine-level details.
Scripting languages were designed for quick writing of relatively short programs, generally for the purpose of invoking programs written in other languages with a convenient “front end” visible to the end user. These languages include the shell languages of Unix (Shell, C-Shell, Korn Shell), the batch languages for DOS (.BAT files and Rexx), and, most recently, languages for manipulating data on web pages (JavaScript and VBScript). All these languages have the character string as their basic data type, with numbers being automatically converted to and from strings. Some of them, Rexx and JavaScript in particular, have become quite powerful, and with their ease of use, popular as well, and large programs have been written exclusively in them.
Computer theorists have propounded numerous “theologies” about the best way to build programs, and languages have narrowly reflected their theories. LISP preaches that all program and data structures must be lists; Algol 68 prescribes precise semantics; APL treats with arrays; Simula introduced “objects” with their properties and methods, comparable to adjectives and verbs; SmallTalk restricted inter-data communication to exchanging messages; and Pascal insisted on rigid types and explicit inter-conversion among them.
Specialized languages were devised to handle one task well, and auxiliary tasks less well. COBOL was created in the early 1960’s as an English-based language for business data processing, viz. large data sets, but little computation. SNOBOL was designed for the manipulation of strings – creating, searching, subsetting. FORTH was an early “Robinson Crusoe”-type language, which provided a small but powerful set of programming features (organized around the “stack”), but from which any possible computer feature can be built. SQL searches for patterns among table-stored data; SAS performs statistics on large masses of data; Prolog has automatic solution of logical syllogisms and assignment of probability to stated situations; Perl is another string-oriented language like SNOBOL, but with powerful “regular expressions”. Maple, MatLab and Mathematica are all intended for the manipulation of symbolic algebraic and mathematical structures such as polynomials, matrices and integrals. PostScript is a FORTH-like language designed to produce professionally printed pages, while HTML was devised as a language for describing the appearance of web pages.
Many languages have been deprecated by professional programmers for lacking power, speed, error handling or precision. In response, Jovial was an early language designed for the Air Force, which emphasized real time operation and extensive error checking. (The Ada language was a later attempt at an even more comprehensive language for defense projects.) A little later, in 1969, the C language was designed for programming Unix systems, and it had a minimum of automaticity, so that the code would run as fast as possible. Despite its extreme and deliberately primitive nature, it became the classic language favored by professionals, possibly because so many of them were exposed to it at their universities, which had adopted Unix because of its lack of licensing fees. Since then, C has absorbed the object-oriented features of Simula and Smalltalk, bulking up to C++. Several of the more labor-intensive features, such as memory allocation and the creation of arrays and strings, were then simplified to create the Java and C# languages.
Only a handful of languages are in wide professional use today. Most of them are based on concepts of computer science developed a generation ago, when computers were expensive and programmer time was not. Today, that ratio has reversed. Yet, despite enormous and cheap computer power, most of today’s languages are labor-intensive for programmers, highly detailed on matters that software could handle automatically and, in a phrase, “user unfriendly”. A reaction has set in among some programmers against the hyper-complex languages of the C++ type, a feeling that these languages are still too detailed and overcomplicated for most uses and most users. There has been a turning to languages which are more balanced in their ratio of programming power vs. ease of use. Visual Basic 6, created by Microsoft in the 1990’s, was highly regarded. More recently, Python and Ruby have come into prominence. Evolution marches on!