Have you ever wondered what mathematical abstraction describes a computer program most adequately? If you consider it a black box, then the right answer is probably a function, because from the outside a program appears as a mapper of some input data into some output data. If you consider how it does what it does, then some additional abstractions may come into mind, like an algorithm, because a program is a sequence of instructions, non linear, in a sense that it can make loops, branching, forking, spawning, calling (sub)functions in the main function, etc. But it always presents a decomposition of the main task into smaller steps, subtasks, so, this decomposition is the essence of what an algorithm is. Obviously there must be some smallest steps then, that need no decomposition in order to be performed, or rather, that cannot be decomposed to anything more basic/fundamental on a certain computer. These are either machine instructions, or instructions of the higher level program...