There will be 5 individual programming projects throughout the semester and one final group project. For each project, you will solve a concrete problem by implementing an algorithm in such a way as to meet a conservative performance requirement. A reasonable implementation will sail through the performance requirement. You will prepare a typed report electronically according to the guidelines for each project. You will answer questions posed in the project guidelines and usually report the results of an empirical analysis of your algorithm. All project reports should include a copy of your documented source code and a screenshot demonstrating the working algorithm. And, all reports should be prepared neatly and professionally using good grammar and writing, be easy to read and clearly contain all required information for the project---make it easy for the reader to see that you know what you are talking about.
All projects will be done in Python using the development environment of your choice. Because we will be providing you with code harnesses for the projects, you must work in Python (if this is a new language for you---great!---the more languages you are exposed to, the better). Follow this link for more information on installing Python 3 and PyQt5 (necessary for GUIs, etc.)
Design Experience: You are developing as a problem solver. In this class, you are also learning the importance of solving a problem and analyzing the solution before you start writing code. For each project, you are required to have a "design experience" after reading the project instructions but before writing any code.
This experience might best be done using a whiteboard to walk through the solution with a one- (or more-) person technical audience, with that person being a CS 4412 classmate, another CS major or another technical person with an eye for detail. Make sure you sketch out and understand how to represent a problem instance (both inputs and outputs) and how to map from inputs to outputs (your algorithm). Simulate simple examples and a non-trivial example or two with your marker. Think out loud. Listen to your audience as he or she poses questions or identifies potential complications. In short, make sure you understand what you are going to do before you write a stitch of code. If two students reciprocate for one another, then each person should take a turn as presenter and as audience member. The purpose of your design experience is to get the concept of a working solution out in front of yourself (and other thoughtful people). If you don’t have a solution that appears to work and hold up to scrutiny, then your design experience is not complete. Don’t code without clear thinking up front.
For each design experience, you will complete a simple quiz in Moodle by briefly describing and evaluating the quality of your experience. Due dates for these quizzes are shown on the schedule; quizzes will open one week before the due date and close at 10:59pm on the date they are due. Late design experiences are not accepted, but if you are late you should go through the process anyhow before writing code. Each project's design experience has a submission deadline on the course schedule about a week and a half before the project report submission due date (except for the first project), but I encourage you to finish the design experience as early as possible. The design experience will be worth 10% of your project grade.
Submission: All project reports should be submitted in PDF format via Moodle on or before the published due date, except the group project which is due as a hardcopy at the beginning of class on the day you present your group project.