Reinvent the Wheel Often

From WikiContent

(Difference between revisions)
Jump to: navigation, search
m
Current revision (06:42, 31 May 2012) (edit) (undo)
m
 
(One intermediate revision not shown.)
Line 1: Line 1:
-
“Just use something that exists, its silly to reinvent the wheel...
+
"Just use something that exists — it's silly to reinvent the wheel..."
-
Have you ever heard this or some variation thereof? Sure you have! Every developer and student probably hears comments like this frequently. Why though? Why is rewriting the wheel so frowned upon? Because more often than not, existing running code has already gone through some sort of quality control and rigorous testing. Additionally, the time and resources spent reinventing the wheel is unlikely to payoff as well as using an existing product or code base. Should you bother rewriting the wheel? Why? When?
+
Have you ever heard this or some variation thereof? Sure you have! Every developer and student probably hears comments like this frequently. Why though? Why is reinventing the wheel so frowned upon? Because, more often than not, existing code is working code. It has already gone through some sort of quality control and rigorous testing and is being used. Additionally, the time and effort invested in reinvention are unlikely to pay-off as well as using an existing product or code base. Should you bother rewriting the wheel? Why? When?
-
Perhaps you have seen publications about patterns in software development, or books on software design. These books can be sleepers regardless how wonderful the information contained in them is. The same way taking notes during a lecture helps you learn and retain the subject matter, so too does designing software from the ground up, testing it, breaking it, repairing it and improving it along the way.
+
Perhaps you have seen publications about patterns in software development, or books on software design. These books can be sleepers regardless of how wonderful the information contained in them is. The same way taking notes during a lecture helps you learn and retain the subject matter, so too does designing software from the ground up, testing it, breaking it, repairing it, and improving it along the way.
-
Reinventing the wheel is not just an exercise in where to place code constructs, but to get an intimate knowledge of the inner workings of various components that already exist. Do you know how memory managers work? Virtual Paging? Can you write one? Dynamic double linked list? Dynamic Array Classes? ODBC clients? Could you write a graphical user interface that works like a popular one you know and like? Can you create your own web browser widgets? Do you know when to write a multiplexed system versus a multi-threaded one? A file or memory based database? These questions are NOT intended to make one feel like they still have lots to learn, but to point out the types of software most developers rarely create themselves. The consequence is all these kinds of software are not tangible and are viewed as mysterious black boxes that just work. Understanding only the surface of the water is not enough to reveal the hidden dangers beneath. Likewise, not knowing the deeper things in software development, will limit your ability to create stellar work.
+
Reinventing the wheel is not just an exercise in where to place code constructs: It is how to get an intimate knowledge of the inner workings of various components that already exist. Do you know how memory managers work? Virtual paging? Could you implement it? Double-linked lists? Dynamic array classes? ODBC clients? Could you write a graphical user interface that works like a popular one you know and like? Can you create your own web-browser widgets? Do you know when to write a multiplexed system versus a multi-threaded one? How to decide between a file- or memory-based database? These questions are ''not'' intended to make one feel like they still have lots to learn, but to point out the types of software most developers rarely create themselves. The consequence is all these kinds of software are not tangible and are viewed as mysterious black boxes that just work. Understanding only the surface of the water is not enough to reveal the hidden dangers beneath. Not knowing the deeper things in software development will limit your ability to create stellar work.
-
Rewriting the wheel and getting it wrong is more valuable than nailing it the first time! There are lessons learned from trial and error that has an emotional component to it that reading a technical book alone just can not deliver!
+
Reinventing the wheel and getting it wrong is more valuable than nailing it first time. There are lessons learned from trial and error that have an emotional component to them that reading a technical book alone just cannot deliver!
-
Facts and book smarts are crucial, but programming is not only a science, it's an art form. Reinventing the wheel is as important to a developer's education and skill as is an artist practicing with their brushes and paints before attempting to put their masterpiece on canvas.
+
Facts and book smarts are crucial. But programming is not only a science; it's an art form. Reinventing the wheel is as important to a developer's education and skill as an artist practicing with their brushes and paints before attempting to put their masterpiece on canvas.
 +
 
 +
By [[Jason P Sage]]
 +
 
 +
 
 +
This work is licensed under a [http://creativecommons.org/licenses/by/3.0/us/ Creative Commons Attribution 3]
 +
 
 +
Back to [[97 Things Every Programmer Should Know]] home page

Current revision

"Just use something that exists — it's silly to reinvent the wheel..."

Have you ever heard this or some variation thereof? Sure you have! Every developer and student probably hears comments like this frequently. Why though? Why is reinventing the wheel so frowned upon? Because, more often than not, existing code is working code. It has already gone through some sort of quality control and rigorous testing and is being used. Additionally, the time and effort invested in reinvention are unlikely to pay-off as well as using an existing product or code base. Should you bother rewriting the wheel? Why? When?

Perhaps you have seen publications about patterns in software development, or books on software design. These books can be sleepers regardless of how wonderful the information contained in them is. The same way taking notes during a lecture helps you learn and retain the subject matter, so too does designing software from the ground up, testing it, breaking it, repairing it, and improving it along the way.

Reinventing the wheel is not just an exercise in where to place code constructs: It is how to get an intimate knowledge of the inner workings of various components that already exist. Do you know how memory managers work? Virtual paging? Could you implement it? Double-linked lists? Dynamic array classes? ODBC clients? Could you write a graphical user interface that works like a popular one you know and like? Can you create your own web-browser widgets? Do you know when to write a multiplexed system versus a multi-threaded one? How to decide between a file- or memory-based database? These questions are not intended to make one feel like they still have lots to learn, but to point out the types of software most developers rarely create themselves. The consequence is all these kinds of software are not tangible and are viewed as mysterious black boxes that just work. Understanding only the surface of the water is not enough to reveal the hidden dangers beneath. Not knowing the deeper things in software development will limit your ability to create stellar work.

Reinventing the wheel and getting it wrong is more valuable than nailing it first time. There are lessons learned from trial and error that have an emotional component to them that reading a technical book alone just cannot deliver!

Facts and book smarts are crucial. But programming is not only a science; it's an art form. Reinventing the wheel is as important to a developer's education and skill as an artist practicing with their brushes and paints before attempting to put their masterpiece on canvas.

By Jason P Sage


This work is licensed under a Creative Commons Attribution 3

Back to 97 Things Every Programmer Should Know home page

Personal tools