A computer programming paradigm in which one writes small bits of code to accomplish a common task. The same code can then be reused in a later project, saving the programmer time and energy. Various other paradigms have been invoked to accomplish code reuse over the years, including Procedural programming, Object-oriented programming and Generic programming.