Pues más bien no es de saber distinguir, sino la manera en que se aprovecha la ingeniería para las respectivas soluciones correspondientes que se brindan.
Un desarrollador podría tomar varias piezas de software y conjuntarlos para crear un mashup, mientras que el programador debe especializarse en el detenimiento de línea por línea. Esto podría concluir a que el programador es el inicio de todo software y el desarrollador es el intermediario de las soluciones existentes en cuestión software y la programación.
Si bien la experiencia actual se divide en junior y senior, el desarrollador se puede considerar el intermedio. Cabe aclarar que cuando se involucra en tecnicismos debemos evitar caer en la redundancia o en la connotación inadecuada de ciertas palabras, pongo como ejemplo el del arquitecto de software, si bien se podría manejar no es adecuado a la hora de especificar el área a solucionar. Probablemente aquí el sentido humilde en el uso de la palabra puede traerte mayores referencias de manera metódica.