Syllabus

This document and others linked within it should be your PRIMARY source for understanding the expectations of this course. Be sure to read it carefully. You must contact the instructor for clarification if you receive information from any another source that is in contradiction to what is provided below.

Grading

Grade breakdown by evaluation component

Letter Grades:

Grade assignment policy

A/A+ 97-100 A 93-97 A- 90-93
B+ 87-90 B 83-87 B- 80-83
C+ 77-80 C 73-77 C- 70-73
D+ 67-70 D 63-67 D- 60-63
F Below 60

Curving: The grade scale above represents the minimum letter grade you will be assigned—at the instructor's discretion, the grading scale may be altered in the students' favor if this will better reflect the students' mastery of the material. Thus, if there is a "curve", it will be applied at the end, not to individual assignments.

A+ grades: These may be awarded to the very best performing students in the class—but the cutoff for A+ grades will be determined at the end of the course at the discretion of the instructor (there is no pre-determined cutoff---an average of 97 or more doesn't guarantee you an A+ grade. The instructor may also choose not to award any A+ grades.)

Everything is cumulative—that's just how CS is.

Finally—note that just as in a math class, everything we do builds on all the work that came before. So, everything is cumulative—so, you can't afford to miss any classes unless absolutely necessary. Miss two lectures in a 10-week two-lecture per week course, and you've already skipped exactly 10% of the course—it wouldn't be surprising if your performance (i.e. final grade) in the course dipped by a similar amount.

Schedule

For office hours please see the Staff Page.

For hw, lab and exam schedule, please check the assignment calendar.

Course Plans (possible adjustment may be applied):

date description
T 01/04 First Lecture
R 01/06 C++ basic data types, binary, struct keyword
T 01/11 A bit more on structs and constructors
R 01/13 Fourth Lecture
T 01/18 Fifth Lecture
R 01/20 Functions
T 01/25 More on functions
R 01/27 argc/argv, C-strings, pointers, functions, reading from files
T 02/01 pointers, argc/argv, reading from files
R 02/03 Midterm Practice Questions
T 02/08 Midterm Exam
R 02/10 Intro to linked lists
T 02/15 More on linked lists
R 02/17 TBD (More on data structures)
T 02/22 git clone, Makefiles, separate compilation
R 02/24 git add/commit, more on separate compilation, linking
T 03/01 git push/pull; classes in C++
R 03/03 Recursion
T 03/08 TBD
R 03/10 Final Exam Review

Resources

Required Resources

The zyBook for this course is required. Information on signing up was distributed via Gauchospace, and appears on Homework H00

What this course is about

This course is the first in a three course sequence, CS16-24-32 that provides a foundation in data structures and algorithms for deeper study of Computer Science.

This is NOT an introductory programming course. This is an INTERMEDIATE programming course.

What you need BEFORE you take this course

This course will present C++ from the beginning; no prior knowledge of C++ is assumed. However, it IS assumed that you already have successfully completed CMPSC 8, or have an equivalent background in programming. You should be comfortable with all of the following:

  • Problem solving
    • breaking down a problem into a sequence of steps
    • abstracting specific problems into general ones
      and finding general solutions
  • Memory concepts
    • variables, primitive vs. reference variables, name, type, value
    • assignment statements
    • scope of variables
  • Control structures
    • for loops, if/else, while loops
  • Arrays (or a similar data structure, e.g. Lists in Python)
    • index vs. value, finding sum, min, max, average, count of elements matching some condition, making a new list of elements containing only those that match some condition
  • Functions
    • function call vs. function definition
    • formal vs. actual parameters (arguments)
  • Testing
    • How to test your code
  • Input/output concepts
    • Writing to the terminal
    • Reading from the keyboard
    • Reading and writing to files
    • Neatly formatting output
  • Program style
    • How to write code that other people can read and understand

What you SHOULD HAVE LEARNED BY THE END of this course to be ready for CS24

So, what is it that you need to know by the end of this course? Here's the list of just a few of the things you'll need to know to be ready for CS24 (the next programming course). You'll have the opportunity to learn all of these things (though not necessarily in this order).

The swimming/guitar/painting analogy

You cannot learn to swim, play guitar, or paint from a textbook or a lecture. You can only:

The same is true of programming. Programming is not a series of facts to be memorized—you cannot "cram" for a computer science exam. You must practice, practice, practice.

Course policies

Graded components

There are five components to this course, each of which has a special job to do:

Back to Syllabus