Могу себе представить некую абстрактную контору, которая разрабатывает ПО. В этой конторе персонал непосредственно вовлеченный в процесс имеет разные роли. Есть, например, архитекторы, а есть - кодеры. Хотя, если в общем рассмотреть, то и этот, и другой - программисты (например, с точки зрения бухгалтера этой самой конторы).
То есть получается, что программист это более общее понятие по сравнению с кодером.
Хотя я слышал такие фразы: "Да какой он программист! Он так....кодер...". В этом смысле понятия кодер и программист, вроде как, противопоставляются.
Я еще пару терминов знаю =)
Разработчик программного обеспечения. В этом термине уже виден некий промышленный подход. То есть это профессионал , который пишет хорошие, добротные, поддерживаемые приложения, возможно не гениальные, но выполняющие поставленную задачу. Приложения разработчика ПО можно легко развивать и модифицировать при необходимости.
Хакер. (Не в смысле взломщик, а в смысле специалист широкого профиля в computer science). Для него программирование - это инструмент. Он решает задачу здесь и сейчас. Часто из "спортивного" интереса. Ему интересно имеет ли решение задача в принципе. Часто использует какие-то нюансы применяемых инструментов, недокументированные возможности и, откровенно, дыры, что, возможно, и приводит к решению в кратчайшие сроки, но использовать код хакера в продаваемом коде может привести к непредсказуемым результатам.