The Power to do it Wrong
I believe I am not alone in finding myself, more often then I might like, having to make less than ideal decisions in the world of software development. I find myself lamenting inconsistencies and warts, in tools, runtimes, and applications themselves. It is a universe of our own making, sometimes my own personal making, and often it seems to tend toward a proverbial hell rather than heaven.
The process of realizing something, manifesting it from the ideal abstract notion to concrete reality, is a process of compromise. The ideal world cares not of constraints, contradictions, complications, differing opinions, and arbitrary decisions of the past. The ideal world does not care that the human mind and body have physical limitations, and that we cannot sustain long between breaths, meals, and checking twitter. We may assume so, but the ideal world is not lenient, it knows no deviance from ideal elegance. It tolerates nothing that is not perfect, in fact it flatly refuses the existence of imperfection.
There are software tools, and systems, and quite popular ones at that, that seem bent on imposing an ideal model, a "one true way", if you will. I am tolerant of many things, I am not a man of overbearing opinion. I like to think that everyone is largely always wrong, myself included, and I find some pleasure in life watching that prove to be true. But, there is one philosophy that I simply cannot abide as a result, the one true way. This is not something I learned, as Lady Gaga would say, I was just born this way. But my personal inability to deal with dogma is not the point here.
Perfection is assumed to be a great and wonderful thing, how could it be not? What about all those quaint stories of falling from grace, the eternal struggle to regain that which we lost through our own greed and arrogance? The great temptation, the human condition, transcending evil, and all that? Wasn't software supposed to be "easy?" Some sort of mathematical paradise devoid of human blight? Yeah well, only the kind of software to which we deridingly refer, you know the kind with "no users."
Ok, so I'm saying perfection is bad? No, I say perfection is tyrannical, it is the ultimate one true way. However, I needn't let that throw me into an existential funk. Because, if there is one truth that I can hold dear, it is that perfection is impossible. And even if it were possible, I could not exist there, thus any resulting self-loathing is self-prevented.
But, crucially, the notion of perfection, of the ideal, of the simple, of the absence of compromise is not bad. In fact it is an essential human quality. It's a strange notion that chasing something impossible, something dubious, is noble, but that's what we do. Every developer that I know that's worth their salt wants to find the elusive ideal, or at minimum the least worst solution for the problem at hand. The mind of the master knows that perfection of the whole is impossible, yet will still strive to simplify, to idealize, to remove compromise where it can. Mastery itself is largely the ability to direct that effort most effectively, and to know when it is futile.
So, we must embrace that the universe, the software, the hardware, and the wetware is imperfect, and deal with it. And those tools, and technologies that best deal with that reality are the ones we should embrace. Often, it is not even a matter of embracing, but more of natural selection. Those tools that over-idealize, that preach the one true way, will eventually lose. Yes, worse is better.
So the next time you are working on a web page, and you find that no amount of dogmatic adherence to CSS best practices will fix your layout, be glad that the tools are bigger, dare I say better, than the ideal. Sure, you may say a few choice words when you have to use a <br/> or *gasp* a <table> tag. But think about what you would say if there were no workaround. If the tools assumed perfection, we'd all be screwed.
Great technologies are imperfect, they are flawed, they break their own rules. Great people are no different, though often their faces are more symmetrical than yours, but I digress. The point is that there will never be perfect software tools, and you should be wary of those purporting the one true way. Besides, perfection is boring, and imposed perfection is stifling. We need tools with abstractions that leak, with models that don't always map, and with escape valves that let us do it wrong. Because sometimes doing it wrong is the best way, the only way it can be done.
The process of realizing something, manifesting it from the ideal abstract notion to concrete reality, is a process of compromise. The ideal world cares not of constraints, contradictions, complications, differing opinions, and arbitrary decisions of the past. The ideal world does not care that the human mind and body have physical limitations, and that we cannot sustain long between breaths, meals, and checking twitter. We may assume so, but the ideal world is not lenient, it knows no deviance from ideal elegance. It tolerates nothing that is not perfect, in fact it flatly refuses the existence of imperfection.
There are software tools, and systems, and quite popular ones at that, that seem bent on imposing an ideal model, a "one true way", if you will. I am tolerant of many things, I am not a man of overbearing opinion. I like to think that everyone is largely always wrong, myself included, and I find some pleasure in life watching that prove to be true. But, there is one philosophy that I simply cannot abide as a result, the one true way. This is not something I learned, as Lady Gaga would say, I was just born this way. But my personal inability to deal with dogma is not the point here.
Perfection is assumed to be a great and wonderful thing, how could it be not? What about all those quaint stories of falling from grace, the eternal struggle to regain that which we lost through our own greed and arrogance? The great temptation, the human condition, transcending evil, and all that? Wasn't software supposed to be "easy?" Some sort of mathematical paradise devoid of human blight? Yeah well, only the kind of software to which we deridingly refer, you know the kind with "no users."
Ok, so I'm saying perfection is bad? No, I say perfection is tyrannical, it is the ultimate one true way. However, I needn't let that throw me into an existential funk. Because, if there is one truth that I can hold dear, it is that perfection is impossible. And even if it were possible, I could not exist there, thus any resulting self-loathing is self-prevented.
But, crucially, the notion of perfection, of the ideal, of the simple, of the absence of compromise is not bad. In fact it is an essential human quality. It's a strange notion that chasing something impossible, something dubious, is noble, but that's what we do. Every developer that I know that's worth their salt wants to find the elusive ideal, or at minimum the least worst solution for the problem at hand. The mind of the master knows that perfection of the whole is impossible, yet will still strive to simplify, to idealize, to remove compromise where it can. Mastery itself is largely the ability to direct that effort most effectively, and to know when it is futile.
So, we must embrace that the universe, the software, the hardware, and the wetware is imperfect, and deal with it. And those tools, and technologies that best deal with that reality are the ones we should embrace. Often, it is not even a matter of embracing, but more of natural selection. Those tools that over-idealize, that preach the one true way, will eventually lose. Yes, worse is better.
So the next time you are working on a web page, and you find that no amount of dogmatic adherence to CSS best practices will fix your layout, be glad that the tools are bigger, dare I say better, than the ideal. Sure, you may say a few choice words when you have to use a <br/> or *gasp* a <table> tag. But think about what you would say if there were no workaround. If the tools assumed perfection, we'd all be screwed.
Great technologies are imperfect, they are flawed, they break their own rules. Great people are no different, though often their faces are more symmetrical than yours, but I digress. The point is that there will never be perfect software tools, and you should be wary of those purporting the one true way. Besides, perfection is boring, and imposed perfection is stifling. We need tools with abstractions that leak, with models that don't always map, and with escape valves that let us do it wrong. Because sometimes doing it wrong is the best way, the only way it can be done.