ICS 46 Spring 2022
Notes and Examples: Course Introduction


Course background and goals

This course is a deep dive into the implementation and analysis of data structures and their associated algorithms. While you will spend a fair amount of your time in this course working on writing implementations of them, you'll also learn how to analyze the big-picture decisions that lead to good implementations, as well as how to choose from among existing ones. We'll find that it quite often isn't possible to implement them well — no matter your level of programming skill — without making the right decisions up front, so we'll be sure that we understand how to think about things the right way and get the "big stuff" right before we try to delve into the finer-grained details.

Assessing your preparedness for the course

There are a few paths that lead to this course through our curriculum (or transfer curricula), but they all should leave you in (more or less) the same place with respect to how prepared you are for this course. I'll presume that you've programmed a fair amount before, roughly equivalent to what you would have seen in our first four quarters (ICS 31, 32, 33, and 45C). You should now be at the point where relatively simple programming problems — finding the maximum in a collection of integers, reading user input until it is valid, and things of that nature — are things you can complete fairly easily on your own, while hitting very few snags along the way. You should also be at the point where you can write code that solves a problem, given an abstract description of the problem, rather than just copying and pasting example code and trying to adapt it; being able to visualize a problem and its solution is core to what we'll be doing in this course.

Since ICS 45C — our course that introduces C++ programming at some depth — is a prerequisite for this course, I'll presume that you've previously learned C++, either as a first or a second (or later) language, roughly equivalent to what you would have learned in our ICS 45C course. It turns out that introductory C++ courses tend to vary from one offering to another, since C++ is a large and complex language, so a quick list of things I'm assuming you've seen follows.

You might also have seen other C++ features that will be of use to us in this course, though I'll assume that you either haven't seen these, or that their coverage was light.

If you've seen most of that, you'll be fine, though if you want to take a deeper look into any of those topics, either to brush up on them or because they're new to you, take a look through the Notes and Examples from my most recent ICS 45C offering, which includes a thorough treatment of all of these topics.

What is this course about?

Our focus in this course is twofold:

Along the way, we'll learn enough additional C++ to allow us to tackle problems that we might not easily be able to tackle otherwise. Periodically, we'll spend a little bit of time on "new" C++ features that you may not have seen before, but that support our work in this course; that's a fairly small percentage of what we'll do in the course.


Course organization and logistics

This course web site describes the logistical details of how this course is going to be run. Particularly, be sure that you read through the Course Reference, the front page of the Project Guide, and the early part of the Project #0 write-up, so you will know how this course operates, and how you'll be doing and submitting your work.