CS 247
Software Design Principles

Course Philosophy


Course Announcements

Welcome to CS 247!

Welcome to the CS247 course homepage. Here you can find the latest announcements, as well as general information about the course. The current offering of CS247 is Spring 2020.

This is the remote delivery version of CS 247. Please read the information below as well as the course outline to help you get prepared.

If you have any question or concerns please contact the ISC (see the personnel page). Have a great summer everyone!


Piazza

Log In

Access our Piazza here: CS 247 Piazza

What is Piazza?

Piazza is the discussion forum for CS 247

Being a student, you can

  • Ask course-related questions -- anonymously if you'd like
  • Collaborate to form a high-quality Wikipedia-style response
  • Have a traditional thread-style discussion

Guidelines

Of course, there are things to be kept in mind while using Piazza. Here are just a few rules that you perhaps already know:

  • Do not post solutions to assignments (Policy 71)
  • Do not post assignment or project related source code (Policy 71)
  • Be civilized; refrain from posting offensive, inappropriate, or irrelevant content

Above all, remember that the whole class, including the professor and the ISAs, are potential readers to the discussion board. Use your common sense to determine what constitutes acceptable content.



Schedule and Course Materials


Assignment Policies

Assignments

Assignments will be posted here throughout the term.



Assignments and Projects Due Dates

(All due dates for unreleased assignments are tentative and subject to change)

Marmoset

Assignments must be submitted using Marmoset.

After your solutions are submitted to the Marmoset automatic grading system available at https://marmoset.student.cs.uwaterloo.ca, Marmoset will run your solutions on a number of test inputs and grade them automatically. You may resubmit your solutions as many times as you wish prior to the submission deadline. The Marmoset portion of your mark is determined entirely by the number of test inputs for which your best submission generates the correct answer.

MOSS

We will be using Measure of Software Similarity (MOSS) system from Berkley to compare this term's submissions with each other and with past terms' submissions of similar assignments.

Group Work Policy

No group work is permitted on assignments. Students may work on the course project in teams of size 2 or 3.

Collaboration Policy

Some degree of collaboration is beneficial:  you can learn a lot from others; you can avoid getting stuck; and teaching someone else can be the best way to cement your own understanding of a difficult concept. That said, your understanding of the course material will be deeper and more ingrained if you solve problems on your own. Thus, we permit and encourage discussion but not outright collaboration (except where explicitly permitted, such as teamwork on the course project).

Specifically, you are allowed (and even encouraged) to discuss course concepts, assignments, and projects with other CS247 students but only under the following restrictions. 

  • No materials you bring to or take away from such meetings may be incorporated into your solution. In particular, you may not bring any of your code or solutions to the meeting.
  • You may only bring away information in your long-term memory. You must destroy any materials that you and others create during the meeting. Then, you must spend 30 minutes without thinking about CS247 (e.g., watching a mindless TV show). After that, you can use whatever you still remember.
  • You must write up anything you submit on your own. Your code (which includes tests and documentation), problem answers, etc. must represent your own understanding, as explained solely by you.
  • You may not view other people's code or solutions. You may not share any of your own code (including, as always, tests and documentation) with others, including bringing it to a meeting with others. You may not allow anyone except the course staff access to your CS247 course directory, and you must restrict access to any Git repositories containing your CS247 work, or any other location where you keep CS247 solutions. Don't post large amounts of your code (more than about 5 lines) to a public forum (i.e., in a public Piazza post, to a Facebook group, to reddit, etc.)
  • You must give credit where credit is due. Within each assignment/project submission, list everyone with whom you've had substantive discussions. Likewise, if you obtained a key idea from some other resource, such as a textbook or a website, then you should credit it (e.g., in comments at the top of your program submission).
  • You may not view and/or use any substantive material or solutions from similar assignments this term or previous terms at UW or elsewhere, including anywhere on the Internet, transcribing solutions from any other source, etc.


Late Policy

Up to one assignment and one project deliverable may be handed in, without penalty, up to 48 hours late. This late policy is meant to cover all minor reasons for missing a due date (e.g., minor medical illness, conflict with another assignment, etc.).  If you are intending to take your late days on your assignment please send an e-mail to cs247@uwaterloo.ca from your school e-mail and state which assignment you are taking the late days on, and your student ID. 

Anything handed in after the late-policy due date without a pre-approved extension (see below) will receive a grade of 0. If more than one assignment/project deliverable is handed in after the late-policy due date, one of the late submissions will receive a grade of 0.

If you have a serious (multiple-day) illness or absence, then you need to consult with the instructor in advance to make alternative arrangements for fullfilling the assignment deliverables of the course.

Return Policy

Assignments will be returned online, via MarkUs.

Remarking Policy

Email the ISA ( cs247@uwaterloo.ca ), clearly stating the questions you want to be remarked. Include any supporting evidence for your case. Requests that include code changes to fix failing test cases will be ignored. You have two weeks after handback to deliver the request to the ISA. All requests will be processed after the deadline to ensure fairness and consistency in marking.

Notes: We will examine your entire assignment/exam when remarking it. It is possible that you will receive a lower mark than your current mark.



Grades Breakdown and Exam Info

Week Lectures Tutorials Assignments/Exam
Assignment 1 12%
Assignment 2 12%
Assignment 3 12%
Project 1 12%
Project 2 12%
Project 3 15%
Final Exam 25%

If you have any grievances about an assignment's marking, please email cs247@uwaterloo.ca with your quest ID, the assignment, and the concern you have about the grading. Note that remarking for the final is handled by the instructor. If you would like an exam remarked, please use the form Remark Request From.


Marks

Marks

For your convenience, we provide a facility to check your unofficial marks.

If you have questions about an assignment whose marking is in progress, please contact the ISA. See below for information on viewing the marks breakdown for an assignment.

Breakdown
  • 36% - Assignments
    • 12% - Assignment 1
    • 12% - Assignment 2
    • 12% - Assignment 3
  • 39% - Project
    • 12% - Deliverable 1
    • 12% - Deliverable 2
    • 15% - Deliverable 3
  • No Midterm
  • 25% - Final Exam

CS 247 Mark Viewing Notes

  1. The overall mark on Assignments and Project Components can be found on the unofficial marks page.
  2. Automarking correctness tests and results can be found in Marmoset
  3. Handmarking results (including marker comments) are located on Markus with the following notes:
    • Use Firefox to access Markus. MarkUs does not work properly with other web browsers.
    • Viewing Marks and Marker Comments in MarkUs
      Choose the appropriate assignment. Then, for a detailed breakdown of the marking along with marker comments, click the "Results" link.

      On the right side is your mark breakdown:

      • Summary: Under this tab you can see the weight for each category and your deductions for components with subtractive marking and marks earned for the other components.
      • Marks: Under this tab you can see the level you received for each criterion, with a description of what the level means.

      On the left is the code for one of your files.

      • The ''Annot. Summary'' tab contains a list of all the comments a marker has made to your assignment files. Click on the link at the top left of each comment to go to the associated code.

If there are any errors in the marking of your assignment, please email cs247@uwaterloo.ca to let us know what the problem is.

Remarking Policy

Email the ISA, clearly stating the questions you want to be remarked. Include any supporting evidence for your case. Requests that include code changes to fix failing test cases will be ignored. You have two weeks after handback to deliver the request to the ISA. All requests will be processed after the deadline to ensure fairness and consistency in marking.

Notes: We will examine your entire assignment/exam when remarking it. It is possible that you will receive a lower mark than your current mark.


Personnel

For questions related to course content, contact an instructor or an ISA. The best place to ask questions is on Piazza or email, but you can also send email or visit during office hours. For questions about marking, contact the Assistants first, who will consult with the Instructor if necessary.

Instructors

Instructional Support Assistant (ISA)

Instructional Support Coordinator (ISC)

Teaching Assistants


General Information

General Information

Calendar Description - Official course description from academic calendar.

Handbook Description - Longer course description from Computer Science Undergraduate Handbook.

UW Policies

Cheating

Academic Integrity: In order to maintain a culture of academic integrity, members of the University of Waterloo community are expected to promote honesty, trust, fairness, respect, and responsibility.

Grievance: A student who believes that a decision affecting some aspect of his/her university life has been unfair or unreasonable may have grounds for initiating a grievance. Read Policy 70 - Student Petitions and Grievances, Section 4, http://www.adm.uwaterloo.ca/infosec/Policies/policy70.htm

Discipline: A student is expected to know what constitutes academic integrity, to avoid committing academic offenses, and to take responsibility for his/her actions. A student who is unsure whether an action constitutes any offense, or who needs help in learning how to avoid offenses (e.g., plagiarism, cheating) or about "rules" for group work/collaboration should seek guidance from the course professor, academic advisor, or the Undergraduate Associate Dean. When misconduct has been found to have occurred, disciplinary penalties will be imposed under Policy 71 - Student Dicipline. For information on categories of offenses and types of penalties, students should refer to Policy 71 - Student Discipline, http://www.adm.uwaterloo.ca/infosec/Policies/policy71.htm

Avoiding Academic Offenses: Most students are unaware of the line between acceptable and unacceptable academic behaviour, especially when discussing assignments with classmates and using the work of other students. For information on commonly misunderstood academic offenses and how to avoid them, students should refer to the Faculty of Mathematics Cheating and Student Academic Discipline Policy, http://www.math.uwaterloo.ca/navigation/Current/cheating_policy.shtml

Appeals: A student may appeal the finding and/or penalty in a decision made under Policy 70 - Student Petitions and Grievances (other than regarding a petition) or Policy 71 - Student Dicipline if grounds for an appeal can be established. Read Policy 72 - Student Appeals, https://uwaterloo.ca/secretariat-general-counsel/policies-procedures-guidelines/policy-72

General information concerning University policies on illnesses may be found at http://www.registrar.uwaterloo.ca/students/accom_illness.html


TextBooks

Textbooks

Required

Thinking in C++, Volume 1
Bruce Eckel
2nd Edition
Prentice Hall, 2000

Thinking in C++, Volume 2
Bruce Eckel, Chuck Allison
Prentice Hall, 2003

Recommended

Head First Design Patterns
Eric Freeman, Elizabeth Freeman, Bert Bates, Kathy Sierra
O'Reilly, 2004
(available online via the University's Library)

Programming: Principles and Practice Using C++ (Bjarne Stroustrup) (updated for C++11/C++14)
C++ Primer  (Stanley Lippman, Josée Lajoie, and Barbara E. Moo) (updated for C++11)
Effective C++ (Scott Meyers)
Effective Modern C++
(Scott Meyers) (focuses on C++11/C++14)
Effective STL
(Scott Meyers)

References

The C++ Programming Language (Bjarne Stroustrup) (updated for C++11)
C++ Standard Library Tutorial and Reference (Nicolai Josuttis) (updated for C++11)

Design Patterns

Design Pattern Examples (To Be Released)

Resources

Resources