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 come with a collaborative environment. The mantra of the software developer is continuous improvement.
When you start learning karate, you probably expect to kick some people’s butt during your first training session. Of course, that’s not how it works: you need the basics first, otherwise, you just end up hurting yourself. More importantly, you need the underlying philosophy - to understand it’s not okay to use your powers against the very rules your practice is based on: pacifism in karate (undoing and avoiding violence), or excelsior in programming. Now we understand what programming is about, we can proceed to learn the basics.
We all seek knowledge because we are expecting something from it. The way you learn must reflect the inner reason why you got started in the first place. Learning is thus a constant shift between a macroscopic (the end goal, the bigger picture) and a microscopic (an atomic element of knowledge) scale. Depending on where you stand, you need to take a pragmatic (tutorial) or a theoretical (compendium) approach, or something in between (handbook). The quicker you strike a balance between the two, the faster you can start developing a “passion” for the subject - because you created an action/reward loop.
… to be continued