We explore relationships between circuit complexity, the complexity of generating circuits, and algorithms for analyzing circuits. Our results can be divided into two parts: 1. Lower Bounds Against Medium-Uniform Circuits. Informally, a circuit class is "medium uniform" if it can be generated by an algorithmic process that is somewhat complex (stronger than LOGTIME) but not infeasible. Using a new kind of indirect diagonalization argument, we prove several new unconditional lower bounds against medium uniform circuit classes, including: For all k, P is not contained in P-uniform SIZE(n(k)). That is, for all k there is a language L-k is an element of P that does not have O(n(k))-size circuits constructible in polynomial time. This improves Kannan's lower bound from 1982 that NP is not in P-uniform SIZE(n(k)) for any fixed k. For all k, NP is not in P-parallel to(NP)-uniform SIZE(n(k)). This also improves Kannan's theorem, but in a different way: the uniformity condition on the circuits is stronger than that on the language itself. For all k, LOGSPACE does not have LOGSPACE-uniform branching programs of size n(k). 2. Eliminating Non-Uniformity and (Non-Uniform) Circuit Lower Bounds. We complement these results by showing how to convert any potential simulation of LOGTIME-uniform NC1 in ACC(0)/poly or TC0/poly into a medium-uniform simulation using small advice. This lemma can be used to simplify the proof that faster SAT algorithms imply NEXP circuit lower bounds, and leads to the following new connection: Consider the following task: given a TC0 circuit C of n(O(1)) size, output yes when C is unsatisfiable, and output no when C has at least 2(n-2) satisfying assignments. (Behavior on other inputs can be arbitrary.) Clearly, this problem can be solved efficiently using randomness. If this problem can be solved deterministically in 2(n-omega(log n)) time, then NEXP not subset of TC0/poly. The lemma can also be used to derandomize randomized TC0 simulations of NC1 on almost all inputs: Suppose NC1 subset of BPTC0. Then for every epsilon > 0 and every language L in NC1, there is a (uniform) TC0 circuit family of polynomial size recognizing a language L ' such that L and L ' differ on at most 2(n epsilon) inputs of length n, for all n.