There is of course a difference between "programming", being what you need to be able to play around doing interesting things for yourself, which you probably can learn from books and web sites, and "software engineering", which is what you need to get a job, which you can't. What's needed for that, after you've got the degree or whatever, is on-the-job training from somebody competent, and, of course, in time honoured fashion, you can't get the job until you've had the on-the-job training.
Having said which, there are an awful lot of people out there earning a living from programming who don't have the remotest clue what they're doing. Ah well, whilst clearing up the messes they leave behind isn't always fun it is always profitable.