I've been through training in several fields, my experience is that all training must have an existing foundation to build on.
College was electronics engineering, we had a couple of guys who aced all courses (think the 4.0 GPA kind if there was an equivalent). And one day one of them asked for some help with a TV amplifier he built that wasn't working, and the "hobby" crowd had a good laugh at the crap he built. We did however have a good amount of hands-on lab courses which more or less evened the field between those of us who started as hobbyists and those who just went for the degree.
I started programming BASIC as a hobby in a club when I was 12-13, having your own computer back then was unheard of. It was mostly trial and error with instructors trying to teach some core stuff as a condition to being allowed to play games, but being able to try and fail then repeat until success was key to learning the very basics. And later there was the fun of breaking copy protection from tapes and tweaking code to transfer to floppy... It did help a lot as a start, having to learn c/c++, a bit of Pascal and few microprocessor languages in college was extremely simple when having a foundation.
I started tinkering with computers because I had to, taking out a hard drive and going to a friend was common practice. Once I moved to US I could more easily build and upgrade and help a friend here and there. And I needed to set a small network and share a dialup to 2 computers, that was my entrance to networking.
From that point I wanted to set a real network, with a "server", $50 for NT server administration books and many instances of falling asleep on the closet floor next to the "server" at 5AM helped me have no issue setting up a domain and clients from the scratch. Fast forward few months and the network admin of the company left and I was offered the possibility to help the consultant they brought in with taking care of the 100+ machines and servers. And in a couple of months I was splitting between being network admin and engineering roles. And the learning process never stopped, got into AD environments, performed domain migration, integration with the big corporate etc etc.
At some point I was asked to set up a small intranet website where they had to post some ISO docs, and so web programming began, jumping from c++ to php was piece of cake.
And then there was the day when a colleague asked me to fix his computer with a fried mobo, and I had to decline since fixing it (including my labor) was more expensive than him buying a newer and better machine. That's when I knew I had to look elsewhere, realized that a properly set network will just keep working unless hardware breaks and computers were becoming disposable. At that point I started to shift my focus to software, and luckily enough my then-boss decided to leave and I was offered his position, with the string attached that I had to learn company's ERP and programming for it in the next 2 weeks - which I did, at least enough to handle most of it alone. And then requests to create pages and reports kept coming, and it was mostly web development for me... along with the ERP system and the network and taking care of all computers.
And then I moved to a full programming job that required being a backup network admin, and at my current job it's purely coding. ...Although having the network background was useful to force the network admins to admit that they were messing with the network and screwing some applications in the process of preventing some DDoS attacks, but only when presented with the Wireshark evidence, also useful in being able to make production iOS apps hit my local machine services for debugging instead of the www servers...