This two course sequence is a small introduction to the foundations of a major part of Computing Science: expressing problems precisely, solving them algorithmically by showing how to construct a solution, and then implementing that solution by writing a program.
Our emphasis will be more on computation than on programming. That is, we are going to be more interested in the underlying process behind the solution and less interested in a particular programming language or programming style for implementing the solutions. In fact, our goal is to develop your intuitions for a variety of complementary styles of computation.
Our approach in this course is problem-driven. We will take a problem and attempt to solve it. In the process of developing an algorithmic solution we will introduce key computing concepts. Our intention is that every abstract concept should be grounded in concrete examples.
- Be able to think about ways to solve problems computationally
- Identify the different kinds of computation and know which ones are impossible
- Be able to verify your computations are doing what they are intended to do
- Learn ways to structure computations so they can be understood by others
- Learn how we can apply computing ideas to other areas of human activity
- Final Exam