This document discusses programming user interfaces with functional reactive programming (FRP) and the Bacon.js library. It introduces FRP concepts like sources of data, events, side effects, and switching. It then discusses Bacon.js and other Javascript FRP frameworks like Elm, Flapjax, Javelin, and RxJS. The document explains how FRP helps with issues like callback spaghetti and makes refactoring and adding new features easier. It provides examples using Bacon.js concepts like flatMap, buses, debugging, and AJAX search implementations.