Penguin

The process of improving SourceCode and/or its resulting MachineCode with regard to a certain aspect. Such aspects include:

Speed:
Does what it says: the program runs faster. This is the aspect commonly referred to when the term Optimisation is used.
Object code size:
Reduces the size of large applications (such as browsers, office suites, and the like) or frequently downloaded code (such as scripts and applets on WebSites). As a side effect, Cache locality of the code improves, so performance will often benefit as well. This is the second most commonly referred to aspect of Optimisation.
Compilation time:
Improves the perceived responsiveness of code compiled dynamically in reaction to user requests.
Parallelisation:
Leverages the resources of SMP systems better, because MultiThreaded tasks can take advantage of multiple CPUs at once.

In practice, you always need a balance among these.


There are other aspects which relate to the development-time rather than the run-time which can also be thought of as optimisations:

Flexibility:
Reduces the effort and thus cost of designing and implementing new features. See also Refactoring.
Portability:
Allows deploying the SourceCode on more than one platforms. This often requires avoiding other, platform-specific Optimisation techniques.

Again, balance is necessary.