Capstone: Your STEM Showcase
Reflect on 15 weeks of learning and build a final project that showcases your favorite topic.
Materials for this lesson
- Laptop (charged)
- Project-specific materials (varies by choice)
- Paper and pencil for planning
- Presentation materials (poster board, markers, or slideshow software)
Warm-Up: The STEM Journey Reflection
Before diving into your capstone project, take a few minutes to reflect on everything you have explored over the past 15 weeks. Write your answers on paper -- there are no wrong answers here.
1. What was your favorite topic or lesson? Think about which week made you the most excited, curious, or surprised. What made it stand out?
2. What was your biggest surprise? Was there a moment when something clicked and you saw the world differently? A fact that blew your mind? A connection between two topics you did not expect?
3. What do you want to learn more about? Science and math are infinite. What questions are still bouncing around in your head?
4. What are you most proud of? Think about a problem you solved, a program you wrote, or a concept you mastered that felt really hard at first.
Reflection is not just a nice ending -- it is how learning actually sticks. Research on memory and learning shows that retrieval practice (actively recalling what you learned) is one of the most powerful study techniques. By thinking back over 15 weeks, you are strengthening every concept you encountered.
Core Lesson: Designing Your Capstone Project
The Engineering Design Process (Revisited)
Whether your project is code, hardware, or research, the design process is the same:
- Define -- What problem are you solving or what question are you exploring?
- Research -- What do you already know? What do you need to find out?
- Plan -- Sketch your design. Break it into steps. Estimate the time each step takes.
- Build -- Execute your plan. Start with the simplest version that works.
- Test -- Does it work? Where does it break? What could be better?
- Iterate -- Improve based on testing. Go back to step 3 if needed.
- Present -- Explain what you built, what you learned, and what you would change.
The MVP Principle: Professional engineers and software developers almost never try to build the final version first. They build the Minimum Viable Product -- the simplest version that demonstrates the core idea. Then they improve it. This prevents you from spending hours on details before the foundation works.
Your capstone should follow this principle. Get something working first, then make it good.
How to Scope a Project
The biggest mistake in project work is trying to do too much. Here is a quick scoping guide:
| Scope Level | Description | Example | |-------------|-------------|---------| | Too Small | Could finish in 15 minutes, does not show much learning | "Print Hello World" | | Just Right | Takes 45-90 minutes of focused work, demonstrates a real concept, has room to extend | "Build a dice game with probability tracking" | | Too Big | Would take days or weeks, multiple complex parts | "Build a full video game with graphics" |
The test: Can you describe your project in one sentence? Can you list 3-5 concrete steps to build it? If yes, the scope is probably right.
Project Ideas
Here are four categories of capstone projects. Pick one that excites you, or propose your own.
Option A: A Python Program
Build a program that demonstrates concepts from this course.
Idea 1: Dice Game Simulator Create a game where the player bets on dice outcomes. Track wins, losses, and compare actual results to theoretical probability.
# Starter code: Dice game framework
import random
def roll_dice(num_dice=2):
"""Roll num_dice dice and return the total."""
rolls = [random.randint(1, 6) for _ in range(num_dice)]
return rolls, sum(rolls)
def play_game():
print("=" * 40)
print(" DICE PREDICTION GAME")
print("=" * 40)
wins = 0
losses = 0
rounds = 0
while True:
print(f"\nScore: {wins} wins, {losses} losses")
print("Will the sum of 2 dice be...")
print(" 1. Low (2-6)")
print(" 2. Lucky 7")
print(" 3. High (8-12)")
print(" 4. Quit")
choice = input("\nYour prediction: ")
if choice == "4":
break
rolls, total = roll_dice(2)
print(f"\nRolled: {rolls[0]} + {rolls[1]} = {total}")
rounds += 1
if choice == "1" and total <= 6:
print("Correct! Low it is.")
wins += 1
elif choice == "2" and total == 7:
print("Lucky 7! Nice call.")
wins += 1
elif choice == "3" and total >= 8:
print("Correct! High roller.")
wins += 1
else:
print("Nope! Better luck next time.")
losses += 1
# Final stats
print("\n" + "=" * 40)
print(" FINAL STATS")
print("=" * 40)
if rounds > 0:
print(f" Rounds played: {rounds}")
print(f" Wins: {wins} ({100 * wins / rounds:.1f}%)")
print(f" Losses: {losses} ({100 * losses / rounds:.1f}%)")
# Theoretical probabilities
print("\n Theoretical probabilities:")
print(" Low (2-6): 41.7%")
print(" Lucky 7: 16.7%")
print(" High (8-12): 41.7%")
play_game()
Extend it: Add a betting system with a starting balance. Track the distribution of totals over many rolls and graph it. Add an option for 3 dice and recalculate the probabilities.
Idea 2: Caesar Cipher Tool Build an encryption/decryption tool using the Caesar cipher (shift cipher). Extend it with a brute-force cracker.
# Caesar Cipher — Encrypt and Decrypt
def encrypt(text, shift):
"""Encrypt text by shifting each letter by 'shift' positions."""
result = ""
for char in text:
if char.isalpha():
base = ord('A') if char.isupper() else ord('a')
shifted = (ord(char) - base + shift) % 26 + base
result += chr(shifted)
else:
result += char # Keep spaces, punctuation unchanged
return result
def decrypt(text, shift):
"""Decrypt by shifting in the opposite direction."""
return encrypt(text, -shift)
def brute_force_crack(ciphertext):
"""Try all 26 possible shifts and display results."""
print("\nBrute force attack — all 26 possibilities:")
print("-" * 50)
for shift in range(26):
decrypted = decrypt(ciphertext, shift)
print(f" Shift {shift:2d}: {decrypted}")
# Interactive mode
print("=" * 40)
print(" CAESAR CIPHER TOOL")
print("=" * 40)
while True:
print("\n1. Encrypt a message")
print("2. Decrypt a message")
print("3. Brute-force crack a message")
print("4. Quit")
choice = input("\nChoice: ")
if choice == "1":
message = input("Message to encrypt: ")
shift = int(input("Shift value (1-25): "))
encrypted = encrypt(message, shift)
print(f"Encrypted: {encrypted}")
elif choice == "2":
message = input("Message to decrypt: ")
shift = int(input("Shift value (1-25): "))
decrypted = decrypt(message, shift)
print(f"Decrypted: {decrypted}")
elif choice == "3":
message = input("Ciphertext to crack: ")
brute_force_crack(message)
elif choice == "4":
print("Goodbye!")
break
Extend it: Add frequency analysis to automatically detect the most likely shift. Add the Vigenere cipher as an advanced mode.
Idea 3: Population Growth Model Simulate population growth with the logistic model, plotting the results.
Idea 4: Data Analysis Project Find a real dataset (weather, sports stats, astronomy data) and analyze it with Python. Calculate statistics, find trends, and create visualizations.
Option B: A Physical Build
Build something tangible that demonstrates a STEM concept.
- Improved bridge design -- Apply what you learned about structural engineering. Can you beat your original bridge's weight-to-strength ratio?
- Electric circuit project -- Build a circuit that does something useful or interesting (alarm, LED pattern, sensor).
- Rube Goldberg machine -- A chain-reaction machine that performs a simple task in the most complicated way possible. Demonstrates energy transfer, mechanical advantage, and creative engineering.
For physical builds: Take photos or video at each stage. Document what worked, what failed, and what you changed. The process is as important as the final product.
Option C: A Research Poster
Create a one-page research poster on an advanced topic that interests you. This is how real scientists present their work at conferences.
Poster sections:
- Title and your name
- Introduction -- What is the topic and why is it interesting?
- Key concepts -- Explain the core ideas clearly (diagrams help!)
- Interesting data or examples -- Include numbers, graphs, or images
- What I learned / Open questions -- What surprised you? What is still unknown?
Topic ideas:
- Black holes and how we photograph them
- CRISPR gene editing and its implications
- The Riemann Hypothesis (unsolved math problem)
- Quantum computing vs classical computing
- Climate modeling and feedback loops
- The mathematics of music
- Exoplanet detection methods
Option D: Propose Your Own
Have a different idea? Pitch it! The only requirements are:
- It connects to something you learned in this course
- It is demonstrable (you can show or explain it)
- It challenges you appropriately
Planning Your Project
Once you have chosen a project, fill out this plan (on paper or in a document):
PROJECT PLAN
============
1. Project title:
2. One-sentence description:
3. Which course topics does this connect to?
4. Steps to complete:
Step 1:
Step 2:
Step 3:
Step 4:
Step 5:
5. What is the MVP (minimum viable product)?
6. What are stretch goals (if I have extra time)?
7. What do I need (materials, data, software)?
What should you build FIRST when starting a project?
Hands-On Lab: Build Time
This is your time to work. Here is a suggested timeline for a 90-minute session:
| Time | Activity | |------|----------| | 0-10 min | Finalize your project choice and plan | | 10-20 min | Set up -- gather materials, create files, find resources | | 20-60 min | Build your MVP -- get the core working | | 60-75 min | Test, fix bugs, improve | | 75-85 min | Prepare your presentation (next section) | | 85-90 min | Clean up and save everything |
When you get stuck (and you will):
- Read the error message carefully. Python error messages are surprisingly helpful -- they tell you the line number and what went wrong.
- Simplify. Remove the complicated part and get the simple version working first.
- Test small pieces. Do not write 50 lines and then run. Write 5 lines, test, write 5 more.
- Search for examples. Look up "Python [what you are trying to do]" -- chances are someone has done it before.
- Ask for help. Explaining your problem out loud often reveals the solution (this is called "rubber duck debugging").
Starter Template (for Python projects)
If you are doing a Python project and need a starting structure:
"""
Capstone Project: [YOUR TITLE HERE]
Author: [YOUR NAME]
Date: [TODAY'S DATE]
Description:
[One or two sentences about what this program does]
"""
# --- IMPORTS ---
# Add any libraries you need here
# import random
# import matplotlib.pyplot as plt
# import time
# --- CONSTANTS ---
# Define any fixed values here
# EXAMPLE: MAX_ROUNDS = 10
# --- FUNCTIONS ---
def main():
"""Main function -- the program starts here."""
print("=" * 50)
print(" [YOUR PROJECT TITLE]")
print("=" * 50)
# Your code here!
# Start with the simplest version that works.
print("\nThanks for using my program!")
# --- RUN THE PROGRAM ---
if __name__ == "__main__":
main()
Why use if __name__ == "__main__"? This is a Python convention that means "only run main() if this file is being run directly." If someone imports your file as a module, main() will not run automatically. It is a professional practice worth learning now.
Challenge: Present Your Work
The final step -- and arguably the most important skill in all of STEM -- is communicating what you did. The greatest discovery or invention in the world is worthless if you cannot explain it to someone else.
Your Presentation Should Cover:
Prepare a 5-minute presentation that answers these questions:
- What did you build? Give a demo or show your poster/creation.
- Why did you choose this project? What interested you about it?
- How does it work? Walk through the key parts -- the algorithm, the design, the science.
- What was the hardest part? Every project hits obstacles. What were yours and how did you get past them?
- What would you change or add with more time? This shows that you are thinking like an engineer -- always iterating.
- What did you learn? Not just about the topic, but about the process of building something.
Tips for a Great Presentation
Do:
- Start with a hook -- a question, a surprising fact, or a live demo
- Show your work running (for code) or in action (for physical builds)
- Explain one thing you are proud of in detail
- Be honest about what did not work -- that is where the best learning happens
Avoid:
- Reading slides word-for-word
- Spending too long on background before showing your work
- Saying "it is not that good" -- you built something real, own it
Reflection Questions (Write These Down)
After your presentation, reflect on the overall 16-week experience:
- At the start of this course, what did you think STEM was about? Has your view changed?
- What skill did you develop the most -- mathematical reasoning, programming, scientific thinking, or engineering design?
- If you could add a Week 17, what topic would you want to explore?
- What advice would you give to a student starting this course?
Resources
- Replit -- online Python editor for coding projects
- Canva -- free tool for creating research posters and presentations
- Python Docs -- official Python documentation
- Matplotlib Gallery -- examples of every kind of graph you can make in Python
- Instructables -- step-by-step guides for physical builds and engineering projects
- Science Buddies -- project ideas with full guides
- How to Give a Great Presentation -- TED title="Chris Anderson: TED's Secret to Great Public Speaking" -- tips on presenting with clarity and confidence
TED's Secret to Great Public Speaking — Chris Anderson