Stand on the shoulders of giants

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?

Computer Graphics: Mathematical First Steps

If you are going to learn about programming computer graphics it is best to start with the core mathematical concepts and that is exactly what this book teaches and that is why it never leaves my desk.  There are a legion of books teaching about the latest graphics APIs, hardware and rendering techniques but there are very few books that focus on and teach the fundamental math skills required for graphics programming as well as this book.  Which makes this book worth reading for all programmers who are interested in computer graphics.