If you’re interested in learning to code, you’ve come to the right place.
My name is Raghu Betina. Over the past 13 years, I’ve taught 3,000+ non-programmers how to program. Before that, I was a non-programmer myself — a non-technical founder of technical startups.
That was frustrating, at times. The engineering part of the company — the core part — was a black box to me. I didn’t know what features would be hard, what features should be easy, why things were late, or how to help. I was desperate to learn to program myself, so that I could have some understanding of these things.
I tried a lot of different ways of learning — books, online courses, even going back to college to study computer science. None of it stuck, and I almost gave up.
Then, I heard about a brand-new startup claiming to teach people how to program in just a few months. (This was the first “coding bootcamp.”) I was skeptical, but I took a chance on it — and it clicked. I learned enough to start bringing my ideas to life, all by myself.
It was so empowering that I soon dropped everything in order to teach other non-programmers how to take that first step. I’ve built courses at Northwestern’s Kellogg School of Management and McCormick School of Engineering, the University of Illinois’ Discovery Partners Institute, and the University of Chicago. For the past 10 years or so, my day job has been at the latter’s Booth School of Business, where I’m a Clinical Associate Professor of Operations Management & Entrepreneurship.
I’ve taught the course over a hundred times now. I refine it every time I teach it, integrating student feedback and new technologies, while remaining laser-focused on helping beginners take that first, transformative step.
Introducing: First Draft Summer School
This summer, we’re offering the course outside of a university context for the very first time. We’re calling it “First Draft Summer School.”
In the course, we will learn full-stack app development. “Full-stack” means you’ll learn to do all of the things needed to build a functional application — write the front-end (the code that runs on your users’ devices, that they interact with), write the back-end (the code that runs on your server, where the application logic and data live), deploy (get it live on the internet), and the many other big little details that are usually not mentioned in introductory programming courses.
Another major focus will be Artificial Intelligence; both integrating AI into our apps, and using AI effectively to assist us in building. To give you a sense of what you’ll be learning, here are a few of the apps that we’ll create together, step-by-step, during the course:
Learning enough to be able to build real apps — all by myself — is what made programming finally click for me, and for thousands of other beginners. Our goal is for you to, each week, have built something you want to share with your friends and family, something that makes you say, “Hey, look what I made!” And, by the end of the course, you’ll have a portfolio of projects that you’re proud of, including some of your own ideas.
Schedule and tuition
Enrollment in Summer School is closed. Please drop your email address in the form on this page if you’d like to stay informed about future offerings.
-
The course will run for 12 weeks, from July 1st to September 19th, 2025.
-
The course will be part-time. Most students report spending about 10 hours a week, including the required lectures.
-
The course will be remote, over Zoom.
-
We’ll have one required instructor-led lecture per week: Tuesdays from 5:30-8:30pm CT.
-
Additional sections may be added, depending on demand.
-
-
We’ll have four optional instructor-supervised study halls per week: Mon/Wed/Thu from 5-7pm CT and Sun from 3-5pm CT.
-
There will be lots of 1-on-1 office hour slots available for booking throughout the week.
We aren’t marketing this first edition of Summer School broadly — only by word of mouth, through friends & family. Tuition for the Friends & Family Edition is $1,999.
This represents a 50% discount from the full price that future editions of Summer School will cost ($3,999). We’re discounting it because:
-
It’s the first time we’re offering it to the public. This is new for us, and we expect to learn from the experience.
-
We will be recording all sessions. We’ll be using the recordings to improve the course — read more here. Because of this, you must be 18 or over and consent to be recorded to enroll in Summer School.
-
If you enroll and find you’re not happy for any reason, let us know within the first four weeks and we’ll refund you — no questions asked.
Those are the essentials. Still interested? Keep reading for many more details!
Thank you for considering First Draft,
— Raghu
Raghu’s class was what first got me excited about Product Management. I took his App Development course about 9 years ago, back when I was still working in management consulting. That class completely changed how I saw software—it made it feel accessible, creative, and honestly, just really fun.
After business school, I made the jump into Product Management, and now I get to spend my days thinking about what features to build and how to make apps better for users.
Raghu’s courses (AppDev 1 and 2 when I took them at the University of Chicago Booth School of Business) were paramount to customer discovery and building the MVP at Pulse Charter Connect.
Raghu and his team helped me get my startup off the ground and I will be forever grateful. At this point, we are a seed staged company that has raised millions of dollars all thanks to an idea I was working on during these courses. I cannot recommend this enough!
Upon enrolling, I didn’t have sky-high expectations of AppDev. After all, if I couldn’t do full-stack dev after a whole degree in comp sci from undergrad, then how far would one intro course really get me?
Turns out - all the way. By the end, I had a solid working web app along with an understanding of a ton of concepts that previously puzzled me for years.
— Manish Bidasaria, Portfolio & Risk Manager at Pinnacle Wealth Advisory
Frequently Asked Questions
Hasn’t AI made learning to code pointless?
In February 2024, Jensen Huang (CEO of Nvidia), speaking at a conference, said that it is no longer vital for young people to learn computer science:
It is our job to create computing technology such that nobody has to program. And that the programming language is human. Everybody in the world is now a programmer. This is the miracle of artificial intelligence.
— Jensen Huang
This statement from Huang spawned a thousand posts on LinkedIn proclaiming the death of programming. These hot takes are almost always from people who are 1) non-programmers, and/or 2) have something to gain by hyping up AI (like Huang himself). Coincidence?
The standard rebuttals to the argument that we don’t need to learn how to code anymore are:
-
AI can do easy, routine things, but not hard, novel things.
-
AI makes a lot of mistakes and sub-optimal decisions that need to be fixed by human developers.
-
AI is incapable of making high-level architectural and strategic decisions; that’s most of what a senior developer does, not writing code.
Here is a representative example of these arguments: The Recurring Cycle of ‘Developer Replacement’ Hype. Given the current state of AI, I mostly agree. But is it another coincidence that most of the people making this argument are software engineers?
These contradictory positions bring to mind the old quote:
It is difficult to get a man to understand something, when his salary depends on his not understanding it.
— Upton Sinclair
As someone who teaches programming, I’ve got a horse in the race, too, so I don’t claim to be completely unbiased, either. That said, here’s my take:
I think there are two possible futures:
-
In one future, the capabilities of AI plateau before they reach the level of a senior developer.
-
In the other future, AI becomes indistinguishable from a world-class senior developer. You can “hire” it, tell it your ideas, and it will do all the things that a senior developer does — user and market research, helping design a solution, pushing back on things that are impractical, implementation, deployment, gathering feedback, measuring performance, iterating, etc.
In the first future, I think it’s pretty clear that there will still be value in learning how to code. AI will become another tool in a developer’s kit, greatly enhancing productivity and expanding the possibilities of what we can build.
But what about in the second future? Is there any point to learning to code if you have a team of tireless, cheap senior developers in your pocket at all times that you can order to build whatever you want built?
I still think yes, because:
Understanding how technology works changes how you see the world, and thus 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’s why I wanted to learn how to program in the first place.
But after I learned, my ideas changed. I liken it to photography: I’m an amateur photographer, and when I carry my bulky DSLR camera around with me, it changes the way that I look at the world. I’m always on the lookout for a shot, paying attention to things that I don’t usually: shadows and light, reflective surfaces, passers-by.
Similarly, learning to code completely changed the ideas that I had for products and startups that I wanted to build. I had a sense of what was possible, what was hard, and what was easy. It gave me the vocabulary I needed to keep track of the latest technological developments, and identify promising places to apply them. It made me a better noticer.
So, until AI can see through your eyes, observe all the pain points in your life, and come up with ideas for you, I think there will still be value in learning to code. Who knows; maybe that day will come. But I think it is at least 10 years away.
And, these next 10 years will be especially important, during which time knowing how to code is going to be even more of a superpower than it’s always been.
This is a critical moment to be a technologically-empowered noticer: we’re at the beginning of a revolution, like in 1995 (internet) and 2008 (iPhone). Nearly every business and personal workflow is going to be affected by AI, and there are a lot of low-hanging fruits waiting to be picked. This revolution is happening, whether we like it or not; it’ll be much more fun to be a participant than merely a spectator.
So, perhaps unsurprisingly, my opinion is that the rise of AI makes this the best time ever to learn how to code.
Can I use AI to help me do the assignments in this course?
Yes! This is another reason why it may be the best time ever to learn to code — having AI is like having a smart and tireless learning partner by your side at all times.
AI can also be detrimental to learning, though; it must be used with care. Here are a few guidelines that I ask you to follow:
Use our AI, not just any AI
We call our AI learning assistant “Study Buddy,” and you can chat with it at any time by clicking the button at the bottom-right corner of the lesson (including the one you’re reading right now). Here, let me show you how it works:
There are many reasons to use Study Buddy rather than ChatGPT or any other external AI assistant:
-
We’ve done a lot of work to fine-tune Study Buddy to be excellent for beginners, and specifically excellent on our course materials. (We’ll teach you the technical meaning of “fine-tuning,” and how to do it yourself, as part of our AI learnings.)
-
Study Buddy knows what you’re working on when you ask a question (because you ask it right here, in First Draft, while you’re reading a lesson), so Study Buddy can provide a much better answer than any external assistant, which will lack needed context.
-
Under the hood, Study Buddy uses the same AI models that ChatGPT does, but Study Buddy always uses the best, most up-to-date version. If you’re on the ChatGPT Free or Plus plan (i.e., if you’re not on the $200/month Pro plan), you’re probably not using the best model.
-
There are no usage limits with Study Buddy. Most of the external assistants (ChatGPT, Claude, Gemini, etc) will throttle your usage or move you to a less capable model after some quota.
-
Most importantly: your human instructors are still in the loop when you ask Study Buddy a question. We monitor all threads, and step in when the AI provides an incomplete or misleading answer, or when there’s a question that only an instructor can answer.
So please, if you’re going to use any AI, use Study Buddy!
AI should be a spotter, not a forklift
Imagine you want to become physically stronger, so you purchase a gym membership and hire a personal trainer. Would you then ask your trainer to lift the weights for you? Of course not!
You should use AI like a trainer, to spot you — not like a forklift, to do all the work. If you get AI to do all the thinking and struggling for you, you won’t grow. At some point, you’ll be working on something that AI can’t help with; if you haven’t built your own “muscles” by then, you’ll be stuck.
Our rule: struggle for no less than 5, no more than 15
For the first 10 years I taught this course, pre-ChatGPT, I had a rule: you were only allowed to struggle with something for a maximum of 15 minutes before you asked a question. This rule was there to encourage students to ask tons of questions, to not be embarrassed of asking so-called “dumb” questions, and to not worry about “bothering” us — we love questions.
Now, with AI, you can get answers instantly, at any time of day or night — which is great! But it also makes it easy to fall into the trap of continuously copy-pasting back and forth between AI and your code editor (even I fall into this trap sometimes). That cheats you of the learning that the projects are designed to cultivate.
So, I’ve added another clause to the rule: you should avoid getting help from AI until you’ve struggled with it yourself for a minimum of 5 minutes. We’ve found that the “min 5, max 15” rule results in a productive amount of struggling.
The best way: instead of asking AI, book an office hour slot
One thing that makes First Draft Summer School unique is the unparalleled access that you have to human instructors. In addition to the weekly lecture, you can pop in to instructor-supervised study halls four days a week, and there’s usually someone available for 1-on-1 office hours any time during business hours.
This level of access to instructors, who are senior developers, is unheard of. We’re doing it because 1) we love questions, and 2) we’re recording all office hours for use in improving the course for future cohorts. Take advantage of us! Hop on a Zoom, rather than asking AI.
What exactly are we going to learn?
You will learn full-stack app development. We will primarily use the Ruby on Rails framework, but you’ll be exposed to lots of other languages and tools that full-stack developers need to know: HTML, CSS, SQL, Git, JavaScript, APIs, and more.
Why full-stack app development?
There are a few common approaches to teaching beginners how to code:
-
For younger audiences, visual “block-based” programming, often focusing on creating games or interactive stories.
-
Gold standard examples: MIT’s Scratch and CMU’s Alice.
-
-
In high school or college, an introduction to computer science, often focusing on fundamentals like data structures and algorithms.
-
A gold standard example: Harvard’s CS50.
-
-
Later, tutorials on individual languages like the ones found on Codecademy are often recommended.
For a certain kind of entrepreneurial, impatient learner (like me), none of these are satisfactory, because if your goal is to build a real, functional app, they all leave you wondering, “Okay, what next?”
For that kind of learner, “learning to code” means learning to build the kinds of apps they use most frequently. That could mean things like Xbox games or Adobe Photoshop, but in today’s world, for most folks, it means web and mobile applications like Instagram, ChatGPT, Airbnb, Slack, YouTube, etc.
So that’s what we’re gonna do: learn how to build web and mobile applications, and, crucially, learn full-stack app development — not just front-end, or back-end, or systems administration, or databases, or individual languages, or computer science fundamentals. The whole stack, end-to-end, so that you can stand up a fully-functional app by yourself.
And, the skills you learn in web development will prepare you for nearly any programming path you might want to take in the future.
Will we be working with AI?
One of the most empowering things about web programming is learning how to integrate services from other companies into our software, through Application Programming Interfaces (APIs). This greatly increases the power of the apps that we build. We’ll be able to send text messages with Twilio, pull real-time traffic conditions and routes from Google Maps, and a whole lot more.
And, astonishingly, that also means that we’ll be able to integrate the latest, most cutting-edge Artificial Intelligence models in the world, because they are all accessed through very straightforward APIs. We’ll learn how to use models from OpenAI, Google, and Anthropic, and you’ll start integrating them into your programs by the third week of the course.
Week by week, we’ll introduce more and more AI capabilities: natural language input and output, image input and output, PDF and other file input, structured output, function calling, tool use, model context protocol. Probably none of these mean anything to you right now, but they will soon — and you’ll see that the things we can build with them are amazing.
This past time I taught the course, over 3/4 of the capstone projects integrated AI. I only expect that number to grow over time, as AI seeps into nearly every business and personal workflow.
(In this course, we won’t be learning how to develop our own AI models from scratch. Very few companies do that, anyway. If you discover that you’re interested in AI research, we have excellent resources that you can get into afterwards.)
What aren’t we going to learn?
Some things that we won’t explicitly address in this course:
-
Data analysis.
-
Visual design (beyond the very basics).
-
Computer science.
-
Cybersecurity.
-
iOS / Android — we’ll get to that in Phase 2 (see below).
But the foundation you lay in this course will serve you well if you decide to pursue any of those later.
In this course, we focus on teaching everything you need to stand up an app, and nothing you don’t. Later, you can decide what to go deep on.
What will I be able to do with what I learn?
By the end of this course, you’ll have the technical foundation to build a basic version of pretty much any web app, from ideation to deployment. Having a solid understanding of full-stack development opens up many different paths, and not just in software engineering.
While some folks transition immediately to working in tech, this course does not claim to completely prepare you for a job in software engineering. Instead, we think of it as a robust introduction, after which you’ll be more than ready to:
-
Work effectively with developers in a tech-related role.
-
About 80% of our alumni apply their technical skills in adjacent fields, such as product management, user experience, tech sales, developer relations, quality assurance, and customer success.
-
-
Continue to learn software engineering on a part-time, project-oriented basis.
-
About 15% of our alumni level up their programming skills by taking Phase 2 of our program, where they expand their portfolio to include iOS/Android mobile apps, JavaScript- and Python-based projects, and more.
-
-
Pursue software engineering in a full-time, intensive capacity.
-
About 5% of our alumni decide to seriously commit to this path, entering intensive bootcamps or CS degree programs.
-
Whichever path you choose, we have lots of resources and guidance to offer.
Why Ruby / why not Python, NodeJS, Java, etc?
There are many programming languages we could have chosen — Python, JavaScript, Java, Go, dozens of others — but Ruby has a lot of advantages for beginners:
Developer happiness
Here’s a quote from Yukihiro Matsumoto (a.k.a. “Matz”), the creator of Ruby:
Often people, especially computer engineers, focus on the machines. They think, “By doing this, the machine will run faster. By doing this, the machine will run more effectively. By doing this, the machine will something something something.” They are focusing on machines. But in fact we need to focus on humans, on how humans care about doing programming or operating the application of the machines.
— Yukihiro Matsumoto, The Philosophy of Ruby
Matz’s focus when he designed Ruby was on “developer happiness,” which was pretty bold back in 1995, when Ruby was first released. Optimizing for human readability rather than computer readability meant paying a cost in terms of performance — and computers were slow back then — but Matz didn’t care. He wanted to create a language that he enjoyed reading and writing.
By the mid-2000s, computers had become fast enough to run Ruby just fine for web apps. And by now, computers are unbelievably faster than they were 20 years ago, and Ruby has gotten much more performant at the same time. So we beginners can have the best of both worlds: the readability of Ruby and plenty of performance to build web apps (if Ruby was fast enough 15+ years ago for Twitter v1 or Airbnb v1, then it’s more than fast enough for our apps now!).
From a business perspective, servers are very cheap, while developers are very expensive — so you should pick the language that makes developers the most productive.
Besides, the hard part about learning to program for the first time is grasping the basic concepts of programming. Once you’ve learned those, it’s much easier to pick up your second and third languages.
If you decide to go further down the road towards becoming a professional software engineer, the next step would be Phase 2 of this course (offered in Winter 2026). In Phase 2, we will translate our Ruby knowledge into other languages: Python, Node.js, Java, and others. We won’t be one-trick ponies; we’re going to become powerful, polyglot programmers, as all good engineers are.
So: the important thing when you choose your first language is to choose one that is most conducive to learning. I think that, for most learners, Ruby is that language.
Ruby on Rails and other libraries
People often ask, “What’s the best language for Task X?” where “Task X” might be “web apps,” “data analysis,” “game programming,” or any number of things.
Depending on the task, the technical features of a particular language might make it particularly well-suited, but that is rare. In general, any programming language can do anything that any other programming language can.
An exception is when the owner of a platform only allows a particular language. For example, Apple only allows Swift, Objective C, and JavaScript to run on iOS. However, there’s another, more important consideration: which language has the largest community of developers doing Task X?
More community means that other people have already solved many of the problems you’ll face, so there might be code out there that you can borrow instead of having to write it all yourself. Pre-written code that you can borrow is known as a library or package. In Ruby, we call them gems.
Also, if there’s a big community doing Task X in a given language, then there will be more blog posts, more answers when you Google a question, more AI training data, etc.
So when you’re choosing which language to use for a particular job, the most important consideration is: what language are other developers already using for that job?
For example, Python and Ruby are very similar languages in terms of their technical features and performance profile. However, simply by historical accident, Python has gathered more of the scientific, data analysis, and AI communities around it. So, more open-source libraries in those areas have been developed and shared in Python than in Ruby, and now Python has become the go-to language for those tasks.
On the other hand, for the rapid development of web applications, Ruby has a huge and thriving community. In particular, there is a framework for building web applications called “Ruby on Rails.” The goal of Ruby on Rails is to make it possible for a single person — a full-stack developer — to create powerful, industrial-grade applications. That might seem surprising, as a goal — doesn’t every framework want that?
Actually, no: most frameworks don’t make it their primary ambition to be useful to solo developers. Their goals might be to be minimize hardware costs, or to allow large organizations with many teams to split up work more easily, but no other framework prioritizes the solo, full-stack developer to the extent that Ruby on Rails does. It’s the very first thing on the Ruby on Rails homepage:

And here is the closing slide of the opening keynote of the Rails World 2023 conference:

That is David Heinemeier Hansson, the creator of Ruby on Rails, presenting. He is making the point that he and all of the thousands of other developers who contribute to Rails are working in service of:
…the ideal that Rails should be a one-person framework. That one individual should be able to make everything happen, from start to end. To be able to go from zero to one.
— David Heinemeier Hansson
How does Rails achieve this? One of its core principles is “convention over configuration” — it makes a lot of decisions on your behalf, and if you go with the flow, then things “just work.” (If you want to fiddle with settings, you can, to your heart’s content, but you don’t have to spend hours or days doing so before you can even start up your web server, like you do in most other frameworks.) You can focus on building the unique features of your application, not on the plumbing that’s common to all applications.
To sum up: the reason I start beginners with Ruby on Rails is that it is the only framework whose raison d’être is to empower solo developers to build great things. That is exactly what beginners need — the ability to build real, useful applications, as quickly as possible.
And, there are a lot of other powerful, easy-to-use Ruby libraries that have philosophies similar to Rails’. Ruby seems to have gathered a community of developers around it who are focused more on creating value for our users, and focused less on