Link Search Menu Expand Document

Pre-Requisites

CMPSC 16 is NOT an introductory programming course; rather, it is an intermediate level programming course. Your instructors:

  • will not assume any prior knowledge of the C++ programming language.
  • will assume that you already have certain programming skills and knowledge in some language (perhaps Java, Python, MATLAB or something else).

The formal pre-requisite for CMPSC 16 (from the official UCSB catalog description) is:

Prerequisite: Mathematics 3A or 2A with a grade of C or better (may be taken concurrently), CS 8 or Engineering 3 with a grade of C or better, or significant prior programming experience

What is needed, in practice, is the following set of skills and knowledge.

  • 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 learn in CS16 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.