If you are a brain surgeon, everyone knows what you are and what you do, but as a programmer it's confusing to tell non-programmers what you are and what you do.
First, what are we? Programmers, coders, developers, or software engineers? How about more exotic descriptions like software artist or hacker? Are these all the same or radically different? I bet everyone of us has a different view on what these all are and I imagine few of us could agree on the definitions.
Then there are the architects. I've been a technical architect, an enterprise architect and a software architect, not to mention most the developer titles and yet my duties were generally always the same. Mention architect to most people and they think you design buildings.
What field are we in, is it computer science or software engineering? Thus are we scientists or engineers? Often it seems we are more artists than either of those, programming often seems more like a black art or even witchcraft at times.
When you are a Professional Engineer (P.E.) in something like civil engineering people generally know exactly what your qualifications are and that you have passed a lot of education and testing plus have real experience. For the most part programmers don't have any useful equivalents; there is no exact definition or legal requirement as to what you need to know. Most people will argue this point but there isn't any simple way to define a programmer's needed skills and after the arguments subside, we still won't have any agreement.
When I tell people I am a computer programmer (or one of the other terms just to be different) most of them really don't know what that means. They vaguely understand I "make software" (i.e. I'm a software maker, another term!) but have no clue what software looks like. So how to explain how you go about doing your job?
Writing software seems like a good start. After all we type a lot of words into a blank document using an editor, hand it to the computer to figure out what we want it to do, and then see what the computer made out of it. Rinse, repeat until done.
Even that watered-down description leaves out a lot of what we do. There is no way to really explain to people the raw details of our daily existence. Ever trying explaining programming languages and why there are so many to someone who knows nothing about programming? Or writing tests, debugging, or memory management? Don't even try unless you like glazed over eyes. Trying to point out the importance of requirements and specifications to customers is often impossible, much less to people who don't care.
Sadder yet is when upper management doesn't understand what we do. Often managers with little understanding (or care) for the abilities and duties of programmers seem to think we are all interchangeable and exactly the same. I've been in places where programmers were all considered "hackers" and not to be trusted, and that making sweeping technical decisions don't require any input from them. After all we are not "professional engineers", so we must be one step above the janitor.
Face it, this business of being a programmer is pretty confusing even to the participants, much less the general public. Would we have it any other way? Maybe we like the messiness and vagueness of our industry and don't mind it if people are confused about our role and abilities (unless it's the boss). Working with computers is kind of mysterious sometimes, often confusing, irritating and even random.
Science or engineering? Programmer, coder (codist!), developer? Or artist or writer?
Perhaps we should simply be called Computer Shaman.