Reinvent the Wheel
etiennefd.substack.com
etiennefd.substack.com
Hence, if you need a simple database for your desktop application, using sqlite is a better option than trying to cobble together something similar using your own special hash tables and b-trees. However, trying to do the latter will certainly help you understand a quite a bit about database architecture.
However, many people who say 'don't re-invent the wheel' are really saying 'you're just a worker bee and so you don't need to know anything more than how to operate this here machine' - and that's a trap, as you're then not developing your skills and knowledge to a higher level.
This seems a bit extreme no? I think more often the concern is, you've reinvented the wheel and then you took a job elsewhere and now we have to maintain the new wheel ourselves. Or new wheels are great until it breaks and a customer of ours is pissed off and we have to wake up the one person who knows how to fix it
However, problem with this popular approach is that it has become a sort of gospel preached to people, and they effectively brainwash junior devs in believing that they shouldn't ever dare to challenge the existing libs, and try to make their own improvements. Ever.
And that is obviously very wrong. People shouldn't be scared to fork a project and make their own customized version that solves their particular problems better. That's what OSS is all about. Yes, most of it will suck, but that's how you learn. And some will make actual improvements so we will have better wheels in the end.
This "Don't reinvent the wheel" thing comes from the observation some people (software engineers in this case ) tend to spend a huge amount of time ( aka money ) creating things that were already created AND could just be used by them. It's a very valid point, especially when you have to pay salaries every month and don't have a money printing machine.
However.. the motto is also used to justify mental laziness and protect egos from ignorance.
People learn by doing, you can read all the books you want and you'll be a very competent parrot but you'll never really know. The question is, what do you choose to know and what to you choose to parrot? Since time is finite (for you ).
Alan Kay on inventing the future: https://www.youtube.com/watch?v=id1WShzzMCQ
Jonathan Blow on "reinventing" your own game engines: https://www.youtube.com/watch?v=SOtxjOLst2k
"It always bothers me when people say 'why reinvent the wheel', because the wheel is an _amazing_ invention. It is almost perfect -- or quite possibly perfect -- for what it does. It perfectly turns static friction into dynamic friction for moving objects. It is something that so elegant and beautiful, that if you were to ask why we would want to reinvent it, I would say _of course_ we do not want to reinvent it. It has worked for thousands of years, and has been unchanged for thousands of years. _Nothing_ we have developed in the past 30 years of game-development, is a wheel. In the future we will have so much more powerful tools for game development, that people will laugh at the things we did to make games. If we want _to get to_ a wheel, we need people that will _attempt to make the wheel_."
I think a better mental model is to accept that optimal is contextual, i.e. it depends on the environment on which you build your gadget.
Diversity happens because the environment is not homogeneous, so each region produces local forms optimally adapted to its niche conditions - and some generalist forms that work well in a large range of conditions without beint optimal at any of them.
That's why optimal is a misnomer. Optimal for what?
My 'reinvention' could be considered as swapping the 'bearing bits' around a bit if you wished to mock my efforts. I was only interested in one particular application, the goal to reduce the parts count, to make servicing easier and to have a lighter/stronger product.
As a thought exercise I highly recommend reinventing the wheel, not for the sake of it but to solve a real world problem. For instance, if people struggle to use your widget and assemble it incorrectly. Or if regulatory and safety requirements have made the original design somewhat cumbersome.
We live in a great time for reinventing the wheel with open source CAD tools and 3D printing making it possible to create a functioning prototype.
You can also check your homework to see how far others have got. Patents relating to wheels are what you might call numerous, however, with first principles thinking and an in depth understanding of how it works there is the possibility to devise something that is actually novel, even if it is just swapping a few 'bearing bits around'.
>You should reinvent the wheel because it’s fun.
Passion is great, but it can wax and wane because we're humans, and that's where discipline keeps you moving forward so you don't drop out of reinventing wheels and waste all of that time you invested because it stopped being fun one day.
Discipline means you block out some time, do a wheel iteration knowing it'll suck to do and it isn't fun, then forget about it.
Only the luckiest people constantly have fun with a subject and then actually contribute to the state-of-the-art.
This is part of the wheel :) people dont challenge things enough, for example the keyboards we use, the most accessible area is around the thumbs, and we have one giant button there, instead of 4-5 super nice buttons, this leads to carpal syndrome and all kinds of issues, and yet, now in every school they teach computer classes and touch typing to 10-13 year old kids, who cant reach backspace without twisting their wrist 45 degrees, and in the same time on windows ctrl+h just does not work in 99% of the apps. So those kids will grow up and rarely think about using a different keyboard.
It is not that easy to break out of the "dont reinvent the wheel", as "the wheel" is beaten into you since you were 5 years old.
It does make the point that some novel and useful wheel applications have arisen very recently in the wheel's overall history, e.g. putting wheels on luggage. Clearly, finding something new to do with a wheel is quite a challenge, but in general developing a new application for an existing thing can be very profitable. There's a commonly quoted observation that taking an existing product to a new market is much simpler than taking a new product to a new market.
I always took the elite classes so that stung a lot for all those perfect students.
I don't give a fuck about grades, that system of assessments is cruel and inaccurate. It makes people stupid.
- Do I gain anything valuable (including knowledge) by doing this myself
- do we have the investment to do so (time and money)
Too often when this phrase is evoked it's because folks want an engineer to simply wrap and extend when the proper thing to do sounds a little too expensive.