Original question from Quora:

What if I have no problems and I want to practice programming?

I am trying my best at self-teaching C# programming. I’m pretty new to it, and I’m looking up lessons online. I’ve heard the best way to practice is to try and solve your problems with writing code, but I can’t think of any problems I have that aren’t just where I live and money issues.

What do?

My Answer:

Build your own version of an existing piece of software. Copy it down to the pixel if you have to.

Think of it like learning to play music. Have you ever tried to learn to play guitar or any other musical instrument?

Here’s the thing about playing ANY musical instrument…

You learn by playing other people’s music. Over and over and over and over and over again.

In middle school and high school I played in the school band. Every day for an hour we would play whatever songs the band was working on for the next concert or event or whatever was coming up soon.

At any given time we had say 3–5 songs the band was working on. And every day we played those songs until they were as good as we could do them.

It often didn’t take long to get the notes and rhythms down. At some point you are a capable enough musician that you can sit down and play music from the page its written on.

However, we would go over sections of a song for dynamics, for better collaboration between certain instruments, and so on. Getting 100 people to play the right thing at the right time in the right way for 3–10 minutes at a time is difficult even for the highest level musicians.

That is why you practice. To get better. To get it right.

Somehow, the programming world seems to think the only thing you should build is new features and you never go back to get better at the basics. This is one of many reasons why people struggle to get better at writing software. Their only practice is their performance.

Imagine if your favorite band only practiced during a stage performance. They wouldn’t be any good until the end of a tour!

So, if you are in need of practice, pick up an existing song and learn how to play it.

Or, in code terms, pick up some existing software and learn how to build it.

Do that over and over and over and over and over again and you’ll be able to build anything.


P.S. I unpack more ideas in Creative Genius.