Significant increases in computer performance and programmer productivity are needed to enable important discoveries in diverse fields ranging from neuroscience to high-energy physics. This talk will describe some of the major challenges in the design of extreme-scale computing systems and discuss architectures and technologies to overcome these challenges. It also will describe how the combination of scientific computing, machine learning, and data analytics may enable scientist to solve problems that were previously intractable.