Computer science is applied discrete mathematics, and CS 145 tries to make the connections between computer science and conventional mathematics clear. But two issues arise in the course that differentiate computer science from mathematics.
Mathematics is an activity done by humans for humans in which a certain amount of ambiguity and omission of detail can be tolerated. But in computer science, there are usually machines involved, and for machines we must develop strategies for coping with ambiguity and specifying details. This leads to tension between expressivity and precision.
When a mathematician proves a theorem, the result can be used as a building block in a larger proof without knowing anything about the nature of the smaller proof. But in computer science, where effective use of resources (such as time or space) is important, we cannot entirely forget the details of our building blocks. This leads to tension between abstraction and efficiency.
There are no simple resolutions for these tensions, and we will examine a range of strategies and the tradeoffs involved in each. Since CS 145 is built on the foundations of CS 135 and CS 136, it shares much of their philosophies as well as their content. But it goes beyond those courses to emphasize a highly conceptual approach, independent learning, and intellectual challenge.