We describe BlackHat, an automated C++ program for calculating one-loop amplitudes, and the techniques used in its construction. These include the unitarity method and on-shell recursion. The other ingredients are compact analytic formulae for tree amplitudes for four-dimensional helicity states. The program computes amplitudes numerically, using analytic formula only for the tree amplitudes, the starting point for the recursion, and the loop integrals. We make use of recently developed on-shell methods for evaluating coefficients of loop integrals, in particular a discrete Fourier projection as a means of improving numerical stability. We illustrate the good numerical stability of this approach by computing six-, seven- and eight-gluon amplitudes in QCD and comparing against known analytic results.