CAPP 30320 - Software Engineering for Civic Tech
This course focuses on software architecture and design, emphasizing skills and technologies essential for the type of collaborative development teams common in open source and civic technology sectors. The curriculum covers modern design patterns, software testing, and the construction and maintenance of data pipelines.
We will delve into special topics such as APIs, GIS, data privacy and licensing, using real-world examples from civic technology.
Students will collaborate on a project, experiencing a comprehensive requirements gathering and revision process. This approach provides hands-on experience with evolving requirements and showcases the advantages of thoughtful design.
At the conclusion of this course students will have a comprehensive understanding of real world considerations in software design as well as practical experience building a data-driven application as part of a team.
Goals
- Develop fluency in common software architectures and patterns, and a sense of when they are and aren't appropriate to use.
- Gain practical experience working on a team, building a project with enough complexity as to help demonstrate the benefits of the practices discussed in class.
- Begin to develop "taste" when it comes to software design & interface choices.
- Understand some special considerations that come with working in the civic tech sector, from audience considerations to working within certain constraints.
Textbook
Textbook: A Philosophy of Software Design, 2nd Edition
This is a short, digestible book that serves both as an introduction and helpful reference for aspiring software developers and seasoned professionals alike.
Relevant readings from this book and outside sources will be assigned before lecture to give us all shared context.
Coursework
The primary work in this course will be completing a quarter-long group project and applying best practices as you go. There will be regular meetings & milestones as part of this work.
Students should expect to write a significant amount of code as part of this course.
For more details, see Course Project.
Prerequisites
This course requires completion of CAPP 30122 (Computer Science with Applications 2) and CAPP 30235 (Databases for Public Policy) or equivalent.
Course Information
Days: Monday & Wednesday
Location: Ryerson 255
Time 1:30-2:50pm
Course Schedule
Week | Date | Lecture | Due |
---|---|---|---|
1 | Monday, 3/24 | Introduction | |
1 | Wednesday, 3/26 | Intro/Project Teams | |
1 | Friday, 3/28 | M0: Project Proposal | |
2 | Monday, 3/31 | Human-Centered Design | |
2 | Wednesday, 4/2 | Design Exercise | |
2 | Sunday, 4/6 @ 11:59pm | M1: Design Milestone | |
3 | Monday, 4/7 | Building Software on a Team | |
3 | Wednesday, 4/9 | Tools for Working Together | |
3 | Friday, 4/11 @ 11:59pm | M2: Work Plan | |
4 | Monday, 4/14 | Application Architecture | |
4 | Wednesday, 4/16 | Testing | |
4 | Friday, 4/18 @ 11:59pm | M3: Git Repository | |
5 | Monday, 4/21 | Interface Design | |
5 | Wednesday, 4/23 | APIs | |
6 | Monday, 4/28 | Functional Patterns | |
6 | Wednesday, 4/30 | Data Pipelines | |
6 | Friday, 5/2 @ 11:59pm | M4: Preliminary Documentation | |
7 | Monday, 5/5 | OOP Design Patterns | |
7 | Wednesday, 5/7 | Refactoring | |
7 | Friday, 5/9 @ 11:59pm | M5: Prototype Presentation | |
8 | Monday, 5/12 | Special Topics | |
8 | Wednesday, 5/14 | Special Topics | |
9 | Monday, 5/19 | Special Topics | |
9 | Wednesday, 5/21 | Conclusion | |
10 | TBD | Final Deliverable |
Course Staff
James Turk
Email: jturk@uchicago.edu
Office: JCL 398E
Teaching Assistants
TBD
Office Hours
TBD, will be scheduled with each team
Please schedule additional time as needed: https://cal.com/jamesturk