← All Lessons
Week 16|Capstone

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.

🔥 Warm-Up

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:

  1. Define -- What problem are you solving or what question are you exploring?
  2. Research -- What do you already know? What do you need to find out?
  3. Plan -- Sketch your design. Break it into steps. Estimate the time each step takes.
  4. Build -- Execute your plan. Start with the simplest version that works.
  5. Test -- Does it work? Where does it break? What could be better?
  6. Iterate -- Improve based on testing. Go back to step 3 if needed.
  7. Present -- Explain what you built, what you learned, and what you would change.
💡 Key Concept

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.
Tip

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:

  1. Title and your name
  2. Introduction -- What is the topic and why is it interesting?
  3. Key concepts -- Explain the core ideas clearly (diagrams help!)
  4. Interesting data or examples -- Include numbers, graphs, or images
  5. 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 |

Tip

When you get stuck (and you will):

  1. Read the error message carefully. Python error messages are surprisingly helpful -- they tell you the line number and what went wrong.
  2. Simplify. Remove the complicated part and get the simple version working first.
  3. Test small pieces. Do not write 50 lines and then run. Write 5 lines, test, write 5 more.
  4. Search for examples. Look up "Python [what you are trying to do]" -- chances are someone has done it before.
  5. 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()
💡 Key Concept

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:

🏆 Challenge

Prepare a 5-minute presentation that answers these questions:

  1. What did you build? Give a demo or show your poster/creation.
  2. Why did you choose this project? What interested you about it?
  3. How does it work? Walk through the key parts -- the algorithm, the design, the science.
  4. What was the hardest part? Every project hits obstacles. What were yours and how did you get past them?
  5. What would you change or add with more time? This shows that you are thinking like an engineer -- always iterating.
  6. 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:

  1. At the start of this course, what did you think STEM was about? Has your view changed?
  2. What skill did you develop the most -- mathematical reasoning, programming, scientific thinking, or engineering design?
  3. If you could add a Week 17, what topic would you want to explore?
  4. What advice would you give to a student starting this course?

Resources

TED's Secret to Great Public Speaking — Chris Anderson