I’ve been fortunate enough, in my lifetime, to have witnessed the election of the first African American president of the United States. Perhaps, one day soon, the first female President or the first Chinese President.
But, I’ve already resigned myself to the fact that I will never see the first Programmer President. Not in my lifetime. For, as poor of a prognosticator as I am —
“On your cell phone?!? Who’d ever want the Internet on their cell phone?” – Me, sometime in 2005
— I am supremely confident that a programmer can never be the President. When I turn 35 in a couple years, I’ll smirk at the thought that the only thing stopping me from being POTUS is…well…me.
This isn’t a knock on us programmers — I actually think a programmer would be great at coming up with the most pragmatic solutions to what ails our nation. Rather, it’s an acknowledgment that the characteristics you need to win an election go counter to every essential quality you need to be a great programmer.
You see, the best programmers don’t debate well. Because televised debates are always about volleying your argument back and forth. The goal is to trip up your opponent in any way — a Freudian slip, a contradiction of a point he made earlier, a stretching of fact which you might counter with your own interpretive fact stretch. By the end of an argument, very rarely are two politicians even talking about the original point.
Real programmers don’t debate to win. We debate to come up with the best solution to combat an unknown future that we face together. Whether it’s a subtle data modeling decision, a user experience decision, or weighing a quick hack now with a potential consequence later, debates are about whether the decision we make right now is the best decision we can make, knowing what we know now, and knowing what might be around the corner. There are no points lost for one programmer deciding five minutes later that another programmer’s decision is, in fact, probably the better one. They’re glad they talked it out.
Which brings me to a second clear distinction between programmers and politicians. In programming, flip-flopping is absolutely essential. The game in politics is calling your opponent out for supporting The War five years ago that you’re now against, for raising taxes when you said you wouldn’t, for voting pro-this when you were anti-that before.
Imagine if us programmers wasted our time on the same thing. Call me a flip-flopper, because for years I was a fan of writing raw SQL code before I discovered object-relational models. Then, I discovered the Select N + 1 problem and went back to SQL, before going back to Linq-to-SQL, before heading toward micro-ORMs, before deciding that they all have a place in this world.
The same is true for strongly-typed languages vs. dynamic languages, MVP vs. MVC vs. MVVM, or NoSQL vs. relational databases. They each offer their own benefits. And, as programmers, it’s our duty to immerse ourselves in all of these concepts. We’ll come out knowing each one has a place that, at any given time in our career, we prefer to call home for awhile. If I were a true politician, I’d still hold the unequivocal belief that Flash is our future and everything else is shit. Instead, I’m a programmer, and I believe that Flash probably isn’t the future but stranger things have happened.
And finally, we programmers cannot justify every question with a simple yes or no, nor a tax cut or spending increase. We live in a world of simple aspirations mired by very complex problems. Even problems that seem simple at the surface get icky when we dig into the details. We work at the very bottom of the issue and dig our way up, knowing that over time up might be further up than we think. We can’t live 100,000 feet in the air in broad stroke statements and nebulous ideas. The damned thing has to work, not “kind of work”, or “get considerably worse in four years”. Nope. It has to work.