Skip to content

Instantly share code, notes, and snippets.

@chrisdickinson
Created January 24, 2013 07:29
Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chrisdickinson/02cbd380b7b3b1df62b5 to your computer and use it in GitHub Desktop.
Save chrisdickinson/02cbd380b7b3b1df62b5 to your computer and use it in GitHub Desktop.

replace

I suspect it seldom helps to add one's own voice in outrage at a controversy born on Twitter, but here I am. Thankfully, I can say that very few things on the internet actually make me angry; otherwise I'd get nothing done on any given day. But the recent lambasting of harthur's replace module on Twitter provoked me.

It provoked me not just because it's a reminder of that initial, perceived hostility that keeps new programmers from publishing their code for the first time, or that civility online is tenuously maintained and so easily shed for an old boy's laugh at someone else's expense; but because the attitudes that spawned this controversy hold us all back. Insinuating that someone is stupid for reinventing a tool that already exists deifies the old and kills new ideas in the crib. Reinventing the wheel is just another term for practicing, understanding, or iterating, and aren't those three activities the core of improving as a programmer? Progress is rarely born in a vacuum: more often than not, it emerges as mutations from repeated iteration. That's not to say that all iteration produces progress, but one can't immediately discern the iteration that creates progress from the iteration that merely increases understanding, or hones skill. Every programmer has experienced this effect directly over the course of their career -- the more you write, the more you practice, the more you understand, the better you get. Sometimes the act of writing and practicing produces a beautiful thought, a new way of looking at a problem, and you take this crystalline gem of understanding and try to improve the way things are done.

Dismissing reinventing the wheel puts up big roadblocks to progress: You don't want to be perceived as an idiot, or made the butt of someone else's joke, so you don't write the code that could've helped you understand a concept more clearly. Or you don't publish it, and take part in the community (which, despite my current temper, is largely comprised of reasonable, helpful, intelligent people that are endlessly helpful in furthering your progress as a programmer). Or you publish it and are made fun of for it, and so abandon further itertion. Or, god forbid, you actually come up with something that makes some progress in some small way -- and then the effluence really starts. Look at how we reward people that make progress. It's disgusting!

And yet, every programmer I know (myself included) has been guilty of this sin in some way, shape or form at some point in their lives -- and it usually boils down to some perverse tribal instinct. Pythonistas sneer at Node.JS'ers, Rubyists jeer at PHP'ers, and even Node.JS'ers are prone to belittling those who use CoffeeScript or TypeScript. Why? What so irks us as programmers when we see someone from another group "reinvent the wheel"? Even if we stoop to "they're wasting their time" as a justification for our ire, why should we care? It's their time to spend. Is it because we're afraid that they might actually change something? Or is it that the state of programming at large is a war of ideas, and we're afraid that their idea will win while ours withers on the vine? Or is it simply a crude form of community signalling -- a way to better draw the line between "us" and "them"? None of these are good reasons for discouraging someone else from practicing, understanding, iterating.

It might seem harmless in the moment, but when we take part in this particular behavior we're just holding ourselves back. So, I end with a plaintive request: Please, please, the next time you're about to make fun of someone's code, make sure you know why you're making fun of it -- and if it's for any of the reasons listed, keep it to yourself.

Otherwise: keep iterating, keep experimenting, and don't be afraid to reinvent the wheel -- you might just make life better for all of us.

@eksith
Copy link

eksith commented Jan 24, 2013

Unhappy people validate their existence by making those around them unhappy. Smugness added to that unhappiness makes the problem an order of magnitude worse. Low EQ is a serious problem in the programming community.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment