UNIT 1
Computational Thinking

In order to successfully master the art of creating computational artifacts, it is important that you develop a clear understanding of the complex processes and structures that make up an algorithmic solution to a given problem. In addition, it is critical that they be able to formally express those solutions clearly and unambiguously, such as what can be achieved through the use of pseudocode or a well-specified programming language. This unit focuses on introducing you to these concepts and helping them to develop the skills that they will rely on throughout the remainder of the course.

First, you will explore a number of techniques for analyzing common problems and visualizing their solutions. They will use these techniques to investigate a number of real-world applications, such as searching, sorting, and encryption. Next, you will examine how programmers utilize various levels of abstraction in the languages that they use to write programs and communicate their intentions in a form that can be executed by a computer. Finally, you will turn your attention to the question of whether various problems are solvable and investigate the factors that affect the efficiency of a solution to a given problem.