Nonetheless all of the material I've described was offered at university I attended and getting a formalized training in the matter (particularly a rigorous mathematical approach to algorithms, data structures and formal languages/automata) definitely helped.
Nonetheless -- if one is motivated and disciplined -- they can pick these things up at a job (provided you get a job where the environment is conducive to learning, vs. one that merely expects you to crank out business logic 9-5) as well as entirely on their own.
Even in my first job, which was pretty much just cranking out business logic 9-5 I've learned a lot about databases, OO programming, UNIX and software development in general.
At the beginning you have so much to learn that even if you don't work for Google or Microsoft (they actually do a lot of non-trivial R&D) you will still probably be learning a lot.
The important thing is to be willing to learn and improve yourself, and to just have a natural talent for programming. Nobody expects you to hit the floor running in your very first job.