Modular Programming vs Monolithic Programming
Modular programming refers to the practice of dividing software up into parts, or modules. Ideally, a module can be changed, replaced, or removed, with minimal effect on the other software it works with. What is or isn't "modular programming" is a matter of interpretation, and there is a spectrum .
Making programs modular means that a module's communication with other software components must follow a well-defined pattern. This communication is done through an "interface" - a set of inputs and outputs that a module has.
A program module may be rewritten while its inputs and outputs remain the same. Modular programming can make it easier to modify a program. The person making a change may only understand a small portion of the original program, but because that portion is set apart from the rest of the code, she can modify it with no consequences to other parts of the program.
Examples of software that attempts to follow modular software ideals include Tiny Core Linux and LXDE. Both projects attempt to maintain the smallest amount of code possible to accomplish a given task, and to allow software components to be used separately from each other, modified, or replaced. This is in contrast to Windows XP or Windows 7, where many gigabytes of files are installed and modification to any component within the base operating system is discouraged (and may break the system).