I have met a number of people who are rock solid programmers and have a deep understanding of technologies. People who can program device drivers in their sleep and have implemented a godawful number of systems over the years. People who have licked networking or embedded systems or whatever (take your pick).
Naturally, they assume that CS is the same as IT, and enter CS programs to get a degree.
And then, I have seen them fail miserably as they realize that programming does not equal discrete math, graph theory, or computational complexity. Usually, it's been a while since they've been out of school, so even simple things like Graphics 101 with vector math and basic physics isn't quite a cakewalk. Plus, I have found that they are quite limited by their own experience and biases (mostly because they've had a lifetime to learn bad habits) and find it quite hard to reconcile real world experience with the academia.
You can especially see this with older, more experienced folks in a class teaching, say, Operating Systems, Architecture, Data Structures, or Compiler Design. And it is not necessarily their fault -- their real world experience sometimes does contradict what's recommended in the "ivory tower" world. Networking is often quite the opposite, though -- it is one of those fields where real world experience proves valuable, and the experienced folks learn a little something about the math behind network routing and such.
Honestly, whenever I see someone with experience wanting to study CS, I just recommend that they get a degree in something like MIS simply because it is a way for you to move up, and it is a lot easier -- handing computer science at a later stage in your life is usually significantly harder unless you've been keeping yourself mentally challenged in math and related subjects. You are in a very different place mentally in your early 30s than you are in your late teens.