I think that we can only effectively learn something if we have a need (not even a desire) to know how to do a particular thing, etc.
And that's very true of programming. We come against a hurdle that prevents whatever we are working on being finished, so we have to learn what is required, it's a necessity. There is no option of whether or not you will learn it, because without it your project is doomed.
I think this is why programming books largely don't work unless they are very clearly laid out so you can find the specifics of what you are learning, not what the book is trying to teach you. I think that's the major difference - for a degree you need all the knowledge, or at least most of it - each aspect becomes a necessity and is easier to learn, otherwise your degree is doomed.
It works both ways, because skills external to the necessities - like artwork or sound which might not be needed in a degree, well the self-taught guy might well have more experience in those. A degree leads to a career, writing games and selling them by yourself is not a career.
At the end of the day, hobbyists and self taught are more capable of writing their own games than 'pure' professional programmers, simply because they miss the external skills that they never covered in their degree. By 'pure', I mean they haven't done hobbyist development in which they might learn those external skills. At the same time, self-taught will be missing chunks of knowledge that they just never needed or couldn't figure out. That might masquerade as a few memory leaks, or result in a completely un-system friendly game. The best examples of indi titles are from ex-pro's or extremely experienced hobbyists, take an artist, sound guy, and a coder and if they are all professionals then you would end up with a much higher standard of product.
One thing is for sure, a lot of professionals like to make C++ appear more complex than it actually is - I think experienced BASIC coders would be surprised by how quickly they can pick up the syntax and put things together. All the DBPro stuff like memblocks, types, external source files, pointers... it all acts as a good introduction to more advanced languages. So if you know those things in DBPro, your in a better position to learn C++, and more relevantly, the engine that goes along with it.