- Systems. Yes, you can read papers and case studies and what not. But it will not be easy for one to even tell which part of a paper is the essence, which paragraph needs deep dive, or which claim needs close examination. In a seminar, a professor will work with students to critique papers, to cross examine multiple systems on related ideas, to deeply understand the theoretical bounds and the practical implications, and etc. That kind of experience is just not easily available in other places. Besides, it's just miles easier for someone to tech Lynch's book on distributed algorithms, for instance, with properly designed hand-outs and homework than reading the tomb by oneself. Similarly, it's not that easy to grasp the idea of program analysis if one wants to get in the trench of writing a compiler backend. I got seriously confused in an introduction course on program analysis for all the concepts about lattices, partial orders, abstract interpretations and etc. It's hard to imagine that I'd have the same access or even energy to study such stuff out of school.
- High-dimensional stats and probabilities. Again, I'm sure a brilliant student can teach herself, but man, even finding the right accessible material can be hard, let alone digest the fundamental ideas and concepts in such readings without the help of my professors and classmates.
- Math, all kinds of math. I'm not sure about you, but math matters in software development. Understanding temporal logic and mathematical logic in general makes doing formal verification much easier. Understanding probability and queuing theory enables me to test and diagnose my systems at a whole new level. Understanding combinatorics makes it really easy to learn data structures and algorithms rigorously. Understanding formal reasoning in general makes it easy to follow the books and papers on distributed algorithms. Linear algebra and numerical optimization and calculus are also important but hard to learn by oneself if a person wants to tap into ML sys.
The bottom line is, fundamentals expand one's conceptual depth and breadth, as well as the ability to abstract and to dive deep, which in turn gives a person more choices. I didn't start as a system engineer, nor did I know that I would work on internals of ML algorithms. But when opportunities called, I could jump on it. And in the meantime, I regretted that I didn't learn more fundamentals when I could, which made it hard for me to dive to the desired levels.Besides, even the fun of studying STEM topics is hard to get outside of school. I'm sure one can read about physics and chemistry and what not, but man, having labs and professors who can give you guidance... That makes a whole world of difference.