|No such thing as a small change|
What's wrong with re-inventing wheelsby jimt (Chaplain)
|on Jul 10, 2006 at 20:23 UTC||Need Help??|
Seriously. What's the harm? I was reading RFC: Templating without a System and the usual debate ensued about re-inventing a templating language, what's the point, use solution Foo::Bar, blah blah blah. Why does everyone get their panties in a bunch?
For starters, the whole term is misleading. "Don't re-invent the wheel." The silly thing is that the wheel has been re-invented multiple times. Didn't we start off with solid wooden discs? Carved stone? Then we moved to carved wheels. Carved wheels with metal bands around the edge. Metal wheels. Metal wheels with rubber tires. Metal wheels with pneumatic tires. I sure don't go around on my bicycle with stone wheels, I use one of the re-invented ones.
The argument is even sillier when someone is told not to re-invent the wheel because there are existing solutions. For the above discussion, it was "Don't write your own templating system, use..." HTML::Template? Template::Toolkit? Mason? HTML::Seamstress? It's a fine case of there not being a single The Solution, there are multiple solutions.
And the solutions are slightly different. They were crafted with different goals and different points. Personally, I don't care for Template::Toolkit and its Yet-Another-Template-Syntax. But that's because I've always worked in shops where the perl guys (and only the perl guys) do the template code as well and I don't have a need for it beyond an artificial restriction of trying to use the separate language to enforce code separation. I can see why it'd be easier to teach to non-perl folks, though, so I get it. HTML::Template tackles the problem differently. Mason slightly differently (and with more involved, admittedly) and on and on and on and on.
So, the wheel is already being re-invented. A lot. All the time. Concurrently. Perhaps the discussion could morph into "which wheel should I choose?" but that's hiding the issue.
From my perspective, it seems to come down to some mystical class of programmer that's allowed to re-invent wheels and then people say, "Hey, that's neat!" and then their wheel is rattled off as one of the ones that you should use when the problem occurs. But how does one enter that mystical class of programmer?
It doesn't appear to simply be inventing a new wheel. That's usually responded to with scorn and admonishment and the tacit assumption that this new wheel can't possibly be as good because it's not widely used or well known, or simply because it's new. If you want to contribute, people are told, you should add onto an existing product.
And you know what? Maybe this new creation of yours isn't that great. Maybe it sucks. Maybe it's slow or not as general or does have bugs that the competition has long since quashed. You may be the most phenomenal programmer to walk the face of the earth, but nobody's perfect. Something went wrong, and it's silly to claim otherwise.
But maybe, just maybe, this new wheel is superior. Or will become superior, at least. Those pneumatic tires that we all use were horrible when they were first invented because they frequently popped and went flat and needed to be changed. Sure, when they worked, they were okay, but nobody ever got a flat tire on a wooden wheel with metal rims. But the people excited about it kept at it and now they're pretty reliable.
I firmly believe that the best and easiest software any of us will ever use has not been written yet, and there are good odds it won't be written by any of us. But somebody is going to come along and do it at some point, and it's probably going to be similar to some existing product, that was at least partially borrowed or re-created or alterred.
What's it going to take to get you (the generic, general you) to look at one of these new projects that merely re-invents a wheel to see if it has merit? What's the harm? Maybe a few hours? A few days? What happens next?
Maybe the software sucks. You tell the author and he gets pissed and doesn't talk to you. No harm, no foul - he would've been pissed if you'd just dismissed it out of hand. Maybe there's some merit to it, but it's rough around the edges, and you make some suggestions and he goes off and implements them and comes back. Then are you interested in it? Maybe there are more bugs that he should fix and he does. Then are you interested?
How many iterations would it take? Surely there must be some subset of developers out there that like creating their own things, if merely for the joy of creating them than nothing else, and surely there must be some good portion of ideas that they have in their new wheels. Is it really worthwhile to always dismiss them out of hand without review?
And if it's not, then what can these new wheel inventors do to get people to look at their thing? If it's shiny and new and they're impressed, then what's the harm? Heck, maybe they solved a problem that an existing wheel didn't and it could get integrated into an existing system and you'll miss it if you don't look.
Finally, it's also not a waste of time. Now, if you don't have the time to spare, that's one thing, I guess. But otherwise, you'll either make the person go away because their idea is half baked, you'll help them become a better programmer which helps everyone, or you'll see that their wheel is a superior solution and win out tremendously.