I study how populations of neurons collectively encode information present in their inputs and how they perform computations on these signals. The brain performs several classes of computation including signal comparison, prediction, error correction, and learning. To investigate these phenomena, I work with experimentalists on a variety of systems: predictive coding in the retina and visual cortex of the rodent, motion coding in area MT, and temporal coding in the zebra finch song system. From these studies, several general principles have emerged, which guide my current research: the hypothesis that neurons are optimized to predict their future inputs, that information in neural populations is represented combinatorially, and that coding in sensori-motor systems is highly dynamic and behaviorally dependent. By working closely with experimentalists, we constrain and test these theories of neural population coding with detailed measurements.