-- Leo's gemini proxy

-- Connecting to auragem.letz.dev:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini; lang=en

2024-04-16 On "Re-inventing the Wheel"


I hear certain words and phrases thrown around a lot by certain groups of programmers and software enthusiasts with very little care for their validity or how it affects software as a whole. I'm talking about "NIH", which is extremely misused by software developers, and "don't reinvent the wheel," of course. Not only are the use of these words insulting, judgemental, and unnecessarily dichotomizing, they ostracize some of the best reasons to reinvent: learning and self-discovery.


You don't copy other people's proofs in Calculus class, you're expected to *recreate them* on your own! Why? Because you **learn** from it. Because you might discover something yourself. Because the enjoyment is out of the discovery and the problem solving, not out of copying a bunch of stuff that was already done for you.


People use these phrases as if they define a programmer, as if it creates some hierarchy where those who chose not to keep stacking piles of 70 year old crap on more piles of crap, often created in different environments tailored to the needs of users 70 years ago and *not* the needs of those of us who are alive here in the actual present, makes us lesser. They call it "NIH" syndrome. I call it learning and growing and adapting.


The same thing happens in religious fundamentalism and US conservatism. The problem with it is every age, every generation, has the same needs *and* different needs; there is a balance that is apparent in evolving tradition (one might even call this progressive conservatism, masorti, or many other names). Perl does not work for us today because we have better technology that allows us to be able to parse better grammars that are more usable, user-friendly, and adapt to the needs of modern CPUs and modern software. We might take inspiration from the failures and successes of Perl and other languages, but we *adapt* and *recreate* them for our own needs, for the new discoveries of ourselves and other. And through that we create new meaning, new discoveries, new purposes. Plan 9 cannot exist without the desire to recreate Unix in a different way, in a way that meets different needs. Unix wouldn't exist without the need to recreate a more lightweight Multics. We don't just reinvent because we want to feel superior, we reinvent to feel proud of accomplishing something new and challenging, and to readapt something to different purposes. Unix philosophy ultimately *failed* because it *didn't meet people's needs.*


A large subset of the open source community shoehorns the same tools and ideas to fit purposes that they were not designed for. HTTPS is not a universal protocol, it's a protocol that was designed for a specific purpose. It should not be used for calculators when an offline solution could do the job. Is the choice to do away with all of that "NIH" or "reinventing the wheel"? Or is it using the best tool for the job? We should be embracing multiple purposes, multiple tools, multiple protocols, each doing the job they were designed for, and none able to do eveery job possible.


The most fundamental flaw in the implications of "don't reinvent the wheel" is that wheels *were* reinvented *many times*. The very first wheel that we know of was designed to create holes in the ground by this bump in the wheel, not for transportation. So yes, you SHOULD reinvent the wheel, because without reinventing the wheel, we would be stuck with *terrible wheels* with bumps on them for all of our transportation. So **be grateful** that people reinvented the wheel, that the Unix developers reinvented Multics, that Gemini reinvented Gopher, that the diversity of artistic expression comes through reinventions and not through carbon-copying, because what a sad and boring world we would be in without it. Every artistic work and story, every thought and idea, every success and failure, is a reinvention of something before it. Don't take reinventions for granted. Reinventions adapt. Reinventions layer meaning onto stories. Reinventions are a means in which we discover ourselves and others. Reinventions are adaptations of things from elsewhere, not "NIH" syndrome.


P.S. For those who hate on others for rewriting existing software in a different language, you should take a look at this Google study which shows that choosing to use Rust for new code instead of C/C++ has gotten rid of the possibility of a lot of vulnerabilities and has decreased the severity of most of the new vulnerabilities that are found. Turns out most vulnerabilities result from pointer use after free and other related things. These are *actual results*, not feelings. Like I said, reinvention works:

Memory Safe Languages in Android 13 (Google Security Blog)

-- Response ended

-- Page fetched on Sat May 4 04:01:32 2024