Ein Programm bestimmt die Abfolgen, die möglich sein sollen, ist also
eine Abstraktion, was alle möglichen Berechnungen gemeinsam haben.
Ein Algorithmus abstrahiert von der verwendeten Programiersprache und manchen Feinheiten.
Das ist die klassische prozedurale oder funktionale Programmierung. In der Objektorientierten Programmierung sind die Methoden sozusagen prozedural Programmiert. In der funktionalen Programmierung fehlen (bzw. fehlten bis vor kurzem) die Zustände. Theoretiker haben funktionale Programmiersprachen sehr gerne, weil sich besser mathematisch faßbar sind.