When I started to learn programming back in the days, the prevailing notion for books on the topic was to avoid the language/framework specific ones. Gurus were preaching to read books about generally applicable concepts and ideas and then, eventually, niching down.

That’s a very sound advice, which unfortunately didn’t work for me.

What worked was to figure out a very specific thing I wanted to do and then get my hands dirty.

In my experience, this approach leads to asking questions about very concrete things: “How to create a form with Ruby on Rails”, “How to save the input from that form”, “How to make the button green”, etc. These are great, specific questions. Looking for the answers, you gradually start gaining understanding about the “whole thing”. When I do this - that happens. Which makes you ask more and more questions, leading you to even higher-level concepts.

“Why” questions are such questions - they unlock higher level ideas.

Following my curiosity, I’ve always ended up on a much higher level of understanding, exploring much broader ideas, essentially doing what my mentors preached, but in reverse. No exceptions.

Now, I’m not saying that’s the right way. I’m just saying it’s more intuitive to me. At the end of the day, you can get to the mall by foot or by car, but the one is going to be faster and much more pleasant, especially if it’s raining outside.

Understanding in reverse had tons of benefits for me, compared to “the other way”. It was a much more enjoyable way to gain knowledge, as I was always having something that needed to be figured outA clear task to complete.

Whereas following the other approach, I had to load up tons of concepts, ideas and jargon upfront, which who-knows when, in what context and for what reason could be useful.

It proved to be a very unintuitive way to approach learning.

These days, when complete beginners ask me where to start with learning programming, I have these very simple advices for them:

  • If you don’t have any idea what you want to produce with code, start having some before anything else

  • If you don’t have any programming language in mind, start with JS - easy, no compilation, super low friction, etc

  • Follow your curiosity!

When learning, you need to have a very, very, very quick feedback loop. You want to see things happening, instantly. That’s the beauty of learning to program. It’s such a blessing to see the results of your thoughts in seconds, even milliseconds. No other knowledge field has that advantage.

I don’t see a single reason why someone would want to learn theory upfront, when they have the greatest sandbox in human history ever created at the tips of their hands.

Just build and everything else will follow.

And do read language/framework specific books. They’re great way to start doing things!