James Robertson writes...
There are a lot of developers who will have a really hard time letting go of the idea that all inbound CS people should take a compiler class. Ask yourself though - how many people are doing that kind of work, and how many are creating what amounts to glorified reporting interfaces?I actually believe all programmers should have several compiler courses.
As it turns out a programmer friend with a mechanical engineering degree has been taking EE and CS courses over the last couple of years. He just completed a compiler course. He created an interesting SQL compiler for file systems as his final project.
I was reminded of the deeper value of learning the basics of compiling. We talked a few times over the semester, and his discovery process was familiar. The surprise he found building compilers are the regularity, and the patterns that decompose complex problems into combinations of simpler ones. Of course "back in my day" we did not have names for all these patterns, but the lessons are the same. The lessons learned building compilers can be applied to many other programming problems.
More advance compiler courses teach about the mathematics and engineering of representations and transformations of data. Denotational semantics, continuations, even "types" (gasp! I said it) are worthy topics that all programmers should understand.