In
software development, reinventing the wheel is often necessary in order to work around
software licensing incompatibilities or around technical and policy limitations present in parts or modules provided by third parties. An example would be to implement a
quicksort for a script written in
JavaScript and destined to be embedded in a web page. The quicksort algorithm is well known and readily available from
libraries for software developers writing general-purpose applications in
C++ or
Java, but some JavaScript implementations do not provide this specific algorithm. Hence, if a developer wants to reliably use quicksort on their web page, they must "reinvent the wheel" by reimplementing the algorithm. They could conceivably copy it from another web page, but then they could run into
copyright and software licensing issues. Reinventing the wheel in this case provides the missing functionality and also avoids copyright issues. Additionally, those new to a language (and especially those new to programming) will often attempt to manually write many functions for which a more robust and optimized equivalent already exists in the
standard library or other easily available libraries. While this can be useful as a learning exercise, when done unknowingly the result is often less
readable, less reliable, less tested and less optimized software which takes longer to write, test, maintain, and
debug. == Software projects that are reinvented wheels ==