Do We Need Another Programming Language?
Abstract:Microsoft recently introduced a new language called C#. More languages have appeared in recent years. Do we really need another programming language?
Wednesday, August 9, 2000
Scotts Valley, CA
On June 26, 2000 Microsoft introduced the language reference for a new programming language, C# (pronounced "See Sharp"). The chief designer of C# is none other than our dear friend Anders Hejlsberg, Distinguished Engineer in the Developer Division at Microsoft. C# combines features from C, C++, Visual Basic, Delphi, Java, and adds a few extra green crystals. You might be asking yourself, "Does the world need another programming language?"
I'm reminded of a television commercial about Prunes. The commercial asked the question, are three enough? are six too many? You might ask the same question about programming languages. How many do we need? Do we have enough languages? Should developers create new languages? Should programmers add new language extensions to existing languages? My answers to all of the questions are: not sure, not sure, lots, no, yes, and yes.
Programming languages (and the compilers, debuggers, and other tools) help developers build the software that takes advantage of business opportunities and solve real problems. Years ago a new programming language, PL/I (Programming Language One), from IBM combined the best features of FORTRAN, COBOL, ALGOL 60, LISP, assembly language, and current programming language research. PL/I was supposed to be the perfect language for both business and scientific programming. It was sometimes called the "kitchen sink" of languages, it had everything. Yet, we have seen many new programming languages appear during the short history of our computer industry.
New programming languages, and extensions to existing programming languages keep our craft, our industry, and our imaginations alive. Imagine if we were still programming everything in assembly language (I know, some of you still do). Imagine if we were still using Fortran for systems programming. What if we were building web applications and web pages with COBOL and COBOLscript? Would the developer's world be a better place? Would we be more productive? Would we be able to go home at 5pm every night? What would we do without types, strings, structures, objects, packages, loops, runtime libraries, garbage collection, pointers, functions, parameters, dynamic arrays, recursion, exceptions, inheritance, interfaces, templates, and the rest?
As a language junkie, I have watched the arrival of a new programming language with the enthusiasm of a child tasting their first bowl of ice cream. I have stayed up late at night reading through the language specification and programmers reference manuals. I have read all of the magazine articles, books, and newsgroups for information about new languages. I have waited, with anticipation, for tools and industry infrastructure to support the new language. By now you must know that I am really crazy. But I can't help myself. I love being a programmer. Having lots of programming languages in my bag of tricks is just one part of being a good programmer.
I met Microsoft's announcement of C# with excitement. I also enjoyed the C# announcement on a personal level because Anders was a big part of the language. Anders will always be a member of the extended Borland family. C# has many influences from Anders' work at Borland on Turbo Pascal and Delphi. My congratulations go out to Anders and his team. I look forward to reading more information about C# in the future.
Author's Note: This article does not reflect any
forward looking plans or statements about Borland products,
future support for any languages, platforms, etc.
My List Of Popular Programming Languages
Many popular programming languages have appeared over the years. Of course the word "popular" is a very subjective term. What defines the popularity of a programming language? Is this like a beauty contest, a popularity contest? I won't try to come up with a criteria for selection to this list. I've based my choices on 30+ years of computing experience, anecdotal evidence of language use, language listings on the internet, in magazines and books, and feedback from my peers. You can also add your comments to the thread associated with this article. I've listed each language with its year of introduction and notable features.
My popular programming language list is not a complete listing of languages - compiled, interpreted, scripted, or otherwise. I will leave complete and updated language lists to others on the internet. I have provided some links to other sources of langugage histories and lists. I will consider updating this article at a moments notice based on feedback, clearer thinking, and continued reflection. With new languages being created all the time, this article represents a moment in time.
Year
Language
Features
1957
FORTRAN "IBM Mathematical FORmula TRANslating System" by John Backus, et al, IBM
logical if, do loop, data types included logical, integer, real, double-precision.
1958
LISP "LISt Processing language" by John McCarthy, MIT
List structure for symbolic expressions and other information, small set of operations expressed as functions (car, cdr, cons), conditional expressions, dynamic scoping, lambda expressions for naming functions, symbolic expressions instead of numeric expressions, recursion, LISP programs stored as LISP data, garbage collection.
1960
COBOL "COmmon Business Oriented Language" by the CODASYL Committee.
separate data and code sections, structured types (arrays and records), long variable names. numeric and string data types, strong typing.
1960
ALGOL "ALGORithmic Language" (original specification in 1958), ALGOL 68 (1968)
First language with a formal grammar (BNF). Data types, compound statements, identifiers of any length, multi-dimensional arrays, block structured allocation and visibility, parameter passing: call-by-value, call-by-name, recursive procedures, stack-dynamic arrays, symbol tables, stack evaluation of arithmetic, garbage collection. No I/O (I/O was left to the implementor).
1964
BASIC "Beginner's All-purpose Symbolic Instruction Code" by John G. Kemeny and Thomas E. Kurtz, Dartmouth College
Included language features from ALGOL and FORTRAN. Interpreted language, no distinction between integers and floating point, dynamic string storage, IF..THEN, and GOSUB statements. Used line numbers for all statements.
1965
SIMULA by Kristen Nygaard and Ole-Johan Dahl, Norwegian Computing Centre
First object-oriented language. Based on Algol. Added classes, reference variables (pointers to objects), pass by reference, char, text, I/O, and coroutines.
1967
PL/I by IBM
concurrent tasks, run-time exceptions, recursive procedures, pointers as a data type, array slices. programming language for systems and applications programming.
1971
Pascal by Niklaus Wirth, ETH
case statement, type safety, enumeration type.
1972
Smalltalk by Alan Kay et al, Xerox Parc
pure object-oriented, message passing metaphor, dynamic typing, reflection, integral graphics environment, large library.
1972
C by Dennis M. Ritchie, AT&T Bell Labs
Terse, low-level and permissive. macro pre-processor. Library routines provide for input, output, and operating system calls.
1976
SQL "Structured Query Language" by IBM
basic language constructs for defining and manipulating tables of data.
1979
Ada by Jean Ichbiah's team at CII Honeywell [note: US Department of Defense received 15 language proposals. Four finalists were chosen: Cii-Honeywell Bull, Intermetrics, SofTech, and SRI International]
Pascal descendant language. Added packages, exception handling, generics (templates), tasks, hardware access, strong typing, data abstraction, sub types and derived types, operator overloading, if-then-elsif-endif, case-is-when-endcase, loop-exit-endloop, goto. Parameters can be in, out and inout.
1983
C++ by Bjarne Stroustrup, AT&T Bell Labs (now called AT&T Labs)
A superset of C. Added type checking (prototypes), function overloading, operator overloading, references, classes, inheritance, polymorphism, templates, exception handling, runtime type information, streams for I/O.
1985
Object Pascal by Apple Computer and Nicklaus Wirth
Added objects to Pascal.
1987
PERL, by Larry Wall
interpreted language, strong text matching functions, procedural and object oriented, abstract database interface(DBI), open sourced.
1991
Visual Basic by Microsoft
added properties and events to Basic.
1993
Delphi by Borland
added PME (properties, methods, events), exceptions, etc to Object Pascal
1995
Java, by Sun Microsystems
Small-instruction set, object-oriented, interpreted language, runs on top of a virtual machine, garbage collection, interfaces.
1995
Javascript by Netscape
Scripting language for client and server side HTML. Similar to C syntax. Variables are case sensitive, variables can change type, rich object library.
A Few Other Notable Languages
There are many other notable languages. These languages are covered on numerous web sites. Besides the languages listed above, it is worth noting a few of the thousands of programming languages that have been created over the years that were notable in their own way. I could have listed a few more here as well. I may make further additions in the future.
PlanKalKuel (1945) by Konrad Zuse - first programming language - one data type-bool (1 bit). Objects are built up from arrays of bits.
Short Code (1949) by John W. Mauchly - first programming language used on an electronic device.
APL "A Programming Language" (1962) by Kenneth E. Iverson. The APL language includes a set of symbols (letters, numbers, punctuation, algebra, and special shapes), a very simple set of rules, and a large function library. Data can be either numeric or text.
SNOBOL (1964) by David J. Farber, Ralph E. Griswold, and F.P. Polensky - Bell Labs. Featured string manipulation, used for pattern matching.
Logo (1967) by Wallace Feurzeig, Daniel Bobrow, et al Bolt, Beranek, & Newman and Seymour Papert, MIT . A dialect of LISP featuring interactivity, modularity, extensibility, flexibility of data types. Logo is best known for its "turtle graphics."
Prolog "Programming in Logic" (1971) by Alain Colmerauer, Robert Kowalski, and Phillipe Roussel. Designed for natural language processing applications. Control structure was depth-first search with backtracking.
Modula-2 (1978), Modula-3, Oberon (1988) - Niklaus Wirth, ETH - continues the refinement of Pascal. Modula added the "module" to encapsulate functions, procedures, and data structures. Modula also included single processor (sequential) concurrency and hardware access. Oberon added inheritence, extensible record types, multi-dimensional open arrays, garbage collection. Oberon eliminated variant records, enumeration types, subranges, lower array indicies, and for loops.
CommonLisp (1981) by DARPA (Defense Advanced Research Projects Agency) and a group of companies and educational institutions - lexically scoped (default), can be dynamically scoped, data structures, closures, multiple values, types using declare and a variety of numerical types.
Eiffel (1985) by Bertrand Meyer and ISE - Language includes design by contract, assertions, and statically typed/dynamically bound objects.
Python (1991) by Guido van Rossum. Interpreted object-oriented language. The language includes modules, exceptions, dynamic typing, very high level dynamic data types, and classes.
Over 2000 Programming Languages and Counting
There are too many languages to write about in this article. The list of known programming languages is over 2000 and growing. There are many sources of programming language information on the Internet. Below you'll find a few of these links.
Open Directory - Computers Programming Languages
The WWW Virtual Library Computing, Programming Languages
Programming Languages, Past Present and Future by J.A.N Lee
Object-Oriented Programming Regaining the Excitement by Andrew P. Black
The Language List - Version 2.4, January 23, 1995
Be Well, Stay Challenged, and Have Fun!
David Intersimone "David I"