The big value I got from taking compilers as an undergrad was that it brought everything together. It's basically where computer architecture, theoretical CS, and software engineering (and a hint of systems security) collide in a very practical manner. Compilers make it very clear how all those seemingly disparate topics apply in real non-trivial systems.
Compilers was the first (and, perhaps, only) course where having playid a lot worth computers before didn't matter. At. All.
At the same time, you learned some theory you didn't know (couldn't even have predicted) - that actually had direct practical application!
It was amazing and a microcosmos of CS - in that you first get a general understanding of the problem and desires outcome, learn theory that you couldn't have predicted but is amazingly apt for this, and end up making stuff work thanks to all of this.
It's an amazing experience that everyone with an interest in CS deserves to have.
These are precisely the type of "ahas" I hope to experience, too, when I begin studying computer science. I've been taking introductory college math courses at my community college to fulfill some prerequisites, and a way for me to stay disciplined in my studies is knowing that concepts like the ones you mentioned are coming. Thank you for sharing!
You'll have many of these moments! One of the best and worst thing about computer science is how many layers of abstraction there are.
On one hand, they help you get things done. On the other, it can be _so_ hard to understand how things really work. Most programmers don't peel back too many layers, but that's okay.
> Compilers make it very clear how all those seemingly disparate topics apply in real non-trivial systems.
Combined with a proper OS class, it's the first time a student can truly understand all the levels of abstraction from the language to the logic gate.
And it also helps to recognize and solve parsing problems. How many programs end-up containing a parser, even if rudimentary, to read non-trivial input of perform validation? No, you can't use regex for that...