Schedule/Road Map

The following is our tentative syllabus for the course,

Acquire the Course Monorepo by clicking here Do not do a 'git pull' until class officially starts (Occasionally I make changes/spelling corrections).

Please create your own private  repo on and add myself and the TA as collaborators. Please copy over my monorepo into your own private repo that you created. Please do not fork and submit your changes to the class monorepo.

Please follow this link to piazza. You should have been automatically enrolled.


          Module 1 - Introduction to C and Github   |  A1  and Lab

  • Course Structure
  • C Programming Language
  • Linear Search
  • Binary Search
  • Lab: The Command line, ssh, git, and Setting up Virtual Box
  • Begin the module.

         Module 2 - Data Structures |  A2 and Lab

  • Basic C Programming
  • Arrays and Memory
  • Structs, Pointers, Malloc
  • Lab: Linked Lists
  • Begin Module.

Week 2

           Module 3 - Algorithm Analysis   |   A3 and Lab

  • Analysis of Algorithms
    • Pseudo-code review
  • Math Review
    • Big-Oh Notation
    • Big-Oh of Linked Arrays/Linked List/Stack/Queue.
    • Asymptotic Bounding Sorts
    • Bubble Sort
    • Selection Sort
    • Insertion Sort
  • Lab: Sorting Algorithm Implementation in C
  • Begin Module.

         Module 4 - Other Sorts    |   A4 and Lab

  • Recursion in C
    • Countdown and iteration
  • How to beat N**2?
    • Divide and Conquer
    • Merge Sort and Recurrence
  • Trees
    • Trees
    • Tree Traversal with DFS
  • Lab: Implementing Recursion and DFS
  • Begin Module.

Week 3

         Module 5 - Graph Algorithms    |   A5 and Lab 

  • Tree Review and DFS
  • Trees are Graphs
  • Graph Representation and Notation
    • Adjacency List
    • Matrix
  • Breadth-First Search
  • Topological sort
  • Dijkstra's Shortest Path
  • Lab: Topological sort with adjacency matrix
  • Begin Module.

         Module 6 - More Alg. Strategies  

  • Greedy algorithms
  • Dijkstra's Shortest Path and Analysis
  • Heaps (Keeping balanced)
    • Min/Max Priority/queue
    • Sort
  • Randomized Algorithms - Quicksort
  • Lab: Quicksort with strings
  • Begin Module.

Week 4 - Week 8

        Module 7 - Midterm Exam

  • Exam
  • Study Guide.

       Module 8 - Compiling and Assembly |  Lab7

  • Introduction to Computer Systems
    • Compilers
    • Objdump
    • Compiling with -g
  • Introduction to Machine Representation
    • Assembly and Registers
    • Condition Codes
    • x86-64 Stack
  • Lab: Assembly and Scripting
  • Begin Module!

         Module 9 - Compilers and Linkers  |  Lab8

  • Pre-processor
  • Compilers
    • Front-end
    • Back-end
  • Linkers
  • Lab: Lottery Hack - Interpositioning
  • Begin Module!

         Module 10 - Processes & Memory |  Lab9

  • CPU - Fetch Decode Execute
  • Pipelining
  • Memory Hierachy
  • Locality
  • Caching
  • Processes
  • Lab: Processes and Cache Simulator
  • Begin Module

        Module 11 - Concurrency | Lab10, A6

  • Parallelism vs Concurrency
  • Threads vs Processes
  • Shared Variables
    • Data Race
    • Dead lock
    • Starvation
  • Thread-Safety and Semaphores
  • Lab: Concurrent Artists
  • Begin Module

         Module 12 - Networking with Sockets | Lab11, A7

  • Networking Fundamentals
  • UDP and TCP
  • Sockets Interface
  • Lab: tcp client/server
  • Begin Module



Projects will be interactive programs  developed in C++. They can be a game, finance engines, etc.  For the project, you can use any platform and IDE you prefer (Visual Studio, Xcode, etc.). Code can be written using C++98 or C++11 standards. The project code must be hosted on the CCIS GitHub (at in the account of one of the group members. The project will be worth 2 assignments

Project Requirements

  • Written in C++.
  • Interactive, and take frequent user input that updates the state of the program.
  • Dynamically allocate and free memory.
  • Use classes and inheritance.
  • Be unit tested.
  • Be of reasonable size and complexity.
  • Make use of at least one "advanced" feature that requires an additional API, library, or SDK, as described below.

Advanced Features
The advanced feature will require independently researching, understanding, and using some external API, library, or SDK. Each project must include at least one advanced feature. Example advanced features include 

  • Specialized Keyboard or Mouse Input (OpenInput, ncurses)
  • AI/Algorithms (OpenSteer, Boost Graph Library, libnoise)
  • Audio (OpenAL)
  • 2D or 3D graphics (Simple DirectMedia Layer, OpenGL, DirectX)
  • Physics (Box2D, Open Dynamics Engine)
  • Networking (sockets, libcurl)
  • Embedded scripting (lua)
  • Multithreading/multiprocessing (OpenCL, pthreads, Windows Threads)


Presentation: In-class group presentation of projects last day of classes.

The final project is due Monday Aug 19 at 6am

Useful Links

C++ Language Tutorial,
These tutorials explain the C++ language from its basics up to the newest features of ANSI-C++, including basic concepts such as arrays or classes and advanced concepts such as polymorphism or templates. The tutorial is oriented in a practical way, with working example programs in all sections to start practicing each lesson right away.

You can also download the entire tutorial as a PDF.

Bruce Eckel; Thinking in C++, Volume 1 & Volume 2
(Free Electronic Book)

John Regehr (University of Utah) on "undefined behavior" in C++
A Guide to Undefined Behavior in C and C++, Part 1
A Guide to Undefined Behavior in C and C++, Part 2
A Guide to Undefined Behavior in C and C++, Part 3

Chris Lattner (LLVM group) on "undefined behavior" in C++
What Every C Programmer Should Know About Undefined Behavior #1/3
What Every C Programmer Should Know About Undefined Behavior #2/3
What Every C Programmer Should Know About Undefined Behavior #3/3

I would also recommend my favorite C++ book, Effective C++, Third Edition, 2005, by Scott Meyers

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


There will be no required textbook 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).

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 the grade you earn in this course on blackboard.

  • Exam1 and Exam2:            40%
  • Assignments and Labs:    60% (Each Assignment and labs worth the same % of points)

The grade system follows the University Grading System.

  • A  = 95 – 100
  • A- = 91 – 94
  • B+ = 87 – 90
  • B  = 83 – 86
  • B- = 80 – 82
  • C+ = 77 – 79
  • C  = 73 – 76
  • D+ = 67 – 69
  • D  = 63 – 66
  • F  =  0 – 62

  • In the event of a 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 receive 10% off per day submitted late (up to 3 days max, then 0% received).
    • Unfortunately, with 100+ students I cannot make individual exceptions fairly to your classmates who are likely making other personal sacrifices.
  • 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.
    • 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 wait listed, you must submit your homework on time. That is the gamble! If you do not have blackboard access, you will submit by e-mail or other course mechanism.
  • There are no extra credit assignments. I reserve the right to add points to assignments that do go above and beyond however.
  • I reserve the right to modify the grading scale in your favor if you show exemplary proficiency in any of the categories. 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.
  • No Facebook, no cell phones. Not only does it distract you, it distracts others! (Divide your tuition by lecture hours and perhaps you will be more motivated as well!)


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 or (617) 373-2675 to make an appointment with the Disability Resource Center representatives in 20 Dodge Hall to determine appropriate accommodations.

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.

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

E-mailing me asking for extensions just because is unfortunately not fair to your classmates. The 10% penalty for each day late has to be enforced so I do not get taken advantage of.

Lateness and Attendance Policy

Students who do well in this course tend to show up to the course consistently, participate, and engage with their peers. Come to class, come on time, and build good habits! In-Class activities that are not attended are a zero.