CSE 374: Intermediate Programming Concepts and Tools

Autumn 2021 - In Person!

Course 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 Staff

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 two ways to do this:

  1. Remotely log in to klaatu.cs.washington.edu
  2. Install and use the CSE home VM on your personal machine

Textbooks

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

Online Tools

To facilitate a remote 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/cse374”.

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. Assembly Code
  9. Concurrency

Course Components

  1. Lectures: There will be 30 lectures delivered in person in room CS2 G10. 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.
    1. 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 before the start of the next lecture. These polls will cover a basic topic from lecture or a survey question to help us collect feedback. You will NOT be graded for correctness but simply participation.
  2. 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 the lecture day that concludes the topics covered in the homework but you will have 1.5 to 2 weeks to work on the homework before the due date. You will submit homeworks to GradeScope where they will be automatically graded, you will be able to resubmit as many times as you like (with some time delay to prevent server overload). You may work in groups of up to three on the homework assignments, each need only submit a single shared solution.
    1. Individual HW Assessments: Each group homework assignment will be accompanied by an individual HW assessment to be completed on GradeScope. These assessments will include some exam style questions about the topics covered by the homework project as well as some feedback items about how your team collaboration is going.
  3. Midterm Exam: There will be a written midterm exam on Friday October 29th during lecture. It will be individual work but you will be allowed a single page of notes 8.5”x11” front and back.
  4. Final Exam: There will be a written final exam on Wednesday December 15th from 8:30am to 10:20am. It will be cumulative but primarily focused on topics learned since the midterm. It will be individual work but you will be allowed a single page of notes 8.5”x11” front and back.

Policies

Grading Policies

  • Homework: 65%
    • HWs 1-4 & 6: 10% each
    • HW 5: 15%
  • Individual HW Assessments: 10%
  • Midterm Exam: 10%
  • Final Exam: 15%

Due Dates & Late Policy

  • Homework
    • Submitted via gradescope
    • Homeworks will open after the content needed to complete it has been covered in lecture, but they will be due on a Thursday~1.5 to 2 weeks later depending on the assignment. Assignments will stay open until Sunday evenings to allow for late turn ins.
    • Each student starts the quarter with 3 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.
      • Late days are individual, so if group members submit an assignment late the late days used and penalties applied will be applied to each unique individual.
    • If a student has consumed all their late days there will be a 10% penalty applied for each 24 hour period after the due date an assignment is submitted. This penalty is also applied on an individual basis.
  • Participation
    • Submitted via PollEverywhere
    • Each lecture poll will open at 9:30am PST on their given lecture day and remain open until the start of next lecture.
    • No late participation polls will be accepted.

Collaboration and Academic Misconduct Policy

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.

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. Please 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 Academic Misconduct Policy.

Getting Help

Asking Questions / Getting Assistance, Giving Feedback

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

  1. Visit 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.
  2. Make a post on the discussion board: If you have a question about general content, clarifying instructions or course policies please make a post on the discussion board as your question likely will help someone else. The course staff will be actively monitoring the board, but we also strongly encourage students to answer one anothers questions as well, we’re all in this together!
  3. 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.

Giving Feedback

Send anonymous feedback to the course staff. The instructor will try to address the issue and share it with others only as appropriate, but will not have a way to reply to you without addressing the whole class.

Disability Resources

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.

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

Google Docs Referrence Syllabus

Google Docs Syllabus