I got into programming as an autodidact, I ended up graduating from college with a major in software. Both formal and informal education has pros and cons.
Autodidactism fueled my drive, it's what got me hooked to the craft.
Engineering school taught me the basics, how each concept fits together. More importantly, how software quality is defined and evaluated - which is what makes you an initiate, a professional.
Formal education is no longer a necessity to work in most companies. Its most essential aspects can be replaced by personal practice, books, online courses, or support communities.
Learning how to program is half learning how to code, half learning how to optimize your code for humans and machines to process it. Once you understand that, it's clear learning how to program is a quest for quality, an artisan apprenticeship. Consequently, programming is a search for the highest quality: beauty.
You need to master many tools and concepts in order to reach this level of mastery. Each technology you learn serves this purpose. For example, you don't do versioning because everyone does it, you do versioning because development is teamwork and versioning addresses the challenges that comes with a collaborative environment. The mantra of the software developer is continuous improvement.
... to be continued tomorrow