  Different techniques have been used to prove several transference theorems of
the form "nontrivial algorithms for a circuit class C yield circuit lower
bounds against C". In this survey we revisit many of these results. We discuss
how circuit lower bounds can be obtained from derandomization, compression,
learning, and satisfiability algorithms. We also cover the connection between
circuit lower bounds and useful properties, a notion that turns out to be
fundamental in the context of these transference theorems. Along the way, we
obtain a few new results, simplify several proofs, and show connections
involving different frameworks. We hope that our presentation will serve as a
self-contained introduction for those interested in pursuing research in this
area.
