Reinventing the Wheel
The Engineering Sin
Posted at Sat, 21 Mar 2015 21:53:29 GMT
You are guilty
We are all cautioned that reinventing the wheel is a trap for a programmer, even a sin. After all, the objective of engineering is to improve people's lives, and if a person's life has already been improved in a given area, clearly only a major improvement would justify a clone project. If the original project is open source, there are no "ethical" obligations to sending a pull request to the project. In fact, contributing to other people's projects through forking and sending a pull request is one of the single most effective tasks a programmer can do for the "greater good," assuming there is such a force. But a quick glance at GitHub or a search for software projects shows for every novel program written, there are a dozen clones. Chances are, if you have independently written a single line of code before, you have copied someone's code. At a minimum, if you have written Hello, World, you have copied someone's software idea.
You, too, are guilty of reinventing the wheel
So am I
This very blog is powered by tiny.js. Ever heard of it? Nope? Neither have I. I wrote tiny.js as a clone of shock. Heard of shock? Nope? Again, neither have I. Granted, I, author of tiny.js, and Hardmath123, author of shock, could have both used Jekyll for our blogs. (I suggest you go read Hardmath123's blog. It inspired mine :-) ). Why would have possibly wasted all this time writing static page generators, when there are countless others to choose from, assuming Jekyll isn't an option for some reason.
In all truth, I probably should have used Jekyll. Github Pages even has built-in support for Jekyll, which would make deployment super easy. And Jekyll is an extremely mature blogging platform, whereas I wrote tiny.js in an afternoon in between watching old TV shows. And while I can't speak for Hardmath123, or any of the other reinventers of the wheel out there, I admit there was no good reason for writing tiny.js. For the sake of argument, allow me to assume that writing tiny.js was a waste of time, electricity, and brain power:
This blog would instead be powered by Jekyll. However, this blog itself received heavy inspiration from Hardmath123's blog. This blog could be considered a reinvention of the wheel; simply because my content might be vaguely original does not mean the idea was mine. I did not wake up one morning with the thought, "I should document my thoughts on the Internet and call it a web log! And since this is the Internet where we abuse portmanteaus, I should shorten that to blog! I'm such a genius!". No, I was reading Hardmath123's blog and decided that I would like my own. But surely, Hardmath123 must have come up with the idea of a blog then!
Nope, he reinvented some other, slightly rustier wheel. And so did whoever he copied from... and whoever they copied from... and so on and so forth.
Everything is copied
Look around you. Do you honestly see anything that is truly original? Maybe a few super novel items exist. Maybe. Copied is a strong word, but if I said remixed, it would be copying Everything is a Remix (if this article is interesting, watch that video as it is much more in-depth).
That was a joke. There isn't a real problem with remixes. There is a problem with identical copies, and copyright and patent laws definitely need to be honored. But if you want to re-invent the wheel, there are no legal obstacles you face, and nobody is depending on you for income...
More Power To You!
We have to reinvent the wheel once in a wheel to learn (pun intended). Reinventing the wheel is essential to inventing the pulley for the first time. If you are bored on a Friday evening, and you have the odd desire to clone some open source project, do it.
You will be a better inventor, a better creator, a better programmer, a better engineer for it. And this applies to any field: many artists copy historic paintings as a part of their study; many writers have written "Cute boy meets beautiful girl, and their last names are Montague and Capulet respectively".
The wheel has been getting rather rusty recently :)
A Final Note of Caution
These clone projects must still be written for academic reasons-- only write a project like tiny.js if you feel you can learn something from its creation. Simply creating something for the sake of creation neither helps others nor helps yourself. If you feel the desire to reinvent something, at a minimum be honest with yourself about your motivation for doing so.