Note: Due to the intensive support requirements and volume of requests, we can’t allow auditors for this course. We have many sections available this year, so please plan ahead and enroll as usual through your program (or Take 3 for alums). If you are on the waitlist, you are welcome to attend Day 1 so that you can keep up in case someone drops.
Introduction
On the first day of this course, you'll bring an app idea of your own and we'll show you how to use AI to generate a robust, deployed version of it. It will include a web app backed by a centralized server and database; iPhone and Android apps; email and push notifications; user accounts and permissions; and more.
Unlike the output of most "vibe coding" tools, the project will be completely under your control. The code will live in a GitHub repository you own, and the application will be deployed to a standard, industrial-grade hosting service. It will be structured for long-term maintenance, and we'll show you a workflow for continuing to iterate with an AI coding agent of your choice.
But here's the thing: you won't understand the codebase yet. Knowing something about how the application works will greatly improve your ability to steer a developer (whether AI or human). That knowledge also changes the kinds of ideas that you come up with.
We think that the best way to develop an understanding of how applications work is to roll up your sleeves and write the code yourself, by hand, at least once. So for the rest of the course, you'll build out full-stack applications step by step, starting from scratch.
In doing so, you'll see how the pieces fit together: the browser, server, database, iPhone and Android clients, libraries, APIs, deployment, monitoring, and the many other things that make an application valuable, maintainable, and extensible.
The course is intended to level up the technical vocabulary of aspiring founders, product managers, consultants, and anyone else who works with software engineers and wants to communicate with them more effectively.
Let's unpack the course's title:
- "Full-stack": We'll learn a whole stack, from client-side to server-side to database to deployment to monitoring. Many introductory programming courses focus on one slice, but one slice isn't enough to build valuable apps on your own.
- "App": We'll focus on internet-based, or "cloud", applications—the kind of software most of us use every day (social networks, two-sided markets, messaging apps, AI chatbots, etc). The services we'll build can be accessed through web browsers as well as iPhone and Android apps ("native mobile apps").
- "AI": AI will play three roles in the course:
- AI in the product: We'll learn about generative AI and integrate its capabilities into the software that we build.
- AI as tutor: We'll use a course-specific AI tutor for questions, explanations, and debugging advice while writing the code ourselves.
- AI as programmer: In designated parts of the course, we'll use coding agents to write and modify code for us.
- "Development": We learn by doing. We'll start by building simple applications and progress to more capable ones. We'll avoid computer science theory until and unless there's a pragmatic reason for it.
Frequently Asked Questions
What's the point of learning to code, now that AI can write it for us?
Personal opinion ahead:
Let's imagine that AI advances to the point that it becomes indistinguishable from a world-class senior developer. You can tell it what you want and it can do research, push back on impractical ideas, implement the product, deploy it, measure it, and iterate. Is there still any point in learning to code?
I think yes, because understanding how technology works changes how you see the world, and therefore what you want to build. I only realized this after I learned how to code myself. I had always been an "ideas guy," and that was why I wanted to learn programming in the first place. But after I learned, my ideas changed.
I liken it to photography. When I carry my DSLR camera, I pay more attention to lighting, shadows, reflections, framing, and moments that I otherwise wouldn't, because I'm looking out for a shot.
Learning to program had the same effect: by giving me a sense of what was possible, what was hard, and what was easy, it made me a better noticer of opportunities. And it gave me the vocabulary to stay on top of new developments and identify promising places to apply them.
Until AI can see through your eyes, live inside your workflows, and experience your pain points, there is enormous value in being a good noticer. The rise of AI doesn't make learning to code pointless; it makes the judgment developed by learning to code even more valuable.
What will we learn about full-stack app development?
The required lessons cover how to write and deploy a full-stack, responsive, authenticated, database-backed web application using a framework called Ruby on Rails. Along the way, you'll gain hands-on experience with Ruby, HTML, CSS, relational databases, Structured Query Language (SQL), Git, HTTP, APIs, and deployment.
Electives allow you to decide where you want to go deeper, e.g. native mobile app development, more CSS for greater control over the look and feel of your apps, real-time client updates, or SQL for working directly with the database.
You'll finish with a useful mental model of full-stack software, practical experience building and deploying applications, and a much better sense of what you do and do not yet understand.
What will we learn about AI?
We'll learn a brief history of AI, what makes generative AI different, and how to incorporate the capabilities of generative models into applications. We'll work with existing models rather than train new ones from scratch.
Required topics include chat completions, image and file input, structured output, and tool use. Electives may explore agents, local models, systematic evaluation (“evals”), Model Context Protocol (MCP) connections to external tools, and reusable Skills for agents.
For coding-agent demonstrations and required exercises, we'll primarily use Claude Code. The workflows we teach transfer to Codex, OpenCode, and other coding agents. Required Claude Code usage should remain well within the free allocation provided by the University of Chicago.
What aren't we going to learn?
The course emphasizes breadth across the application stack, and you can choose to go deeper in some areas with electives.
But we won't deal much with the following:
- Data analysis and data science
- Visual and interaction design
- Computer science theory, including algorithms and data structures
- Training AI models from scratch
- Cryptocurrency and blockchain
- Building iPhone apps purely in Swift or Android apps purely in Kotlin (we'll use a hybrid approach)
- 3D game development with engines such as Unity or Unreal
Do I need prior programming experience?
No. This course is designed for a beginner who has never programmed before. The only prerequisite is a determination to learn how to write code by hand. Modern languages, frameworks, and tools make it possible to go from zero to "I can understand and build a full-stack app" in just one quarter.
What if I already have some programming experience?
Historically, students who come in with some programming experience but have never built a full-stack application especially enjoy the course. One such student called it "rocket fuel." You may be retreading old ground for the first couple of weeks, but after that you'll be learning new things along with the rest of us.
We'll help you put all the pieces together and build real, useful products, rather than stopping at one-off scripts, static design mockups, or isolated SQL queries.
How should I prepare?
Complete the First Class Assignment before our first meeting; students who add the course late can complete it afterward. The assignment will help you pick and scope an app idea for Day 1.
Why Ruby and Rails rather than Python, JavaScript, or something else?
Ruby is designed around "developer happiness": optimizing for the humans reading and writing the code. That matters because the hard part of learning your first language is grasping the concepts. Once you understand those, your second and third languages are much easier.
We start beginners with Ruby on Rails because its central ambition is to empower one person to build a complete, powerful application. It has been called "the one-person framework." Its conventions make many decisions for you, rather than you having to assemble authentication, database access, routing, jobs, deployment, and dozens of other pieces from unrelated libraries. Thus, it is the more direct path to building a mental model of an entire full-stack application.
Python, for example, has a larger community around scientific computing, data analysis, and training AI models. But we're building applications that use AI models, not training those models, so Python has no inherent advantage for our core task.
However, one of the electives lets you translate what you learn about building web applications into Python. Learning a second stack is very valuable for understanding general patterns versus particular foibles. The goal isn't to become a one-trick Ruby programmer; we just believe that Rails is the most productive first stack for our learning goals.
How difficult is the course, and what is the weekly time commitment?
Our goal is to make learning to code as approachable as possible. We do a lot behind the scenes to remove friction and hide complicated details (until they're relevant).
Despite that—yes, it's still going to be hard. Programming is like learning a foreign language and an entirely different way of thinking, both at the same time. Don't be surprised or discouraged when it feels hard. That doesn't mean you're dumb or not cut out for programming. It means that you're growing.
Most coding happens outside class, where you read introductory material, watch videos, and build. In class, we solidify what you've learned through questions, guided projects, group challenges, and other activities.
In the past, students have reported spending around 7 hours per week outside class, on average. That average hides a lot of variance: for you it could be 4, or it could be 15. Your prior experience and how effectively you seek help will affect that number.
What support is available when I get stuck?
You can request office hours on demand during business hours with instructors who are professional software developers. Please utilize this incredible resource. We love questions, and you never need to worry that you're bothering us.
We also built an AI tutor called Study Buddy directly into every lesson. It uses state-of-the-art models, has the complete context of the lesson you're working on, is calibrated for beginners, and is designed to help you learn rather than complete the work for you. Human instructors monitor its conversations and step in when an answer is incomplete or misleading.
When can I use AI to write code?
It depends on the assignment. For your Day 1 application and other designated activities, we'll ask you to work with a coding agent. In the guided lessons, we'll ask you to write the assigned code yourself and use Study Buddy for questions, explanations, and debugging advice.
Each assignment will make clear which mode we are in.
Can I work with classmates?
Yes — please form study groups. Talking through concepts and helping one another get unstuck is strongly encouraged.
All submitted work must be completed individually, using only the tools permitted for that assignment. The only exceptions are a few in-class exercises that are explicitly assigned as group work.
What if I miss class?
Attendance itself is not graded, and class meetings are not recorded. If you miss a class, the in-class lessons will still be available for you to complete independently afterward.
Those projects will usually take substantially longer without the guidance and teammates available in the room. Because lessons unlock sequentially, falling behind delays access to later material, and catching up can be very difficult.
What if I find that I love it? What comes next?
You'll retain access to the course materials, including the full elective catalog, after the quarter for as long as the platform remains available.
Many former students have discovered that they enjoy programming enough to pursue it much further, including through graduate study in computer science. This course should help you decide.
"Education is not the filling of a pail, but the lighting of a fire."
— After Plutarch