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.
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.
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.
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.