CS 3520 Programming in C++

"Programming in C++, one pixel at a time" -- Your Instructor -- Your Instructor


  • Instructor: Mike Shah
  • E-mail: mikeshah( a t )Northeastern{dot}edu(Read How to send an e-mail)
  • Office: Virtual Nightingale 132A
  • Student Hours: In Location TBD
    • Review course material with me and ask questions
    • Date/Time: By appointment
    • Sign up for a 15-30 minute appointments arranged by e-mail on Google Hangouts here
  • Forum: Piazza Forum Board
  • Microsoft Teams Link for Live Video: Teams Link

General Purpose, Multi-paradigm

Powerful, Modern

, and fun language

Schedule/Road Map

The following is our tentative syllabus for the course, some changes should be expected throughout the semester. I will announce in class lecture, piazza, or through e-mail any major changes.

  • To get all of the assignments/activities for the course, you must first click the following link: Course Monorepo Do not do a 'git pull' until class starts (Occasionally I make changes/spelling corrections)
Lecture and Readings Assignments Note(s)
1 Monday - May 10, 2021
  • Lecture outline
A1 Released -- Guessing Game (Due May 14 Anywhere on Earth) Welcome back to class!
1 Tuesday - May 11, 2021
  • Lecture outline
    • C++ Standard Template Library
    • Using GDB to Debug and Investigate the STL
    • Begin Module!
-- --
1 Wednesday - May 12, 2021
  • Lecture outline
    • Pass by Value
    • Pass by Reference
    • const parameters
    • constexpr parameters
    • Function polymorphism
    • Small math library
    • Using GDB to debug functions
    • Begin Module!
-- --
-- --
1 Thursday - May 13, 2021
  • Lecture outline
    • Streams
    • Input Output functions
    • File Reading and Writing
    • Text Parsing
    • std::filesystem
    • Begin Module!
A2 Released -- Debugger (Due May 20 Anywhere on Earth)
-- --
2 Monday - May 17, 2021
  • Lecture outline
    • Revisiting arrays and raw arrays
    • arrays
    • Raw Pointers
    • Pointer Arithmetic
    • Segmentation fault in GDB
    • Begin Module!
A3 Released -- PPM to ASCII (Due May 23 Anywhere on Earth)
-- --
2 Tuesday - May 18, 2021
  • Lecture outline
    • Stack Memory
    • Heap Memory
    • Static Memory
    • 2D Arrays
    • Structs
    • Begin Module!
-- --
-- --
2 Wednesday - May 19, 2021
  • Lecture outline
-- --
-- --
2 Thursday - May 20, 2021
  • Lecture outline
    • Interface versus Implementation
    • The Three Amigos (or Three musketeers) Copy constructor
    • The Four muskeeters! (Copy Assignment)
    • Shallow and Deep Copy
    • SFML Library and Virtual Machine
    • Begin Module!
A4 Released -- Image Processing (Due May 28 AOE)
-- --
3 Monday - May 24, 2021
  • Lecture outline
    • Implementation and Interface
    • Scope Operator
    • Static and Dynamic Linking of Libraries
    • Linking SFML (ldd, and GDB)
    • Begin Module!
A5 Released -- Doom Fire (Due June 1 AOE)
-- --
3 Tuesday - May 25, 2021
  • Lecture outline
    • Single Inheritance
    • Multiple Inheritance
    • virtual
    • pure virtual
    • vtable
    • Begin Module!
-- --
-- --
3 Wednesday - May 26, 2021
  • Lecture outline
    • Review: Linked Data Structures with Pointers
    • Trees
    • Binary Trees
    • Algorithm Class - Binary Search Tree
    • #include binary_search
    • Begin Module!
-- --
-- --
3 Thursday - May 27, 2021
  • Lecture outline
    • Application Design
    • Structuring a program
    • Code Walk
    • Begin Module!
A6 Released -- Binary Tree Due(June 8 AOE)
-- --
4 Monday - May 31, 2021
-- --
Enjoy the day! (No class today)
4 Tuesday - June 01, 2021
  • Lecture outline
    • Building Data Structures
    • Different Types of Smart Pointers
    • Begin Module!
-- --
-- --
4 Wednesday - June 02, 2021
  • Lecture outline
-- --
-- --
4 Thursday - June 03, 2021
  • Lecture outline
    • Object Oriented Programming Review
    • Review on Scope
    • Compilation Process
    • Quad Tree Overview
    • Begin Module!
A7 Released -- Falling Sands(Due June 15 AOE)
-- --
5 Monday - June 07, 2021
  • Lecture outline
    • Introduction to Graphs
    • Adjacency List
    • Adjacency Matrix
    • Graph Interface/Adjacency List implementation
    • Begin Module!
-- --
-- --
5 Tuesday - June 08, 2021
  • Lecture outline
    • See Office Hour Spreadsheet, post on piazza, etc.
    • Begin Module!
-- --
-- --
5 Wednesday - June 09, 2021
  • Lecture outline
    • More Graphs
    • Spline Data Structure Explanation
    • Spline Data Structure implementation
    • Begin Module!
-- --
-- --
5 Thursday - June 10, 2021
  • Lecture outline
    • Introduction to Sprite Animation
    • Introduction to Color Cycling
    • Mesh Warping Idea
    • Mesh Warping Algorithm
    • Mesh Warping Start of Implementation
    • Begin Module!
A8 Splines Out (Due June 21 AOE)
-- --
6 Monday - June 14, 2021
  • Lecture outline
    • Architecture History
    • What is a thread?
    • C++ Threading Examples
    • Begin Module!
-- --
-- --
6 Tuesday - June 15, 2021
  • Lecture outline
    • Asynchronous I/O
    • C++ Memory Model
    • Tracking Memory Allocations
    • Begin Module!
A9 Released -- Data Parallelism(Due June 25 AOE)
-- --
6 Wednesday - June 16, 2021
  • Lecture outline
-- --
-- --
6 Thursday - June 17, 2021
-- --
-- --
7 Monday - June 21, 2021
  • Lecture outline
    • Scripting vs compiled languages
    • Pybind11
    • TRACE Reminder
    • Begin Module!
-- --
-- --
7 Tuesday - June 22, 2021
  • Lecture outline
    • Graphical User Interfaces
    • Building from source
    • wxWidgets
    • Begin Module!
-- --
-- --
7 Wednesday - June 23, 2021
  • Lecture outline
    • Tools for Making your C++ Experience Better!
    • Tooling - Using Make
    • Tooling - Using CMake
    • cppcheck - Static Analysis
    • Begin Module!
-- --
-- --
7 Thursday - June 24, 2021
-- --
Last day of class :(

Course Description

This course is going to teach you how C++ programmers use the C++ language to build software. We are not just going to show the syntax of the language, but solve problems as a C++ programmer would solve the problem using the constructs, tools, and philosophy of the language.

Registrar Description:Examines how to program in C++ in a robust and safe manner. Reviews basics, including scoping, typing, and primitive data structures. Discusses data types (primitive, array, structure, class, string); addressing/parameter mechanisms (value, pointer, reference); stacks; queues; linked lists; binary trees; hash tables; and the design of classes and class inheritance, emphasizing single inheritance. Considers the instantiation of objects, the trade-offs of stack vs. heap allocation, and the design of constructors and destructors. Emphasizes the need for a strategy for dynamic memory management. Addresses function and operator overloading; templates, the Standard Template Library (STL), and the STL components (containers, generic algorithms, iterators, adaptors, allocators, function objects); streams; exception handling; and system calls for processes and threads.

Course Objectives

By the end of this course, you will:

  1. Students will learn how to structure a C++ programming project.
  2. Students will learn how to use tools to detect bugs and best practices in the C++ programming language
  3. Students will be able to utilize the standard template library to build projects.
  4. Students will be able to implement data structures from scratch using C++
  5. Students will build small programming projects to learn how to use C++.


  • Undergraduate level CS 1500 Minimum Grade of D- or Undergraduate level CS 2510 Minimum Grade of D- or Undergraduate level DS 2500 Minimum Grade of D-
  • You should have basic knowledge in github, using any text-based editor, and how to compile, run, and debug programs.


There will be no required textbook to purchase for this course. However, these resources have been vetted, and I recommend for mastery (while taking this course, and reviewing later on in your career).

Academic Integrity and Non-Discrimination

Students and instructors are to follow the Northeastern policies on these important issues.

  • Northeastern Non-Discrimination Policy - This classroom is a safe space for the instructor and students to talk about ideas, share viewpoints, and learn.
  • Northeastern Academic Integrity Policy - You only cheat yourself if you are not honest. Most often cheating occurs when an individual falls behind or perhaps has other circumstances occurring in their life. Please consult the instructor before ever considering cheating.
    • If you are caught cheating I have to report the violation. My official policy is you receive a 0 in the course. Always remember, if you use any external sources, you must cite them.
  • Student Code of Conduct: Students and instructors will follow the following guide for how we conduct ourselves. This is to create a respectful environment where everyone can learn.

Make-Up Policy

Students participating in varsity athletics(this does not include club sports or intramurals) or other University sanctioned events may have the need for a make-up. Please contact me in advance of such events, so that appropriate accommodations can be made.

This semester we will be using a "tokens" system such that you can extend an assignment or lab (but not final project) by up to three days total. Simply move the token file to the assignment or lab directory in your github repo and it will be automatically applied. Further directions are in the repository

E-mailing me asking for extensions just because is unfortunately not fair to your classmates, thus in this course, we have the token system which allows you up to extend your assignment by up to 3 days throughout the semester (or otherwise to split 3 tokens for multiple assignments) to complete your work and stay on track. Assignment submissions that are otherwise submitted late without using a token receive a 10% penalty per day.

Occasionally, other life events and circumstances occur that were not planned. If this is the case, please e-mail me privately.


Part of what makes Northeastern University unique, is our diverse cohort of students, faculty, and staff. In order to support this, Northeastern is committed to providing equal access and support to all qualified students through the provision of reasonable accommodations so that each student may fully participate in the University experience.

  • If you have a disability that requires accommodations, please contact the Student Accessibility Services office at DRC@northeastern.edu or (617) 373-2675 to make an appointment with the Disability Resource Center representatives in 20 Dodge Hall to determine appropriate accommodations.
  • We Care is another university resource for helping tackle challenges you may be facing. Asking for help is okay!

Lateness and Attendance Policy

Students who do well in this course tend to show up to the course consistently, participate, start coursework the day it is assigned, and engage with their peers. Come to class, come on time, and build good habits! In-Class activities that are not completed during attendance are a zero.

Wellness Policy

While university can be difficult at times, please do take care of yourself. It is okay to seek help and take a break. Please communicate with your instructor, advisor, and officials at the university if you just need a mental break.

Northeastern Univerity provides resources for student healthcare and general wellness:

I personally remember how difficult university can be juggling myself multiple jobs, multiple clubs, and trying to learn. Do take your wellness seriously!

Assessment/Course Polices

Please find below the grading distribution that will be used for this course to compute a weighted average for your final grade. You will find grades you earn through the semester on Canvas and your final grade in banner.

  • In-Class Activity: (5%)
  • Assignments:       (95%)(Each equally weighted)

  • The grade system follows the University Grading System.
    • A  = 95 – 100
    • A- = 91 – 94.99
    • B+ = 87 – 90.99
    • B  = 83 – 86.99
    • B- = 80 – 82.99
    • C+ = 77 – 79.99
    • C  = 73 – 76.99
    • C- = 70 – 72.99
    • D+ = 67 – 69.99
    • D  = 63 – 66.99
    • D- = 60 – 62.99
    • F  =  0 – 59.99
  • Please do not ask me for an A on the first day of class (It happens enough I have a bullet point here).
  • In the event of a sick/snow day (i.e. we miss a lab or in-class activity) the weight of each assignment increases (There may also be shuffling of course material if we are interrupted).
  • The expectation is that the assignments are fair but difficult, so you should start early!
  • Late Submissions of Assignments can be extended up to 3 days max with your tokens without a penalty--otherwise your assignments lose 10% each day it is turned in late if a token has not been used
    • Unfortunately, with large classes I cannot make individual exceptions (i.e. "special deals") fairly to your classmates who are likely making other personal sacrifices to complete work on time.
    • Come speak to me about your wellness if something is otherwise impeding your progress so we can provide you available resources to succeed.
  • Assignments that do not compile/open receive no credit Simply put, programs that do not compile do not do anything.
  • There are no "re-grades" or points awarded one week after your grade is posted. "re-grades" may result in a higher, equal, or lower score.
    • Re-grades are done cautiously to correct any errors that may occur from the course staff.
    • Re-grades are not for "redoing assignments", you have the opportunity to improve based on the feedback for your next assignment.
    • There are no "re-grades" after the semester is over.
    • Do not ask multiple members of the course staff for "re-grades"
  • If you are currently waitlisted, you must submit your homework on time. That is the gamble! If you do not have Canvas access, you will submit by e-mail or other course mechanism (e.g. github).
  • There are no extra credit assignments just for you. I reserve the right to add points to assignments that do go above and beyond however. I reserve the right to give an extra credit assignment to the entire class, though this is highly unlikely.
  • I reserve the right to modify the grading scale in your favor if you show exemplary proficiency in any of the catagories. I will never modify the scale to lower a students grade.
  • In class work cannot be made up at a later date unless otherwise arranged with the instructor well in advance.
    • Course work completed after the date cannot be graded, as solutions will have been discussed (this includes if taking this course for an Incomplete).
    • Once again, "in-class" work must be completed in-class unless there is a documented emergency or you have prearranged with the instructor a make-up well in advance.
  • Lab time is meant for helping students with the lab, not completing homework. I have to prioritize lab first, then can answer homework questions.
  • No Facebook, no cell phones. Not only does it distract you, it distracts others!
  • Everyone needs to come see me in office hours (or by appointment) at least one time during the semester to introduce yourself. The purpose is so that you:
    • Know where my office is.
    • Get used to coming to office hours.
    • Let me know how I can help you achieve your goals.

Please do not redistribute or host any materials without e-mailing me first. I generally am happy to share the latest .pdf or slide presentation with those who ask. Thank you for your time!