From interview with Donald Knuth, Dr. Dobbs Journal April 1996
DK: The first thing I would say is that when you write a program,
think of it primarily as a work of literature. Youre
trying to write something that human beings are going to
read. Dont think of it primarily as something a computer
is going to follow. The more effective you are at making
your program readable, the more effective its going to be:
Youll understand it today, youll understand it next week,
and your successors who are going to maintain and modify
it will understand it.
Secondly, ideas that are mathematical in nature should be
the property of the world and not of the individual who
thinks of the theorem. Id prefer that all but the most sophisticated algorithms be made public and that everybody
use them, and not that every time you use such-and-such a
method you should pay a nano-penny to some fund.
I wrote an open letter to the head of the U.S. Patent Commission,
published in the current printing of the CWEB
manual. I said, What if lawyers were to have rights to their
precedents? What if people had patents on words of the
English language, and every author who wanted to write
a novel would have to check which words they were using
and pay royalties to the owners of those words? Cant you
see how obvious it is that the quality of the legal system and the quality of published books would go down? Because
youre taking away the building blocks that people need to
do their job.
The basic building blocks that software designers need to
do their jobs are algorithms and languages and mathematics.
Its traditionally impossible to patent a mathematical
formula, for very good reason. Anyone who would wish to
calculate the area of a circle and use r2 should have to pay
a royalty for that: Its exact, its a universal thing. I think
that algorithms should be in exactly the same category. Algorithms
are mathematics.
Algorithms are the building blocks to create large, useful
systems. The service that youre providing for people
is making those systems more accessible, packaging them
better, giving better help on the phone, but not just having
a method that other people could put into another system
patenting color and background is like patenting words?