It’s relatively easy to gain adequate knowledge of many topics. The Internet is full of quick tutorials and introductions. Want to learn CSS, there’s a tutorial for that.

I once had a job interview for front end developer at a very well-known company. During the interview I had to solve in-depth code problems without the computer. It wasn’t enough to solve the problem, I had to explain why the solution was best; backing it up with an explanation of how browser engines rendered CSS.

Deep knowledge involves solving problems but also knowing and articulating why the solution works. I didn’t get the job, but I learned something from the interview. I began the process of trying to articulate how and why code works.

Making the jump from knowing a solution will work, to articulating how and why it works in detail often requires studying and experimenting. It requires a depth of knowledge.

Where do these authors get their subject matter expertise? More importantly, how does one develop deep programming knowledge?

That masterful blog post you just read? It didn’t write itself overnight. More specifically, the knowledge contained within is the product of a much longer process. The succinct answer you got on Stack Overflow? The product of someone else struggling with the problem themselves.

If you want deep knowledge in a topic, you will have to take steps to get there. Learn from the knowledge of others. Tackle the problems you don’t know how to solve. Answer the questions you don’t know the answer to. Write blog posts. Write a tool in the language you want deeper knowledge in.

The process of wrestling through the questions and the problems you don’t have all the answers for will teach you more than you can imagine.

Deep knowledge is hard won. It is the product of experience guided by intentionality. Everybody starts at “Hello World!”, where you go from there is up to you.