We study the complexity of building pseudorandom generators (PRGs) with logarithmic seed length from hard functions. We show that, starting from a function f : {0, 1}l → {0, 1} that is mildly hard on average, i.e. every circuit of size 2Ω(l) fails to compute f on at least a 1/poly(l) fraction of inputs, we can build a PRG : {0, 1}O(log n) → {0, 1}n computable in ATIME(O(1), log n) = alternating time O(log n) with O(1) alternations. Such a PRG implies BP · AC0 = AC0 under DLOGTIME-uniformity. On the negative side, we prove a tight lower bound on black-box PRG constructions that are based on worst-case hard functions. We also prove a tight lower bound on blackbox worst-case hardness amplification, which is the problem of producing an average-case hard function starting from a worst-case hard one. These lower bounds are obtained by showing that constant depth circuits cannot compute extractors and list-decodable codes.