EECS 211: Fundamentals of Computer Programming II

Syllabus – Winter 2018

Tech Lecture Room 3, TuTh, 2–3:20 PM

Course staff & office hours

Jesse Tov* jesse@eecs Ford 2-215 Gladly by appointment
Begum Egilmez begumegilmez2019@u Tech L458 Wed 2–4 PM
Michael Hsu michaelhsu2020@u Wilkinson Lab Sun 3–5 PM
Maggie Lou margaretlou2019@u Wilkinson Lab Mon 12–2 PM
Kyu Oh chankyuoh2018@u Wilkinson Lab Mon 2–4 PM
Sanfeng Wang sanfengwang2020@u Wilkinson Lab Mon 4–6 PM
Sameena Khan sameenakhan2018@u Wilkinson Lab Tu 11 AM–1 PM
Chris Chen christopherchen2018@u Wilkinson Lab Tue 7–9 PM
Ellie Tyger elizabethtyger2018@u Wilkinson Lab Wed 11 AM–1 PM
Louisa Lee louisalee2019@u Wilkinson Lab Wed 2–4 PM
Wyatt Cook wyattcook2018@u Wilkinson Lab Thu 12–2 PM
Rohit Rastogi rohitrastogi2019@u Wilkinson Lab Thu 4–6 PM
Stacey Chao staceychao2019@u Wilkinson Lab Thu 4–6 PM
William Wang williamwang2020@u Wilkinson Lab Thu 6–8 PM
Daniel Zhu danielzhu@u Wilkinson Lab Thu 6–8 PM
Hakan Dingenc hakandingenc2020@u Wilkinson Lab Thu 8–10 PM
Jose Trejos josetrejos2019@u Wilkinson Lab Thu 8–10 PM
* Instructor Head TA Peer TA

General information

EECS 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 curriculum to real, industry-standard languages and tools. Our language will be 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.


EECS 111 or proficiency with the HtDP Design Recipe.


We will have two in-class examinations:

There will be no final exam.



Optional textbooks:

Highly recommend optional book:


Soon we will switch to a full-featured IDE, CLion. For now, however, all you need is a terminal emulator and SSH client to login to Tlab.

Online resources

Class schedule

This table specifies the course schedule; topics are tentative.

9 Administrivia [slides]; the edit-compile-run cycle [slides, code] 10 Lab 1: Unix shell [pdf] 11 Types, values, variables, assignment [slides]
16 Control statements and functions [slides, code] 17 Lab 2: Control structures [pdf] 18 Separating I/O from computation [slides, code] Homework 1 [pdf, code]
23 Errors and exceptions [slides, code] 24 Lab 3: CLion [pdf] 25 Headers and testing [slides, code]; references and the stack [slides] Homework 2 [pdf, code]
30 References and the stack [slides, code]; shared pointers and the free store [slides] 31 Lab 4: Shared pointers [pdf]
1 Linked data structures [code, slides] Homework 3 [pdf, code]
6 Invariants and encapsulation [slides, code] 7 Lab 5: Linked lists [pdf] 8 Exam review Homework 4 [pdf, code]
13 First exam 14 Lab 6: Classes [pdf] 15 Classes [slides, code] Homework 5 [pdf, code]
20 Raw pointers and memory management [slides, code] 21 Lab 7: Raw pointers [pdf] 22 Generics [slides, code] Homework 6 [pdf, code]
27 The STL [slides, code] 28 Lab 8: Inheritance [pdf]
1 Virtual functions and inheritance [code] Homework 7 [pdf, code, example]
6 Object-oriented design [slides, code] 7 Lab TBA 8 Undefined behavior [code] Homework 8 [pdf, code]
13 Exam review 14 Lab 9: Templates [pdf] 15 Second exam

Lab sections

Wed 9 AM Tech LG68 Maggie margaretlou2019@u
10 AM Tech M120 Kyu chankyuoh2018@u
12 PM Tech M120 Louisa & Hakan louisalee2019@u & hakandingenc2020@u
1 PM Tech M120 Sameena & Wyatt sameenakhan2018@u & wyattcook2018@u
2 PM Tech L170 William & Jose williamwang2020@u & josetrejos2019@u
3 PM Tech LG72 Chris christopherchen2018@u
4 PM Tech L170 Sanfeng sanfengwang2020@u
4 PM Tech LG72 Daniel danielzhu@u
5 PM Tech LG72 Stacey staceychao2019@u
Thu 9 AM Tech L170 Michael michaelhsu2020@u
10 AM Tech L170 Ellie & Rohit elizabethtyger2018@u & rohitrastogi2019@u

Course policies

Collaboration and academic integrity

You may not collaborate with anyone on any of the exams. You may not use any electronic tools, including phones, tablets, netbooks, laptops, desktop computers, etc. If in doubt, ask a member of the course staff.

Some homework assignments will be completed with an assigned partner or team. You must collaborate with your assigned partner or team, as specified, on homework assignments. You may request help from any staff member on homework. (When you are working with a partner, we strongly recommend that you request help with your partner.) You may use the Piazza bulletin board to ask questions regarding assignments, so long as your questions (and answers) do not reveal information regarding solutions. You may not get any help from anyone else on a homework assignment; all material submitted must be your own. If in doubt, ask a member of the course staff.

Providing illicit help to another student is also cheating, and will be punished the same as receiving illicit help. It is your responsibility to safeguard your own work.

Students who cheat will be reported to the appropriate dean.

If you are unclear on any of these policies, please ask a member of the course staff.


For each homework, we provide a ZIP file containing starter files. You should download this ZIP file to start your homework, as it has a CMakeLists.txt with the correct compiler settings and empty source files with the names that the grading tests will expect.

Submit your homework on GSC, where your username must be your 6- or 7-character Northwestern NetID. Submit only files you have added or changed. This means any .cpp files you edit or create, and CMakeLists.txt if you happen to change that. Do not submit executable files.

Late work

Late work will not be accepted.


Your grade will be based on your performance on seven or eight programming assignments and two midterm exams. There will be no final exam.

Each exam counts for 15% of your grade. The balance is divided among the homework assignments, counted equally. Your least favorable homework score will not be counted.

The mapping of raw point totals to letter grades is at the discretion of the instructor.