CS103: Mathematical Foundations of Computer Science

CS103 is intended to get CS majors good at math as it relates to computer science. Some of the material in the class was moderately interesting, but because of previous math experience, Sophomore College (which taught most of the concepts that CS103 taught), and being fairly good with math in general, the class was too easy, and as a result the assignments felt like busywork. The proofs that we were assigned didn't feel difficult, but just time consuming.

In the first half of the term, we covered some general math:

First order logic, proofs and proof strategies (induction, contradiction, contrapositive, cases, resolution), sets (set operations, power sets, infinite sets, countability), stuff related to sets (sequences, posets and the Hasse relationship, graphs, set mapping, functions).

In the second half, we transitioned to topics more related to computing:

Different models of computation (regular expressions / finite automata, context free languages, Turing Machines), computability (algorithms, recognizability, decidability), and complexity (P, NP, NP Completeness).

The course also felt a little bit crunched at the end. I feel like we could have spent more time on computability and complexity, which are the two concepts that most directly relate to programming, and spent less time on the earlier material, which is probably a little bit easier to learn and could be done in less time.

The class wasn't too bad. Partially, it's just that CS221 had much harder and simpler math problems (that is, they are conceptually hard to understand, but once you understand them, writing out a solution only takes a few lines) which made me feel like I was doing more work and getting more reward from CS221, so CS103 paled in comparison.