Even if you go somewhere like Google you will find most of their systems are just REST APIs as described above.
Now, there obviously is a lot of interesting projects for you compiler or OS lovers. But there is so much choice you don't have to be ready to work on them. I mean, I don't need to learn robotics just because 0.2% (entirely made up number) of projects on job market are about writing software to control robots.
So, to sum up:
-- if you are in it for money, don't waste time on studying CS, just learn basic programming and hop on any project.
-- learn on your employers time. How fun it is being paid and learning?
-- you don't need to get every job. You only need to get one (every three years...)
-- most projects are boring from the point of view of programming techniques you are going to be using. Learn to find fun somewhere else.
-- if you want fun projects you can always learn what you need on your own (on your or your employers time). You aren't going to be good developer if you don't spend considerable amount of time learning for the rest of your life, anyway. Just get used to spending time learning new stuff every day.
It does not matter much how good your technical skills are if other force multipliers are very low.
More than that, people who are bad at communicating and relations tend to stay away from these problems -- trying to bring every problem to technical level -- basically ensuring they are continuing to be at a disadvantage.
I learned about making Operating Systems, Compilers, 3D Graphics, Artificial Intelligence, Machine Learning, TCP/IP Networking, Databases, low-level Assembly programming, and how computers work at a hardware logic gate level, to name a few. And they offered other courses as well, these are just what I picked from the offerings.
Yeah, there was the standard Data Structures and Algorithms class (which in the business world is now not much more than a 'you better know/refresh this if you want to get through our interviews' class) and one class that was about Automata theory, which my teacher would claim 'is the only real computer science class at this school' which was all mathematical proofs, but it still helps you understand regular expressions better, at least it did for me.
But most of the classes I took would have had practical applications in the workforce, for different types of jobs. But really isn't that pretty much any undergraduate major? The classes you take aren't all going to be directly relevant to your particular path through the field, it's more about exposure to different possibilities and providing a broad base of knowledge to build from.
Sure, there are some formulas in economics, but 99.99% of the time you are not going to prove anything mathematically and you are just looking up a formula written by somebody else. On the other hand economics has a huge amount of stuff that is not covered by mathematics at all.
It is disheartening to see so many people wasting so much of their potential by studying CS when they know they will get into software development anyway. Rather than racking education costs they could be earning money and gaining experience.
I have been constantly hiring for the past 15 years and I have learned to stop caring about CS. Real world experience is worth more than comparable time spent studying CS.
The only reason I may prefer a candidate with a degree is because it takes a lot of work and perseverance to stick to the goal of earning the degree, but I almost don't care what kind of technical degree you have earned.
One more point, it is not like academia is the only place where you can learn CS! In some areas of knowledge and at bleeding edge of it you may need access to people, but basic CS knowledge that can ever be even potentially useful at development work is all well documented in a huge selection of very good books.
You can pick them up and learn.
Good developers treat learning as part of their work, and it doesn't matter if something was not taught at school -- if they notice they are missing some knowledge they will just learn it.
If you need to study something I think it is better to study something orthogonal to what you are going to be doing. This can help create unique profile for you as a developer.
For example I have studied theoretical math and over the years I came to conclusion that was much better choice than going to CS. I have learned logical thinking and dealing with complex abstract problems. I have learned most of the CS stuff anyway while doing my work but I would probably never learn most of what I learned in math.
Other good directions of studies would be philosophy, visual arts, management, accounting -- you see the picture. Any of these could provide you with an edge as a developer for particular set of problems.