-
Notifications
You must be signed in to change notification settings - Fork 11
Reinvent The Wheel #68
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
mre
wants to merge
6
commits into
master
Choose a base branch
from
wheel
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
+++ | ||
title="Reinvent the Wheel" | ||
date=2025-04-12 | ||
draft=false | ||
[taxonomies] | ||
tags=["dev", "culture"] | ||
+++ | ||
|
||
One of the most harmful pieces of advice is to not reinvent the wheel. | ||
|
||
It usually comes from a good place, but is typically given by two groups of people: | ||
- those who tried to invent a wheel themselves and know how hard it is | ||
- those who never tried to invent a wheel and blindly follow the advice | ||
|
||
Either way, both positions lead to a climate where curiosity and exploration gets discouraged. | ||
I'm glad that some people didn't follow that advice; we owe them many of the conveniences of modern life. | ||
|
||
Even on a surface level, the advice is bad: | ||
We have much better wheels today than 4500–3300 BCE when the first wheel was invented. | ||
It was also *crucially* important that wheels got reinvented throughout civilizations and cultures. | ||
|
||
{% info() %} | ||
|
||
**Note:** When I say "wheel" throughout this post, please replace it with whatever | ||
tool, protocol, service, technology, or other invention you're personally interested in. | ||
|
||
|
||
{% end %} | ||
|
||
## Inventing Wheels Is Learning | ||
|
||
> **"What I cannot create, I do not understand"** | ||
> -- [Richard Feynman](https://en.wikipedia.org/wiki/Richard_Feynman), Physicist and Nobel Prize Winner | ||
|
||
To *really* understand something on a fundamental level, you have to be able to implement a toy version first. | ||
It doesn't matter if it's any good; you can throw it away later. | ||
|
||
In Computer Science, for example, there are many concepts that are commonly assumed to be beyond the abilities of mere mortals: | ||
protocols, cryptography, and web servers come to mind. | ||
|
||
More people should know how these things work. | ||
And therefore I think people should not be afraid to recreate them. | ||
|
||
## Everything Is A Rabbit Hole | ||
|
||
Too often, fundamental things are taken for granted. | ||
For example strings or paths are super complicated concepts in programming. | ||
It's a great exercise to implement a string or a path library yourself | ||
if you're interested in how they work. | ||
|
||
Even if nobody ends up using your work, I bet you'll learn a lot. For example: | ||
|
||
- There is an infinite complexity in everyday things. | ||
- Building something that even a single other person finds useful is a humbling experience. | ||
- Humans like you created these abstractions. They are not perfect and you can make different tradeoffs in your own design. | ||
|
||
On the last point, everything is a tradeoff and there are dozens, sometimes hundreds of footguns with every toy problem. | ||
|
||
Along the way, you will have to make decisions about correctness, simplicity, functionality, scalability, performance, resource usage, portability, and so on. | ||
|
||
Your solution can be great in some of these things, but not all of them and not for all users. | ||
That also implies that existing solutions have flaws and might not be designed to solve your particular problem; no matter how well-established the solution is. | ||
|
||
Going down rabbit holes is fun in its own way, but there is one other benefit: | ||
It is one of the few ways to level up as an engineer... but only if you don't give up before you end up with a working version of what you tried to explore. | ||
If you jump between projects too often, you will learn nothing. | ||
|
||
## Reasons for Reinventing the Wheel | ||
|
||
There are great reasons to reinvent the wheel: | ||
|
||
* Build a better wheel (for some definition of better) | ||
* Learn how wheels are made | ||
* Teach others about wheels | ||
* Learn about the inventors of wheels | ||
* Be able to change wheels or fix them when they break | ||
* Learn the tools needed to make wheels along the way | ||
* Learn a tiny slice of what it means to build a larger system (such as a vehicle) | ||
* Help someone in need of a very special wheel. Maybe for a wheelchair? | ||
|
||
Who knows? The wheel you come up with might not be the best use for a car, but maybe for a... skateboard or a bike? | ||
Or you fail building a nicer wheel, but you come up with a better way to test wheels along the way. | ||
Heck, your wheel might not even be meant for transportation at all! | ||
It might be a potter's wheel, "a machine used in the shaping (known as throwing) of clay into round ceramic ware" [according to Wikipedia](https://en.wikipedia.org/wiki/Wheel). | ||
You might end up building a totally different kind of wheel like a steering wheel or a flywheel. | ||
We need more people who think outside the box. | ||
|
||
## Reuse vs Reinvent | ||
|
||
Of course, don't disregard the works of others -- study their work and reuse where you see fit. Don't reinvent the wheel out of distrust or ignorance of the work of others. | ||
On the other side, if you never tried to put your knowledge to the test, how would you ever learn enough about your field to advance it? | ||
|
||
I observed you can move very quickly by running little experiments. Especially in software engineering, building small prototypes is cheap and quick. Solve your own problem, start small, keep it simple, iterate. | ||
|
||
|
||
So, with all of the above, here's my advice: | ||
|
||
**Reinvent for insight. Reuse for impact.** |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🤣
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know, right? 😂
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What brings you to this pull request. 😂
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I follow you on github. 😬
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice nice. How's it going?☺️