I've taught a compiler design course every other year for awhile and one of the big drawbacks is that the students don't have an intimate knowledge of machine/assembly language for any specific architecture. 20 years ago programmers understood how the underlying machine and OS worked in detail -- nowadays programmers/students are strongly insulated from these details.
Ideally I would want to teach a two semester course starting with the backend first -- the first task would be to write several significant programs in assembly language (for some clean RISC machine) and grade them on how well they managed register allocation, stack frame / heap management, page alignment, etc.. Then cover how to convert some SSA IR (e.g., LLVM) into that language.
How do you translate into a language you don't understand?