You're going to become a developer.
Apparently.
There's a memo: everyone's a developer now. You've never opened a terminal, which is fine — by the end of this you'll have a real program written in Python, living in a real GitHub repo, built with an AI that does the typing. It takes about an hour and assumes you know nothing. We start at the very beginning.
What you'll build
- Conway's Game of Life — a tiny animated universe running in your terminal.
- Written in Python, built with Claude Code.
- Published to GitHub and shipped as a real pull request.
What you need
- A Mac and its admin password.
- An email address and about an hour.
- ~$20 for Claude — there's no free tier, but a friend with Claude can send a referral that includes a free trial. Ask around before paying.
How this guide works
Every command sits in a card that looks like a real terminal window. Hit Copy, paste it into your terminal, press Return. Under each one, a ↳ what this does line explains it in plain English — you'll never paste something you don't understand.
Mark steps done as you go (your progress is saved in this browser), and each section ends with a quick quiz so you know it stuck. Troubleshooting and Glossary live in the top bar — open them anytime something looks unfamiliar or breaks.
The Terminal
A window where you type instructions instead of clicking them.
It looks intimidating because it's mostly text on a dark background, but it's the most literal part of your computer: you type a command, it does exactly that, and it prints what happened. Nothing hidden.
Open it now: press ⌘ Space, type "Terminal," press Return. A window appears with a % and a blinking cursor. That % is the prompt — the computer waiting for you to type. Everything below happens at that prompt. There are four commands to learn first, and they're all about one idea: moving around folders.
pwd Where am I?
The terminal is always "inside" one folder at a time. Before doing anything, it helps to know which one. pwd stands for print working directory — it answers exactly that.
/Users/you reads as: the you folder, inside Users, at the root of the disk. This is your home folder, where every terminal starts.ls What's in here?
pwd tells you where you are; ls ("list") tells you what's around you — the files and folders inside the current directory.
ls -l lists one item per line with details; ls -a also shows hidden files (names starting with a dot, like .zshrc). Combine them as ls -la:drwxr-xr-x columns on the left are permissions — who may read, write, or execute each file. That x (execute) bit is what lets a file run as a program, the way ls and cd do. You change permissions with chmod — and in §04 you'll use chmod +x to turn a file you wrote into a command you can run.cd Moving around
cd ("change directory") moves you between folders. Give it a folder name to go in; give it .. to go up one level; give it nothing to jump home from anywhere.
.. always means "the folder above this one." A single . means "right here." And ~ is shorthand for your home folder — so cd ~ (or just cd) takes you home no matter how deep you've wandered.mkdir Making a folder
mkdir ("make directory") creates a new, empty folder where you are. You'll use it constantly — every project begins as a fresh folder.
projects, then stepped into it. The && means "do the first thing, and only if it works, do the next." If mkdir fails — say the folder already exists — cd won't run.The Unix way
Those four commands hint at a bigger idea. The terminal is built from many small tools that each do one thing well, and you combine them. The pipe | takes the output of one command and feeds it as the input to the next. Here, ls lists files and grep keeps only the lines that match a word:
man ls for its manual (press q to quit).A few more you'll meet along the way — no need to memorize them now:
echo hello— prints text back to you.chmod +x file— changes a file's permissions;+xmakes it runnable as a program (more in §04).Ctrl+C— stops whatever command is currently running. Your escape hatch when something hangs or won't quit; you'll use it to stop the Game of Life in §06.clear(or⌘K) — wipes the screen clean when it gets cluttered.ping github.com— checks you can reach a server over the network.dig +short github.com— looks up the address behind a web name.ssh— connects securely to another machine over the network.
That's the core: pwd to see where you are, ls to see what's there, cd to move, mkdir to make — and the idea of piping small tools together. Everything else in this guide builds on these.
Your toolkit
Now we install the real tools. One sentence to remember: Homebrew installs apps, mise installs commands.
You'll set up four things, in order: Apple's developer basics, Homebrew (for Mac apps), a better terminal and editor, and mise (for command-line tools). Each builds on the last, so run them top to bottom.
① Apple's Command Line Tools
macOS ships without a few essentials developers need — including git, the tool that tracks code changes. This one command installs them. A dialog box will pop up; click Install and wait a few minutes.
git is there:② Homebrew
Homebrew is the standard way to install Mac applications from the terminal. Paste its official installer. It will ask for your Mac password (the one you log in with) — that's expected.
brew. Run it, then close and reopen Terminal.brew --version.③ A real terminal and editor
Time to use Homebrew for what it's best at — installing apps. iTerm2 is a nicer terminal than the built-in one, and VS Code is the editor where you'll read and write code. The --cask flag tells Homebrew these are graphical apps.
⌘ Space → "iTerm") and use it from here on — everything you've learned works exactly the same, it just looks better. To open the current folder in VS Code later, you'll type code .④ mise — your tool installer
mise (say "meez") installs command-line tools and keeps their versions tidy. From now on, whenever this guide needs a new tool, you'll reach for mise. Install it:
Now grab your first two tools with it: uv (for Python, next section) and jq (for reading JSON data). Installing more than one at once is fine.
-g means "global" — available everywhere, not just one folder. You already have git from step ①, and uv brings Python in the next section, so that's the whole toolkit.mise registry | grep <name> to find the exact one — e.g. mise registry | grep node.Git & GitHub
Two different things people constantly confuse.
Git is a tool on your Mac that takes snapshots of your code over time, so you can see what changed and undo mistakes. GitHub is a website that stores those snapshots online, so your code is backed up and shareable. Git is the camera; GitHub is the photo album in the cloud.
Here's the good news: once Claude Code is set up, it does almost all the git work for you. You'll just ask. So this section teaches the handful of ideas you need to follow along, not every command.
Tell git who you are
Every snapshot ("commit") is stamped with a name and email. Set yours once. Use the email you'll sign up to GitHub with.
main — the modern default.Create your GitHub account
In your browser, go to github.com and sign up — it's free. Use the same email you just gave git. Then come back here to connect your Mac to it.
Install gh and log in
gh is GitHub's official command-line tool. It's how you'll create repos and open pull requests without leaving the terminal. Install it with mise:
Now connect it to your account. This one is interactive — instead of finishing instantly, it asks you a few questions. Use the arrow keys and Return to answer.
gh auth status.The five words you'll actually hear
You don't need to master git. You need to recognize five words, because Claude Code will use them with you:
- Repository (repo) — a project folder that git is tracking. One repo per project.
- Commit — one saved snapshot, with a short message describing the change.
- Branch — a parallel line of work. You make changes on a branch so
mainstays safe until you're happy. - Pull request (PR) — a proposal to merge a branch into
main, where the change can be reviewed first. You'll open one in §07. - Issue — a note on GitHub describing a bug or a to-do. A tidy way to track what's next.
git worktree add ../experiment some-branch is all it takes.Python
The language you'll write — gently, and just enough to read it.
Python is popular because it reads almost like English. You won't memorize it; you'll recognize it, because Claude Code writes most of it. We'll poke at Python live, learn its building blocks, then write a real file.
The interactive interpreter
Python comes with a REPL — a live prompt where you type one line and immediately see the result. Start it with uv run python (uv quietly downloads Python the first time). The new prompt is >>>.
exit() or Ctrl+D. Everything in this section you can type at the >>> prompt to see it work.Three ways to hold data
Almost everything in Python is built from three containers:
fruits[0] is "apple"). Dict = look things up by name (prices["apple"] is 1.20). Set = a bag of unique things. You'll use lists and dicts constantly.Loops and functions
A loop repeats work; a function (defined with def) packages it under a name. Create a file called greet.py (run code ~/greet.py to open a fresh one in VS Code), paste this in, and save with ⌘S — we'll unpack that last block right after.
f"Hello, {name}!" is an f-string: it drops the value of name right into the text.__main__ Make it a real command
That last block — if __name__ == "__main__": — is the one bit of Python that looks like noise but isn't. It's what turns a file into a program you can run, exactly like the Unix tools (ls, cd) from §01.
if __name__ == "__main__": means. A Python file can be imported by another file (to borrow its functions) or run directly (to do its job). This line says "only do this part when I'm run directly, not when I'm imported" — it's how a file knows whether it's the program itself or just a helper.Run it the simple way first:
Now make the file a command in its own right. First add a shebang as the very first line of greet.py — it tells your Mac "run me with Python." In VS Code, put this on line 1 and save:
Then flip on the execute permission with the chmod you met in §01, and run the file directly:
chmod +x switches on the execute bit — the x you spotted in ls -la back in §01. The ./ means "the file right here." You no longer need uv run; greet.py is a command now, just like the built-in tools. You just made your first one.A few moves worth knowing
These idioms come up everywhere — skim them, you'll recognize them when Claude writes them:
sorted returns a sorted copy. A comprehension builds a new list from an old one in one line — Python's most-loved shortcut.Using other people's code
You rarely start from scratch — you install packages (libraries) other people wrote. uv adds them to a project. Let's make a project and add requests, the standard library for fetching things from the web.
uv init hello creates a project folder with a starter main.py. uv add requests downloads the library and records it, so anyone who opens this project gets the exact same setup. (Another you'll see a lot later: uv add boto3, Amazon's toolkit for AWS.)Write and run a real file
Open the project in VS Code, replace main.py with the code below, and save (⌘S).
uv run uses the project's libraries automatically:Claude Code
An AI that works in your terminal — reads your files, writes code, runs commands, all with your say-so.
This is the part that makes the rest easy. You describe what you want in plain English; Claude Code reads your project, makes the changes, and shows you each one before it touches anything.
Install it
One command — the official installer. It doesn't need any of the other tools; it stands on its own.
claude: command not found afterward, close and reopen it once so it picks up the new tool.Start your first session
Claude Code works inside a project folder. Move into one and launch it. The first time, it opens your browser to log in — use your Claude account.
The five things to know on day one
- Type
/to see every command./helpis a fine first move. - It asks before it acts. Run a command, edit a file — Claude shows you and waits for Yes / Yes, don't ask again / No. Nothing happens without your approval.
- Press
Shift+Tabto cycle how much it asks — from confirming everything to auto-accepting edits once you trust it. - Say what, not how. "Add a high-score file and show the top five" beats trying to dictate code. It figures out the how.
/clearstarts a fresh conversation,/initwrites a project notes file, and/exit(orCtrl+D) leaves.
Build it
Conway's Game of Life — a universe from four rules.
The Game of Life is a grid of cells that live and die by simple rules, generation after generation. From those rules, shapes emerge that crawl and pulse across the screen. It's a perfect first build: small, visual, and genuinely mesmerizing. You won't write it — you'll direct it.
Make a home for it
claudeAsk for it
Once Claude is running, paste this. Notice it describes what the program should do, not how to code it.
Claude will create a file (it'll tell you the name — usually main.py) and ask permission before saving. Approve it. Then run what it built:
Ctrl+C always force-quits, too.) If the filename differs, use whatever Claude told you: uv run <that name>.What "good" looks like
Here's a clean reference version, so you can see the shape of a small, well-organized program. The four rules live in one short function near the top.
Make it yours
Now change it. Ask Claude for a feature — this is where it gets fun.
Approve the changes, relaunch, and try a glider on a small board, then a big random one — watch how differently they evolve:
✓ Checkpoint
You should have a working Game of Life with a small interface to start, stop, and set up simulations. Running it is the test — if cells are moving, you passed. If not, the Troubleshooting panel (top bar) covers the usual snags.
Ship it
Put it on GitHub and open a real pull request.
Your program runs on your Mac. Now make it real: save a snapshot, push it to GitHub, then practice the everyday workflow — change something on a branch and propose it through a pull request. Even working alone, this is how professionals keep their history clean.
Save and publish
First, take a snapshot (a commit), then create a GitHub repo and push it up — gh does both at once.
git add -A gathers your changes, git commit snapshots them with a message, and gh repo create makes the online repo and uploads it. Your code is now backed up on GitHub. (Don't want to type git yourself? Ask Claude: "commit everything and push it to a new public repo.")Change something on a branch
Never make changes directly on main. Start a branch — a safe side-track — make your change there, and propose it back. Create one:
git diff, or just ask Claude "what did you change?"Open the pull request
Push your branch and open a PR. --fill writes the title and description from your commit, so there's nothing to type.
Merge it
Happy with it? Merge the PR into main, clean up the branch, and pull the result back to your Mac.
gh issue create. It's a to-do list that lives with your code.✓ Checkpoint
You just shipped code the way every software team does: branch → change → pull request → review → merge. It's live on GitHub, with a clean history. That's the entire loop — everything else is variations on it.
Next steps
You have the whole loop. Now point it at something you actually want.
An hour ago, "open a terminal" was a stretch. Now you can install tools, write and run Python, and ship code through a pull request with an AI doing the heavy lifting. The rest is reps.
What to do this week
- Build something small you'd actually use. A script that renames your screenshots, a tool that checks a website is up, a tiny web page. Make a folder, run
claude, and describe it. - Let Claude teach you. Open any project and ask "explain what this code does" or "what would you improve?" Reading code with a guide is the fastest way to learn.
- Leave notes for next time. Run
/initin a project — Claude writes aCLAUDE.mdfile describing it, so future sessions start smart. - Keep the loop tidy. Branch, commit often, open PRs even for yourself. Your future self will thank you.
boto3 showed up in §04.)As for the memo: you're now the person in the building who actually knows what a pull request is. Go build something of your own.
built with the terminal, GitHub, Python & Claude Code — the very tools it teaches.