Why reinvent the wheel

I've got a few reasons for reinventing the wheel, some personal and some practical:

Some of the greatest innovations have in fact been a reinvention of the wheel, because what already existed at the time wasn't good enough. Imagine someone telling James Watt he shouldn't waste his time reinventing the wheel. Improving what already exists means we have stable foundations and better tools to work with in the future. I'm not sure if that's a strawman or not, but the wheel itself has been reinvented multiple times, otherwise we'd still be using Bronze Age wheels.

UNIX vs Windows. UNIX was written from scratch to replace Multics which had serious flaws, so they ended up with a new and clean system, built right from the bottom-up. They reinvented the wheel and made huge innovations in the process. Windows on the other hand, is built on top of MS-DOS which even at the time was a mess, so what Microsoft is left with is an OS which up to this day is overly complicated can't properly perform basic tasks, because guess what, Windows' flaws are fundamental, they cannot be fixed unless they do away with the whole thing and start from scratch. Instead, they are coming up with half-assed solutions and add complexity to the system with each update.

I find it absurd that, for many people, quality and practicality is often just out of the equation. Writing your own tools means they can be tailored to perform a specific task perfectly — a big generalized framework or piece of software can't.

This leads to the "just works" argument. Why bother writing your own tools when there are existing ones? Sure, they might not be the best, but at least they work, right? Well, I disagree. Part of the reason software is so bad compared to hardware is because we rely on the power of modern hardware to cope for our mediocre solutions. What is required to maintain this little HTML website is a few basic shell scripts. Would I be better off if I relied on the off-the-shelf solution? I wrote my own toolchain, it works exactly how I want it to, and I simply don't care about it anymore. The website has exactly the lines of HTML needed, it's as lightweight as it can get and can be loaded even from a terminal browser. That way I can focus solely on the CONTENT of the website, instead of fighting the tools I use.

So, am I proposing that we'd be better off writing machine code and building our own programs for everything? Absolutely not. What I AM saying though, is that instead of being allergic (which usually translates to laziness) to reinventing the wheel, we can start to see the merits in it. This approach is benefecial to our personal improvement as engineers, which means an improvement in software as a whole. Just as you learn any other skill by mastering and understanding the basics, programming has to be understood from the bottom-up, not the opposite way. There's no point in knowing all kinds of fancy frameworks if all you see are black boxes, or cannot even implement a linked list if asked to. After all, it's a fact that software is getting worse day by day, we do need to take a step back and start fresh.

And to save myself from sounding ignorant, I do understand that reinventing the wheel doesn't always refer to improving by doing away with the old. It often refers to people always rolling their own DIY solution, no matter what the existing solutions are. Yes, this might very well be a waste of time in many cases. But the things you learn in the process are still important, so there's that. Even when the intent is not to improve, but to simply re-create, it's still a valuable learning opportunity, not a waste of time, as many like to claim.

You shouldn’t be a afraid to code yourself, not even if it is a complicated task. If every programmer was afraid to code, then nobody would ever code. Every time you build something, you learn something, and each time you gain experience and skill.

Excerpt from this post.

Knowing how things really work will enable you to trace bugs easier, write/design more performant software, and overall know what the hell you're doing. And that can only be achieved by reinventing the wheel. Nothing can teach you what getting your hands dirty will.

A related article I found funny.