Course staff & office hours
|Jesse Tov*||Ford 2-215||Gladly by appointment|
|Begum Egilmez†||Tech L458||Wed 2–4 PM|
|Michael Hsu¶||Wilkinson Lab||Sun 3–5 PM|
|Maggie Lou¶||Wilkinson Lab||Mon 12–2 PM|
|Kyu Oh¶||Wilkinson Lab||Mon 2–4 PM|
|Sanfeng Wang¶||Wilkinson Lab||Mon 4–6 PM|
|Sameena Khan¶||Wilkinson Lab||Tu 11 AM–1 PM|
|Chris Chen¶||Wilkinson Lab||Tue 7–9 PM|
|Ellie Tyger¶||Wilkinson Lab||Wed 11 AM–1 PM|
|Louisa Lee¶||Wilkinson Lab||Wed 2–4 PM|
|Wyatt Cook¶||Wilkinson Lab||Thu 12–2 PM|
|Rohit Rastogi¶||Wilkinson Lab||Thu 4–6 PM|
|Stacey Chao¶||Wilkinson Lab||Thu 4–6 PM|
|William Wang¶||Wilkinson Lab||Thu 6–8 PM|
|Daniel Zhu¶||Wilkinson Lab||Thu 6–8 PM|
|Hakan Dingenc¶||Wilkinson Lab||Thu 8–10 PM|
|Jose Trejos¶||Wilkinson Lab||Thu 8–10 PM|
|* Instructor||† Head TA||¶ Peer TA|
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:
- Tuesday, February 13
- Thursday, March 15
There will be no final exam.
- Bjarne Stroustrup, Programming: Principles and Practice, Second Edition.
- Paul Deitel & Harvey Deitel, C++ How to Program, 9th Edition.
Highly recommend optional book:
- Scott Meyers, Effective Modern C++.
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.
- Mac: Your computer comes with Terminal.app and OpenSSH, so you have everything you need. (Your instructor uses iTerm2 instead of Terminal.app.)
- Windows: PuTTY is a free program that does both terminal emulation and SSH. The easiest way to install it is the MSI installer.
- EECS 211 C++ Style Manual—follow this!
- Piazza discussion board—ask questions here!
- cppreference.com, a comprehensive reference to the C++ standard(s)
- cplusplus.com, a another comprehensive C++ reference
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|
|Wed||9 AM||Tech LG68||Maggie|
|10 AM||Tech M120||Kyu|
|12 PM||Tech M120||Louisa & Hakan|
|1 PM||Tech M120||Sameena & Wyatt|
|2 PM||Tech L170||William & Jose|
|3 PM||Tech LG72||Chris|
|4 PM||Tech L170||Sanfeng|
|4 PM||Tech LG72||Daniel|
|5 PM||Tech LG72||Stacey|
|Thu||9 AM||Tech L170||Michael|
|10 AM||Tech L170||Ellie & Rohit|
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 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.