Originally Answered: What's the difference between a "software programmer" and a "software engineer"?
Computer science generally focuses on the theory on how computers work. This includes things such as algorithms, concepts related to operating systems, creation of new theories and programming languages, basic concepts of chip/processor architecture, etc. Many CS courses use a substantial amount of math because CS deals in theory and math is commonly used in logical proofs or showing efficiency of algorithms. While CS dealt with the theory of basic hardware design, it focused mainly of the software side of computing and did not get into the actual creation or planning of any hardware. Because CS students understand the theory behind computing, they can become a programmer or system architect relatively easily.
At the university I attended, Computer Engineering was basically a combination of CS and electrical engineering. They learned a lot of the theory taught to CS students and they also learned the engineering principles used by electrical engineers in designing and creating microprocessors, controllers, and circuit boards. In the first two years at my university, CS and Comp E. students shared a lot of the same courses. However, after the first two years, CS students focused on the software side, while Comp E. students focused on the hardware side of things.
Computer programmers program software. (duh...ok, that was a pointless statement) While more advanced programmers may understand some of the more complex theories used by computer scientists, many entry level programmers are not familiar with many theories beyond those that directly apply to programming. Programmers write software for specific tasks. They may (or may not) take part in the planning of large projects... but they focus more on creation and implementation of the code for the given tasks.
I am not as certain on the concept of software engineers as I am on the other titles, because I have heard people use that title to describe programmers and I have heard it used to describe software architects and planners... but this is my understanding... Software engineers may do a lot of programming. However, they also do a lot of the planning and design of the software to make sure it is done in an efficient manner, meets the goals, fits the budget, and, if necessary, works with existing systems. They will be the ones that plan the project and then give the specific tasks to the programmers. They think on the "larger scale" than your typical code monkey.