This course’s primary learning goal is to teach you foundational programming skills in the context of algorithms and data structures. The course does this by interleaving the two and often using each one to motivate the other.
Except where otherwise indicated, the sole assessment in the course will be homework assignments. These are take-home and “open book” relative to the policy on Honesty and Sharing. Occasionally you will be asked to do some readings, especially if they are found relevant based on questions and discussion in class.
In keeping with the learning goals, the assignments focus on programming, algorithmics, or both. Usually you will implement a solution to some task, and then analyze its complexity. The purpose of these is to help you gain facility with thinking of software systems from the perspectives of both implementation and analysis.
The work load in the course is uniformly distributed across the semester. Students can expect to spend about 10 hours each week on assignments. Combined with the 2.5 hours spent per week in class, this translates to approximately 180 hours over the course of the semester.