Syllabus

Fall Semester, 2024

General Information

Course Description

Introduction to Programming II: Learn how to use the C++ language effectively, to write readable, and efficient programs. Learn how to use the abstractions in the language, as well as writing your own abstractions. Learn about the static type system, and the C++ compilation model. Learn how to use simple data structures, and write some of your own.

Objectives

The focus of the course will be twofold:

Course Materials

Lectures

All lectures are distributed via pre-recorded videos available each week on the course website. You are welcome to work ahead of the schedule, however, some videos will be updated as the semester progresses. Watching the videos closely (I recommend taking notes) is essential to being able to complete the labs, homework assignments, and exams in this course. Each week’s lectures will have assigned readings from the required textbook.

Laboratory Sessions

Lab section will be conducted in STEM 2201. Performing the work assigned in your laboratory section is mandatory.

The lab sessions are designed to be learning tools that complement the lectures, as well as collaborative experiences where students work with each other and the Teaching Assistants to complete the exercise. Students who are late to lab might not receive credit for that session. Attendance is based on a good faith effort, i.e., the TAs will decide if you have put in a sincere effort to participate actively, collaborate with others, and attempt to complete the exercise. Each lab tends to cover content up to and including the week prior.

Communication

In-person communication can be done at help room. For all other circumstances, communication with the instructors should be done through Piazza (with a public or private post). Emails will not be responded to.

All class announcements will be made through Piazza, as well as direct messages from the instructors. The instructor reserves the right to modify course policies, scheduling, and assignment specifications as necessary for unanticipated events.

Grading

A total of 1000 points can be accrued over the course of the semester.

Points GPA
900-1000 4.0
850-899 3.5
800-849 3.0
750-799 2.5
700-749 2.0
650-699 1.5
600-649 1.0
0-599 0.0

Exams

There will be a three synchronous multiple choice exams, MCQ Exam 1-3. Additionally, there will be three coding exams, Coding Exam 1-3, which will take place in your assigned lab. The lower score of the first two exams from each set will be dropped. Each exam is worth 200 points. Thus, there are 800 points in total given by exams.

October Edit: There is a additional exam, “MCQ Exam 1 Makeup”. The lower two of that exam, “MCQ Exam 1”, and “MCQ Exam 2” will be dropped.

The required textbook will be required for each exam as the exam will refer to sections of the book. Please ensure you possess a non-electronic version of the textbook prior to the first exam.

Labs

There are 11 in-person labs throughout the semester, each lab is worth 8 points.

Homework

A homework assignment will be due most Thursdays at 11:59 PM. Each of the 14 homework assignments are worth 8 points. Homework assignments will cover content from the week they are due as well as material covered earlier in the course. At the due date, solutions will be released to aid students that have yet to complete the assignment. Homework assignments will be accepted up to two days after the original due date with a 25% late penalty per day.

Bonus Project

The previous grading categories (exams, labs, and homework) sum to 1000 points. However, there will be one source of “extra credit” points in the form of a bonus final project worth 20 points. This project will be due during finals week.

Honors Section

To earn honors credit for this course, you need to be enrolled in an honors lab section. The honors lab sections and non-honors lab sections have the labs will cover different material. Instead of practicing on programming assignments covering recently taught material, they will teach new, advanced programming techniques in C++.

Additionally, students enrolled in an honors lab section must earn at least 70 points on honors labs to receive a passing grade. The coding exams for the honors lab sections may have content specific to material covered in the honors lab sections. Students enrolled in an honors section can only earn lab points by attending honors labs.

We encourage honors lab sections students to also complete the non-honors lab assignments for practice, but it isn’t required, nor worth points.

Extensions

Make-ups for examinations may be arranged if your absence is caused by a documented illness or personal emergency. A written explanation (including supporting documentation) must be submitted to your lecture instructor via Piazza; if the explanation is acceptable, an alternative to the examination will be arranged. When possible, make-up arrangements should be completed in advance.

A student who is unable to complete an assignment by the specified due date because of illness or a personal emergency should contact their lecture instructor. If the student’s explanation is acceptable, the assignment due date will be extended (or their lecture instructor will make other appropriate arrangements).

Academic Honesty

Spartan Code of Honor

As a Spartan, I will strive to uphold values of the highest ethical standard. I will practice honesty in my work, foster honesty in my peers, and take pride in knowing that honor in ownership is worth more than grades. I will carry these values beyond my time as a student at Michigan State University, continuing the endeavor to build personal integrity in all that I do.

Plagiarism

Plagiarism (unsourced use of others’ intellectual property) is not allowed. However, if you cite your sources as show below, you are permitted to use/apply material created by your peers, strangers, and AI tools on homework assignments.

Examples Of Academic Misconduct

A goal of this course is to teach professionalism. Any instance of academic dishonesty will be viewed as evidence that this goal has not been achieved, and will be grounds for receiving a final grade of 0.0. Examples of academic dishonesty include (but are not limited to):

How To Provide Attribution

You must provide attribution if you make use of sources beyond the material given to you in this class. The attribution should be commented in your code and/or added to a README file included with your assignment. Please ask if you are uncertain as to if a source is allowed to be used in your assignment.

Example solution with attribution:

# The assignment is to read in a string that looks like "010 001 0101"
# and print out sum of the binary numbers with zero padding.

input_str = input()
bin_strs = input_str.split()


def convert_bin_str_to_int(bin_str):
    # Discovered int function from:
    # http://stackoverflow.com/questions/8928240/convert-base-2-binary-number-string-to-int
    return int(bin_str, 2)


# In discussion with Grant King, we found that the map function
# would be useful in converting both numbers
ints = map(convert_bin_str_to_int, bin_strs)

# This Piazza post helped me determine how to print binary numbers with padding:
# https://piazza.com/class/lldas7863631i176d/post/7
print("{0:06b}".format(sum(ints)))

Exception, here are sources which don’t require attribution (so that you don’t have to cite every line of code):

Everything else, including conceptual discussions with other students should be attibuted.

Generative AI

The use of generative AI (e.g. ChatGPT, GitHub Copilot, Bard) is permitted on take-home homework assignments with attribution. However, we strongly recommend not becoming overly reliant on such tools as they aren’t permitted on exams. Additionally, the assigned take-home work is given primarily to provide the opportunity to practice the application of the material taught, and merely asking AI to generate a solution without learning how to solve the problems yourself robs you of that practice.

So we recommend against the use of generative AI as a “solve me” button, but if you feel that it allows you to better learn the material, you are welcome to use it.

Collaboration

On homework and especially labs, we strongly encourage you to collaborate on the assignments. Learning how to write code on your own is an important task, but equally important is learning how to read other’s code and collaborate together. As such, we encourage the open discussion of homework and lab assignments on Piazza and more directly between your peers. You are welcome to share solutions, discuss potential implementations, and collectively debug each other’s code. If you are inspired by other’s work in your own solution (or if you just like how they solved a problem), please remember to cite your sources as described above.

Please note that just copying others work, without putting in the time to learn the assignments, will result in you not benefiting from the practice that the homework and labs provide. Although you could just copy all the homework solutions from your peers, you will not be learning how to write and read code yourself.

Extenuating Circumstances

The goal of this class is for you to learn. If you find that anything is coming in your way of that goal, 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. In particular, due to the ongoing global pandemic, we understand that you might need additional support. Please don’t hesitate in reaching out to us for anything that might affect your learning.

Grief Absence Policy

If there are unfortunate circumstances that would lead you to have unexpected absences, MSU has a Grief Absence Policy. Please contact the Associate Dean, and we will make every effort to aid you in continuing the class after we receive confirmation from the administration.

Resource Center for Persons with Disabilities

Michigan State University is committed to providing equal opportunity for participation in all programs, services and activities. Requests for accommodations by persons with disabilities may be made by contacting the Resource Center for Persons with Disabilities at 517-884-RCPD. Once your eligibility for an accommodation has been determined, you will be issued an accommodation letter. Please present this form to me (Dr. Nahum) at the start of the term, or as early as possible, in a private Piazza post.

Religious Observances

Accommodations will be made for religious observances if requests are made well in advance. Since religious observances are usually known at the beginning of class and assignment due dates are in the schedule, we expect students to request accommodation at the beginning of the semester, but we require that accommodations be requested at least 2 weeks before the observance. See MSU’s Religious Observance Policy for more details.

Attendance

Attendance at all regularly scheduled class meetings is a requirement of this course. Students with unexcused absences for more than three consecutive class meetings prior to the middle of the term may be dropped from the course for non-attendance.