Syllabus


Course Description

Includes substantial programming experience in languages that expose machine characteristics and low-level data representation (e.g., C and C++); explicit memory management; interacting with operating-system services; and cache-aware programming.

Prerequisites: CSE 351



Course Materials

CSE Linux Environment

All assignments in this class will be graded on the CSE Linux environment. We strongly recommend that you work on the assignments in this same environment. There are three ways to do this:

  1. Log into a Linux PC located in one of the undergraduate workstation labs
  2. Remotely log in to attu.cs.washington.edu
  3. Install and use the CSE home VM on your personal machine

Textbooks

There are no strictly required texts for this courses. Most people will find it useful to have both a C and a C++ reference; suggestions are given below. We strongly recommend that you have a copy of C++ Primer as C++ is a big, complex language and it is hard to understand how it all fits together from just Google and Stack Overflow snippets and folklore.

Strongly Recommended:

Suggested:



Approximate Topic List

  1. C Programming (< 2 weeks)
    • Review of basic C programming and memory model from 351
    • Pointers, lvalues & rvalues, structs, casts
    • Arrays and strings
    • 2-D arrays with and without pointers
    • Dynamic storage allocation (malloc/free)
    • C preprocessor, multifile programs
    • Core C libraries (I/O, strings, etc.)
    • Idioms for error handling without exceptions
  2. Essential Tools for C/C++ (1 week)
    • Compilers, debuggers, make
    • Advanced tools (memory leak detection, performance profiling, code coverage)
    • Version control, code reviews, unit testing
  3. Memory Management and System Interface (1 week)
    • Idioms for manual memory management; avoiding dangling pointers and memory leaks
    • Memory management implementation
    • Linking and libraries: how a program is assembled
    • Relation between libraries and underlying OS services
  4. C++ Programming (2-3 weeks)
    • Basic C++: "a better C", C with classes
    • Class definitions, constructors, copy constructors, destructors, const, other details
    • Dynamic memory allocation (new/delete), classes with dynamic data
    • Classes and inheritance in C++; overloading, overriding
    • C++ templates and STL
    • Smart pointers
  5. Best Practices (< 1 week)
    • Class design and patterns in C++
    • Systematic program development and debugging
    • Profiling and optimization
  6. Networking (1 week)
    • TCP/IP overview
    • Basics of client-side and server-side programming
  7. Concurrency in C/C++ (< 1 week)
    • Concurrent programming beyond 351
    • Asychronous I/O, networking, and user interfaces
    • Brief reintroduction to threads
  8. Security Issues in C/C++ (< 1 week)
    • Discussed throughout where appropriate, e.g., safe vs unsafe library functions


Course Components

  1. Lectures: There will be 26 lectures. Attendance and participation is expected at all of them.
  2. Exercises: People become great programmers by writing lots of code and learning from the experience. We will be assigning a mandatory programming exercise with most lectures, due before the next lecture. These will be short and reinforce the material from the lecture.
  3. Assignments: This course is designed to give you substantial experience with programming. There will be 4 major programming assignments during the quarter that build on top of each other.
  4. Exams: There will be a midterm and a final – see the Exams page for dates.

Policies


Grading Policies

Your grade in the class will be broken into the following components (adjusted due to the abrupt switch to emergency remote instruction due to the coronavirus epidemic):

  • Exercises: 20% 25%
  • Homework (Projects): 40% 50%
  • Midterm Exam: 15% 20%
  • Final Exam: 20%
  • Effort, Participation, and Altruism: 5%

EPA: Effort, Participation, and Altruism

You can earn "points" for each of the following:

  • Effort: Attending office hours, lectures, and sections. Keeping up with Piazza.
  • Participation: Asking questions in lecture and Piazza, voting on peer instruction questions, interacting with TAs and other students.
  • Altruism: Helping others in lecture, during office hours, and on Piazza.

EPA scores are kept internal to the staff (i.e. not disclosed to students).


Lecture Polling

You will receive credit for voting on multiple choice polling questions in lecture. This is designed to give you a chance to check your understanding of the material by applying it on-the-spot, as well as an opportunity to interact with your classmates. These are intended to be low-pressure and lenient so the grading primarily reflects participation (i.e. your answer does not need to be correct). Earning ~60% of the possible points should get you full credit for peer instruction.

  1. Register your UWNetID on the . More information can be found from .
  1. Optionally, you may download the Poll Everywhere mobile app.
  1. Bring an Internet-enable device with you to lecture. You may wish to bookmark .


Assignment Policies

  • Exercises are submitted to and due at 11 am on the day of the next lecture. Exercises will be graded in an environment equivalent to attu using the following coarse-grained guideline:
    • Exemplary (3.1 pt):  A commendable solution in every way. Compiles with no warnings; runs correctly with no memory leaks; has great style.
    • Great (3 pt):  A great solution that compiles, produces the desired output for all inputs with no memory issues; has good-but-possibly-imperfect style.
    • Good (2 pt):  A solution that compiles, but may not produce the desired output for all inputs; minor correctness problems; minor style or linter errors; missing functionality/requirements.
    • Fair (1 pt):  A solution that compiles, but with major correctness errors or major style errors. This may include memory leaks, disallowed linter messages, poor code organization, non-trivial compilation warnings, or more.
    • Poor (0 pt):  Late; compilation errors; major correctness errors and style errors.
  • Homework are distributed and submitted via . To submit, you must push a tag that ends with -final (e.g. hw2-final). Assignments will be tested and graded on attu so make sure that your code works in the CSE Linux Environment.
  • Exams are graded by the staff and uploaded to along with the rubric. See the Exams page for dates.

Late Policy

For exercises, no late submissions will be accepted.

For homework, you are allocated a total of 4 late day "tokens" for the entirety of the quarter to utilize should the need arise.

  • A late day is defined as the 24 hour period after an assignment's due date: num_late_days = ceil(hours_late / 24).
  • You are not allowed to use more than two late day tokens for any given assignment.
  • An exception is made for weekends, which count as a single late day. That is, if an assignment is due at 11:59 pm on Friday, submitting before Sunday at 11:59 pm counts as only ONE day late (submitting by 11:59 pm on Monday would count as TWO days late).
  • There is no bonus for having leftover late days at the end of the quarter.

If you exceed the late days afforded to you, you will lose 20% of the assignment score for each day an assignment is overdue. Note that all assignment submissions close at most 3 days (2 late days) after the due date.



Academic Conduct

In general, we encourage collaboration, but there is a very fine line between collaboration and cheating. We can learn a lot from working with each other and it can make the course more fun, but we also want to ensure that every student can get the maximum benefit from the material this course has to offer. Keep in mind that the overall goal is for *YOU* to learn the material so you will be prepared for the exams and for job interviews etc. in the future. Cheating turns the assignments into an exercise that is a silly waste of both your time and ours; save us both by not doing it.

Cheating consists of sharing code or solutions to assignments by either copying, retyping, looking at, or supplying a copy of a file. Examples include:

  • Coaching a friend to arrive at a solution by simply following your instructions (i.e. no thinking involved). An example is helping a friend write a program line-by-line.
  • Copying code from a similar course at another university or using solutions/code on the web, including GitHub.
  • Communicating your solution with another student via electronic or non-electronic means.

Cheating is a very serious offense. If you are caught cheating, you can expect a failing grade and initiation of a cheating case in the University system. Cheating is an insult to the instructor and course staff, to the department and major program, and most importantly, to you and your fellow students. If you feel that you are having a problem with the material, or don't have time to finish an assignment, or have any number of other reasons to cheat, then talk with the instructor. Just don't cheat.

If you are in doubt about what might constitute cheating, send the instructor an email describing the situation and we will be happy to clarify it for you. For more information, you may consult the department's .



Disability Resources

The is a unit within the Division of Student Life and is dedicated to ensuring access and inclusion for all students with disabilities on the Seattle campus. They offer a wide range of services for students with disabilities that are individually designed and remove the need to reveal sensitive medical information to the course staff. If you have a medical need for extensions of exam times or assignment deadlines, these will only be granted through official documentation from DRS. Browse to to start the process as soon as possible to avoid delays.



Extenuating Circumstances and Inclusiveness

We recognize that our students come from varied backgrounds and can have widely-varying circumstances. If you have any unforeseen or extenuating circumstance that arise during the course, please do not hesitate to contact the instructor in office hours, via email, or private Piazza post to discuss your situation. The sooner we are made aware, the more easily these situations can be resolved. Extenuating circumstances include work-school balance, familial responsibilities, religious observations, military duties, unexpected travel, or anything else beyond your control that may negatively impact your performance in the class.

Additionally, if at any point you are made to feel uncomfortable, disrespected, or excluded by a staff member or fellow student, please report the incident so that we may address the issue and maintain a supportive and inclusive learning environment. Should you feel uncomfortable bringing up an issue with a staff member directly, you may consider sending or contacting the .