From the course calendar:
CS 346 LAB,LEC,TST 0.50
Introduction to full-stack application design and development. Students will work in project teams to design and build complete, working applications and services using standard tools. Topics include best-practices in design, development, testing, and deployment.
Prereq: CS 246; Computer Science students only
This course is restricted to Computer Science students. You must have completed CS 246 prior to taking this course, and you should be able to:
- Design, code and debug small C++ programs using standard tools. e.g. GCC on Unix.
- Write effective unit tests for these programs. e.g. informal I/O tests, unit tests.
- Demonstrate programming proficiency in C++, which includes: understanding of fundamental OO concepts. e.g. abstraction, encapsulation; knowing how to use classes, objects, method overloading, and single inheritance; polymorphism; understanding how to use assertions, and how to manage exceptions.
On successful completion of the course, students will be able to:
- Work effectively as a member of a software development team.
- Use an interactive process to manage the design, development and testing of software projects.
- Design and develop different styles of application software in Kotlin, using appropriate architectural and design patterns.
- Design services that can provide remote capabilities to your application.
- Apply debugging and profiling techniques to address design and performance issues.
- Produce unit and integration tests as part of the development process.
There are no required textbooks for this course. This website is the primary source for reading material, recorded videos and other supporting materials. For those that want to pursue topics in greater detail, there are additional resources listed in each chapter.
You will need administrative access to a computer to work on the project. This system should be capable of running the toolchain described here. You will not be able to use lab machines for this course, since you do not have administrative rights on those machines.
Please check your system requirements early in the course, and ask the instructor if you have any concerns.
|Title / Name
||Notes / Comments
||Windows, Linux or macOS with at least 8GB of RAM.
|Slides and lecture videos
||Will be made available on course website.
||Will be made available on course website or via links to external resources.
The expectation in this course is that you will form teams in the first couple of weeks, and work together towards meeting project deliverables. The following guidelines apply:
- Students are responsible for matching up and forming teams. Teams must be formed by the end of the second week of the term (i.e. the add-course deadline). If you fail to find a team, you must inform the instructor by the end of the second week.
- We do not guarantee you a team after the end of the second week. If you have not joined a team, and have not made some arrangement with the instructor, you may be required to withdraw from the course.
- Course enrolment will be managed by the instructor to facilitate teams of four. If required, the instructor may authorize larger or smaller teams to accomodate everyone that is enrolled in the course.
- If you fail to participate in project activities in the weeks leading up to the project proposal, you may be removed from the course. This is necessary so that teams can launch their projects successfully!
Students are expected to attend lectures and demos with their team. Failing to attend a demo will normally result in a grade of zero for that course component.
However, we recognize that circumstances may sometimes require you to miss a demo e.g. coop interviews, testing positive for COVID. If you need to miss a demo, the following guidelines apply:
- You must contact the instructor and your teammates ahead of the due date. If missing a demo, you must coordinate with your team since they will be expected to proceed without you.
- You must provide the instructor with a reason for missing the component (e.g. illness/COVID).
- You are still expected to complete your work leading up to that deadline i.e. you are excused from presenting but not automatically excused for completing your work for the sprint!
The instructor will consider your request, and either (a) grant you an exemption from this component and redistribute the weight across other components, (b) grant you an extension, where you are expected to meet the requirement at a later date, or (c) not grant your request, in which case you have to either attend/contribute or accept a grade of zero. The decision to grant an exemption is at the discretion of the instructor.
Finally, you are allowed to miss at-most one demo per term without penalty, regardless of the reasons.
If you test positive for COVID or have COVID-symptoms, you are required to use the COVID self-declaration form. If you are ill but do not meet the COVID self-declaration guidelines, you should instead follow the guidelines and steps outlined in the Math Accommodations page.
In both cases, you must also follow the instructions listed above.
You CANNOT use a short-term absence to delay a project demo (LAB components are exempt from STA requests). Contact the instructor if other assessments are affected.
It is our intent that students from all diverse backgrounds and perspectives are well-served by this course, and that student’s learning needs be addressed both in and out of class. We recognize the immense value of the diversity in identities, perspectives, and contributions that students bring, and the benefit it has on our educational environment. Your suggestions are encouraged and appreciated. Please let us know ways to improve the effectiveness of the course for you personally or for other students or student groups. In particular:
- We will gladly honour your request to address you by an alternate/preferred name or gender pronoun. Please advise us of this preference early in the term so we may make appropriate changes to our records.
- We will honour your religious holidays and celebrations. Please inform us of these at the start of the course.
- We will follow AccessAbility Services guidelines and protocols on how to best support students with different learning needs.
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. Contact the Office of Academic Integrity for more information. You are expected to follow the policies outlined above for quiz and project submissions.
To ensure academic integrity, MOSS (Measure of Software Similarities) is used in this course as a means of comparing student projects. We will report suspicious activity, and penalties for plagiarism/cheating are severe. Please read the available information about academic integrity very carefully.
Students are expected to act professionally, and engage one another in a respectful manner at all times. This expectation extends to working together in project teams. Harassment or other forms of personal attack will not be tolerated. Course staff will not referee interpersonal disputes on a project team; incidents will be dealt with according to Policy 33.
Students are expected to either work on their own (in the case of quizzes), or work within a project team (for the remaining deliverables in the course). All work submitted should either be their own or created by the team for use in their project. However, we realize that it is common practice to use third-party libraries and sources found online to solve programming problems. For this reason, the team is allowed to use third-party source or libraries for their project provided that (a) they document the source of this contribution in source code, typically as a comment, and in their README file, and (b) no single source constitutes more than 10% of their project. Failure to acknowledge a source will result in a significant penalty (10% or more) of your final project grade, depending on the severity of the infraction. Note that MOSS will be used to compare student assignments, and that this rule also applies to copying from other student projects.
OpenAI & LLM
Use of OpenAI systems (including ChatGPT, CoPilot and similar systems) falls under the umbrella of plagiarism: it’s a source that you must cite, and it’s contribution cannot exceed more than 10% of your code (per above policy).
Reuse of Projects
You cannot base your project in part or in whole on coursework that you have completed for a different course. Similarly, you cannot submit the same project to multiple courses for credit (i.e. CS 346 and CS 446 would require different projects to be submitted that do not share code or any componets).
A student is expected to know what constitutes academic integrity to avoid committing an academic offence, and to take responsibility for his/her actions. A student who is unsure whether an action constitutes an offence, or who needs help in learning how to avoid offences (e.g., plagiarism, cheating) or about ‘rules’ for group work/collaboration should seek guidance from the course instructor, academic advisor, or the undergraduate Associate Dean. For information on categories of offences and types of penalties, students should refer to Policy 71, Student Discipline. For typical penalties check Guidelines for the Assessment of Penalties.
Students should be aware that this course contains the intellectual property of their instructor, TA, and/or the University of Waterloo. Intellectual property includes items such as:
- Lecture content, spoken and written (and any audio/video recording thereof)
- Lecture handouts, presentations, and other materials prepared for the course (e.g., PowerPoint slides)
- Questions or solution sets from various types of assessments (e.g., assignments, quizzes, tests, final exams), and
- Work protected by copyright (e.g., any work authored by the instructor or TA or used by the instructor or TA with permission of the copyright owner).
Course materials and the intellectual property contained therein, are used to enhance a student’s educational experience. However, sharing this intellectual property without the intellectual property owner’s permission is a violation of intellectual property rights. For this reason, it is necessary to ask the instructor, TA and/or the University of Waterloo for permission before uploading and sharing the intellectual property of others online (e.g., to an online repository). Permission from an instructor, TA or the University is also necessary before sharing the intellectual property of others from completed courses with students taking the same/similar courses in subsequent terms/years. In many cases, instructors might be happy to allow distribution of certain materials. However, doing so without expressed permission is considered a violation of intellectual property rights.
As part of the University’s Continuity of Education Plan, every course should be designed with a plan that considers alternate arrangements for cancellations of classes and/or exams.
Here is how we will handle cancellations in this course, if they occur.
In the case of minor disruptions (e.g. one lecture), the lecture content will be reorganized to fit the remaining time. This should not have any impact on demos or deliverables.
Cancellation of multiple classes may result in a reduction in the number of sprints and associated deliverables to fit the remaining time. If this happens, lecture content will also be pruned to fit available time. Assessment weights will be redistributed evenly over the remaining content if required to align with the material.
Cancellation of in-person (midterm or final) examinations has no effect on this course, since we do not have scheduled exams. Quizzes will continue to be written, but will be adjusted to the modified schedule as necessary.