Teach Programming Using Task-Driven Case Studies: Pedagogical Approach, Guidelines, and Implementation | Synapse