Several exercises throughout the semester will provide you with experience using some of the core tools and techniques necessary for the software development process. These exercises will not make you an expert in using the tools and techniques they discuss. They will provide a common baseline of skill for all members of your team, regardless of what was taught in your previous programming or software engineering courses. In addition, the exercises will often contain references or links to additional material that you can explore in order to become an expert, guru, or wizard. Exercises are weighted such that later exercises are worth more than earlier exercises.
Exercises below are subject to change up until they are officially released per the schedule.
Exercise 0: Background [TA: Jessy]
Exercise 1: Building and Dependencies [TA: Mohsen]
Exercise 2: Git and GitHub [TA: Jessy]
Exercise 3: Basic Design [TA: Mohsen]
Exercise 4: Unit Testing and Continuous Integration [TA: Jessy]
Exercise 5: Inheritance [TA: Mohsen]
Exercise 6: Leveraging Polymorphism [TA: Jessy]
Exercise 7: Design Scenarios [TA: Mohsen]
Also note, these exercises are not enough to guarantee that you can effectively develop software and write good code. For example, the project in this class uses C++20, but you may have never used C++20 before. The exercises will not provide you with sufficient background or skill in using C++20 effectively. The videos on the links page will only help somewhat with that. Our in class code reviews, discussions, and critiques will help with that, but you should actively seek to improve your knowledge of such technologies on your own as a future software developer. If you are interested in finding additional resources to learn about a particular topic, let me know and I'll be happy to point you in a fruitful direction.
A rough schedule of planned exercises is below, subject to change.
| Day | Exercises | |||||||
|---|---|---|---|---|---|---|---|---|
| E0 | E1 | E2 | E3 | E4 | E5 | E6 | E7 | |
| Sep 3 | ||||||||
| Sep 8 | ||||||||
| Sep 10 | ||||||||
| Sep 15 | ||||||||
| Sep 17 | ||||||||
| Sep 22 | ||||||||
| Sep 24 | ||||||||
| Sep 29 | ||||||||
| Oct 1 | ||||||||
| Oct 6 | ||||||||
| Oct 8 | ||||||||
| Oct 13 | ||||||||
| Oct 15 | ||||||||
| Oct 20 | ||||||||
| Oct 22 | ||||||||
| Oct 27 | ||||||||
| Oct 29 | ||||||||
| Nov 3 | ||||||||
| Nov 5 | ||||||||
| Nov 10 | ||||||||
| Nov 12 | ||||||||
| Nov 17 | ||||||||
| Nov 19 | ||||||||
| Nov 24 | ||||||||
| Nov 26 | ||||||||
| Dec 1 | ||||||||
All exercises this semester can be completed in CSIL, but they use software that is not available by default. In order to make these available to you, a special Python virtual environment can be used to automatically enable and disable access to this software by default.
To start the virtual environment from within CSIL, run:
source /usr/shared/CMPT/faculty/wsumner/base/env373/bin/activateThis activates the underlying virtual environment thats makes more recent software for the course available. You can exit the virtual environment by running:
deactivateYou can even add the source line to the end of your ~/.bashrc configuration
file to enable the environment automatically when you log in
(if you so choose).
It is also possible to work within a docker container that provides the required versions of all software that we will use this semester. Note, no support for docker will be provided. If you choose to work this way, you are on your own. It is, however, possible to conveniently connect IDEs like VS Code to an appropriate docker image to complete all work.
To pull the latest version of the docker image for the class, you can use:
docker pull nsumner/cmpt373:fall2025You can start a container with this image and access files on your filesystem using a command like:
docker run -ti --name=cmpt373work --ulimit='stack=-1:-1' -v << path on your system >>:/opt/work nsumner/cmpt373:fall2025For instance, this maps the given << path on your system >> to the location /opt/work in the container.
If you exit from the container, you can restart it again later with:
docker start -ai cmpt373work