First and foremost, I would like to state that I would recommend teaching yourself to code but, there are a few times when this could backfire which is something I think is important to discuss.
I started teaching myself from a young age, 15 if my memory serves me right (I'm 23 now), it was difficult, tedious but extremely fun and satisfying, this was way before they offered computer science as a subject in UK high schools meaning that I never had anyone to really turn to for questions or best practices which is really where some of the issues stemmed from - I became reliant on google.
The first piece of code I wrote was not a "hello world" but a Minecraft mod (I still think its pretty cool though). I remember seeing Markus Pearson develop Minecraft and thought that it was the coolest thing I've ever seen, making numbers and letters do stuff on the computer, it was amazing! How is he able to do this? (I was young...).
When I started it I focused too much on the 'get it all working' instead of planning, designing, understanding the issue, debugging (properly), and ensuring my code was clean. I've spoken to a number of my friends and colleagues that are self-taught and they agreed on this point so I suspect these branch further out than my inner and outer circle. I jumped headfirst into getting code down (and this is something that I still do till this day - occasionally). This seems to be something young or new developers do, they get excited that their code is working and forget about everything else.
Testing... Come on, I know you never wrote any tests when you were starting out, I sure didn't... I underestimated the importance of tests and testing the functionality of my code, It works... Why have tests? This could be the case if your code is not going to change, but what if it is? Say you're working in a large organization and your code goes through many mutations, you need to ensure that it does what it's supposed to do. I work in the financial sector, I cannot allow for the code I write to make a single mistake because that could be catastrophic. Don't get me wrong, I'm not perfect and I don't opt for a TDD approach each time (I should... but I don't). I think in general we underestimate the importance of tests and this is definitely something self-taught/new developers neglect or place on the backburner.
A saying - "you can't teach an old horse new tricks". I agree to a point. There are instances when I start writing code rather than sitting back, understanding what it is I'm trying to do, planning out my code, and then start to write. This is something that I learned to do from working in a large organization and from senior developers, a good friend and colleague of mine said this to me when I first started at the company - "Programming is 90% figuring out what to write, and 10% actually writing it".
At the time, I didn't really understand what he meant as back then I was working on "simple" stuff, but oh boy... Once we moved onto bigger and more complex projects, my lack of experience started really showing, and you may attest this to me being inexperienced but these are things that you SHOULD learn at university, and/or some very good programming courses.
It's been a long night and just wanted to get some of my thoughts across, there are a few more points which I may add at a later date or make a part 2 of this post, but the gin has caught up to me.