I remember it like it was yesterday. It was the year 2000, Dr. Pargas was standing at the front of our data structures class talking about some data structure-y topic while an SSH session was projected on the wall in front of us. Someone asked a question, and he said something along the lines of “Well, if you want to be a real computer scientist you need to start using vi”. I think he was smiling as he said it, and in hindsight his statement wasn’t even slightly true, but being young and easily influenced like I was I went back to my dorm room and immediately took up training myself how to use vi. It was rough going for quite a while, but once I started to get the hang of things I realized that I could work really quickly in vi.
Flash forward 6 years, and I was enamored with TextMate. I was working a job doing Java development, but at the same time learning Rails and working on Rails projects in my spare time. It felt like every article I read and screencast I watched was demonstrating how to accomplish text editing zen with TextMate. The fact that I was using Eclipse every day was filling me with nerd rage. So I bought a Mac and within 10 minutes of turning it on had purchased TextMate.
I can honestly say that neither text editor change made me a much better programmer.
Great tools just don’t make you that much better. Your tools are really important. They’re wonderful, in fact. But Tiger Woods would beat all of us with a junky set of clubs, Messi would outplay us without any boots on, and Rafael Nadal could probably beat any of us on a tennis court with a classic wooden racket from the 60’s. Heck, he could probably beat me with a ping pong paddle. The skills, knowledge, and experience that you’ve built up are the most important part of the equation.
So tools don’t make the programmer. What does? I think many aspects of what makes for a great programmer depend on what you’re working on and the people that you’re working with, but I’ve seen some common traits in people who have had a lot of success in software development that I felt were worth sharing. I’m not sure if these are skills that you can pick up or if they’re things that you’re born with, but I feel pretty strongly that I’d be in a great position if I worked a bit more on these traits and a bit less at switching text editors.
The best programmers that I’ve known put people first. They’ve realized that the software that they’re writing is for people, even if it’s just the back end of a complicated system or a protocol that no one but other developers will ever use. They write documentation because it’s important. They help people use their code. They’re willing to work extra and deal with a bit more complexity to give the people using their software the right solution.
Appetite for Learning
Amazing programmers are ridiculously hungry for knowledge. They’re always telling you about something new or interesting. They tend to read a ton (whether online or offline) and they tend to love to try things out and learn from experiences as well. They’re not afraid of trying out new languages or new platforms.
Skillful at Problem Pattern Matching
Once you’ve been writing software for a while you start to see problems arise that look awfully similar to other problems you’ve dealt with. Being able to recognize those and transform past solutions to work in your current situation is a really valuable skill. Being able to improve on the solution each time is even better.
Note, though, that this doesn’t mean you blindly say that because a past solution could work it must work. That’s where skillfully applying problems pattern matching comes into play. You’ve got to have an eye for knowing when it’s right to apply a past solution and when it’s not.
A Little Bit Insane
My brother took a Python class his Senior year of high school, and when I asked him how he liked it, he told me I was insane to be a programmer and that it was the one of the most boring things he had ever done. To some extent, I think he’s right. I talk to computers way more than I talk to people most days. I get a huge thrill from the fact that I get to turn line after line of basically jibber jabber into working software. Not every person out there loves doing these things, but the best programmers that I’ve met absolutely love making software.
Software development is pretty much always slower than anyone wants it to be. It takes time. Sometimes you have to just be patient enough to crank out the code you need to write. Sometimes as developers we get to write really fun code, but sometimes we get the displeasure of writing a lot of code that we’ve basically written a hundred times before. I think the best developers keep going because they can see the big picture of what they’re working on and they love the process of building that end result piece by piece.
These are a few traits that I think make for a really good programmer, but it is by no means an exhaustive list, so I’d love to hear your take. What do you think makes for a great programmer?
Thanks to espensorvik for the awesome photo!