The term programmer can be used to refer to a software developer, Web Developer, Mobile Applications Developer, Embedded Firmware Developer, software engineer, computer scientist, or software analyst.
I think usually a programmer is really just a more entry level position requiring little to no experience while a software engineer is a more experienced role, taking part in the planning and design of a project rather than just being a code monkey
A software engineer is an engineer that produces software. A programmer is just someone that programs. All software engineers are programmers, but not all programmers are software engineers (in fact, very few programmers hold software engineering degrees).