I continually have to check the details of syntax and stuff when programming. Things like print format specifiers, the syntax of things I haven't used for a year or so, and use a calculator to work out bit masks and check my bitwise logic. I can never get it right in my head.
I don't remember details. I don't pride myself on that. I spend my time and energy on the big picture. Designing and understanding complex mechanisms. The architecture. The guts of the machine.
So I think of myself as a software engineer, not a programmer.
How about you lot?
This is a topic I see pop up once in a while... In some instances, even going as far as saying "software engineering isn't real engineering". (Though this isn't a case of that.)
Anyway, for posterity, I'd like to put forth my definition.
A software engineer is an individual that carefully considers and crafts the composition of the software... perhaps even the whole system, whereas a programmer, by contrast, is focused on individual feature(s), routines, functions or classes.
In my observation of real-world scenarios, (various commercial and open source projects) a programmer (by my definition) will achieve a given goal efficiently (both time and lines of code) but without regard to component composition or the relationship of the components among the whole system.