<programming> (Or "procedure") A sequence of instructions for performing a particular task. Most programming languages, including most machine languages, allow the programmer to define subroutines. This allows the subroutine code to be called from multiple places, even from within itself (in which case it is called recursive). The programming language implementation takes care of returning control to (just after) the calling location, usually with the support of call and return instructions at machine language level.
Most languages also allow arguments to be passed to the subroutine, and one, or occasionally more, return values to be passed back.
A function is often very similar to a subroutine, the main difference being that it is called chiefly for its return value, rather than for any side effects.