Программист пишет программу. На чём угодно, начиная от блок-схем и заканчивая простым русским языком. Программа в данном контексте — это не набор инструкций на том или ином языке программирования, а алгоритм действий, ведущих к достижению цели.
Кодировщик (кодер) воплощает этот алгоритм на том или ином языке программирования. Он даже может быть весьма далёким от математики человеком. Может быть полным деревом в математике (и алгоритмизации как её части).
На практике эти две ипостаси часто сочетаются в одном специалисте. Но есть нюанс — программист, который умеет записывать свои программы на том или ином языке программирования (суть кодировать) остаётся всё тем же программистом, но умеющим обходиться без кодировщика. А вот кодировщик, далёкий от математики и алгоритмизации, без программиста — безработный.