Guy Steele: Should programming languages be designed for theoreticians to facilitate reasoning or for practitioners for getting systems built? Should there be different languages for each purpose? Are the skill sets of a language designers different?

John McCarthy: My view is that **a language should be designed in terms of an abstract syntax and it should have perhaps, several forms of concrete syntax**: _one which is easy to write and maybe quite abbreviated; another which is good to look at and maybe quite fancy, but after all, the computer is going to produce it and another, which is easy to make computers manipulate_. There are still others maybe, but it’s easy to make computers prove things about and they all should be based on the same abstract syntax. As it relates to your question, the abstract syntax is what the theoreticians will use and one or more of the concrete syntaxes is what the practitioners will use.