Agenda
What’s covered each week in-class, including links to slides and course content.
Week 01: Introduction
Course overview; how to form project teams and setup your project.
Wed Lecture
- Welcome to the course and what to expect! (20)
 - Teamwork and how to work together (23)
 
You will have time at the end of class to meet people and form teams.
Fri Lab
- Form a Team to register your team
 - Setup Project to create your GitLab project space, and add initial content
 - Documentation practices that you will use through the course
 
This is another chance to meet people! If you have a team, you can work on these tasks.
n/a
Week 02: Requirements
Structure of a software project; defining and documenting requirements.
Wed Lecture
- Course registration & team formation - checking in
 - Software engineering and running a software project. (47)
 - Determining requirements for a project. (38)
 
Fri Lab
- Review the course project requirements in more detail.
 - Review the project proposal milestone and discuss grading.
 - How to track your project in GitLab.
 - How to manage individual work and what to track.
 
Setup Your Project is due by 6:00 PM
Week 03: Learning Kotlin
How to write programs in Kotlin! Installing the development toolchain.
Wed Lecture
- Team Formation - complete your project setup ASAP
 - Kotlin 1: Introduction to Kotlin (40)
 - Kotlin 2: Object-Oriented Kotlin (20)
 - Kotlin 3: Functional Kotlin (20)
 
Fri Lab
- Installing the development toolchain 
- IDE installation; JDK version and installation; Plugins
 - Opening sample projects; Running and debugging
 
 - Git branching and managing feature branches 
- Demonstrate the GitLab workflow
 
 
Quiz 1 is due by 6:00 PM
Week 04: Architecture
How to structure programs to meet requirements. Build systems and dependencies.
Wed Lecture
- Software architecture (38)
 - Build systems & Gradle (28) 
- Creating a Gradle project for your team
 - Managing project dependencies e.g., libraries and plugins, shared projects.
 
 
Fri Lab
- Project proposal presentation is due in-class, see demo times
 
Project proposal submission is due by 6:00 PM
Week 05: Testing
Writing tests and test-driven development.
Wed Lecture
- Testing (25)
 - Sprint 1 Kickoff (6)
 
Fri Lab
- Pair programming for fun and profit
 - mm-console demo
 
Quiz 2 is due by 6:00 PM
Week 06: User Interfaces
Building graphical user interfaces with Compose.
Wed Lecture
Fri Lab
- Sprint 1 demo is due in-class, see demo times
 
Sprint 1 source code must be submitted by 6:00 PM
Week 07: Reading week
Wed Lecture
- No lecture!
 
Fri Lab
- No lab. Nothing is due. Enjoy the week!
 
Week 08: Platforms
Desktop and Android functionality.
Wed Lecture
- Sprint 2 Kickoff
 - Compose by Platform
- desktop applications (32) 
- mm-desktop demo
 
 - mobile applications (41) 
- mm-android demo
 
 
 - desktop applications (32) 
 
Fri Lab
- Refactoring (17)
 
Quiz 3 is due by 6:00 PM
Week 09: SQL databases
Designing and using a SQL database for local data.
Wed Lecture
- Databases (68)
 
Fri Lab
- Sprint 2 demo is due in-class, see demo times
 
Sprint 2 source code must be submitted by 6:00 PM
Week 10: Web services
How to pull and integrate data from a remote web service.
Wed Lecture
- Services (34)
 
Fri Lab
- Q&A
 
Quiz 4 is due by 6:00 PM
Week 11: Concurrency
How to write concurrent code.
Wed Lecture
- Concurrency (54)
 
Fri Lab
- Sprint 3 demo is due in-class, see demo times
 
Sprint 3 source code must be submitted 6:00 PM
Week 12: Packaging
How to package and/or containerize your application for deployment.
Wed Lecture
- Packaging (24)
 
Fri Lab
- Q&A
 
Quiz 5 is due by 6:00 PM
Week 13: Wrapup
Final Q&A.
Wed Lecture
- Review of final submission guidelines
 - Post questions on Piazza and we’ll address them in-class.
 - No formal lecture.
 
Fri Lab
- Sprint 4 demo is due in-class, see demo times
 
Sprint 4 source code must be submitted by 6:00 PM
Week 14: Software Release
Tues is the last day of classes, so there are no lectures or labs this week.
Your Software Release milestone is due by Tues Dec 2 @ 11:59 PM. Extensions are not possible.