If you try to teach yourself to program ,there's a good chance you'll end up as a crappy programmer, not because you don't understand the language, but because you don't understand the general concepts of programming.
For instance, if you teach yourself to program, and you find you have to sort data, you'll probably end up writing bubblesort, since that's the simplest sorting algorithm to think of. You're not too likely to think of quicksort, because it's not intuitive at all, but it's a ton faster than bubblesort.
Similarly, you're not too likely to teach yourself recursion very well, nor are some of the more advanced object-oriented concepts going to come easily to you. These are all useful things that, if you try and teach yourself to program, you're likely to end up not using, you'll have working code, but it'll be slow, innefficient, and messy, because no one ever showed you the right way to do things.