This document discusses programming design and three common types: top-down, structured, and object-oriented. Programming design considers the problem, project goals, and programming language. It is important to decide on a design upfront as it communicates decisions, ensures integration and readability. The three types each have advantages and disadvantages making them suited to different problem types. Top-down breaks problems into sub-problems, structured uses sequence and repetition, and object-oriented uses independent, reusable objects that send data.