My Philosophy on Computer Languages

People have asked me what my philosophy is on computer languages, and it seems only fair to answer that question. Let me add that this is my own personal view, and may not be shared by others. I am not expressing an official position of the U.S. Department of Defense, for example.

I believe that computer languages are engineering tools, developed by people to communicate with both computers and other people. There are many different types for computer languages (tools), each developed for a specific kind of use.

Given that, I believe that you should use the "right tool for the job". The "right" tool depends on a large set of trade-offs, which must be considered before beginning a task. The trade-offs for a computer language include ease-of-use for the given task, time/cost to develop the software to some required quality, time/cost to maintain the software, safety, efficiency, commercial support, compiler and other tool costs, language training time, customer requirements, and language standardization (both as an international standard and as a standard for the maintenance organization). There are other language attributes as well.

Ada is a fine language; I like think there's much to recommend it, or I would not have developed Lovelace. Still, there are many computing languages, and each has advantages in its own domain. Ada's advantages include its more rigorous compile-time and run-time checking, its rich set of features, its efficient execution time, and its international standardization. For some domains that may be exactly what's desired, while for others it may not be a good match. You must continually educate yourself on what the trade-offs are for the various languages available to you.

If you are a computing professional, I believe you need to learn dozens of languages and gain an understanding of how their various trade-offs. To use a tired analogy, a carpenter who only has a hammer thinks that a hammer is the best tool for all jobs. A knowledgeable carpenter has a complete toolbox, knows how to use all his tools, and understands which to use under what circumstance. You'll find that each language encourages a different approach and mental model, which has the effect of stretching the mind - a good thing.

Don't get hung up on "language wars", they waste time for the most part. Comparing languages is only sensible if the intent is to understand their relative strengths and weaknesses, so you can make informed decisions the next time you begin a project.

I select my tool based on various trade-offs, and I know (and have used) literally dozens of computer languages, including Ada, Java, C, C++, Smalltalk, Eiffel, Fortran, Pascal, LISP, Prolog, Perl, and many others. My recommendation to you: imitate the knowledgeable carpenter.


You can return to the Lovelace home page.

David A. Wheeler (dwheeler@ida.org)