Original question from Quora:

What should be my next step to become better programmer?

I’m 22 selfprogrammer developer. my current skill set is basic of OOP (inheritance, encapsulation) etc. Mainly programming in PHP, JS. Should I start learning Design Patterns or something more important?

My Answer:

Disclaimer: PHP and JS are totally fine. You don’t need to learn a language for the sake of learning a new language. Ignore those who tell you otherwise.

Now, the real answer:

First of all, don’t fall into the trap that book learning and skill are related. They mostly aren’t.

Here is what I mean…

For a while I worked in the Computer Science department doing grant projects and some of my coworkers had masters degrees in comp sci and so on.

The developers with highest level degrees were horrible programmers. Seriously, they couldn’t code their way out of a paper bag (why would you try to do that anyway?) and everything they did took a lot longer than it should.

This is not a knock on them as individuals at all. I loved working with them, but their code wasn’t very good.

At the same time, the best programmers I’ve ever worked with had limited formal education. They had something far more useful…

The best programmers I’ve ever met are what I would call “builders”. They always were building something. Even when they weren’t coding, they were usually building something without code - like wood tables or renovating their bathroom or something like that.

The way they learned how to code was they had something they wanted to build with code so they just sort of figured it out. Over time they learned things as they became useful - languages, patterns, frameworks, databases, etc.

But the key point is they learned it as they were useful, not just for the sake of learning.

And the reason they became the best programmers is because by building constantly they got far more practice than those who sought high level degrees.

I’ve seen this in my own programming. The way I learn best is by building new things and only learning new things when it suits a problem I’m trying to solve. At the same time, I always have something I’m building or working on, so there is always a need to learn in the context of the need to build.

Learning without context doesn’t give you enough drive or desire to become truly great at what you want to do. If instead you have a significant ulterior motive - the desire to build something cool, putting the effort into learning new things is easy. That’s just the sacrifice you make to get what you want.

The way you develop skill is by practicing and perfecting the skill. So find a motivation to practice your skill every day. People I call “builders” tend to do this naturally, so follow their example.

Always have something you are building.

So, my question to you is, what are you going to build next?

-Brian

P.S. Have you subscribed to Code Career Genius yet?