My Software Development Philosophy

Don’t re-invent the wheel!

   It hasn’t “all been done before”... But much of it has! It is likely that when we need to solve a software design problem we can find information about previous attempts so solve the same problem. If the design problem is one that occurs frequently, it is likely that wealth of information on solving the problem will lead to an evolution in the solution to the problem.  A Design Pattern is a formal description of a common problem and the solution that has evolved to solve the problem.  Design Patterns are documented in books, magazines and the internet.  The solution proposed by a design pattern can often be trusted because of the darwinian nature of evolution. Even when the problem is not one that occurs frequently, we may be able to find a few specific examples of solutions to the problem. We must carefully examine these solutions to make sure that the problems they address really match our own.  We must also decide on our own whether the solution proposed is a good one since there is unlikely to be any group consensus.

   When implementing a design we make use of many different algorithms, and data structures. Many of these are provided either as part of the language or in a set of libraries supplied by the compiler vendor. But there are always algorithms and data structures that we need which are not supplied.  The internet has become a valuable resource for locating code that we would ordinarily need to write ourselves. Often this code is part of a library. Some of these libraries are produced by trusted vendors, some are produced by individuals and others are produced by open source collaborations (e.g. those found on SourceForge.net).  When using libraries, especially those not produced by trusted vendors, it is quite important that we include tests to verify that the libraries are correctly implemented and that we have not misunderstood their use.  Sometimes the necessity of performing code reviews and writing tests when using these libraries is not worth the effort and we are better off writing the code from scratch. One of my favorite source for libraries is “BOOST.org” which features a collection of peer reviewed libraries (e.g. regular expression, date/time, numberic, etc..).