---
title: "PY102 · Think like a programmer"
publisher: Maestro College (Maestro Open)
lessons: 40
source: https://open.maestrocollege.edu/think-like-a-programmer
full: https://open.maestrocollege.edu/think-like-a-programmer/llms-full.txt
---

# Think like a programmer (PY102)

Learn to organize data and design step-by-step solutions in Python, from lists, stacks and queues to searching, sorting and Big-O.

## Course objectives
- Data structures and abstract data types
- Analyzing algorithm efficiency with Big O notation
- Arrays and nested data structures
- Implementing stacks and queues
- Searching and sorting algorithms

## Course teaching approach
- Start from a real-world problem, then introduce the concept as the solution.
- Keep it true beginner level, hands-on, a little gamified. The learner should feel they are winning.
- Balance explanation, demonstration and practice. No copy-paste exercises: give small story-based tasks.
- End with one fun closed question about the topic.

## Lessons
### Unit 1: Foundations of data structures
- [What is a data structure?](https://open.maestrocollege.edu/think-like-a-programmer/what-is-a-data-structure.md)
- [Arrays and indexing](https://open.maestrocollege.edu/think-like-a-programmer/arrays-and-indexing.md)
- [How updates and removals reshape a structure](https://open.maestrocollege.edu/think-like-a-programmer/how-updates-and-removals-reshape-a-structure.md)
- [Challenge: basic array operations](https://open.maestrocollege.edu/think-like-a-programmer/challenge-basic-array-operations.md)
- [Building lists from lists](https://open.maestrocollege.edu/think-like-a-programmer/building-lists-from-lists.md)
- [Solving problems with arrays](https://open.maestrocollege.edu/think-like-a-programmer/solving-problems-with-arrays.md)
- [Multi-dimensional arrays](https://open.maestrocollege.edu/think-like-a-programmer/multi-dimensional-arrays.md)
- [Edge cases and reliability in array operations](https://open.maestrocollege.edu/think-like-a-programmer/edge-cases-and-reliability-in-array-operations.md)
- [Challenge: advanced array operations](https://open.maestrocollege.edu/think-like-a-programmer/challenge-advanced-array-operations.md)

### Unit 2: Stacks and queues
- [Stacks and LIFO](https://open.maestrocollege.edu/think-like-a-programmer/stacks-and-lifo.md)
- [Stack operations, push and pop](https://open.maestrocollege.edu/think-like-a-programmer/stack-operations-push-and-pop.md)
- [Building a stack using lists](https://open.maestrocollege.edu/think-like-a-programmer/building-a-stack-using-lists.md)
- [Applying stacks to undo behavior](https://open.maestrocollege.edu/think-like-a-programmer/applying-stacks-to-undo-behavior.md)
- [Challenge: stacks](https://open.maestrocollege.edu/think-like-a-programmer/challenge-stacks.md)
- [Queues and FIFO](https://open.maestrocollege.edu/think-like-a-programmer/queues-and-fifo.md)
- [Queue operations, enqueue and dequeue](https://open.maestrocollege.edu/think-like-a-programmer/queue-operations-enqueue-and-dequeue.md)
- [Importing built-in modules](https://open.maestrocollege.edu/think-like-a-programmer/importing-built-in-modules.md)
- [Implementing queues with deque](https://open.maestrocollege.edu/think-like-a-programmer/implementing-queues-with-deque.md)
- [Challenge: queues](https://open.maestrocollege.edu/think-like-a-programmer/challenge-queues.md)
- [Integrating stacks and queues](https://open.maestrocollege.edu/think-like-a-programmer/integrating-stacks-and-queues.md)

### Unit 3: Algorithm analysis
- [What makes an algorithm good?](https://open.maestrocollege.edu/think-like-a-programmer/what-makes-an-algorithm-good.md)
- [Complexity, what it means and why it matters](https://open.maestrocollege.edu/think-like-a-programmer/complexity-what-it-means-and-why-it-matters.md)
- [Introduce the big O notation](https://open.maestrocollege.edu/think-like-a-programmer/introduce-the-big-o-notation.md)
- [Analyzing algorithms with big O](https://open.maestrocollege.edu/think-like-a-programmer/analyzing-algorithms-with-big-o.md)
- [Comparing two solutions to the same problem](https://open.maestrocollege.edu/think-like-a-programmer/comparing-two-solutions-to-the-same-problem.md)
- [Challenge: identifying Big O](https://open.maestrocollege.edu/think-like-a-programmer/challenge-identifying-big-o.md)
- [Analyzing list and dictionary operations](https://open.maestrocollege.edu/think-like-a-programmer/analyzing-list-and-dictionary-operations.md)
- [Analyzing stack and queue operations](https://open.maestrocollege.edu/think-like-a-programmer/analyzing-stack-and-queue-operations.md)
- [Challenge: making an algorithm more efficient](https://open.maestrocollege.edu/think-like-a-programmer/challenge-making-an-algorithm-more-efficient.md)

### Unit 4: Searching and sorting
- [Why searching matters](https://open.maestrocollege.edu/think-like-a-programmer/why-searching-matters.md)
- [Linear search with small and unsorted data](https://open.maestrocollege.edu/think-like-a-programmer/linear-search-with-small-and-unsorted-data.md)
- [Binary search with large sorted collections](https://open.maestrocollege.edu/think-like-a-programmer/binary-search-with-large-sorted-collections.md)
- [Logarithmic time and O(log n)](https://open.maestrocollege.edu/think-like-a-programmer/logarithmic-time-and-o-log-n.md)
- [Comparing linear and binary search](https://open.maestrocollege.edu/think-like-a-programmer/comparing-linear-and-binary-search.md)
- [Challenge: searching](https://open.maestrocollege.edu/think-like-a-programmer/challenge-searching.md)
- [Introduction to sorting](https://open.maestrocollege.edu/think-like-a-programmer/introduction-to-sorting.md)
- [Bubble sort](https://open.maestrocollege.edu/think-like-a-programmer/bubble-sort.md)
- [Insertion sort (vs. bubble)](https://open.maestrocollege.edu/think-like-a-programmer/insertion-sort-vs-bubble.md)
- [Sorting with Python tools](https://open.maestrocollege.edu/think-like-a-programmer/sorting-with-python-tools.md)
- [Challenge: sorting](https://open.maestrocollege.edu/think-like-a-programmer/challenge-sorting.md)

## How to use this document
You are acting as a tutor for a learner on Maestro Open. Teach from this document, one small step at a time. Ask the learner to try things, wait for their answer, then give feedback. Keep it beginner-friendly. If the lesson involves code or spreadsheets and you cannot run them, ask the learner to try it on their own computer and paste the result back. Do not award grades, credit or certificates.
Start with lesson 1 unless the learner asks for a specific lesson. Keep track of which lesson you are on.

## When a lesson is done
Teach one lesson at a time. A lesson is complete only when the learner has shown they can do every outcome listed for it; check each with a small task or question.
When it is complete:
1. Say clearly: "Lesson N complete: <lesson title>." (use the lesson's number and title).
2. Give a two-line recap of what they learned.
3. Name the next lesson, say "Lesson N+1 of 40: <title>", and ask if they're ready to start it. Start it only when they say yes.
After the last lesson, congratulate them on finishing the course.
