What is programming all about?
I started programming as an autodidact at 13 trying to build my own role-playing game forum. Sheer curiosity fueled the passion, it got me hooked to the craft.
I ended up graduating from college with a major in software. Engineering school taught me the basics, how each concept fits together. More importantly, how software quality is defined, evaluated, and consistently produced - which is what separates a hobbyist from a professional.
Both formal and informal education has pros and cons. 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. This post is an attempt at teaching you how to go about learning how to program.
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 becomes clear learning how to program is first and foremost a quest for quality: programming is a search for beauty.
Learning programming is thus similar to an artisan’s apprenticeship. You need to integrate many tools and concepts in order to reach a high level of mastery. Each technology you are bound to use in professional settings serves this quest for technical mastery. For example, Git versioning addresses the challenges that come with the collaborative environments all developers are bound to take part in. The mantra of the software developer is continuous improvement.
When you start learning karate, you probably want to kick someone’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.
One thing to understand about programming is that the language rarely matters. PHP, Javascript, Java, Python, Ruby… spending too much time wondering which choice is better is futile. The reason is quite simple: most “mainstream” languages follow the same paradigm mixing imperative and object-oriented programming. Once you understand a concept in one language it becomes easy to adapt it to another. It’s true for basic elements of programming - loop structures, conditional statements, etc. - but also for more advanced and subtle concepts, such as design patterns explaining how good software is structured: if you know how to use one MVC framework (Symfony), you can quickly grasp the inner workings of similar tools (Laravel, Ruby on Rails…).
… to be continued