A programmer can program code good enough, but that doesn't mean they are good at solving the goals business requires and communicating it.
A developer can program and develop a small enhancement with good communication. Sometimes can also break things down so other developers or programmers can work on it to.
An engineer an orchestrate an entire new project and can identify multiple areas where developers and programmers can be involved. A good engineer will do so while maintaining great communication with the users to ensure they get what they want.
An architect is someone who comes up with a plan to build something without any real care about budget, labor costs, or labor skills - both in software and in buildings.