Programmer vs Software Engineer

I came across this thread via the CodeProject Daily News. The original forum post reads:

I continually have to check the details of syntax and stuff when programming. Things like print format specifiers, the syntax of things I havent used for a year or so, and use a calculator to work out bit masks and check my bit wise logic. I can never get it right in my head.

I dont remember details. I dont 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?

-- Munchies_Matt

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.