Although Steve Yegge brings up a lot of interesting points, he's bad at explaining them.
Learning about compilers and programming languages is important because of the principles inherent in building them, which average programmers never completely get.
In my opinion, these principles are:
1) Code is data, and data can be code.
2) The only sensible way to deal with unmanageably-large amounts of code is by creating a language (whether this be an API, a protocol, a DSL, or a Turing-complete programming language) to communicate with.
3) Many classes of problems can be thought of as a transformation of a data-structure in one language to an "equivalent" data-structure in another language, which at its core, is all a compiler does.
Learning about compilers and programming languages is important because of the principles inherent in building them, which average programmers never completely get.
In my opinion, these principles are:
1) Code is data, and data can be code.
2) The only sensible way to deal with unmanageably-large amounts of code is by creating a language (whether this be an API, a protocol, a DSL, or a Turing-complete programming language) to communicate with.
3) Many classes of problems can be thought of as a transformation of a data-structure in one language to an "equivalent" data-structure in another language, which at its core, is all a compiler does.