Which three courses, that might help the discussion. I can think of many more than 3 courses that helped me directly or indirectly later on:

1. CS 101 - I mean, duh? Intro to programming, basic algorithms and data structures. By the end you can at least write a simple program, and if you weren't a nerd like me (started programming at 8 because the computer was there) this would be essential. Which was the case for the majority of my classmates in college, most hadn't done any programming beyond maybe "hello world" before college.

2. CS 102 - Data structures focus, don't recall its name, may have just been "Data Structures". Choosing the right data structure for the job (though many of the particulars aren't necessarily relevant, but how to choose what, that part is critical for embedded systems).

3. Compilers - Parsing, mostly, not the translation part. This was an introductory course, 200-level.

4. CS theory - Main takeaway was choosing between regular and context free languages and understanding the limits of both. Again, parsing but not translation has been more common in my work. The proofs side has been less useful in my professional work, but informal proofs are still very useful.

5. Systems 101 - Baby operating systems, especially working "close to the metal" in embedded, even on a host OS.

6. Computer graphics - Less the graphics part, more the structure of programs to operate at high throughput on large data.

7. Calculus through Linear algebra - (required by the CS degree, 4 courses) highly applicable to some of my work. Especially the recent stuff, touching on orbital mechanics.

8. AI - In the "good old fashioned" sense, not the deep learning/machine learning sense. Turns out it's highly applicable to making expert systems. Probably because that's what it excelled at, and those can be applied to some interesting situations. I'll place this as "indirect" though, like graphics.

9. Computer architecture - Direct and indirect. On the indirect side, it really taught me to work with boolean algebra which turns out to be very useful for studying real programs and their logic (and simplifying them). On the direct side, ever done VHDL/Verilog? Good luck being successful at that without studying computer architecture (self-study or in school)

10. Another computer systems course - Had a big assembly emphasis. Means that I don't "fear" it like many of my colleagues. I can read disassembled code without much trouble, and write it with reference material (because I don't do it often, it's like Fortran to me - I can read it, but writing is slow since I'm unpracticed).

11. Parallel programming - Actually very applicable to some embedded work if you have multiple processors involved or a multi-tasking OS available.

That's 14 courses right there that I've used in my career or am presently using. And that's not counting the math courses I took when I tacked on a math degree. At least I didn't waste 99% of my time. Maybe 10%? But, honestly, I cannot think of a technical course that has not, at some point, come up in my professional work. Even my abstract algebra class from the math degree saved us a lot of time and money a couple times when I proved a requirement was actually impossible.

I can imagine some of my colleagues feeling the way you do, the lack of utility of their degrees. But they all jumped into management roles early on, their technical degrees are useful only for the lingo.

EDIT: I finally thought of a time-waster class. It was our software engineering class. In theory, that should've been one of the more practical classes. Taking requirements, developing solutions, changing requirements, changing the system, etc. In practice, it was all theory. Useless. My AI class was actually a better software engineering class since it was team-project based.