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:
- Learn the C++ language, with a focus on using the available functionality in the STL.
- Learn how these tools work under the hood, so you can design your own data structures and algorithms.
Course Materials
- $44 Payment to Codio, details presented in first lab.
- Required Textbook (only purchase the physical copy)
- You must have a desktop or laptop computer capable of running Zoom and screen-sharing.
- You must have a phone or tablet capable of running Zoom with a camera that can show your workspace while taking exams.
- You must have a consistent internet connection for streaming video through Zoom, and watching lecture videos.
- Recommended (but not required) supplemental textbooks:
- C++ Primer, 5th Ed. by Lippman, Lajoie, Moo. ISBN-13: 978-0321714114
- Introduction to C++, 1st Ed. by George S. Tselikis
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):
- Using code implemented by someone else without attributing credit (i.e., you can use tools, libraries, or code snippets from the web, but only with proper citation).
- Violating exam policies (e.g. communicating during the multiple choice exam, or using AI during a coding exam)
- Writing code that deceptively passes the test cases, but doesn’t solve the problem given. In other words, abusing automatic grader mechanisms to gain unearned points (hard-coding).
- Distributing course content without instructor permission.
- Providing false information to the instructor about matters related to the course.
- Facilitating another student in any of these activities.
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):
- Class-related materials (lectures, example code)
- Documentation from the linked reference websites (python.org, cppreference.com, cplusplus.com)
- Required or supplemental textbooks
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.