Uni CS lecturer here. One of my mentors in grad school was the compiler professor, and I learned a lot from him. I also got a chance to actually teach compilers for the fist time last year and it was one of the most difficult courses I have ever taught. Used the dragon book and had my students create their own lexer/parser based on an invented language that I came up with.
Compilers is one of the few topics that none of my colleagues seem care about, but IMHO it's so very important to learn how to do. In my Uni, the course only gets taught once every few years (it didn't help that our last department chair didn't care for the course at all and never scheduled it).
I count the day that I finished my LL(1) parser and lexer for my own compiler course as a student as the day I "earned" my chops.
I'm curious, why focus entirely on parsing? I only read parts of the Dragon Book, but it didn't go in much detail about other topics, such as types, either. Couldn't you just use a very simple syntax such as S-expressions or even start from an AST directly?
people hyperfocus on parsing because it's far and away the easiest part of a compiler - type inference, optimization, target codegen are infinitely harder and deeper wells to plumb.
A few reasons, although you are only seeing part of the picture with the project. The lectures were all theory-based (more along what you would find in the book).
1. I had a whopping three weeks to prepare this course from scratch (welcome to Uni teaching) and it was what I could scrape together in that time.
2. Parsing is highly useful, and I felt my students could benefit from it.
3. It was what I did in undergrad.
4. It was not too difficult to accomplish, and a project like this can easily get out of hand for a semester project.
I agree with you that parsing, for most people, or even most software engineering people, are much more useful then the other stages. Code generation is also interesting and could be useful too but that's pretty much the two of them. All the "interesting" stuffs people spoke about (e.g. optimization) actually has very few use cases unless you are working on it directly.
Most never "earn their chops" in a traditional sense. These days, it would seem earning your chops is done by running create react app, cobbling together several dozen random javascript libraries and putting out a laughably designed website in a few days.
The Georgia Tech cs2130 class, languages and translation, the third required cs class for the major, was notorious as being a weeder course around 1999. The professor made it clear that there would be no partial credit for code that could be core dumped by the teaching assistants. If you weren't good at the class you should probably look forward to writing business applications for IBM, allegedly. So some people used to be hardcore on this subject.
Always glad to see someone else who remembers that era at GT!
CS1311 - Data structures in pseudocode (or Scheme if you had the "X" class)
CS1312 - Build the game "Risk" in Java
CS2130 - Die a painful death at the hands of Jim Greenlee's compiler class.
I actually think the class needs a book or at least an extended article written about the end of the "shaft" era. I've never seen a professor brag about a student offering a bribe in order to pass.
It was interesting to see so many classmates panic in the class over how seemingly arbitrary the zeroes were given over minor mistakes. I, for example, was given a zero for a lab because I forgot to sign in. The grade for this lab was entirely based on signing in though because it was written incorrectly. The class just had tons of "life isn't fair, you should have paid attention" anecdotes.
We have a similar course too which focuses specifically on language design without the compiler part (they do get a bit of compiler theory) which satisfies that "requirement" for graduation. It is much more popular than the compiler course which is perceived as "harder" (it probably is when I teach it). ;)
IIRC (may be wrong, read as a kid), those ladies used to signal which aristocrats should be chopped vs. not, by signalling with their knitting needles, or a nod or shake of the head, or some such - while sitting in the front row before the guillotine.
Ghoulish. Of course, as a kid, you (I) lap up and relish that stuff, like breakfast cereal.
Compilers is one of the few topics that none of my colleagues seem care about, but IMHO it's so very important to learn how to do. In my Uni, the course only gets taught once every few years (it didn't help that our last department chair didn't care for the course at all and never scheduled it).
I count the day that I finished my LL(1) parser and lexer for my own compiler course as a student as the day I "earned" my chops.
Edit: Since there seems to be some discussion on this thread, I'll throw in the actual project that I gave my students (warts and all). https://github.com/agiacalone/cecs-444-semester-project