Human learning is often structured around examples. Interestingly, example-based reasoning has also been heavily used in computer-aided programming. In this article, we describe how techniques inspired from example-based program analysis and synthesis can be used for various tasks in Education including problem generation, solution generation, and feedback generation. We illustrate this using recent research results that have been applied to a variety of STEM subject domains including logic, automata theory, programming, arithmetic, algebra, and geometry. We classify these subject domains into procedural and conceptual content and highlight some general technical principles as per this classification. These results advance the state-of-the-art inintelligent tutoring, and can play a significant role in enabling personalized and interactive education in both standard classrooms and MOOCs.