CS 211: Fundamentals of Computer Programming II

Syllabus – Winter 2020

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

Course staff & office hours

Instructor: Jesse Tov jesse@eecs Tu/Th 3:30–4:30 PM in Mudd 3510
Grad TA: Mohammad Kavousi kavousi@u
Peer TAs: Ann Pigott AnnPigott2021@u
Brando Socarras BrandoSocarras2022@u
David Jin DavidJin2022@u
Elise Lee EliseLee2021@u
Margot Sobota MargaretSobota2022@u
Max Chapin MaxwellChapin2022@u
Naythen Farr NaythenFarr2022@u
Priya Kini PriyaKini2022@u

General information

CS 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 languages 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

CS 111 or proficiency with the HtDP Design Recipe. No further experience is required or expected.

Assessment

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

There will be no final exam.

Resources

References

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 your shell account.

Books

Optional textbooks:

Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, Second Edition. Prentice Hall, 1988.
The classic C book from the language’s inventors. The language has evolved somewhat in the 30+ years since the second (and most recent) edition was published, but it’s still the clearest introduction I know of.
Bjarne Stroustrup, Programming: Principles and Practice, Second Edition. Addison-Wesley, 2014.
Introductory programming book by the primary designer of C++. It’s a bit quirky, but a reasonably gentle introduction by the genius behind the madness.
Paul Deitel & Harvey Deitel, C++ How to Program, 10th Edition. Pearson, 2017.
Big, heavy, comprehensive textbook—likely overkill unless you like that sort of thing.
Scott Meyers, Effective Modern C++. O’Reilly, 2014.
For after the course, not during. If you want to continue using C++ and use it well, this book will teach you a lot.

Class schedule

This table specifies the course schedule; topics are tentative.

January
TuWTh
7 Administrivia [slides]; the edit–compile–run cycle [slides] 8 Lab 1: Unix shell 9 Typed imperative programming [slides]; separate compilation [slides]
14 Separate compilation, ctd. [slides]; arrays and iteration [slides]; 15 Lab 2: Control Statments 16 Pointers [slides] Homework 1
21 Dynamic memory allocation [slides] 22 Lab 3: Strings 23 Linked data structures [slides] Homework 2
28 Linked data structures (ctd.) [slides] 29 Lab 4: Debugging 30 Linked data structures (ctd.) [slides]; C Wrap Up [slides] Homework 3
February
TuWTh
4 First exam 5 – No labs — 6 C++ for the C Programmer [slides] Homework 4
11 Intro to GE211: The Model [slides, code, listing] 12 Lab 5: Welcome to C++ 13 Intro to GE211: The UI [slides, code, listing]
18 Access control [slides, code, listing] Homework 5 19 Lab 6: Key Racer 20 RAII [slides, code, listing] Starting at 11:59 PM: Rolling submission of final project proposals
25 Dynamic polymorphism [slides, code, listing] Homework 6 26 Lab 7: Bejewelled 27 No class Final project proposal
March
TuWTh
3 Object-Oriented Design [slides, code, listing] 4 Lab 8: Asteroids 5 Object-Oriented Design, ctd. [code, listing]
10 Second exam 11 – No labs — 12 Exam return / STL Final project

Lab sections

W 9 AM Tech L168 Mohini Gupta MohiniGupta2022@u
10 AM Tech L168 Max Chapin MaxwellChapin2022@u
12 PM Tech M166 Mohammad Kavousi kavousi@u
1 PM Tech L168 Elise Lee EliseLee2021@u
3 PM Tech F280 Naythen Farr NaythenFarr2022@u
4 PM Elder 032 Margot Sobota MargaretSobota2022@u
4 PM Locy 314 Ann Pigott AnnPigott2021@u
5 PM Tech LG72 Priya Kini PriyaKini2022@u
Th 9 AM Elder 032 David Jin DavidJin2022@u
10 AM Elder 032 Brando Socarras BrandoSocarras2022@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 Campuswire discussion 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 are subject to the same penalties as those who receive 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

TBA.

Self evaluation

Each 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 Grad TA’s or instructor’s discretion; please email and ask.

Grades

Your grade will be based on these components:

What Value When Count Excused
Programming assignments 50% Thursdays 6 1
In-class midterm exams 30% Tu 2/4 & Tu 3/10 2 0
Final project proposal 5% Fr 2/21 – Th 2/27 1 0
Two-week final project 15% Tu 3/12 1 0
Lab section attendance * weekly 8 2

* Lab section attendance may be used for close calls or to tweak weights in your favor.

The mapping of raw point totals to letter grades is TBD.