As per Wiki’s deleted (Yeah! I found below content from Google’s cache) article on this
“Reinventing the wheel is a phrase that means to duplicate a basic method that has already previously been created or optimized by others..”
Lets get back a couple of steps, when development of software begins, it usually starts with a prototype, and when things start getting complex the development team starts taking out common code and create frameworks around it. These frameworks are then used / improved by the developers.
Usually this is also related to stuff like “Why should I learn XYZ Framework” or “I can do this better”. I have also observed many developers start writing code for something already existing with excuses such as “I would not need X, Y & Z features, my app is simple”, but as soon as the application reaches users, one starts realizing that all those X, Y & Z features were necessary.
When teams these days start development they use these frameworks to make quick scalable applications. I do not even recommend to reinvent the wheel and use the code for production applications but here is my opinion on why should we –
Its good to know how things work, its good for developer to be familiar with the basic concepts of how things work. If a guy knows response.write(“”) would send the data to client but not how, he might be able to get things work but might not be able to customize things for optimum performance.
For scalable apps, its always better to know what to cache and when to, but the bottom line still is how caching works. Same is the concept with ORM frameworks, they provide several options like lazy fetch, first / second levels of cache, but is of no use in case developer is unable to customize / understand.
Reinventing can be fruitful in case you are using a paid library, you can reinvent the wheels to cut down the license costs. Usually your user or client would not be interested in what you have done or how, all matters to them is the cost. So be wise do not rush. If you have a thought, in >90% of the cases that would not be unique, there would be several others with same thought, and they might even have their wheels ready. So, just use theirs and improve them.
Anyhow, It is always recommended to get a gist of core frameworks by developing a sample app based on the framework, I also recommend to get the source of your fav framework and try your hands on it. Will not help you in your development cycle but would definitely help in developing better apps.
Sometimes there are certain functionalists that a framework might not provide, even in that case add to framework do not recreate everything.
Short and sweet -> Reinventing the wheels can be productive in case you want to learn how the wheel actually works and you are not going to deliver you vehicle on just reinvented wheel. Or, there are no wheels, in case there is a new language, and there is no suitable framework, just go ahead and create wheels for it. But make sure you have the project on Git / SourceForge or any open repository to make sure that you can deliver the best. 🙂