This document provides an introduction to reactive programming. It discusses reactive programming as a paradigm oriented around data flows and change propagation. Key concepts covered include treating events as observable arrays, using declarative approaches to describe system behavior over time in response to state changes. The document reviews common array methods like map(), filter(), and reduce() that are used in reactive programming. It also discusses two popular JavaScript libraries, RxJS and BaconJS, that support the reactive programming paradigm. Finally, readers are given a coding challenge to apply these concepts by replacing event handling logic in a project using reactive programming.