# CSCI 103 Spring 2020: Introduction to Programming

## Syllabus

### Course Description

This class is an introduction to computer programming, using C++ as the programming language. You will learn about variables, types, loops, conditional statements, functions, input/output, arrays, recursion, dynamic memory, object-oriented programming, performance, and several data structures. You will get a lot of practice reading, writing, and debugging computer programs.  While no programming knowledge is required and we will start from first principles, this course has a very fast pace for those who have not programmed.  Those desiring a longer on-ramp to programming are recommended to take the 2-unit CS 102 course before CS 103.

### Required Readings and Supplementary Materials

We require Brief C++: Late Objects 3rd Edition, by Cay Horstmann. The book is also known as C++ for Everyone, 3rd Edition. You will find the book available by both titles, they are exactly the same. There are various media types available: enhanced eText, printed or both. Here are two links:

The following books ARE NOT required or directly related to our class. But we recommend them if you are looking for more reading to increase your breadth of knowledge.

### Required Equipment

You need to have a laptop capable of accessing our online coding environment Vocareum. Any relatively modern Windows, Mac, or Linux machine should work.

You will need to bring your laptop to lab each week.

Bringing a laptop to lecture may be helpful but is not required.

### Learning Objectives

Below are the specific, measurable skills a student will demonstrate by the end of the course. These objectives will be both taught and assessed in the course and are aligned with the assignments, assessments and learning materials.

1. Develop simple algorithms to solve computational problems.
2. Implement key algorithms within the field.
3. Write computer programs using conditional and iterative structures, and functional decomposition.
4. Perform functional decomposition and trace recursive solutions.
5. Select an appropriate basic data structure (e.g. arrays) and access methods (e.g. pointers).
6. Determine the computational complexity of simple algorithms.
7. Apply basic object-oriented principles.
8. Create programs that utilize input/output to perform data analysis.

Use Linux development tools needed to write, compile, and debug basic C++ programs..

### Course Materials

All content will be provided on our website:  http://bytes.usc.edu/cs103. PDF versions of lecture slides will be posted on our website before lecture and may be printed before coming to class or used electronically.

### Course Websites

1. Primary website: All course assignments, content, office hour information, etc. will be posted at our main website: http://bytes.usc.edu/cs103.
2. Q&A website: A Q&A and announcement website will be utilized: http://piazza.com/usc/spring2020/csci103l/home.  All official announcements regarding assignments, lectures, exams, etc. will be made via Piazza.  It is your responsibility to check this site often.
3. Vocareum: Lab and project code submissions will be made via http://labs.vocareum.com. You will receive an invitation link to create your account sometime in the first week.
4. Blackboard:  Blackboard (http://blackboard.usc.edu) will be used to post exam grades.

### Labs

Availability:  Labs will be made available on the Vocareum web site (http://labs.vocareum.com) at the beginning of each week and must be demonstrated to a CP/TA (not your lecture instructor) on or before the following Friday.  They should also be submitted via vocareum.com, but MUST BE demoed to a live person. Labs are not to be started in lab, rather they are to be started as early as possible on your own and then either demo'ed or debugged in the lab section.

Deadline: We expect you to be done when there are 45 minutes remaining in your lab section, or earlier. Demo it to a TA/CP when it is complete. After everyone else has performed their first demo, you can re-demo it if time allows. No re-demos are allowed after your lab section ends, i.e. there are no late submissions. You are always allowed to demo your code earlier in the week at the office hours of a TA/CP.

Absentee policy: If you can't attend your assigned lab, demo it at office hours (see above).

Grading: Labs are usually graded out of 10 points based on correctness.  We will drop your lowest lab score. There are no late submissions.  Any regrade request must be made within 1 week of the end of the lab.

Collaboration and Academic Integrity: Lab assignments are to be completed individually unless otherwise noted.  You are NEVER allowed to show or share your code with another student.  Be careful of verbally guiding another student on what to write or what to do.  If another student is confused, you may help them but should not share any details of your solution.  The course staff is available to help students who are struggling.  Copying (and then modification) of any portion of code from Internet sources or fellow students is prohibited unless cleared with the instructor. See the Statement on Academic Conduct.

### Challenge Tournament

For Spring 2020 we are going to implement a new concept to increase course engagement while giving students the opportunity to get more practice programming. We will be holding a tournament throughout the semester comprised of challenge problems. The problems will not be released until your lab section and you will have up to two hours to work on them. You may form teams to work on the problems. Teams that complete the problems will win points and the highest ranked teams or individuals at the end of the semester will win prizes.

The challenge problems are in addition to the lab due each week, if you don't have time to work on them one week, that's OK (they do not count towards your grade).

The tournament will start week 2 (or 3).

### Programming Assignments

Overview:  Programming assignments are larger, more comprehensive tasks that should challenge you to integrate several programming concepts. They will be graded after submission by course staff, based on correctness as well as style.

Deadline and late policy: An assignment between 1 minute and 24 hours late will lose 25% of the maximum points. An assignment between 24 and 48 hours late will lose an additional 25%. After 48 hours we won't accept it. We will give each student five "slip days" (free late days) for the semester, but they may not be used to extend the 48-hour limit (this is because of grading logistics). You may use a maximum of 2 slip days per assignment.

You don't need to tell us if you use a slip day. Vocareum handles the slip days for you, however you do need to "Assign" the slip days in the Vocareum interface. Please assign the slip days immediately after you submit the assignment.

Advice: Save the slip days for when you really need them (including travel or when other classes keep you busy). Contact us in advance of the deadline if you become very ill…but only minimal extensions will be granted except for severe illnesses.

### Exams

Time and Location:  There will be one written midterm, one programming midterm and one final. The midterm exams will be held during the Quiz section of Week 7 and 11. The dates of the exams are shown on the attached schedule but may be moved to a different date in exceptional cases.  Always check with the instructor as the listed exam date approaches to confirm the date and time. The exam location will be announced in class and on the web site. You are responsible for finding out when and where the exams will be held. Makeup exams are only given for extreme emergencies.

Academic Accomodations: If you have USC approved academic accomodations, please check with your instructor 2 weeks before the exam to determine when and where you will take the exam.

 Assignment % of Grade Labs 10% Programming Assignments 30% Written + Programming Midterm 20% (highest score) 15% (lowest score) Final 25%

Course final grades will be determined using the following scale. If the grade distribution is lower than expected the scale may be shifted downward but will never be shifted upward.

 A               94 B+             86 C+             75 D+             60 A-              90 B                82 C                70 D               56 B-              78 C-              64 F                below 56

Programming assignments will be graded on the Vocareum website (http://labs.vocareum.com) with feedback and comments annotated inline with your code submission.  The grade and feedback will be usually be posted within 1.5 weeks of submission.

Occasionally, we make mistakes. To request a regrade: write a brief note indicating the perceived mistake by the grader, attach it to your graded work, and return it to the grader within 1 week of when the graded work was returned. After 1 week, no regrades will be accommodated.

### Getting Help

Learning programming is a challenging and unique task. But that's why you're here. There is copious help available, make use of it!

• The People page shows the office hours of the instructors, teaching assistants, and CPs. You can go to any TA or CP office hours. We would ask that you visit your respective instructor's office hours.
• If you have a question, then probably someone else does too! We encourage you to post questions to the course Piazza forums (see link above). Someone from the course staff will answer it. Additionally, you can answer other students' questions. Other students will benefit from seeing your questions and answers. Or you can create posts that are hidden from other students.
• Please do not e-mail your instructor directly, unless to discuss a specific personal or course administration issue. All questions regarding course material and course work shall be done through Piazza.

All USC students are held to a high degree of academic honesty: this is to be fair to all students, but mostly, so that you actually get the intended benefits of the activities designed for you in the course.

All coursework that you submit (homework, labs, programming assignments, midterm and final exams) must be your work and yours alone. You may freely copy-and-paste any parts of the textbook and course materials when composing your work, so long as you cite them as sources. Here is a sample citation:

// next 2 lines adapted from p157 of textbook
while (cin >> input)
total = total + input;

You must not copy anything from other sources into your work. Additionally,

• you must not show or give your work to any student who might take CSCI 103 in the future
• you must not leave your work in a public place (website, shared folder, bulletin board, etc)
• you must not seek others' solutions (whether by internet search or asking a friend)
• you must not read any solutions (if you see one by accident, close it and report it)
• you must not lead any other student step-by-step through any coursework
• and, these restrictions continue to apply after you are finished with the course.

There are restrictions in a couple of special cases:

• If you are getting help from a CSCI 103 alumnus or a tutor, they must not be looking at their own old code while helping you. This is because we don't want you to learn at a superficial level.
• You must use Piazza for coursework questions instead of posting to external sites like StackOverflow, Quora, etc.

However, discussing the course materials with other students is encouraged when it is of a general nature, so long as the work of one student is never shared with another. For example, you may:

• discuss material from the book or lecture slides
• discuss questions of a general nature, e.g. "what is the difference between static and dynamic memory?" or "what are the parts of syntax of a for loop?"
• discuss strategies for developing and debugging, e.g. "how do you figure out what caused a segmentation fault"? (answer: use gdb)
• explain error messages, e.g. "what does the not declared in this scope error mean?" or "what is an invalid read of size 4 error in valgrind?"
• discuss the tools used throughout the course, e.g. "how do I enable debug information during compiling"?
• clarify wording in the homework, labs, or programming assignments, or draw diagrams to explain a concept
• discuss test cases, strategies and algorithms, as long as it is kept at the level of general descriptions/pseudocode rather than step-by-step instructions. E.g., "does it matter if we use static or dynamic memory?"

To repeat for emphasis, you must never show any other CSCI 103 student your code, even "just for debugging" or "just as an example," nor may you look anyone else's CSCI 103 code. Only show your code to course staff (or people who have already taken CSCI 103).

We use software that automatically searches for similarities in submitted code. It is very good at identifying when one student has copied and modified another student's code. Anything it flags will be inspected manually in detail.

Violations of the course syllabus will be reported to SJACS. Sanctions include 0 on an assignment, F in the course, and stricter punishments for repeat offenders or cheating on exams. Additionally, USC's policy is that SJACS-violating students must stay enrolled in the course and CANNOT withdraw from the course until the issue is settled.

If you have a question about what is allowed or not, ask us!

### Statement on Academic Conduct and Support Systems

Plagiarism ‑ presenting someone else’s ideas as your own, either verbatim or recast in your own words ‑ is a serious academic offense with serious consequences. Please familiarize yourself with the discussion of plagiarism in SCampus in Part B, Section 11, “Behavior Violating University Standards” policy.usc.edu/scampus-part-b. Other forms of academic dishonesty are equally unacceptable.  See additional information in SCampus and university policies on scientific misconduct, http://policy.usc.edu/scientific-misconduct.

Support Systems:

Student Counseling Services (SCS) ‑ (213) 740-7711 ‑ 24/7 on call

Free and confidential mental health treatment for students, including short-term psychotherapy, group counseling, stress fitness workshops, and crisis intervention. engemannshc.usc.edu/counseling

National Suicide Prevention Lifeline ‑ 1 (800) 273-8255

Provides free and confidential emotional support to people in suicidal crisis or emotional distress 24 hours a day, 7 days a week. www.suicidepreventionlifeline.org

Relationship and Sexual Violence Prevention Services (RSVP) ‑ (213) 740-4900 ‑ 24/7 on call

Free and confidential therapy services, workshops, and training for situations related to gender-based harm. engemannshc.usc.edu/rsvp

Sexual Assault Resource Center

Office of Equity and Diversity (OED)/Title IX Compliance ‑ (213) 740-5086

Works with faculty, staff, visitors, applicants, and students around issues of protected class. equity.usc.edu

Bias Assessment Response and Support

Incidents of bias, hate crimes and microaggressions need to be reported allowing for appropriate investigation and response. studentaffairs.usc.edu/bias-assessment-response-support

The Office of Disability Services and Programs

Provides certification for students with disabilities and helps arrange relevant accommodations. dsp.usc.edu

Student Support and Advocacy ‑ (213) 821-4710

Assists students and families in resolving complex issues adversely affecting their success as a student EX: personal, financial, and academic. studentaffairs.usc.edu/ssa

Diversity at USC

Information on events, programs and training, the Diversity Task Force (including representatives for each school), chronology, participation, and various resources for students. diversity.usc.edu

USC Emergency Information

Provides safety and other updates, including ways in which instruction will be continued if an officially declared emergency makes travel to campus infeasible. emergency.usc.edu

USC Department of Public Safety  ‑ UPC: (213) 740-4321 ‑ HSC: (323) 442-1000 ‑ 24-hour emergency or to report a crime.

Provides overall safety to USC community. dps.usc.edu