Programmers have a strong desire to be the person who significantly and dramatically improves their system e.g. by increasing its performance with a new algorithm. However this desire often leads programmers to overlook how such improvements are commonly achieved. I believe the misconception is that these improvements are original works, when in fact the improvements are made by applying algorithms or design patterns that were previously unknown to the observer.
This mistaken belief can lead the unwary to attempt to create new solutions for established problems without first checking to see if the problem has been encountered before and if there is already has an established solution. It is easy to fall into this trap when ‘in the zone’ programming and to start solving a problem that has already been solved: how many linked lists implementations does the world really need?
Half of the solution to this wasted effort is education: there are many design pattern and algorithm books in existence and few reasons not to have read at least one of each genre. The other half of the solution is attitude, as programmers we need to make a conscious effort to be as lazy as possible: to reusing existing algorithms and design patterns as often as possible thus allowing us to get to the truly new problems…
“What Descartes did was a good step. You have added much several ways, and especially in taking the colours of thin plates into philosophical consideration. If I have seen a little further it is by standing on the shoulders of Giants.” – Isaac Newton.
Would Isaac Newton have made such a contribution to mathematics if he had first attempted to reinvent all of mathematics?