Ok, I have never blogged before, but I figured I would start. I couldn't think of how to start, but I thought about this and figured it was as good as anything, so here goes.
On to the point of the post...
All the time I am hearing people complain about 're-inventing the wheel', or doing something themselves, when someone else has done it before. In fact, my programming teacher often stated this when teaching my class last year and the year before. This, to me, is very irritating. I prefer the statement 'Why not re-invent the wheel?'
Ok, what are the benefits of re-inventing the wheel?
Well, first off, if no one ever tried to re-invent the wheel, we would still have primitive bicycle wheels on our automotives (perhaps even rounded chunks of rock). Obviously somebody came along and thought 'hey, I can make a better wheel.' Because of innovation, we have better wheels today. So thats a major benefit.
Nextly, what can you learn by re-inventing the wheel? You can learn how to make a wheel yourself, rather than relying on and trusting others knowledge. Anyway, whats so bad with having a little extra knowledge?! This also comes with the added benefit of the designs and ideas behind the wheel not being lost and forgotten.
If 'the wheel' was never 're-invented', society would be quite a boring, non-progressing place.
What are the down sides? A little extra time and effort. Whats so bad about that?
Now for a programming example. The first year of my programming class (and to a degree, the second) we focused on C# (not my favorite language). My teacher would always brag about how C# is so cool because the .NET framework does everything for you already. Sure it abstracts things a lot, but this isn't always good. I have found the .NET framework to be terribly slow and annoying to work with. When I try to do certain lower-level things, it is difficult to impossible. As well, it leaves little to learn. You never really learn the lower-level things, like socket communication and packet construction, because there are things to do that for you. It is highly abstracted and terribly annoying to such a naturally curious person as me. Besides, if Microsoft is always controling the low-level things, they are not that likely to improve (not quickly at least) and the end-programmer will never really know whats truly going on.
So, the question I pose to you is: 'Why not re-invent the wheel?'