For a while, I worked in a company with a large group of physicists. In terms of programming knowledge, they were extremely sophisticated, doing things like organizing array structures to optimize cache hits in multi-processor systems. On the other hand, most of the software they wrote could only be run/used by the author. I remember one of them saying that his program was very general and easy to use - all you had to do was modify the source code in these three places to get it to handle a slightly different case from the one for which the program had originally been written. Were these people "end users?" or were they "programmers"? A more useful way to think about things might be in terms of two separate dimensions: programming knowledge activity goal - getting an answer for yourself versus providing a tool that other people can use Ruven Brooks
