I have a CS degree, and worse than that, it's a double major in CS and applied math. I had to study things that seem really pointless for an "applied software engineer", like differential equations or numerical methods (ok, maybe the latter is not so pointless). We also studied a considerable chunk of other, more "CS-esque" stuff, like introduction to mathematical logic, computability theory, lambda calculus.
Does this stuff pay off?
Well, my actual job never required me to implement any complex algorithms, because everything has already been written in the standard libraries. It does help to have at least an approximate picture of what's really going on under the hood.<p>But what really helps me is that 4 years of being exposed to all this crazy theory has affected my brain in a certain way: it has altered my perception of problems.<p>Before going into CS I was programming by chance: slap some code together (without really understanding the problem domain) and poke it with a stick until it somehow works the you want it to. I think most kids who are just learning to program do that. However, that approach changed radically after I spent some time at the university. In that sense, CS has been really useful, at least in my case. Btw, I'm not saying those skills could not have been obtained elsewhere.<p>And learning theory really broadens your horizons. Things like computability theory, I have no use for them in my day job, but they're just interesting. Back at the uni, I had a blast writing a turing machine "emulator" and programming it instead of manually writing the assignment on paper :) And yes, you <i>could</i> study them in your spare time, but the truth is, the job eats up so much of your time, and makes you so exhausted that you barely have the resources to follow an online lecture after a long day at work. So why not spend some time learning while you still free from most of the responsibilities of adult life?