A named method or practice applied to solve a recurring problem in building or running software, narrower than a full algorithm and not tied to one specific data structure. Belongs here: Compiler, Dynamic Programming, Garbage Collection, Packet Switching, Public Key Cryptography, Recursion and Virtual Memory. Does not belong here: a fully specified, named step-by-step procedure with a known running time, filed under Algorithm, and a general style of structuring a whole program, filed under Paradigm.