CMPUT 174 - Introduction to the Foundations of Computation I


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.


  • Think about problems in a different way in order to solve them computationally
  • Understand the kinds of computation
  • Deduce if a computation is impossible
  • Understand your computations so that you can verify they are doing what you intend them to do
  • Learn good ways to structure computations so that others can understand them
  • Learn ways to specify and organize computations so that machines can perform them
  • Understand how to build the machines that make computation possible
  • Learn how to apply computing ideas to other areas of human activity

Course Work

  • Assignments
  • Labs
  • Midterm
  • Final Exam