Syllabus

Spring 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. There will be no extra credit.

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

Multiple Choice Exams

There will be a three synchronous multiple choice exams, named “Midterm Exam 1”, “Midterm Exam 2”, and “Final Exam”. Each is worth 150 points. The Final Exam score will replace the score of the lowest scoring midterm if the Final Exam is higher.

Coding Exams

Additionally, there will be two lab practical coding exams (“Midterm Coding Exam” and “Final Coding Exam”) which will take place in lab each worth 150 points.

Labs

There are 11 graded labs throughout the semester, each lab is worth 10 points. There are two ways to earn these points:

Preferred Option:

If you attend your in-person lab section, come prepared (having watched the previous week’s lectures), follow directions, and participate, you will be awarded full credit by your lab’s TAs, regardless of the actual progress made on the lab assignment.

Alternative Option

You can alternatively complete the lab assignment by 10pm of Monday the following week and earn the points associated with that lab.

Homework

A homework assignment will be due every Thursday at 10 PM. Each homework assignment is worth 10 points. There will be 14 graded assignments given. 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.

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 90 points on honors lab assignments to receive a passing grade. The in-lab coding exams for the honors lab sections will have content specific to material covered in the honors lab sections.

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 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 and lab 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 opprotunity 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 recieve confirmation from the administration.

Resource Center for Persons with Disabilities

Michigan State University is committed to providing equal opprotunity for participation in all programs, services and activities. Requests for acommodations 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 accomadations be requested at least 2 weeks before the observance. See MSU’s Religious Observance Policy for more details.

Acceptable Use Policy

All students are expected to be responsible users of the computer system and laboratory classrooms provided for this course. Account usage guidelines published by the Department of Computer Science and Engineering are posted under the CSE AUP.