Нужно ли программисту знать/понимать машинный код и для чего это может потребоваться?
В самом общем случае - не нужно. А на современных процессорах - физиологически невозможно.
а как же программисты обращаются к современным процессорам во время их программирования, если "невозможно"?
Знать наизусть не нужно однозначно, как и языки программирования. Для этого есть спецификации форматов исполняемых файлов, а если они не устраивают, то можно с помощью HEX-редактора и экспериментов составить свою спецификацию.
Уметь пользоваться HEX-редактором - нужно в том случае, если пишете компиляторы или занимаетесь реверс-инжинирингом (иногда HEX-редактор удобнее, чем деассемблирование или декомпиляция)
Смотря какому программисту. Тем, кто работает на низкоуровневых языках, нужно
специализируюсь на java, но на чем то конкретном пока не остановился, потому спрашиваю)