This document discusses computational thinking skills for programming. It describes pattern recognition as identifying common elements and differences within and between problems to describe patterns. Pattern generalization and abstraction are explained as simplifying complex processes by ignoring details to see the overall patterns. Representing parts of a problem involves identifying the variables, constants, processes, inputs, and outputs needed to solve the problem or build a system and how these pieces fit together.