The definition adopted in this course draws heavily on the work of Jeanette Wing, who has called for wider educational approaches to teach CT (Wing, 2008; Wing, 2006). She states that computational thinking involves conceptualizing problems, complementing and combining mathematical and engineering thinking, and it should not solely mean computer programming. Wing notes that there are a range of skills necessary for CT, including the ability to define problems, to reformulate seemingly difficult problems into ones that we know how to solve, to use abstraction and decomposition when approaching a large complex task, using heuristic reasoning to discover a solution, and using massive amounts of data to speed up and use computation for problem solving.