While efficient coding has been a successful organizational principle in visual neuroscience, to make a more general theory behavioral, mechanistic, and even evolutionary constraints need to be added to this framework. In our work, we use a mix of known computational goals and detailed behavioral measurements to add constraints to the notion of 'optimality' in vision. Accurate visual prediction is one such constraint. Prediction is essential for interacting fluidly and accurately with our environment because of the delays inherent to all brain circuits. In our work, we explore how our visual system makes these predictions, starting as early as the eye. We use techniques from statistical physics and information processing to assess how efficient, predictive vision emerges from these imperfect component parts. To test whether the visual system performs optimal predictive compression and computation, we compute the past and future stimulus information in populations of retinal ganglion cells, and in the vertical motion sensing system of the fly. In the fly, we anchor our calculations with published measurements of fast evasive flight maneuvers. This survival-critical behavior requires fast and accurate control of flight, which we show can be achieved by visual prediction via a specific wiring motif involving gap junction coupling. Developing a general theory of the evolution of computation is also a current research direction in our group. We use the repeated evolution of tetra-chromatic color vision in butterflies to test hypotheses about whether extant neural computations contain shadows of the evolutionary history of the organism.