Welcome, Guest: Register On Nairaland / LOGIN! / Trending / Recent / New
Stats: 3,152,855 members, 7,817,532 topics. Date: Saturday, 04 May 2024 at 01:53 PM

Do Not Reinvent The Wheel Unless You Plan On Learning More About Wheels - Programming - Nairaland

Nairaland Forum / Science/Technology / Programming / Do Not Reinvent The Wheel Unless You Plan On Learning More About Wheels (1977 Views)

Learning More Than One Programming Language At A Time / Use 3rd Party Tool (.net Components Or Activex) In You App Or Reinvent The Wheel / Why Novice Programmers Should Be Encouraged To Re-invent The Wheel (2) (3) (4)

(1) (Reply) (Go Down)

Do Not Reinvent The Wheel Unless You Plan On Learning More About Wheels by elvis10ten(m): 12:12pm On Aug 22, 2013
I see alot of developers and programmers here and in other forums saying this "DO NOT REINVENT THE WHEEL". I stand to say that this statement is flawed in some way and should be modified (go down for clearification).

Lets begin with the statement itself "DO NOT REINVENT THE WHEEL", the wheel itself is already reinvented, the first one was most likely made of stone or wood as far back as 5 BCs. Can you imagine yourself using a stone wheel ?. New wheels are constantly being reinvented for numerous reasons like strength, longevity, speed, etc. As programmers/developers we plan/intend doing more with less, how does this go about on itself. You might not like to hear it but your current shining wheel is probably a reinvention of another man's wheel.


I think reinventing the wheel, if done properly, can be useful. For example, James Hart reinvented the wheel, And he liked it:
I reinvented the wheel last week. I sat down and deliberately coded something that I knew already existed, and had probably also been done by many many other people. In conventional programming terms, I wasted my time. But it was worthwhile,and what's more I would recommend almost any serious programmer do precisely the same thing.

But who's James Hart? Just another programmer. If that doesn't carry enough weight for you, how does it sound coming from Charles Moore, the creator of FORTH?
A second corollary was even more heretical: "Do it yourself!"
The conventional approach, enforced to a greater or lesser extent, is that you shall use a standard subroutine. I say that you should write your own subroutines.
Before you can write your own subroutines, you have to know how. This means, to be practical, that you have written it before; which makes it difficult to get started. But give it a try. After writing the same subroutine a dozen times on as many computers and languages, you'll be pretty good at it.
Moore followed this to an astounding extent. Throughout the 70's, as he implemented Forth on 18 different CPUs, he invariably wrote for each his own assembler, his own disk and terminal drivers, even his own multiply and divide subroutines (on machines that required them, as many did). When there were manufacturer-supplied routines for these functions, he read them for ideas, but never used them. By knowing exactly how Forth would use these resources, by omitting hooks and generalities, and by sheer skill and experience (he speculated that most multiply/divide subroutines were written by someone who had never done one before and never would again), his versions were invariably smaller and faster, usually significantly so.
Moreover, he was never satisfied with his own solutions to problems. Revisiting a computer or an application after a few years, he often re-wrote key code routines. He never re-used his own code without re-examining it for possible improvements. This later became a source of frustration to Rather, who, as the marketing arm of FORTH, Inc., often bid jobs on the assumption that since Moore had just done a similar project this one would be easy – only to watch helplessly as he tore up all his past code and started over
And then there's Bob Lee, who leads the core library development on Android.
Depending on the context, you can almost always replace"Why reinvent the wheel?" with "Please don't compete with me," or "Please don't make me learn something new." Either way, the opponent doesn't have a real argument against building something newer and better, but they also don't want to admit their unhealthy motivations for trying to stop you.
More seeds, more blooms, I say. Don't build houses on kitchen sinks. Reinvent away. Most of our current technology sucks, and even if it didn't, who am I to try and stop you?

The worst part of it all is that most lazy people use this statement as an excuse to use a crappy solution or to modify a great solution to help solve your problem correctly.
Can you imagine if John Resig didn't feel like reinventing JS or the other libraries like MooTools? How about if Linus Torvalds didn't reinvent Unix or SVN with Linux or Git? How about if Rasmus lerdorf didn't reinvent a programming language and then Zeev Suraski and Andi Gutmans didn't reinvent his parser completely in PHP3?.
finally
The statement should be modified to "DO NOT REINVENT THE WHEELS UNLESS YOU PLAN ON LEARNING MORE ABOUT WHEELS". Really the people that use this statement alot are proffessionals who have a lot of project/work to do in a short time. But if you have alot of time on your side or you are learning, try reinventing the wheel sometimes and push yourself to your limit. Even if you end up failing or modifing only some part of the solution, you will learn alot from it. If you suceed and produce a better working solution, bravo you just made a new wheel that will be used by millions. I do not doubt that existing code is working code that has been tested, debugged and optimized but we won't have the current wheel you use if all developers are scared of this, you don't experience problems if you don't try something new. If everybody was told never to reinvent the wheel then we would still be using wood or stones for wheels by now. Am not saying you should reinvent the wheel always, but if you have the time and you know that in x days/weeks/months/years you would be able to do it and do it better then do it. Just to clear the misunderstanding of the statement.
Re: Do Not Reinvent The Wheel Unless You Plan On Learning More About Wheels by GraphicsPlus(m): 12:30pm On Aug 22, 2013
Nice write-up and good thought-provoking piece.

Let me add that there are cases you may not have to reinvent the wheel. Take for instance, why will one try to develop another javascript libary that has features already covered by jquery?

But I am a fan of reinventing the wheel to learn more about wheels. For instance, I wanted to develop something like http://www.codepen.io. I asked a question in a certain forum about the idea. Almost everybody discouraged me by telling me not to reinvent the wheel. I told them that I want to use it as a play and practice ground for my students, they insisted that I can always tell my students to go to codepen or jsfiddle and practice. I told them that I want something that is customized, they still insist that it's a meaningless project.

So I believe we should in most cases reinvent the wheel to learn more about the wheel. Have you noticed that almost every developer is scared of developing a custom CMS for his personal use or even for his clients? Everybody is running to WP, Joomla or Drupal. Have you noticed that people are running away from coding custom forum from scratch? Everybody is using SMF or Vanilla.

Here is my point, which you rightly pointed out, we should not be scared from reinventing the wheel if we have the time and if we have something spectacular to add.

1 Like

Re: Do Not Reinvent The Wheel Unless You Plan On Learning More About Wheels by elvis10ten(m): 12:36pm On Aug 22, 2013
GraphicsPlus: Nice write-up and good thought-provoking piece.

Let me add that there are cases you may not have to reinvent the wheel. Take for instance, why will one try to develop another javascript libary that has features already covered by jquery?

But I am a fan of reinventing the wheel to learn about wheels. For instance, I want to develop something like http://www.codepen.io. I asked a question in a certain forum about the idea. Almost everybody discouarged me by telling me not to reinvent the wheel. I told them that I want to use it as a play and practice ground for my students, they insisted that I can always tell my students to go to codepen or jsfiddle and practice. i told them that I want something that is customized, they still insist that it's a meaningless project.

So I beleieve we should in most cases reinvent the wheel to learn more about the wheel. Have you noticed that almost every developer is scared of developing a custom CMS for his personal use or even for his clients? Everybody is using WP, Joomla or Drupal. Have you noticed that people are running away from coding custom forum from scratch? Everybody is using SMF or Vanilla.

Here is my point, which you rightly pointed out, we should not be scared from reinventing the wheel if we have the time and if we have something spectacular to add.
*thumbs up*
Re: Do Not Reinvent The Wheel Unless You Plan On Learning More About Wheels by kambo(m): 4:21am On Oct 02, 2013
Nice essay Elvis.
At the onset re re inventing d wheel is a psychological primer rather than a pragmatic reaction , but as time goes on u may hav mor goals to meet that low level tweaking losses it's appeal. Thats where u just cobble components together and hope they work, and if they dont u hope the error catching mechanism is robust enuff to handle the outcomes.
U'll reach there. But even at that, wheel re invention will continue at higher levels or different subfields . Y , first, the analogy is broken, software wheels aint round. Mathematically, the formula for a circle is perfect and cant b improved, but a physcal wheel has many variables actg on it, like roads rocks bumpy surfaces slippery surfaces etc so engineers keep adjusting the wheel augmenting it , in software the variables a so called software wheel acts on can b myriad, and with new situations a complete redesign is necessary . Software systems ar more complex than wheels by a vast margin.
Anyway, i used to write and re write lists data structures from scratch for my programming projects but now i just use whats available in d basic library. While i may chase writing some other software that already exists cuz i dislike d interface of the available ones. E.g some windows software suck big time. I hav to re write versions for myself so i could get more wrk done on d machine .

1 Like

Re: Do Not Reinvent The Wheel Unless You Plan On Learning More About Wheels by Elvisten10(m): 8:34pm On Oct 16, 2013
kambo: Nice essay Elvis.
At the onset re re inventing d wheel is a psychological primer rather than a pragmatic reaction , but as time goes on u may hav mor goals to meet that low level tweaking losses it's appeal. Thats where u just cobble components together and hope they work, and if they dont u hope the error catching mechanism is robust enuff to handle the outcomes.
U'll reach there. But even at that, wheel re invention will continue at higher levels or different subfields . Y , first, the analogy is broken, software wheels aint round. Mathematically, the formula for a circle is perfect and cant b improved, but a physcal wheel has many variables actg on it, like roads rocks bumpy surfaces slippery surfaces etc so engineers keep adjusting the wheel augmenting it , in software the variables a so called software wheel acts on can b myriad, and with new situations a complete redesign is necessary . Software systems ar more complex than wheels by a vast margin.
Anyway, i used to write and re write lists data structures from scratch for my programming projects but now i just use whats available in d basic library. While i may chase writing some other software that already exists cuz i dislike d interface of the available ones. E.g some windows software suck big time. I hav to re write versions for myself so i could get more wrk done on d machine .
NICE.

1 Like

(1) (Reply)

Learn How To Program Without Going To School / Pls Help Vb: How Bind Data In Href Link / ERROR finding a girlfriend!

(Go Up)

Sections: politics (1) business autos (1) jobs (1) career education (1) romance computers phones travel sports fashion health
religion celebs tv-movies music-radio literature webmasters programming techmarket

Links: (1) (2) (3) (4) (5) (6) (7) (8) (9) (10)

Nairaland - Copyright © 2005 - 2024 Oluwaseun Osewa. All rights reserved. See How To Advertise. 36
Disclaimer: Every Nairaland member is solely responsible for anything that he/she posts or uploads on Nairaland.