Re: Kludge kingdom
In chess (and similar games) there are “blunders” and “mistakes”. A blunder is a specific kind of mistake. A blunder has two components. Severe consequences, and an “I should’ve known better” feel. “I should’ve know better not to place my queen en prise.” The many mistakes we don’t even notice, I don’t count them as blunders. They might be causing even more of our game losses, but to me a “blunder” is something we groan over our selves as soon as we see that we did it.
Beginners think: “Oh, it’s gonna be awesome once I don’t make any more blunders.” Soon they will learn that you never stop making blunders. Even Gennan Inseki of the Four Sages can be subject to the occasional ear-reddening move.
The only thing that changes is what blunders you make.
As you get better at playing, the category of mistakes that have a “I should’ve know better” feel will grow.
Blunders live in the borderland between your good self and your bad self. They are part of your bad self in that they are mistakes, they are part of your good self in that you recognize them as such.
The same goes for kludges in programs.
Things that a beginning programmer can see as “wow, this is awesome”, an experienced programmer can see as a horrible kludge. The answer to “what is a kludge?” is as ever-shifting as to “what is a blunder?”
The difference is… blunders lie at the bottom of our current capacity. They are the “OMG, I can’t believe I was capable of playing so badly” subset of mistakes.
Kludges are us stretching the top of our current capacity. They are the “I can’t quite reach to solve this properly, but here is something that kinda sorta maybe hopefully works for now”.
I learned early on to not worry so much about kludges. A problem whose solution seems unfathomably out of reach today might be well within my grasp the next time I encounter it. I often go back and clean up my old code. Get rest, get a new perspective, study the problem domain or algorithms some more.