Goals

This course covers key software development concepts and tools not in introductory courses. Concepts of lower-level programming (C/C++) and explicit memory management; techniques and tools for individual and group software development; design, implementation, and testing strategies. Intended for non-majors. Cannot be taken for credit if credit received for CSE 333. Prerequisite: CSE 143.

This is a very practical, skills-oriented course. The goal is to gain exposure to a wide variety of useful concepts and tools. Lecture will introduce concepts, and homework will provide an opportunity to practice. There will be a strong emphasis on independent learning, as it will not be possible to cover each topic comprehensively in class.

Successful course participants will:

  • Gain a basic familiarity with the Linux operating system and toolchain.
  • Develop the skills to automate common computing tasks such as file manipulation and string processing
  • Internalize C-level programming and obtain beginning proficiency in C programming
  • Learn the basics of programming tools such as debuggers, profilers, compilation managers, and version control
  • Learn core software-engineering practices regarding specification and testing
  • Understand the basic issues and pitfalls of shared-memory concurrency
  • Learn how to acquire additional information and skills independently

Course Materials

CSE Linux Environment

All assignments in this class will be graded on the CSE Linux environment. You need to remotely log in to calgary.cs.washington.edu.

Note

In previous quarters, there was another option of using the CSE home VM on your personal machine. However, due to some hardware updates, we can no longer use VM for this class.

Additionally, we previously would recommend using seaside.cs.washington.edu along with sshfs, but we now recommend exclusively using calgary.

Textbooks

There are no required texts for this course. The following are some free reference materials you may find helpful:

Online Tools

To facilitate our learning experience, we will be leveraging a rather frustratingly large number of different educational platforms:

Look here for a centralized source of all course materials. Here we will post lecture slides, assignment prompts, announcements and reference materials.

Look here for grades, and lecture panopto recordings.

We will use Poll Everywhere during lecture for various surveys, activities and question/answer support. You can access the poll with the link “PollEv.com/cs374”.

This is where you will submit all assignments. Gradescope will also be responsible for auto grading your submissions and providing feedback so you will be able to know exactly how many points your submission will earn.

We will use Ed for course online discussions. Go here to post questions about assignments and course materials. Also feel free to use the board to discuss opportunities, form study groups and connect with classmates. Course staff will be proactively monitoring the board for questions, but you are encouraged to answer questions for one another. Teamwork makes the dreamwork!

Course Content

Course Topics

  1. The Linux Operating System
  2. Working with the Linux Shell
  3. Scripting with Bash
  4. C Programming Language
  5. Computer Memory
  6. Software Engineering Tools and Techniques
  7. C++ Programming Language
  8. Concurrency

Course Components

  1. Lectures: Lectures will be delivered in-person in room CSE2 G01. Recordings will be automatically posted to Canvas afterwards (allow for ~1hr processing time). During lecture you will be asked to respond to short polls, occasional review questions and occasional activities.

    • Lecture Participation Polls: Each lecture will have an accompanying poll hosted via PollEverywhere. The polls will open at the start of each lecture and close after an hour. These polls will cover a basic topic from lecture or a survey question to help us collect feedback. You will NOT be graded, but participation is strongly encouraged.
  2. Exercises: People become great programmers by practicing a lot and learning from the experience. We will be assigning a mandatory exercise after most lectures at 10:20am, due before the next lecture at 9:29am. These will be short and reinforce the material from the lecture.

  3. Homeworks: This course is designed to give you substantial experience with programming. There will be several major programming assignments that synthesize the material from different lectures. These will be released on Sunday night at 11:59pm, and due the following Sunday at 11:59pm. You will have 1 week to work on the homework before the due date.

Grade Breakdown

Your percentage grade in this course will be weighted using these categories:

Category Weight
Exercises 30%
Homeworks 70%
Total 100%

A very common question students ask is: “Is this class curved?” Curving is the process of assigning course grades so that there is a fixed, pre-determined mean or median. We do not curve in this course!

Instead, we will assign course grades using a bucket system: if you earn at least the percentage specified in the left column, your course grade will be at least the grade listed on the right. These are minimum guarantees: your course grade could be higher than what this table suggests. Do note, we do not make any guarantees of the course grades within these buckets.

Percent Earned Course Grade
90 3.4
85 3.0
75 2.5
65 2.0
50 0.7

If you have a specific goal in your course grade, please feel free to reach out to the course staff or directly to the instructor and we can work together to talk about what you can expect in terms of meeting that goal.

Exercises

Exercises focus on mechanical, theory, and basic application problems to reinforce content from lecture, and are explicitly designed to provide practice for the programming homeworks. Exercises are distributed via Gradescope. Exercises are to be completed individually, although you may discuss concepts and problems at a high-level as outlined in our Collaboration policy. No late exercises will be accepted.

Homeworks

Each homework contains an auto-graded programming portion and a manually-graded component. Homeworks are distributed via Gradescope. Homeworks are to be completed individually, although you may discuss concepts and problems at a high-level as outlined in our Collaboration policy.

Exams

There will be no exams this quarter.

Policies

Lateness on Homeworks

Caution

There is no late acceptance on participation polls or exercises.

Each student receives 10 late days, each of which acts as a late penalty exemption for a 24 hour period. You do not need to ask permission to use late days or notify course staff when you do want to use them, we will automatically apply late days to your first late submissions until you run out. You receive no credit for unused late days.

No assignment may be submitted more than 3 days (72 hours) late without permission from the course instructor. In other words, this means there is a practical upper limit of 3 late days usable per assignment. If unusual circumstances truly beyond your control prevent you from submitting an assignment, you should discuss this with the course staff as soon as possible. If you contact us well in advance of the deadline, we may be able to show more flexibility in some cases.

  • If a homework is due on Sunday at 11:59pm, you could use 2 late days to submit on Tuesday by 11:59pm with no penalty.
  • If a homework is due on Friday at 11:59pm, you could use 3 late days to submit on Monday by 11:59pm with no penalty.

Once a student has used up all their late days, each successive day that an assignment is late will result in a loss of 10% on that assignment. The deduction will not be immediately applied on Gradescope, but will be reflected in the final grades you see on Canvas.

Note on Extenuating Circumstances: If you have extenuating circumstances for an assignment, please contact the instructor as soon as possible to discuss accommodations. See the section below on Extenuating Circumstances.

Collaboration

Learning anything can be challenging! We encourage you to discuss course activities with your friends and classmates as you are working on them. Ask questions, answer questions, and share ideas liberally; we want a class that is open, welcoming, and collaborative, where we can help each other build the highest possible understanding of the course material. However, to encourage everyone to learn the material, we impose restrictions on the information you may share with your classmates (see below).

Whenever you receive help from a third-party source, please cite any help that you receive as a method comment in code or as a footnote in writeups. There is no penalty for working with too many classmates. When in doubt, you should always err on the side of giving credit.

Ultimately, the goal of enrolling in this course is for you to learn this material, so that you will be prepared for exams, for research, for job interviews, etc. Engaging in academic misconduct does not help you towards that goal. 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. If you are in doubt about what might constitute cheating, send the course staff an email describing the situation and we will be happy to clarify it for you.

Collaboration on Exercises

You can talk about problems, the process, and your ideas, but you should never show or describe to another person your writeup or final answer. It is cheating if someone else has done the work to get an answer and you see that answer without work. It is awesome if both of you work together to arrive at a common answer.

This is important, so allow us to restate it: please cite your collaborators. There is no penalty for doing so.

Tip

After discussing a problem on an exercise, take a break before you go and solve the problem yourself! Go watch an episode of TV or listen to a song to give you some time to process the topics you discussed. This will assure that you are able to reconstruct what you learned from the meeting, by yourself, using your own brain.

Collaboration on Homeworks

All homeworks are individual works. For working with other students (such as a study group), you must observe these additional guidelines:

  • You should never directly show another student your code.
  • Instead, you are welcome to describe what is happening either verbally or in text.
  • It is okay to share small snippets of code, but this should be only a couple lines at most, never entire methods.
  • You should not be working on assignments in close collaboration (“in lockstep”).
  • Your work should not substantially resemble anyone else’s!
  • As a guiding principle, collaborate on specific issues or questions as opposed to the entirety of an assignment.
  • You should never distribute solutions at any time, even after the course is over.
  • “Distribution” includes uploading them to public websites (e.g. a GitHub repo), group repositories (e.g. your club’s/frat’s/sorority’s “answer bank”), or private chats (e.g. a group chat with a few friends).

We may run MOSS (Measure of Software Similarity) on student submissions to detect over-collaboration. DON’T CHEAT!

Course Tools

This quarter, we will use a number of different tools in CSE 374. Reach out to the course staff if you have questions about using any of them. Please see the Course Tools page for more information about the particular tools we will use this quarter and our policies surrounding them.

Getting Help from Staff & Peers

It is very important to us that you succeed in CSE 374! Outside of lectures, there are different ways to ask questions or discuss course issues:

Discussion Board

Ed serves as online discussion forums. For most questions about the course or materials, they are the right place to ask: the course staff read them regularly, so you will get a quick answer. On Ed, you can also submit questions anonymously or privately to the course if you are more comfortable doing so. We also strongly encourage students to answer one anothers questions as well, we’re all in this together!

Office Hours

Each member of the course staff will have weekly drop in office hours where you can ask questions about lecture content and any assignments. This is a great way to get help debugging, setting up your environment or addressing specific assignment questions.

In addition, if you need extra time, need to discuss something in private or the set office hour times do not work for you, feel free to email and make an appointment. You may reach out to any of our course staff individually or you can use the cse374-staff@cs.washington.edu mailing list and whomever is available will set up time to work with you.

More information about this can be found on the office hours page of this website.

Email

If you have a question about the course policies, need help with a specific personal situation or have other more individual or private inquiries you are welcome to email members of the staff. You can email anyone directly, but for the best response time we encourage you to use the cse374-staff@cs.washington.edu mailing list.

Course Climate

This course welcomes all students of all backgrounds. The computer science and computer engineering industries have significant lack of diversity. This is due to a lack of sufficient past efforts by the field toward even greater diversity, equity, and inclusion. The Allen School seeks to create a more diverse, inclusive, and equitable environment for our community and our field. You should expect and demand to be treated by your classmates and the course staff with respect. If any incident occurs that challenges this commitment to a supportive, diverse, inclusive, and equitable environment, please let Alex know so the issue can be addressed.

Extenuating Circumstances: “Don’t Suffer in Silence”

We recognize that our students come from varied backgrounds and can have widely-varying circumstances. If you have any unforeseen circumstances that arise during the course, please do not hesitate to contact the course staff or the instructor to discuss your situation. The sooner we are made aware, the more easily we can provide accommodations.

Typically, extenuating circumstances include work-school balance, familial responsibilities, health concerns, or anything else beyond your control that may negatively impact your performance in the class. Additionally, while some amount of “productive struggle” is healthy for learning, you should ask the course staff for help if you have been stuck on an issue for a very long time.

Life happens! While our focus is providing an excellent educational environment, our course does not exist in a vacuum. Our ultimate goal as a course staff is to provide you with the ability to be successful, and we encourage you to work with us to make that happen.

Disabilities

The Disability Resources for Students (DRS) 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 this link to start the process as soon as possible to avoid delays.

Religious Accommodations

Washington state law requires that UW develop a policy for accommodation of student absences or significant hardship due to reasons of faith or conscience, or for organized religious activities. The UW’s policy, including more information about how to request an accommodation, is available at Religious Accommodations Policy. Accommodations must be requested within the first two weeks of this course using the Religious Accommodations Request form.

Inclusion

Our code and our homeworks are made better by considering a variety of viewpoints. Your course staff is committed to the values outlined in the Allen School’s inclusiveness statement, and you are expected to uphold a supportive and inclusive learning environment.

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 submitting anonymous feedback or contacting the Office of the Ombud.