In-Class Software Projects
Throughout the semester, we will complete a series of guided in-class software projects.
These projects are designed to provide hands-on experience with the software engineering concepts, modeling techniques, and computational tools discussed in class.
Unlike the semester project, these activities are intentionally structured and provide a common starting point for everyone in the course.
Each project will be distributed as a Git repository.
Purpose
The primary purpose of the in-class projects is to help you learn new tools and techniques in a low-risk environment before applying them to your own project.
These repositories provide:
- working examples
- guided exercises
- opportunities to collaborate with classmates
- opportunities to practice modifying and improving software
- examples of good software engineering practices
The projects are intentionally smaller and more focused than your semester project.
General Workflow
For each in-class project, you should:
- Obtain a copy of the project repository.
- Read the README and project overview.
- Run the provided examples.
- Work through the exercises.
- Discuss your observations with your teammates.
- Commit your changes as you progress.
- Reflect on how the ideas apply to your own project.
Most projects will build on a combination of:
- Python programming
- scientific software engineering
- computational modeling
- software development tools
Working in Class
Class time is reserved specifically for these activities.
You are encouraged to:
- ask questions
- collaborate with classmates
- compare approaches
- help troubleshoot software issues
- discuss design decisions
Many exercises are deliberately open-ended and may have more than one reasonable solution.
The goal is not simply to finish the exercise. The goal is to understand the software concepts being demonstrated.
Repository Ownership
Whenever possible, create your own fork of each repository.
Working in your own copy allows you to:
- save your work
- experiment freely
- maintain a record of your progress
- revisit the material after the course is complete
Think of these repositories as part of your growing software portfolio.
Using AI Tools
AI tools may be useful during these activities.
Examples include:
- explaining unfamiliar code
- helping interpret error messages
- suggesting improvements
- generating documentation
- answering software questions
However, you remain responsible for:
- understanding the code
- testing the results
- validating any changes
- explaining your work
Always review and verify AI-generated output before accepting it.
Software Engineering Focus
Each repository will emphasize one or more of the following themes:
- Safe software
- Portable software
- Reproducible software
- Robust software
- Literate software
As you work through the exercises, consider how each activity contributes to one or more of these goals.
Planned Project Sequence
Project 1: Modeling Components and Software Foundations
This project introduces:
- repository structure
- reading code
- modifying code
- functions
- modules
- imports
- code quality tools
Students will begin with a working example and gradually transform it into a reusable software component.
Project 2: Analytical Modeling
This project explores:
- symbolic computation
- model exploration
- synthetic data generation
- parameter estimation
- model discovery
Students will investigate how software can help us understand and work with analytical models.
Project 3: Physical Modeling
This project explores:
- simulation
- numerical methods
- iterative systems
- computational experiments
Students will learn how physical processes can be represented and investigated through computation.
Project 4: Data-Driven Modeling
This project explores:
- regression
- machine learning
- model fitting
- prediction
- interpretation
Students will examine how software can learn from observations and data.
Relationship to the Semester Project
The in-class projects and semester project are closely connected.
The in-class projects provide:
- tools
- techniques
- examples
- software engineering practices
Your semester project provides:
- context
- application
- integration
- deeper exploration
As you complete each in-class project, consider how the ideas might improve your own work.
Expectations
You are not expected to understand every detail immediately.
You are expected to:
- engage with the material
- experiment with the software
- ask questions
- work through problems
- reflect on what you learn
The in-class projects are an opportunity to practice new skills while receiving guidance and support from your classmates and instructor.
Final Thought
The purpose of these repositories is not to produce perfect software.
The purpose is to practice the process of improving software over time.
Small improvements, repeated consistently, are often what transform an idea into a useful research tool.