For his 1990 Turing award speech, Fernando J. Corbató listed reasons why complex systems will inevitably fail. In his conclusion, he gives some suggestions for decreasing the probability of failure. He lists one idea as follows:

[U]se of constrained languages for design or synthesis is a powerful methodology. By not allowing a programmer or designer to express irrelevant ideas, the domain of possible errors becomes far more limited.

What does he mean by "constrained language?"

For a moment I considered constraint programming. However, constraint programming is about restricting the program's solution space. It is a tool that empowers a programmer. The feature Corbató is referring to seems to be something which actually restricts the programmer, or at least makes her more inclined to write terser code.

My second thought is that he is referring to conservative programming languages. Corbató received his Turing award for work done in the 1960s and 1970s. It's my understanding that he dealt with a lot of punch cards. I have never seen a punch card, so I certainly don't know how to program one, but I might guess that punch card programming is extremely liberal. I suspect the notions of type checking, static analysis, and so forth simply didn't exist. So, is Corbató perhaps referring to the idea of languages that restrict the developer from making dumb mistakes? This doesn't seem to be the case, either. Safety checking and data modeling have nothing to do with terseness, which is what he seems to be talking about when he mentiones "not allowing ... irrelevant ideas."

  • @jweyrich Thank you for forwarding me to Programmers.SE. However, when I go to the programming-languages tag on StackOverflow, I find a wealth of questions which are just as general as mine, such as "Is there a statically weak typed language?" where the author also makes reference to general reading materials Jan 30, 2013 at 6:51
  • 5
    @thoughtadvances Check the dates on the questions you mention, I'm willing to bet most of them are quite old. SO is 4 years old, things change, and in general we get stricter as time goes by. Your question is fine on Programmers (I'm a mod there), but it would have been easier if you had just flagged this for moderation attention and ask for it to be migrated instead of reposting. Migration would have saved you the trouble of reposting and it would have brought the answer to Programmers along with the question. Don't worry about it now, I'll take care of it.
    – yannis
    Jan 30, 2013 at 7:53
  • 3
    As an example, if (note: if) the idea of malloc is "irrelevant" for particular application for some reason, then choosing Java ("constrained by having no malloc) over C (malloc is there) would limit "domain of possible errors" that could be associated with malloc
    – gnat
    Jan 30, 2013 at 8:28
  • @YannisRizos Thank you very much for migrating it. I did not know that this function exists. Perhaps the more experienced users on StackOverflow could have suggested this path rather than merely closing it. Jan 30, 2013 at 12:07
  • 3
    "Coding on punched cards" was just another way of typing a program. In the late 1960s and early 1970s, we had languages that were just as sophisticated as the ones we have today. Many of the core concepts of programming languages were already well established, and ALGOL 60 had already set the standard for programming tools by 1963. Jan 30, 2013 at 12:18

4 Answers 4


A "Constrained Programming Language" is simply one that does not provide (easy) ways to do things that are irrelevant to the languages purpose.

Note that's "irrelevant", not "dumb", "stupid" or "incorrect".

A fair example of this might be ISO/ANSI SQL (before SQL-92), which had no way in the query language to express many procedural-type programming artifacts such as recursion or loops. (Though, it has them now, and the vendors added custom extensions for them previously anyway).

  • 6
    This is exactly Corbató's point. He went into a lot of detail in a 1969 Datamation article called PL/I As a Tool for System Programming (with the awesome subtitle "five years with a temporary compiler"!). Jan 30, 2013 at 12:28
  • Thank you, this answer is very helpful. This idea has interesting implications. This would seem to indicate that a programmer would want to have access to a plethora of varied languages with varying abilities rather than have one language to rule them all, which is what many programmers would like to suppose C, C++, or Java might be. Jan 30, 2013 at 12:29
  • 1
    A great summary quote from that Datamation article: "Our object in doing the system ... has been to explore the frontier and see how to put together effectively a system that reaches and satisfies the goals that were set out. We are trying to find out the key design ideas and communicate these to others, regardless of what system they are familiar with. Hence, a language that gets above the specific details of the hardware is certainly desirable, ... In other words, it forces one to design, not to fiddle with code. And this has turned out to be one of its strong points." Jan 30, 2013 at 12:37
  • 2
    @thoughtadvances "This would seem to indicate that a programmer would want to have access to a plethora of varied languages with varying abilities rather than have one language to rule them all" - that's one of the differences between a junior and a senior programmer. No carpenter has only one hammer :-) Jan 30, 2013 at 12:39
  • 1
    I noticed this line in Alan J. Perlis' Epigrams: "A programming language is low level when its programs require attention to the irrelevant." This seems to be exactly what Corbató is talking about. Feb 4, 2013 at 13:12

This sounds very similar to the notion of domain-specific languages to me. Just as @RBarryYoung pointed out, one example for this would be SQL (others would be HTML, CSS, etc.).


First, you need to understand the era of computing when his speech was given (1990). Also, realize he's speaking to an academic audience and MIT is his home-base.

In that era, languages for writing languages (meta-languages) were a hot topic. The Art of the Meta-Object protocol is just out and is inspiring the design of new languages. However, all this luxury comes at a price: complexity.

To help reduce the complexity of systems and to allow checking these systems, meta-languages such as Z came out to make a testable specification. It is my guess he refers to these kind of languages.

  • 2
    Corbató isn't just a late-twen-cen MIT academic. He's one of the pioneers of our field. His work on CTSS was seminal, leading directly to Multics, Unix, CP/67, and today's Linux and z/VM systems. And the statement in question is related to a principle he openly expounded 20 years before The Art of the Meta-Object Protocol and his Turing lecture. Jan 30, 2013 at 12:14

Possibly he means that a language which has fairly lower number of concepts to grasp. Check the diagrams here which shows the graphical representations of concepts in Coffescript, Ruby and C++. May be Tuner means that the fewer concepts you have in a language, the lesser chances of expressing irrelevant ideas.

  • "...Or a language" - is this a comment on something?
    – gnat
    Jan 30, 2013 at 9:25
  • Edited the post, so as not to look like a comment.
    – Manoj R
    Jan 30, 2013 at 12:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.