Engineering.wustl.edu

E81 CSE 428S: Multi-Paradigm Programming in C++

Fall 2023


Instructors Chris Gill (office hours by appointment)
Oren Bell (office hours by appointment)
Teaching Assistant Jonathan Lin (office hours Tuesdays 4-6pm in Urbauer 215, Fridays noon-2:30pm in Urbauer 215, and Saturdays noon-3pm in Urbauer 218, or by appointment)
Course Web Site https://www.cse.wustl.edu/~cdgill/courses/cse428/
Piazza Page https://piazza.com/wustl/fall2023/fl2023e81cse428s01/home
Course Meetings Tuesdays and Thursdays 1-2:20pm in Urbauer 222.
First Exam
Tue Oct 17th, 1-2:20pm in Green Hall L0120 (Rodin Auditorium)
Second Exam
Thu Nov 30, 1-2:20pm in Green Hall L0120 (Rodin Auditorium)
Prerequisites CSE 332S (a.k.a. CSE 504N) or graduate standing and basic C++ proficiency is a firm prerequisite for this course.

Contents

  1. Course Description
  2. Prerequisites
  3. Discussions/Studios
  4. Labs
  5. Textbook and Other Resources
  6. Grading
  7. Academic Support
  8. Title IX, Diversity, and Inclusion
  9. Academic Integrity


Course Description

This course will provide an intensive focus on how modern C++ language features support procedural, functional, generic, and object-oriented programming paradigms and allow those paradigms to be applied both separately and in combination. Topics covered will include various C++ language features and semantics, especially from the C++11 standard onward, with studio exercises and lab assignments designed to build proficiency in using them effectively within and across the different programming paradigms.


Prerequisites

Please note that all students enrolling in the course will be wait listed initially, and those who have the necessary prerequisites will be moved off the wait list and into the course as expeditiously as we can (up to the number of spots the course meeting space will accommodate).


Discussions/Studios

In addition to class meeting dates and topics, assigned material in the textbook is also listed below. Please be sure to read the assigned material prior to the session that covers it, and reading ahead is encouraged as well.

Date Topic and Studio Assigned Readings
Tue Aug 29
Lab 0
(assigned Tue Aug 29, due 11:59pm Mon Sep 11)
Course Introduction (slides in pptx)
Academic Integrity (slides in pptx)
Studio 0
LLM Chapters 1 and 2
Thu Aug 31 Function and Class Templates
(slides in pptx)
Studio 1
LLM Chapter 16.1
Tue Sep 5 State and Operations on it
(slides in pptx)
Studio 2
LLM Chapters 3, 4, and 19.3
Thu Sep 7 Control Flow and Debugging
(slides in pptx)
Studio 3
LLM Chapters 5 and 18.1
Tue Sep 12
Lab 1
(assigned Tue Sep 12, due 11:59pm Mon Oct 2)
Functions and Operators
(slides in pptx)
Studio 4
LLM Chapters 6.1-6.6 and 14.1-14.7
Thu Sep 14 Functional Programming
(slides in pptx)
Studio 5
LLM Chapters 6.7, 10.3 and 14.8
Tue Sep 19 Classes
(slides in pptx)
Studio 6
LLM Chapter 7
Thu Sep 21 Namespaces and Nested Classes
(slides in pptx)
Studio 7
LLM Chapters 18.2 and 19.5
Tue Sep 26 Object-Oriented Programming
(slides in pptx)
Studio 8
LLM Chapter 15
Thu Sep 28 Pointer to Class Member
(slides in pptx)
Studio 9
LLM Chapter 19.4
Tue Oct 3
Lecturer: Oren Bell

Lab 2
(assigned Tue Oct 3, due 11:59pm Mon Oct 30)
Dynamic Memory Management
(slides in pptx)
Studio 10
LLM Chapters 12 and 19.1
Thu Oct 5
Lecturer: Oren Bell
Copy and Move Semantics
(slides in pptx)
Studio 11
LLM Chapter 13
Tue Oct 10
Fall Break
Thu Oct 12
Review for Exam 0
(slides in pptx)

All studios so far are due by 11:59pm on Mon Oct 16
Tue Oct 17
Exam 0
1-2:20pm in Room L0120 (Rodin Auditorium) in the lower level of Green Hall
open book, open notes (hard copy only, no electronics)
Thu Oct 19
Guest lecturer: Marion Sudvarg
Standard IO Library
(slides in pptx)
Open Lab Time
LLM Chapters 8 and 17.5
Tue Oct 24 Types and Generic Programming
(slides in pptx)
Studio 12
LLM Chapters 2.5, 19.2 and pp. 651-652
Thu Oct 26 Template Argument Deduction
(slides in pptx)
Studio 13
LLM Chapter 16.2
Tue Oct 31 Overloading and Templates
(slides in pptx)
Studio 14
LLM Chapter 16.3
Thu Nov 2
Lab 3
(assigned Thu Nov 2, due 11:59pm Sun Dec 10)
Parameter Packs and Variadic Templates
(slides in pptx)
Studio 15
LLM Chapter 16.4
Tue Nov 7 Template Specializations
(slides in pptx)
Studio 16
LLM Chapter 16.5
Thu Nov 9
Lecturer: Oren Bell
Sequential Containers
(slides in pptx)
Studio 17
LLM Chapter 9
Tue Nov 14 Generic Algorithms
(slides in pptx)
Studio 18
LLM Chapter 10
Thu Nov 16 Associative Containers
(slides in pptx)
Studio 19
LLM Chapter 11
Tue Nov 21 Standard Generic Algorithms
(slides in pptx)
Open Studio/Lab Time
LLM Appendix A.2
Thu Nov 23
Thanksgiving Break
Tue Nov 28
Review for Exam 1
(slides in pptx)

All studios since the first exam (Exam 0) are due by 11:59pm on Wed Nov 29
Thu Nov 30
Exam 1
1-2:20pm in Room L0120 (Rodin Auditorium) in the lower level of Green Hall
open book, open notes (hard copy only, no electronics)
Tue Dec 5
Open Lab Time
Thu Dec 7
Open Lab Time


Labs

There will be four lab assignments in this course. The labs will increase in difficulty and value throughout the semester. Labs may be completed in teams of 2 or 3 people, though you also may complete and submit any of them individually if you prefer - in any case please make sure to note the names and e-mail addresses of everyone who worked on the lab in the writeup, when you submit it.

Labs are to be submitted electronically in Canvas, and will be graded and returned to you electronically as well. Each lab submission requires a separate file containing a lab report writeup. Each assigment web page will describe the procedure for submitting the lab, along with the report format and content requirements. Use of this process is required.

Labs received within 24 hours after the posted deadline will be accepted with a 10% penalty up front, and labs submitted between 24 and 48 hours after the posted deadline will be accepted with a 20% penalty up front. Labs submitted after that will not be graded, except in the case of documented extenuating circumstances.

Extensions may be granted in advance on a case-by-case basis as long as the circumstances warrant an extension and the request is made sufficiently ahead of the deadline. Extensions will not be granted after the deadline except in special cases (such as documented medical emergencies).

You may discuss general questions related your studios and labs with other students during scheduled class times and on the Piazza forum. While you are encouraged to post questions and ask for help on particular problems you may encounter, your team must design and implement your own solutions, and prepare your own reports. In particular, while posting small code fragments related to specific questions is allowed and encouraged, direct sharing, viewing, or other "reuse" of complete code files between teams (especially if done covertly) is strictly forbidden. If you're not sure whether or not sharing a given section of code is ok, please ask your professor's permission before doing so.


Textbook and Other Resources

Assigned readings in the following required textbook are shown for each of the class meetings.

Please review the CSE 428 Programming Guidelines, and follow them as you develop your solution to each lab assignment this semester (and practice using them in your studios as well).

Especially if you're new to the Linux command line environment, the Ubuntu tutorial on it may be helpful.

The GNU Emacs site (including its guided tour) may be helpful to learn more about Emacs.

The on-line C++ Reference may be helpful as well.


Grading

As a rough guideline, 90-100 will be the A range, 80-89 the B range, and so on, though depending on the complete distribution the specific grade division points (and addition of + or - qualifiers to the grades near the boundaries) may vary a bit.

Lab assignments will be graded for code quality (including use of comments and style) as well as for the features you implement. The in-semester exams will not be comprehensive except to the extent that any material for the second exam depends on material for the first exam. The best way to study for the exams is to keep up with the studio exercises and lab assignments during the semester, and to ask lots of questions in the classroom, studios, and on the Piazza page throughout the semester.

The studio exercises will be graded for completion (including posting answers to all required exercises) though comments and feedback may be provided to correct misunderstandings, etc. Please make sure to check that each studio you submit is marked in Canvas as being complete, or if it marked incomplete that you read the comments and resubmit (including completing the missing exercises) before the respective studio submission deadline.

Labs 50 %
   Lab 0:  5 %
   Lab 1:  10 %
   Lab 2:  15 %
   Lab 3:  20 %
Exam 0 15 %
Exam 1 15 %
Studios   20 %


Academic Support, Health and Wellness, and Disabilities

Especially with the challenges many students may face in an on-line learning environment, we encourage everyone to take a look at, and potentially make use of, the many academic support resources available at Washington University in St. Louis, including: The Learning Center, and The Writing Center, and Student Technology Services.

Washington University recognizes that students serving in the U.S. Armed Forces and their family members may encounter situations where military service forces them to withdraw from a course of study, sometimes with little notice. Students may contact the Office of Military and Veteran Services at (314) 935-2609 or veterans@wustl.edu and their academic dean for guidance and assistance.

The Habif Health and Wellness Center, WashU Cares, Center for Counseling and Psychological Services, and RSVP are important university resources for issues pertaining to physical and mental health.

Students with disabilities or suspected disabilities are strongly encouraged both to bring any additional considerations to the attention of the instructor and to make full use of Washington University's Disability Resources, potentially including accommodations for studios, labs, and/or exams.


Title IX, Diversity, and Inclusion

Washington University is firmly committed to addressing and preventing sexual misconduct on our campuses: please see the Washington University statement on new Title IX rules. If a student discusses or discloses an instance of sexual assault, sex discrimination, sexual harassment, dating violence, domestic violence or stalking, or if a faculty member otherwise observes or becomes aware of such an allegation, the faculty member will keep the information as private as possible, but as a faculty member of Washington University, they are required to report it immediately to their Department Chair or Dean or directly to Ms. Jessica Kennedy, the University's Title IX Director, at (314) 935-3118 or jwkennedy@wustl.edu. Additionally, incidents or complaints can be reported to the Office of Student Conduct and Community Standards or by contacting WUPD at (314) 935-5555 or contacting your local law enforcement agency. To explore options for medical care, protections, or reporting, free and confidential support resources and professional counseling services are available through the Relationship and Sexual Violence Prevention (RSVP) Center in Seigle Hall, Suite 435, which can be reached at rsvpcenter@wustl.edu or at (314) 935-3445. For after-hours emergency response services, call 314-935-6666 or 314-935-5555 and ask to speak with an RSVP Counselor on call.

Washington University's Center for Diversity and Inclusion supports and advocates for undergraduate, graduate, and professional school students from underrepresented and/or marginalized populations, collaborates with campus and community partners, and promotes dialogue and social change to cultivate and foster a supportive campus climate for students of all backgrounds, cultures, and identities. The University has a process through which students, faculty, staff, and community members who have experienced or witnessed incidents of bias, prejudice, or discrimination against a student can report their experiences to the University's Bias Report and Support System team. For procedures and information on reporting an instance of bias, please visit the Bias Report and Support System page on the Center for Diversity and Inclusion web site. In order to affirm each person's gender identity and lived experiences, it is important that we each ask and check in with others about pronouns. This simple effort can make a profound difference in a person's experience of safety, respect, and support. Please see the Office of the Registrar's Preferred Name page for additional information and resources.


Academic Integrity

Each studio and lab assigned in this course is expected to be completed in teams of up to three people (and not more than that) – we want to encourage collaborative work though you are also allowed to work by yourself if you prefer. During the regularly scheduled class times that the instructors are attending (and only during those times), all students are allowed to share their screens to show code for purposes of getting help with debugging, illustrating solution approaches that are being discussed, etc., and communication about a particular studio or lab within your team of (3 or fewer) people who are working together on it is allowed at any time. Communication between different teams is not allowed outside of the scheduled class times that the instructors are attending unless the instructors give permission in advance. Student teams may change from assignment to assignment, but the sharing of code between teams without prior permission of the instructors is strictly prohibited, and you must acknowledge and document in detail all contributions that anyone has made to the work.

To encourage you to read the C++ Reference pages and the LLM text book carefully, you are allowed to use snippets of code from those sources in your studios, labs, and exams without asking permission, as long as (in comments before and after it) you clearly identify the start and end of each such code snippet and attribute the source from which it came (including page and/or line numbers where those are available). For code from any other sources you must first ask for and receive permission from your instructors (and should identify and attribute it similarly if so).

Exams must be completed individually without assistance from any other person, and without reference to external materials except as is specifically allowed by the instructor (documentation of what is allowed will be described in the review lecture, provided in the corresponding review slides, and written on the font page of the exam).

Cheating costs everyone something. Someone who cheats misses out on the intended opportunity to improve through the assigned work, and like anyone helping them cheat is at risk of diminished reputation as well as specific sanctions (see below). Cheating also degrades the value of the degree earned by those who complete their work with integrity.

Academic integrity is a serious matter in this course, and the instructor will decide whether any situation of concern in this course warrants referral to the appropriate formal academic integrity adjudication process at the school or university level. If in any doubt, please ask first. Anyone found to have cheated or to have helped someone else cheat will face penalties that may include receiving a negative score equal in magnitude to the value of the assignment in question (e.g., cheating on an assignment worth 10% of the course grade would result in -10% being assigned for a total loss of 20% from the course grade, which is twice as large a loss as simply not turning in the assignment).

Academic integrity is itself worth studying and thinking about as a key component of your education. Please read, familiarize yourself with, and reflect on the Engineering School's and Washington University's undergraduate and graduate policies on academic integrity.