Course Syllabus

Course Title: Software Practice II

Website: Canvas

Lectures: Tuesday and Thursday, 12:25-1:45p, SW 134.

Labs: Wednesday in WEB L130.  See https://class-schedule.app.utah.edu/main/1258/class_list.html?subject=CS for sections and times.

Instructor: David Johnson

Email: david.e.johnson@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. 

Assessment and Activities

Programming Assignments: There are regular programming assignments that will use a mix of solo, pair, and group work. It is expected that you will gain specific technical proficiency from working through the assignments.

Labs: There are weekly labs. You are encouraged to work with other students in the lab section on the lab activities. You are able to do them on your own and answer the associated Canvas quiz if desired. When working on group assignments, it is expected you will be able to attend a lab section to meet with your team.

In-Person Testing (Testlets): There will be 5 in-person written assessments during half of some lectures. These tests are between a full test and a quiz which I am calling testlets. The testlets will cover material from lecture, lab, and readings as well as details from assignments. Testlets will be on Sept. 2, Sept. 16, Sept. 30, Oct. 21, and Nov. 11.

Final Exam: None. The finals slot will be used for final project presentations. The finals slot for this course is Friday, December 12, 2025, 10:30 am – 12:30 pm.

Peer code reviews: You will be expected to make regular careful and rigorous reviews of other student code and there will be graded assignments for this activity.

Grading:

  • Programming Assignments (solo and pair) 18%
  • Group Projects 17%
  • Testlets 50%
  • Labs 5%
  • Peer Review 10%

Late Policies and Drops: 

Late Assignments Assignments turned in after the due date and time receive an immediate 10% deduction of the assignment value (so 10 points for an assignment worth 100 possible points) up to 24 hours after the due date. After 24 hours, the deduction increases to 20%. Two days after the due date, the submission system closes and the score becomes 0%.

Every student gets two late passes to use during the semester. A late pass forgives the one or two day late penalty for one assignment. It does not extend the assignment past the two day late period. A late pass will be automatically applied to late assignments and tracked in the Canvas gradebook. Students cannot decide to shift a late pass from one assignment (for example, where a pass was used on a 24 hour late assignment) to another (a later assignment that was 40 hours late).

A late pass cannot be used during the group projects phases. It can be used in pairs if at least one person in the pair has a pass. That person should submit the assignment (while adding the partner in Gradescope).

The late pass is the only mechanism to account for late work. They are there to help you. It is not necessary to email the instructor or to ask for an extension instead of using a late pass. Do not ask to save a late pass because of illness or other reasons for a delayed assignment - that kind of reason is exactly why the last pass is there! Please discuss longer-term illness or life events with the instructor.

Labs will have minor check-off processes (mostly a Canvas quiz, some worksheets when doing group work) to show you completed material. Your lowest lab score will be dropped. This drop is the default makeup process for labs.

Testlets One testlet will be dropped. The dropped testlet score is the expected and default mechanism for missing a testlet. 

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.

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 other programming languages 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. 

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. 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 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 any portion of any solution. 

Academic Misconduct

In-class testing should be done completely independently and following test guidelines. Attempts to copy from another person or other source or share answers will result in failing the course.

Course Guidelines 

School of Computing Policies

Please read through the SoC undergraduate handbook: 

https://handbook.cs.utah.edu (Links to an external site.)

College of Engineering Policies

Please read through the CoE policies on appeals, adds/drops, etc:

https://www.coe.utah.edu/students/current/semester-guidelines/ (Links to an external site.)

Behavior in the classroom All students are expected to maintain professional behavior, according to www.regulations.utah.edu/academics/guides/students/studentRights.html  (Links to an external site.)(the University of Utah Student Code). Students should read the Code carefully and know that they are responsible for the content. 

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:

Course Summary
Date Details Due