This document outlines an event driven programming course. It begins by defining an event driven system as one where events are the driving force, such as user inputs like mouse clicks or internal events like variable assignments. It then discusses event driven programming, where the system spends most of its time in stasis and events propagate through it. Key aspects of event driven programming discussed are loose coupling between event sources and handlers, state-based control, and concurrent and distributed processing concerns. The course will cover Java event programming, component-based programming, concurrent and distributed event programming, and engineering event driven systems.