Link Search Menu Expand Document

CS211 - Fundamentals of Computer Programming II


CS 211 teaches foundational software design skills at a small-to-medium scale. We aim to provide a bridge from the student-oriented How to Design Programs languages to real, industry-standard languages and tools. In the first half of the course, you’ll learn the basics of imperative programming and manual memory management using the C programming language. In the second half of the course, we’ll transition to C++, which provides abstraction mechanisms such as classes and templates that we use to express our design ideas. Topics include expressions, statements, types, functions, branches and iteration, user-defined types, data hiding, basic UNIX shell usage, and testing.


  • CS111 or CS150: Some college-level programming experience
  • Note: Students are strongly advised to take CS150 before CS211. Students with credit for CS150 may take CS111 and CS211 concurrently.



Detailed Course Topics

  • C/C++
    • Introduction to software engineering.
    • Basic data types, variables, computer arithmetic, expressions, parentheses.
    • Basic I/O – cout, cin.
    • Introduction to classes – defining one’s own data types
    • Flow of control – sequential, test-and-branch, and iteration. Boolean expressions.
    • Arrays, pointers, and strings.
    • Functions: call by value and call by reference, references vs. pointers, stack frames.
    • Function overloading
  • Introduction to Classes
    • Structures and classes, data hiding and encapsulation.
    • Public and private members, constructors, unions.
    • Interface vs. implementation.
    • Class destructors and copy constructors, the = operator, deep versus shallow copies.
    • C++ operator overloading.
    • Heap space, the new/delete operators.
    • Inheritance and derived classes, is-a hierarchies and composition of classes.
    • Virtual functions and polymorphism.
    • Linked list processing: stacks and queues, trees and recursion.
  • Introduction to UNIX
    • Processes, file management, redirection and piping, make files.


Large programming assignments possibly performed in groups or individually. The goals of the homeworks are to practice language syntax, new programming paradigms, and capabilities of C/C++. Recent homeworks feature:

  • C-style string manipulation
  • Manual memory-management with malloc()
  • Real-time and turn-based game design


Small programming assignments focused on practicing programming language features. Emphasis is on learning fundamentals.

Final Project

A larger variation on the homework that allows students to develop a game of their choosing from scratch. This is spread out over a longer time period as most homeworks and has various proposal and check-in phases along the way.