It seems to be the case that our biggest problem is separating CS from related disciplines to some extent. I think this can be best achieved by analogy to fields people have more intuition for.
I have attempted to create such a table:
Software Buildings General
programmer construction worker performs assigned tasks
software developer foreman translates plans into work assignments and monitors workers
software engineer architect makes plans and develops principles thanthen ensure some level of quality of the plans.
computer scientist structural engineer, develops and analyses methods/techniques material scientist for the above to use.
theoretical computer develops models and verifies principles scientist physicist that lead to and support new methods and techniques.
mathematician mathematician provides means to deal with models in a unified, abstract fashion. Develops meta models.
Of course, such a table would have to be decorated with appropriated disclaimers: "This is no attempt at defining either notion rigorously; it is only a rough analogy to relate to general knowledge. The same person can perform more than one role. Some tasks may be associated with more than one role." and so on.
What do you think, can an analogy clarify what we have trouble defining clearly?
Do you have other/better analogies?