Software Engineer at Square
New York, NY, USA
This question can definitely be answered multiple ways depending on who you ask. Like the previous answers said, most often these terms all mean the same thing. Software Engineer, Software Developer, Computer Programmer, Software Architect are all interchangeable depending on the company or the person. What I would add is that companies almost never distinguish this way. If a company calls their developers Software Engineers, they'll use terms like 'Software Engineer 2,' 'Lead Software Engineer,' 'Principal Software Engineer' to distinguish employees by rank instead of having another 'Computer Programmer' role. At the core though, whether you are a computer programmer or software engineer you will apply to and get the same jobs, so there is no real difference!
One common association some people make is that a computer programmer is someone who has been trained through college and a software engineer is someone who has gone through an engineering program at university. Again this is neither right or wrong, it really depends on who you talk to. If you choose to make this decision then there is a difference between these two careers. Someone trained in programming at college will have much more hands on, applied experience and will understand different programming languages and how to use them. At university, you learn more about difficult programming problems and how to solve them (not with any specific language) as well as how programming languages actually work. So a Computer Programmer in this sense will be better suited for a job where they are writing code to perform a task, and a Software Engineer will be better suited for a job where they are given a problem and need to come up with a practical solution. In general though, the two jobs are interchangeable. A good Computer Programmer should be able to come up with their own solutions to difficult problems, and a good Software Engineer should be able to write code effectively. So in the end they are the same again!