This paper consists of a survey of current, and past, work on program transformation for the purpose of optimization. We first discuss some of the general methodological frameworks for program modification, such as analogy, explanation based learning, partial evaluation, proof theoretic optimization, and the unfold/fold technique. These frameworks are not mutually exclusive, and the latter, unf...