  We define an algorithm to be the set of programs that implement or express
that algorithm. The set of all programs is partitioned into equivalence
classes. Two programs are equivalent if they are essentially the same program.
The set of equivalence classes forms the category of algorithms. Although the
set of programs does not even form a category, the set of algorithms form a
category with extra structure. The conditions we give that describe when two
programs are essentially the same turn out to be coherence relations that
enrich the category of algorithms with extra structure. Universal properties of
the category of algorithms are proved.
