david mosher

personal and semi-professional opinions of a web designer and developer living in saskatoon, sk, canada 
« Back to blog

3 Characteristics of Good Programmers

A wise man once told me that the best way to get ahead in life is to learn lessons from the experiences and failures of others. That man was my dad. He didn't share often with me when I was growing up but when he did I listened carefully (for the most part..) because what he had to say carried the weight and experience of someone who had experienced far more in life than I had. Programming is a lot like learning this way. There are people and companies who have tried and failed, sometimes miserably, at coming up with solutions to problems. When compared to other disciplines, I suspect there are more failures in programming than there are successes. This puts us in a unique position as developers because it offers us a distinct advantage over other industries; we have more examples of what not to do ... if we choose to seek them out.

Passion

I love programming. It's the only job I've had where I feel energized by solving problems. Sometimes my solutions suck but I think that's ok because I'm willing to admit it and strive to improve wherever possible. This is what I believe constitutes passion as a programmer. Passion is different than zealotry. A passionate programmer seeks out solutions using the best tools and technologies he knows at the time with the willingness to admit that any solution at any given time is never perfect; it's merely the best at that moment in time. Zealots spend their time evangelizing solutions based on hype or buzz.

Passionate programmers use logic, prototypes and test cases to prove that what they think works will work. Zealots are always working hard to implement "the next big thing" in the hopes of scoring a knockout; they're like the blackjack player who constantly changes up his strategy in an attempt to influence the outcome of the game. Passionate programmers realize that perfection is unattainable but they still strive to attain it with care.

Perfection

It's been said before, "if we could only use solution [x] problem [y] would go away completely", "things will be all better if we just do this", "this is exactly what we need, let's implement it now!" I know that these things get said because I used to say them (and probably still do from time to time; stop me if you hear me). The problem with these "silver bullet" solutions is that they don't exist. The "one size fits all" mentality is the sign of an immature developer. Perfection is dangerous, however the pursuit of perfection can be an incredible motivator if it is tempered with pragmatism. Knowing when to implement a solution that is good enough for the task at hand avoids unnecessary refactoring and saves time.

Ask your business analyst or company owner what they think about perfection and the response will likely include the word "risk". Far too often the technical is all we think about. Our job as passionate programmers is to communicate early and often with our business owners to understand the business goals of any potential solution. By considering business goals we mitigate against the risk of building only the perfect technical solution.

Perseverance

I'm not an english major but I think that Shakespeare has some good things to say about perseverance.

"To be, or not to be: that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles,
And by opposing end them?"
-- Hamlet

The answer to the question has to be: to be! Giving up is not an option! Passionate programmers arm themselves with all of the tools and knowledge they have in order to face problems. They also surround themselves with like minded people and thrive on failure. Failure affords us the chance to persevere and refine our process until we reach a solution that is "good enough".

"And thus the native hue of resolution
Is sicklied o'er with the pale cast of thought,
And enterprises of great pith and moment
With this regard their currents turn awry,
And lose the name of action."
-- Hamlet

Have you resolved in the past to persevere through difficult problems as a programmer only to find that you get trapped in over thinking how you're going to solve them? Startups with great ideas fail so often because of this. Passionate programmers are persistent in identifying this shift in focus that leads to a cyclical pursuit of perfection which steer's companies off course.

What type of programmer are you? that is the question.

Loading mentions Retweet

Comments (16)

Jan 14, 2010
imyousuf said...
Nice post, though I am not as experienced as you are but my feelings are the same :)
Jan 14, 2010
Telematica said...
That's true man... Passion...
Jan 14, 2010
Great article! I couldn't have said it any better :)
Jan 14, 2010
David Mosher said...
Thanks for the positive feedback!
Jan 14, 2010
mark p said...
what do you think the word penultimate means?
Jan 14, 2010
David Mosher said...
@mark p, thanks for the correction it certainly didn't mean what I thought it meant, however what I'm wondering is if you derived anything useful from the article itself? I'm all for proper spelling and grammar but this is the internet, people make mistakes ;)
Jan 14, 2010
Adam Wright said...
I agree, it also seems that resourcefulness, is a theme that occurs throughout your other three. I have found that being able to find information about how to do things that I didn't know going in to a project is the skill I use most often although the others are required to reach a complete solution. Good article.
Jan 17, 2010
Senthil Kumar B said...
Good Post .
Passion is the one that drives every programmer .
Jan 18, 2010
David Mosher said...
@AdamWright, absolutely! Resourcefulness and taking initiative as a programmer are two characteristics I believe are very important as well :)
Jan 18, 2010
David Mosher said...
@Senthil, I agree. Further, if there are programmers who are not passionate about what they are doing I would ask them if they have considered that programming might not be the right profession for them :)
Jan 18, 2010
Senthil Kumar B said...
@David Thats Right .Also check http://ginktage.com/?p=429 . Lt me know your feedback on them too
Jan 18, 2010
David Mosher said...
@Senthil Great post! I added a response with some further points to your discussion :)
Jan 18, 2010
Jordan Boesch said...
I couldn't agree more. My passion for programming and learning is what keeps me going. Things change every day and obviously it's impossible to be perfect when it comes to programming, but with the things you learn you can always strive for it! I've found that tinkering around with frameworks and following other developers in the field has helped me stay in the loop with best practices, patterns etc. There are a lot of knowledgeable people in this field and we could all learn from each other.
Jan 18, 2010
David Mosher said...
@Jordan, Yes there are so many people and resources to be able to learn from it's sometimes staggering. Lately I've found I get the most traction at learning things from following the right people on Twitter related to what I'm interested in (primarily Frontend development with HTML, CSS and Javascript but really SASS/HAML and jQuery ;).

I checked out your blog and see that you're also from Saskatchewan. It's nice to have some more fellow Canuck designer/programmers around :)

Jan 18, 2010
Jordan Boesch said...
@David Mosher: I've heard of SASS/HAML but haven't gotten my feet wet yet.

jQuery FTW! Some really good jQuery/JavaScript developers I follow are: @jamespadolsey, @paul_irish, @cowboy, @bennadel and of course the leader of the jQuery wolf pack, @jeresig.

I came across your site while I was searching for web development in Saskatoon. I'm planning on moving there because Saskatoon > Regina, so let the job hunt continue!

Jan 18, 2010
David Mosher said...
@Jordan: I hang out in the jQuery IRC channel as "davemo" a lot as well and have spoken with Paul Irish and John Resig semi-frequently about plugin development. If you don't do IRC you should make an account on the Freenode servers, there are a lot of devs in the #jquery channel and many other channels (#css, #django, #python, #wordpress, etc...).

If you're moving to Saskatoon send me an email or twitter DM about job opportunities, I might have something for ya :)

Leave a comment...

 
Got an account with one of these? Login here, or just enter your comment below.
Posterous-login    twitter