What makes a great programmer?
I was browsing Quora recently and came across a question called What are the best kept secrets of great programmers?. These kinds of questions always make me cringe a little. Everyone’s always looking for secrets and shortcuts and the simple fact is, there aren’t any. There’s never just one thing that people-who-get-stuff-done know that no one else can’t figure out.
And I cringe because I do it too! I wonder what all these other people putting out tutorials and stuff know that I don’t know and if I’m good enough to teach what I’m trying to teach (not in the technical part of it but in the actual teaching and learning theory part of it). I want a secret that will guarantee that I’ll succeed at this or at anything else I want to do.
And there is! It’s called hard work and practice, which is why I love the (currently) top voted answer so much. He lists five things that will get you to where you want to go:
Learn the concepts
I talk about this a lot and it’ll be the focus of my upcoming video course that I’m putting on YouTube for free. I think a lot of beginners think that they need to learn the syntax of a language, the words and functions that will allow them to tell the computer what to do. But those don’t matter nearly as much as understanding how the programming behind it works. There’s the saying Give someone a fish and they eat for a day. Teach someone to fish and they eat for a lifetime. Same is true here. I could show you exactly what to do to solve a certain programming problem right now, but you’ll be just as confused the next time you hit a roadblock. But, if I teach you the concepts and problem solving process I go through to solve it, you can apply that to your next problem yourself. That’s what you need to learn and what I’m hoping to teach. And the key to learning it is in the doing, and we’ll be doing plenty of that as well.
Know the tools
This might be the only section I kind of disagree with. Yes, the tools you use to program with are important, but they’re not that important. As a beginning developer, don’t focus on the tools first.
However, there is one tool that is worth focusing on and it’s the number one tool you’ll be using, and that’s your brain. It took me a long time to get the importance of understanding how my brain solves problems and now that I do, I am way more productive than I’ve ever been. Once you understand that you can’t force your brain to solve a problem, you understand how stupid it is to work 12 hour days or go on late night coding binges. Once you understand that your unconscious brain is the real problem solver, you understand the importance of taking walks and keeping a notebook with you at all times. (You will solve more complex problems in the shower than you ever will at your computer, I can guarantee that.) Once you see how certain foods and activities can make you lazy or slow, you start eating right and exercising just to make sure you can code well the next day.
Understanding your tools is important, but understanding yourself is way more useful.
Manage time
This is right on and it all boils down to reserve big blocks of time for your work. You will never do anything of value in 15 minute blocks and real concentration takes at least a good 20 minutes to kick in. Give yourself the time you need to really dig into something or risk wasting a lot of time getting nowhere.
Prioritize
This is so important, understanding what you should focus on first is vital. I’m really focusing the video course around this, because while all the concepts I’m going to teach work together to create the whole, it’s so important to take little bite-sized chunks at a time and really try to understand them. As a beginner, there’s no way you could know what order you need to learn things in, so I’ll try to lay it out for you. Knowing that order comes with experience and understanding what you’re trying to accomplish.
Reuse everything
Couldn’t be more true. Not just reusing your own code and tools, but the code and tools that have been written by the millions of developers before you.
I like the Laravel framework because it encourages this reuse. It’s a web framework that has already been built and tested for you. Same with Ruby on Rails and Django. The way the web works isn’t changing, so take advantage of the stuff that’s already been built around it.
Keep learning
This is one I’ve added. If you stop learning in this industry, you fall behind pretty quickly.
I used to work with someone who refused to learn anything new. He had picked Perl as his language and that was that. I say “used to work with” because I’ve moved on from that low paying job and he’s still there. He’s a lucky one too, because most people who don’t keep up with changing technologies end up without a job one day and wonder what happened. What happened was that the technologies never stop moving, never stop improving, and, as a programmer, you need to keep improving too. You have to have this mentality, that you must constantly be improving and it really helps if you like it too.
Want to start on the road to greatness? Focus on number one, Learn the concepts. If you work on that, you’ll do just fine.