All your metaphors about computers are wrong
blog.scaramanga.co.uk
blog.scaramanga.co.uk
But metaphors are great tools, if wisely used, to reuse mental patterns and find ways to use new tools. What would be the computer without the metaphors of the windows, buttons, files, and so on ?
Our brains also don't use files and folders, these metaphors having a direct analogy to our physical world in which we need to group things for easy access and distribution, however we are limited by the constraints of our world and the way we interact with it, constraints that will sooner or later vanish and pretty soon files and folders won't make much sense anymore.
So you could say that programming a computer is like training a new soldier or worker, and using a computer is like being in command.
Metaphors using computers as a model for the mind are more interesting, because such metaphors follow a long tradition of equating the mind to technologically advanced systems.
Brain as computer metaphors are just the contemporary version of brain as hydraulics (e.g. Avicenna's humorism) or the more recent brain as mechanics (e.g. Leibniz's mill). Turing's test and Searle's Chinese room are relevant thought experiments pointing out the problems inherent in mapping systems to thought.
Using an application is like programming in its language of pushbuttons and input fields. Programming is like using a compiler.
When they start actually programming, these metaphors will leave their mind and they'll focus on the concretes, or at least find better metaphors.
I think the only worry comes from basing long term policy decisions on crude metaphors.
I think that is the best metaphor for a computer I've ever heard. But I'd say the increase in potential a computer brings is more like from walking to flying via a plane than from walking to cycling. Even so, that really is a quote I'll be keeping in mind.
With natural languages (a) there aren't order of magnitude differences in power or quality, and (b) the switching costs associated with becoming fluent in a new one are very high, so businesses usually default (without conscious choice) to "the standard", which is the language most familiar to the people in that location. (In New York, that's English; in Tokyo, it's Japanese.) For natural languages, this is the obvious right decision.
When this metaphor is taken literally and applied to PL selection, it results in Java and C++ being used, because those languages are "the standard". The difference is that, (a) there are languages that are orders of magnitude better-- just compare Scala against Java-- than mainstream PL, and (b) switching costs are a lot more moderate. Using "the standard" in PL, for a new company, is a horrible decision; you won't even get off the ground if you start in Java or C++.
Oddly enough, the term "programming language" is, technically speaking, completely correct (a PL is a language) but metaphorically detrimental.
Is there a better name for "programming language" that avoids the problem of association with natural language?
Paul Graham argued that language fundamentals matter more than libraries and tooling. This was true in his case (Viaweb) but it's not true in general and for long-term adoption trends, which are dominated by small, part-time projects (innovators and early adopters) for which having to write a bunch of libraries (CSV parsers, for example) that already exist in Java would be a killer.
Java won the late '90s and 2000s because of the platform, not the language. The language sucks, and even by the standards of 2005 (when Scala was immature and Clojure didn't exist) it sucked, but it had the best tooling and therefore won.