People often ask me what qualities make for a great programmer. I think they're expecting me to say something like "logical thinking" or "strong math skills". Of course those are good indicators, but I think there are other qualities we don't think about that are much more important. At my school, Epicodus, we chose not to use logic puzzles or other "tricks" to screen people out, because we think the other qualities are far more important. Here are the three qualities I believe will make you a great programmer!
The right attitude will take you incredibly far in learning how to code. If you believe in yourself, if you can take a deep breath when things get frustrating and then keep going, if you can see learning to code as a game - a difficult game, but a fun one - you can be a great programmer.
In recent years, the idea of "growth mindset" has become popularized. Sal Khan of Khan Academy explained growth mindset like this: "Researchers have known for some time that the brain is like a muscle; that the more you use it, the more it grows…. Our intelligence is not fixed, and the best way that we can grow our intelligence is to embrace tasks where we might struggle and fail…. People with growth mindsets correctly believe that capability and intelligence can be grown through effort, struggle, and failure."
Everybody learning to code faces innumerable setbacks. If you have or develop a growth mindset, you'll find that your challenges become more fun than frustrating, and eventually, you'll see nothing as too difficult to overcome with enough hard work.
So many times, I've heard one student at Epicodus say about another student, "She's so smart! She's just a gifted programmer." Inevitably, it will turn out that the other student started coding considerably before class started. It's not her pure genius that has made her pick up the course concepts quickly - it's that she already had a strong foundation and maybe even some exposure to the topics at hand.
If you feel like you're behind everybody else because they all started coding long before you, the good news is that everybody else feels that way, no matter when they start! The middle-aged coders wish they had started in their thirties, the thirty-somethings feel far behind the twenty-somethings, and everybody thinks they can never catch up with the kids who started in their teens. But coding is not a race, there are many paths to becoming a great programmer, and some of the greatest programmers didn't get started until well into their adulthood. Yehuda Katz, one of the most famous programmers today, once told me about how he decided not to major in computer science because he didn't think he was smart enough. He didn't get seriously into coding until well into his twenties.
Of course, there really are just those people who were born to code. Somehow, it's just how their mind works. But the truth is that attitude and experience are far more important. And attitude and experience breed aptitude. Often, what looks like somebody's natural gift is just a product of their greater experience and good attitude.
If you're a new programmer, my advice is to not worry about your aptitude - there's nothing you can do about it. Far more important is the way you approach your learning, and the amount of time you spend. Cultivate healthy attitudes, be patient with yourself, and spend lots of time coding. For most people, attitude and experience are far more important than whatever natural skills you were born with.