Link Search Menu Expand Document

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

  • zyBooks Assignments: 25%
  • Gradescope assignments: 25%
  • Midterm Exam: 25%
  • Final Examination : 25%

Letter Grades:

  • To earn a grade of A, you must have an A average overall, and an A- or above on the final exam.
  • To earn a grade of A-, you must have at least an A- average overall, and at least a B- on the final exam.
  • To earn a grade of B+, you must have at least a B+ average overall, and at least a C+ on the final exam.
  • To earn a grade of B, you must have at least a B average overall, and at least a C on the final exam.
  • To earn a grade of B-, you must have at least a B- average overall, and at least a C- on the final exam.
  • To earn a grade of C+, you must have at least a C+ average overall, and at least a C- on the final exam.
  • To earn a grade of C, you must have at least a C average overall, and at least a C- on the final exam.
  • Otherwise, your average grade will be your final grade.

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.)

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.

Resources

Required Resources

The zyBook for this course is required. Information can be found at the textbook link in the menu.

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).

  • A few of the basic data types of C++, including at least, int, double, char, bool, string
  • The basic control structures of C++ (if/else, while, for etc.)
  • Defining functions in C++, and passing parameters to functions in three different ways (by value, by pointer, and by reference)
  • Scope and lifetime of variables in C++
  • The use of “const” with parameters to functions
  • Using arrays in C++, and C-strings (null-terminated character arrays)
  • How arrays are passed to functions, and the relationship between arrays and pointers
  • Defining and working with structs in C++
  • Using structs to create singly linked lists where the space for the list nodes is allocated on the heap
  • The difference between space allocated on the stack (e.g. local variables) and space allocated on the heap (with the new and delete operators)
  • Converting from binary to decimal, octal, and hex, and back again—and how this relates to how C++ programs store various kinds of data in memory.
  • The basic principles of recursion, and some idea of when a recursive solution is appropriate.

The swimming/guitar/painting analogy

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

  • learn to swim by spending many hours in the pool,
  • learn to play guitar by spending many hours playing the instrument
  • learn to paint by spending many hours putting brush to canvas.

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

Course components

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

  • (1) Reading—Between each class, you'll have reading to do in the textbook. There is too much information you need to learn in this course for you to get all of it in lecture, so the readings are essential. I'll be updating the zyBook so that the readings for each week are clearly labelled with the week in which they should be completed.

  • (2) zyBooks PAs/CAs/LAs
    The PAs/CAs/LAs in zyBooks are there to help make sure that you understood the reading, and to give you immediate practice with what you are reading. The PAs/CAs/LAs for each week should be completed by the end of that week. Late submissions will not be considered. If you fall behind, come for help as soon as possible, as the material gets more challenging.

  • (3) Programming Assignments (Labs)—Programming assignments (also called labs) are given once a week, and are typically assigned every Wednesday in your lab sessions. You may work on them during closed labs and plan to finish the assignment on your own time outside of lab. You should however, read the assignment and attempt the parts that you *can* do with little assistance as soon as the assignment is released. The assumption is that you at the very least read the assignment during your lab section. When permitted, you are encouraged to use pair programming, but please read the collaboration policy for each lab. Some labs have to be completed individually.

  • (4) Lectures—Learning is something that you do as a student, not something that is "done to you" by a teacher. Therefore most of the learning you will do in this course takes place when you are actively involved in doing something challenging (i.e., during the homework assignments and labs). Most of the information you will need to do those assignments will come from the reading.

    Therefore, you may ask, what is the purpose of the lectures?

    The purpose of the lectures in this course is to guide you through the readings, homeworks, and labs:
    • to provide an overview of how everything fits together
    • to provide hands-on demonstrations of things you'll do on your own later
    • to provide additional information that is not in the textbook
    • to provide additional explanations about things in the text that might not be clear
    • to provide an opportunity to ask questions, and hear answers to questions asked by others.

  • (5) Exams—There are two exams in this course— a midterm and a final. No makeups will be given for the final exam. Please make sure that you have no conflicts with the final if you are taking this course.

Back to Syllabus