CSE 491

Logo

CSE 491 - Fall 2023 @ MSU

Home

Tentative Schedule

Blog Entries

Projects

Quizzes

Weekly Updates

Additional Resources

Secure and Efficient C++ Software Development

Fall 2023

Instructor Charles Ofria
  ofria@cse.msu.edu
  Phone: 517 884-2562
  Office: 1103 ISTB
TA Austin Ferguson
  fergu358@msu.edu
  Office: 1100 ISTB
Modality In Person, in STEM 2201
Meeting Time M/W 12:40 - 2:30 pm
Office Hours To be announced
Credits 4
Textbook None
Web Site https://msu-cse491.github.io/CSE491/
Project repo https://github.com/MSU-CSE491/cse_491_fall_2023

Required Technology

Students are expected to bring a laptop running a modern operating system (Windows, MacOS or Linux) to each class session. This laptop must be capable of running a modern C++ compiler and have access to the web.

Description

Students will develop large C++ projects and gain expertise with the language. Topics include modern features of C++, effective use of the standard library, and developing custom libraries, with links to other areas of computer science. Emphasis will be placed on writing code that is secure, reliable, efficient, and generic, including good memory management practices, avoiding undefined behavior, automating through testing, and up-to-date documentation.

Pre-requisites

Understanding of C++ basics (as taught in CSE 232 and CSE 335), completion of all 300-level CSE requirements and at least two other 400-level CSE courses.

Teaching Style

This course will be taught using a “flipped classroom” methodology. Students will be expected to watch provided videos (or read assigned web pages) before each class session. Sessions will briefly review these topics, but focus on discussion of concepts and live implementation, debugging, or code reviews, as well as quizzes, small group discussions, and student presentations of their progress. The course schedule will include the required material at least a week before it is due (and likely much sooner than that).

Grading

In this course you will have the opportunity to earn up to 100 points toward your final grade. Grades will be based on:

Project 45 points
Weekly Updates 12 points
Quizzes 24 points (4 quizzes at 6 points each)
Blog Entries 14 points
Participation Questions 5 points
TOTAL 100 points

Each area is important: If you get fewer than half the points in any single category, that is grounds for receiving a zero as a final course grade. You will need 90 of the 100 possible points to guarantee a 4.0, 85 points for 3.5, 80 points for 3.0, 75 points for 2.5, 70 points for 2.0, 65 points for 1.5, and 60 points for 1.0.

Project

You will work in a group on a semester-long project. You may earn up to 45 points this way, based on both consistent progress and the quality of the final product. Your final project grade will be based on three main factors: Functionality (Meeting the project goals), Code Quality (Consistent style, documentation, function modularity, file layout, test coverage, etc.), and your Individual Contributions (Teammate ratings, info in weekly progress reports, and git logs).

Weekly Updates

Each Friday before midnight (starting in week 2) students will be expected to turn in a weekly progress reports. Each report must contain four sections:

Some reports might have extra specific questions that you will be told at least 48 hours ahead of time. Reports are worth 1 point each and will be graded on a pass/fail basis (honest attempts will be given a “pass” as long as problems are corrected in future reports). Overall you will be expected to turn in 14 of these reports, but a maximum of 12 points will count toward your final grade.

Quizzes

There will be five quizzes that you must pass by the end of the semester. The first quiz will be on “C++ Pre-Requisites” and will not be worth points, but must be passed before you can take the other quizzes. The remaining four quizzes will each be worth 6 points toward your final grade. Quizzes will have a high threshold for passing, but will have multiple versions so you will be able to take each quiz at least twice with only the best performance counting.

Blog Entries

You will need to write a blog entry over the course of the semester (worth 8 points) and act as a reviewer on three others (worth 6 points) for a total of 14 points. As a breakdown of these points: For the entry you are writing, points will be allocated to the proposal (1 point), the initial draft (2 point), and the final document (5 points). For the three reviews, you will receive one point for reviewing each draft (3 points total) and another point for reviewing each final entry (another 3 points total).

Participation Questions

During class we will discuss that session’s material in addition to doing live coding, code review, quizzes, etc. In order to understand and be able to contribute to the discussion, you will be expected to watch videos before each class. To ensure that you watch the videos, we will ask you a multiple-choice question about them on at least 8 occasions. These questions should be easy if you watched the video, but impossible to answer confidently otherwise (e.g., “Which of the following example problems was used throughout the video?”). Each correct answer will earn you 1 point to a maximum of 5 points for the semester (so you can get 3 wrong and still get a perfect score).

A note about participation: If you engage in conversation, you provide us with another source of information as to how well you are learning the material, and how much effort you are putting into the course. Let’s have an active class! Class participation will never harm your grade; always ask any questions you may have about the material.

Academic Dishonesty

Unlike most CSE classes, this course will encourage you to discuss any course material with each other and even make extensive use of outside sources including AI systems. The main issues that you need to be careful about are that you provide appropriate credit (i.e., cite your sources and do not claim someone else’s work as your own) and that you take any in-class quizzes or participation questions on your own without getting help from anyone else. While it is okay to use previously written code or AI-generated code (with citations in either case), your project group is responsible for generating the bulk of new code that you use. Furthermore, you are responsible for fully understand all code that you make use of – do not just insert code because it works; make sure you know why it works.

Because a primary goal of this course is to teach professionalism, any academic dishonesty will be grounds for receiving a failing grade for the semester. Specific examples of academic dishonesty include (but are not limited to):

General Note

The goals of this class is for you to (1) learn how to write C++ code that is safe, efficient, and reliable; (2) improve your ability to write about computational topics, and (3) develop strong teamwork capabilities. If anything is coming in your way of these goals, please talk with us about it. We plan to keep the class flexible to the learning styles that seem to work best for the students, so feedback is always appreciated.