Course Syllabus

Course Title: Software Practice II

Website: Canvas

Lectures: Tuesday and Thursday, 2:00-3:20p, WEB L104 (ROOM CHANGE from 101 - there was some rain flood damage and we got moved to WEB L104 and I did not get any notification)

Labs: Wednesday, held in WEB L130 (new teaching lab space). 
Section 2 (8:35-9:25):
Section 3 (9:40-10:30): 
Section 4 (10:45-11:35):
Section 5 (11:50-12:40):
Section 6 (12:55-1:45):
Section 7 (2:00-2:50):
Section 8 (3:05-3:55): 

Instructor: David Johnson

Email: dejohnso@cs.utah.edu

Course Staff Email:  Use Piazza to contact course staff.

Office Hours: In 3146 MEB (along the west face of the MEB 3rd floor). See the help link under the Canvas Course Resources module.

Midterm Exam: There will be a late midterm Nov 2 in class.

Final Exam: None. The finals slot will be used for final project presentations. You can find the finals schedule for all classes at https://registrar.utah.edu/academic-calendars/. (Links to an external site.)

Quizzes: In the spirit of agile software development, There will be a number of in-class exams roughly every other week, with more at the beginning of the semester. Quiz dates will be announced a week in advance.

Electronic book exercises and participation: There will be readings and associated small practice problems every week using a free online textbook. In addition, there will be some small activities that do not naturally fall into other categories.

Grading: Quizzes 10%, Midterm 15%, Homework 60%, Labs and Ebook 15%

Late Policies and Drops: Assignments are given an immediate 10% deduction when submitted after the due date and time. After 24 hours, the assignment is given a 0. You can discuss emergencies with me. The reason for the fairly stern late policy is that we will be doing code review and refactoring in the course and assignments need to be finished before that happens.

Labs will have minor check-off processes to show you completed material. Your lowest two lab scores will be dropped. This is the default makeup process for labs.

Your lowest quiz score will be dropped. This is the default makeup process for a quiz.

The electronic book exercises and participation will have some number of adjustments and drops in the spirit of the above, but will depend on the final number of items in this category.

Please submit regrade requests (typically through gradescope) within 1 week of the release of the grade. See the instructions under Course Resources.

Grade Scale: 

[100-94] A
(94-90] A-
(90-87] B+
(87-84] B
(84-80] B-
(80-77] C+
(77-74] C
(74-70] C-
(70-67] D+
(67-64] D
(64-60] D-
(60-0] E

where [ ] means including that number and ( ) means up to but not including. 

Course Overview

The purpose of this class is to provide you with the information and skills to work on software projects in a team setting all the way from inception to final product. Some topics covered are traditional requirements-based software development, continuous integration testing, and agile-based development. 

A secondary purpose of the class is to teach C++ software development. C++ is an important language for many reasons and having some proficiency in it will provide you with valuable skills. Along with the C++ language, this course looks at development environments traditionally associated with C++ that may still be unfamiliar to you (linux terminal, emacs/vim, makefiles, etc.).  These different tool-chains allow you to be an effective developer in different contexts.

This course also looks at C++ design patterns, idioms, and frameworks, all of which are tried-and-true approaches for solving particular problems that are often encountered. Many of the course projects will be connected thematically to these approaches.

During the semester, students will work on a number of projects. A few projects will be individual assignments, a few will be pair programming assignments, and the remainder will be team projects. The projects will stress accuracy, correctness, and sustainability. Team projects will be evaluated not only on code, but also on the process used to develop the software. The course will use a number of mechanisms to evaluate individual contributions to the projects: code submissions, TA oversight, and team internal and external evaluations.

The prerequisites for this course are the successful completion of CS 3500, CS 2420, CS 1410, and MATH 1210. You should have a solid foundation in computer programming, computer science, mathematics, and application development to be enrolled in this course. We will begin assuming that all students know how to create applications in both C# and Java, and that you have three semesters of programming experience. Students who did poorly in any of the prerequisites should consider re-taking the prerequisite before taking this class. 

Lectures

In lecture I will use a laptop for slides, examples, and programming. Most materials shown in class will be posted on the class website. I will also use the whiteboard. 

Students are expected to participate in lecture by thinking about the material, asking questions, and offering answers to my questions either individually or using class response software.

We will occasionally have planning or design sessions during lecture that involve team-based planning and coordination. Students should come to class prepared for this with paper and writing implements. 

I plan on poorly recording lecture using the classroom camera for review and for backup for student illness. This is not intended as a remote-learning course.

Students are expected to engage with the instructor and classmates during class meetings. Students are permitted to use a laptop or mobile device to take notes or try programming concepts. Use of a laptop or mobile device for any other purpose is not permitted and students who do so will be asked to leave the classroom. While you may consider it a right to casually browse the web, engage in social media, or play games during lecture, such activity is very distracting to others (especially in a crowded classroom) and is not permitted. 

Labs

Labs are intended as places to practice more hands-on technical material and as time slots for teams to meet. The labs are a problem this semester - they were scheduled at a reduced capacity for COVID - but we do not really have the staff to run them in a traditional way. Hold on a bit while we figure out exactly what we will do! Labs will often have an associated online exercise that must be done to get credit for the lab. During the group phase, you must be able to meet your group during an assigned lab time.

Projects and Code Reviews 

There will be projects and code reviews due throughout the semester. The release and due dates for each assignment will be posted on the class website. 

Projects will involve a significant amount of programming and design. As this is a three-hour class, I expect students will spend an average of 6-9 hours a week working on the assignments. 

Students must be aware that their work will be subject to peer review throughout the semester. We will make portions of your work visible for other students to see and review (with names, comments, and filenames intact). Please do not hand in anything objectionable or sensitive. Also, students will be required to review the work of their peers in the class. Specific requirements for reviews will be posted on the class website, and we will discuss how to conduct code reviews in class. 

Teams 

Special consideration is always required when working in teams. You should select teammates whose understanding of the material is roughly the same as yours. Teams should also be formed based on compatible schedules. 

During the team phase, if a team member doesn’t do the work assigned to them, then we reserve the right to adjust the scores accordingly. This may mean adjusting the score of the person not doing their job lower and possibly, in rare occurrences, adjusting the rest of the team higher (because they had to cover for the person ”flaking out”). If this starts to happen at any point during the semester, please inform me immediately. 

Asking for Help 

Every student will get stuck sooner or later. When you do, feel free to ask for help in person or through the class website. We are happy to help. 

In-person help is the most effective way to learn. Please make use of our posted office hours whenever possible. 

Most assignments will have a help/questions forum is where you should post simple questions for other students. If you’d like to find a study partner, if you discover something really cool, or if you just have a simple question, feel free to post to this forum. The only rule is that you are not allowed to post code or discussions of any portion of any solution. 

Cooperation vs. Cheating 

Working with others on assignments is a good way to learn the material and I encourage it. However, there are limits to the degree of cooperation that I will permit. Working together to find a good approach for solving a problem is cooperation; listening while someone dictates a solution is cheating. You must limit collaboration to a high-level discussion of solution strategies and stop short of actually writing down group answers. The following guide is intended to clarify cooperation vs. cheating. 

Collaboration: 

Students may use code that we provide as part of this semester’s assignment and lab postings. 

Students may use small “snippets” of code from web tutorials in their solutions. These snippets must be small pieces of general purpose code that are not direct solutions to the assignment. Snippets must not exceed about 10% of the statements in any assignment. When using snippets of code from the web, properly cite them in your source code. Place a comment immediately above each piece of borrowed code and state “Code example from” and give the source URL for the code. Place a comment below the snippet stating “End of example”. 

Team programming is allowed for certain assignments. These assignments will clearly state that team programming is allowed. Independent, individual work is required for all other assignments, labs, write-ups and exams. 

Studying together is encouraged. Students may discuss strategies and common problems and students may answer each other’s general questions. 

Cheating: 

Using any materials from a previous CS 3505 semester is cheating. 

When writing code, you must not base your work on any other person’s design or code. If you look at another student’s code, you are cheating. If you write code in a group (when not allowed), you are cheating. If you ask another person to help you write code, you are cheating. Write your own solutions. 

When writing reports, all work must remain independent and confidential. Reading other people’s work or sharing of answers, data, text, or diagrams is cheating. Discussion of general formulas is allowed, but step-by-step solving of written problems together is cheating. 

When taking an exam, you must work completely independently of everyone else. Any collaboration here, of course, is cheating. 

We do not distinguish between cheaters who copy others’ work and cheaters who allow their work to be copied. If you are the source of materials or skill used for cheating, you will also fail the class. Be careful what you post to forums, and don’t show your friends your work! 

Finally, if something you are doing may be considered both collaboration and cheating, it is cheating. Don’t do it. 

The sanction for any cheating (plagiarism) in this class, no matter how small the offense, is an ’E’.

College of Engineering guidelines For information on withdrawing from courses, appealing grades, and more, see the College of Engineering guidelines at https://www.coe.utah.edu/students/current/semester-guidelines/. (Links to an external site.)

School of Computing guidelines For more information on School of Computing policies and guidelines, please refer to 

https://handbook.cs.utah.edu/2019-2020/Academics/policies.php (Links to an external site.)

Safety The University of Utah values the safety of all campus community members. To report suspicious activity or to request a courtesy escort, call campus police at 801-585-COPS (801-585-2677). You will receive important emergency alerts and safety messages regarding campus safety via text message. For more information regarding safety and to view available training resources, including helpful videos, visit safeu.utah.edu. (Links to an external site.)

Students with disabilities The University of Utah seeks to provide equal access to its programs, services and activities for people with disabilities. If you will need accommodations in the class, reasonable prior notice needs to be given to the Center for Disability and Access (http://disability.utah.edu (Links to an external site.)Links to an external site.). CDA will work with you and the instructor to make arrangements for accommodations. Accommodations cannot be given without paperwork from this office.

Addressing Sexual Misconduct. Title IX makes it clear that violence and harassment based on sex and gender (which includes sexual orientation and gender identity/expression) is a civil rights offense subject to the same kinds of accountability and the same kinds of support applied to offenses against other protected categories such as race, national origin, color, religion, age, status as a person with a disability, veteran’s status or genetic information. If you or someone you know has been harassed or assaulted, you are encouraged to report it to the Title IX Coordinator in the Office of Equal Opportunity and Affirmative Action, 135 Park Building, 801-581-8365, or the Office of the Dean of Students, 270 Union Building, 801-581-7066. For support and confidential consultation, contact the Center for Student Wellness, 426 SSB, 801-581-7776. To report to the police, contact the Department of Public Safety, 801-585-2677(COPS).

Student Names & Personal Pronouns Class rosters are provided to the instructor with the students legal name as well as Preferred first name(if previously entered by you in the Student Profile section of your CIS account). Please advise me of any name or pronoun changes (and update CIS) so I can help create a learning environment in which you, your name, and your pronoun will be respected. If you need assistance getting your preferred name on your UIDcard, please visit the LGBT Resource Center Room 409 in the Olpin Union Building, or email bpeacock@sa.utah.edu to schedule a time to drop by. The LGBT Resource Center hours are M-F 8am-5pm, and 8am-6pm on Tuesdays.

Student Wellness Personal concerns such as stress, anxiety, relationship difficulties, depression, cross-cultural differences, etc., can interfere with a student’s ability to succeed and thrive at the University of Utah. For helpful resources contact the Center for Student Wellness at www.wellness.utah.edu or 801-581-7776.

Veterans Center If you are a student veteran, the U of Utah has a Veterans Support Center located in Room 161 in the Olpin Union Building. Hours: M-F 8-5pm. Please visit their website for more information about what support they offer, a list of ongoing events and links to outside resources: http://veteranscenter.utah.edu/. Please also let me know if you need any additional support in this class for any reason.

Learners of English as an Additional/Second Language If you are an English language learner, please be aware of several resources on campus that will support you with your language and writing development. These resources include: the Writing Center (http://writingcenter.utah.edu/); the Writing Program (http://writing-program.utah.edu/); the English Language Institute (http://continue.utah.edu/eli/). Please let me know if there is any additional support you would like to discuss for this class.

Note: This syllabus is meant to serve as an outline and guide for our course. Please note that I may modify it with reasonable notice to you. I may also modify the Course Schedule to accommodate the needs of our class. Any changes will be announced in class and posted on Canvas under Announcements.

Course Summary:

Date Details Due