I agree that there is a danger in compiler-construction courses of
over-emphasizing the easy part, namely front-end generation, and
short-changing the back-end issues. However, I would like to point out
that while the research community thinks that front-ends are a solved
problem and old hat, there are a whole lot of people who haven't gotten
the message. Judging from Usenet traffic, many people think that there
are exactly two kinds of parsers: recursive descent and yacc. Judging
from some compilers I've tested recently, the entire body of literature on
syntactic error handling has been completely ignored: cascaded error
messages are as prevalent as ever.

Vendors seem to understand the utility of optimization; I think that
compilers will include optimizing code generators no matter what is taught
in college. The same thing doesn't seem to be true of good front ends.
So perhaps it is desirable that compiler courses should emphasize
front-ends and the automatic tools available, in order to improve the
balance.