Computational thinking is a problem-solving process that includes (but is not limited to) the following characteristics: • formulating problems in a way that enables us to use a computer and other tools to help solve them; • logically organizing and analyzing data; • representing data through abstractions, such as models and simulations; • identifying, analyzing, and implementing possible solutions with the goal of achieving the most efficient and effective combination of steps and resources; and • generalizing and transferring this problem-solving process to a wide variety of problems. These skills are supported and enhanced by a number of dispositions or attitudes that are essential dimensions of computational thinking. These dispositions or attitudes include: • confidence in dealing with complexity; • persistence in working with difficult problems; • tolerance for ambiguity; • the ability to deal with open ended problems...