Over the past 25 years, surprisingly effective techniques have been developed for inferring causal models from observational data. While traditional models reason about a given system by assuming that its behavior is stationary, causal models reason about how a system will behave under intervention. Unfortunately, nearly all existing methods for causal inference assume that data instances are independent and identically distributed, making them inappropriate for analyzing many social, economic, biological, and computational systems. In this talk, I will explain the key ideas, representations, and algorithms for causal inference, and I will describe very recent developments that extend those techniques to complicated systems with relational and dynamic behavior. I will describe practical methods for evaluating methods for causal inference and identify some of the most pressing research questions and new technical frontiers.