EECS 211: Fundamentals of Computer Programming II

Syllabus – Winter 2019

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

Course staff & office hours

Jesse Tov* jesse@eecs Mudd 3510 Gladly by appointment
Kevin Qiu KevinQiu2020@u Tech M338 Su 3–5 PM
Jayden Soni JaydenSoni2020@u Mudd 3538 M 12–2 PM
Michael Cuevas MichaelCuevas2021@u Mudd 3538 M 6–8 PM
Elise Lee EliseLee2021@u Mudd 3538 Tu 10 AM–12 PM
Kieran Bondy KieranBondy2021@u Mudd 3538 Tu 12–2 PM
Jordan Zax JordanZax2021@u Mudd 3538 Tu 12–2 PM
Paul Farcasanu PaulFarcasanu2021@u Tech M338 Tu 6–8 PM
Sarah O’Brien SarahOBrien2020@u Mudd 3538 W 12–2 PM
Alex Rhee AlexanderRhee2021@u Mudd 3538 W 2–4 PM
Samuel Hill SamuelHill2022@u Mudd 3108 W 4–6 PM
Aaron Kaneti AaronKaneti2020@u Mudd 3538 W 6–8 PM
Matt Cheung MattCheung2019@u Tech M338 W 8–10 PM
Michael Ji MichaelJi2021@u Mudd 3538 Th 12–2 PM
Finley Lau FinleyLau2021@u Mudd 3538 Th 6–8 PM
Corinne Burger CorinneBurger2020@u Tech M338 Th 8–10 PM
German Espinosa GermanEspinosa@u Mudd 3538 F 2–4 PM
Mario Lizano MarioLizano2020@u Mudd 3538 F 4–6 PM
* Instructor Head TA Peer TA

Note: Tech M338 is Wilkinson Lab.

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. We begin by learning the basics of imperative programming and manual memory management using the C programming language. Then we 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.

Prerequisites

EECS 111 or proficiency with the HtDP Design Recipe.

Assessment

We will have two 80-minute, in-class exams:

There will be no final exam.

Resources

Books

Optional textbooks:

Highly recommend optional book:

Software

In a few weeks, we will switch to a full-featured IDE (integrated development environment). 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.

January
TuWTh
8 Administrivia [slides]; the edit-compile-run cycle [slides] 9 Lab 1: Unix shell [pdf] 10 Types, values & variables [slides]; separate compilation [slides]
15 Arrays and iteration [slides]; pointers [slides] 16 Lab 2 17 More pointers [slides] Homework 1 [pdf]
22 Dynamic memory allocation [slides] 23 Lab 3: String functions [pdf] 24 Linked data structures [slides] Homework 2 [pdf]
29 C Wrap Up [slides] 30 – Cold — 31 The C++ Object Lifecycle [slides] Homework 3 [pdf]
February
TuWTh
5 First exam 6 – No labs — 7 Intro to GE211: model vs. UI [C++ source: zip or pdf]
12 C++ for the C programmer [slides, source: zip or pdf] 13 Lab 4 [pdf, zip] Homework 4 [pdf] 14 Access control [slides, source: zip or pdf]
19 RAII [slides, zip]; figuring stuff out [slides, zip] 20 Lab 5 [pdf, zip] Homework 5 [pdf, zip] 21 More RAII [slides, zip]
26 Generics [zip] 27 Lab 6 [pdf, zip] 28 Polymorphism [pdf, zip] Due Friday at 11:59 PM Final Project Proposal [pdf, code]; Due Saturday at 11:59 PM Homework 6 [pdf, code]
March
TuWTh
5 More polymorphism [pdf, zip] 6 Lab 7 [pdf, zip] 7 Exam review
12 Second exam 13 No lab! 14 Exam return / STL [pdf, zip] Final Project [pdf, code]

Lab sections

W 9 AM Tech M166 Elise EliseLee2021@u
10 AM Tech LG68 Finley & Michael J. FinleyLau2021@u & MichaelJi2021@u
12 PM Tech M166 Jayden JaydenSoni2020@u
1 PM Tech L168 Corinne & Matt CorinneBurger2020@u & MattCheung2019@u
3 PM Annenberg G31 Jordan JordanZax2021@u
4 PM Tech F280 Kieran & Sarah KieranBondy2021@u & SarahOBrien2020@u
4 PM Tech LG68 Alex AlexanderRhee2021@u
5 PM Tech LG62 Aaron & Mario AaronKaneti2020@u & MarioLizano2020@u
Th 9 AM Tech LG62 Paul PaulFarcasanu2021@u
10 AM Tech M349 Kevin & Michael C. KevinQiu2020@u & MichaelCuevas2021@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.

Homework

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

Code submission

Submit your code via GSC. (Please note that your GSC username must be your 6- or 7-character Northwestern NetID.) Submit only files you have added or changed. This means any .c, .cpp, or .h files you edit or create, necessary game resource files, and Makefile or CMakeLists.txt if you happen to change that.

Do not ever submit executable files or other build products (meaning those in your build or cmake-build-debug directory).

Self evaluation

Every homework assignment will be followed by a 48-hour self evaluation period on GSC. The self evalution will account for a potentially significant portion of your grade–possibly upwards of 50% some weeks. In other words, to get full credit for the code that you submit, you must do self evaluation as well.

Late work

Late code will not be accepted.

Late self evaluations may be accepted at the instructor’s discretion; please email and ask.

Grades

Your grade will be based on your performance on seven weekly programming assignments, one two-week final project, and two midterm exams. There will be no final exam.

Each exam counts for 15% of your grade. The final project counts for 20%. The balance (50%) is divided equally between your best six of the seven weekly homeworks.

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