Category: allowing you to think differently about computational problems and solve them in a highly reusable way. Aimed at intermediate-level programmers