Secondary storage adds the dimension of latency to memory organization. Programming structures, which seamlessly fuse secondary- and primary-memory data processing, are at a higher level than is conventional, and so simpler: data structures are based on bulk processing; programming language abstracts over looping. New abstractions give new ways of thinking and break old habits of programming. We illustrate these changes by integrating a number of areas hitherto thought separate and needing separate programming paradigms.