Cost:
- Free for a limited time (this may change in future iterations of the course)
Instructors:
- Gordon Zhu (lead instructor): Founder at Watch and Code. Previously at Google and the University of Pennsylvania.
- Lily Gentner (assistant instructor): Instructor at Watch and Code. Previously at Uber, Square, and Harvard University.
Format:
- Live weekly Zoom classes, which consist of lectures, discussion, and exercises.
- Weekly homework assignments to help you dig deeper into important concepts.
- Weekly office hours if you need help or want to engage more deeply with the material.
Preface:
The typical programming course has a frustrating fixation with the least important part of programming, syntax. Here is a programming language feature and a buzzword-laden, barely intelligible definition. Now you must understand it, right?
Why do reasonable teachers, even very experienced ones, keep doing this? It's because there are real barriers to doing anything else—namely cost and skill. Deviating from the established pattern is expensive and time-consuming.
It's worthwhile to focus on the skill barrier for a moment. You can't just create something new, it must also be better. When I say this is devilishly challenging, I speak from first-hand experience. Making something better is an inherently unnatural act—most innovations are worse than what they seek to replace.
Essentially, taking a list of language features and supplying definitions is cheap. That's why you see so much of it. Our approach is rare because it's prohibitively expensive.
A course in effective thinking:
Unlike other courses that obsess over the syntactical details of a language, our goal is to teach you specific intellectual habits and tendencies that are especially useful in programming. In other words, we want you to understand and practice a particularly powerful way of thinking about programming.
Two programmers of equal experience and intelligence encounter the same problem. Programmer X struggles and ultimately gives up. They cope with their deficiency by being dependent on an outside authority: a helpful colleague, Stackoverflow, or ChatGPT, pick your poison. When they are lucky enough to scavenge what might be a solution, they force it into places where it doesn't fit. As they work more on a problem, they get more lost. The complexity explodes.
Programmer Y is challenged, but is able to methodically work through the problem. Instead of trying to force copy-pasted solutions into inappropriate places, they craft elegant ones that fit neatly. As they dig deeper, their understanding compounds, and the growing complexity is deliberately managed to be as minimal as possible.
Programmer X and Y are different species. One is the person is who everyone turns to for help. The other is the one everyone tries to avoid. The goal of this course, is to begin the hard work of nudging you towards one side and away from the other.
A prerequisite for the most difficult topics in computer science:
On a more practical note, we want to provide you with a foundation that will allow you to study the most difficult topics in computer science. More concretely, you can think of this course as a prerequisite for serious study in algorithms and data structures.
For reasons both practical and personal, our main interest is in helping students develop powerful problem-solving skills. In programming, abstract data structures and algorithms problems are the natural place for students to develop these skills.
Even though most of you will focus on the more mundane aspects of programming (simple websites, user interfaces, etc), having a strong foundation in computer science will be helpful no matter what, because it will allow you to understand everything more deeply. You’ll be able to wield mundane tools with more power :)
Pedagogical methods:
Live sessions are centered around problems that are meant to expand your thinking in specific, often counterintuitive ways. For this reason, the idea of "lecture" should be thrown out. What we are doing is much closer to training sessions in athletics. Each session is a stimulus designed to elicit a specific adaptation—in our case, intellectual rather than physical.
Since the act of doing problems is at the heart of each session, the sessions are inherently interactive, enabling an n-way conversation between everyone in the room. The great benefit of this format is that you can closely examine perspectives that would otherwise be hidden. You'll be able to closely observe how I think and you'll see how your peers think. But that's not the most important part. When you see that I've taken a radically different approach from yours, you can't help but ask yourself, "how could I have come up with that?".
Our goal is to aggressively kick off this introspective process in you. You’ll be pushed to reflect on your own thinking, compare it to other approaches, and modify it to counteract weaknesses. You'll often hear me talk about the idea of a self-correcting machine. It is the process of natural selection, applied to intellectual processes.
Schedule (6 weeks):
We'll meet every Tuesday for 6 weeks. Optional office hours immediately follow each class (7-7:30PM Pacific Time).
- Week 1: Tuesday 4/8/25: 5-7PM Pacific Time
- Week 2: Tuesday 4/15/25: 5-7PM Pacific Time
- Week 3: Tuesday 4/22/25: 5-7PM Pacific Time
- Week 4: Tuesday 4/29/25: 5-7PM Pacific Time
- Week 5: Tuesday 5/6/25: 5-7PM Pacific Time
- Week 6: Tuesday 5/13/25: 5-7PM Pacific Time
Admissions:
- To be considered, you must apply by 3/28/25.
- We'll admit students on a rolling basis until we reach capacity. Because of this, it's in your best interest to apply as soon as possible.
- If accepted, you'll get a nice email with more information and a special orientation video.
Syllabus:
FAQ:
- How much time should I devote to the course?
A minimum of 3 hours per week (2 hours of live class and 1 hour for homework). If you are interested in joining our Premium Membership Program, you'll want to devote more time because we'll only extend interview invitations to the strongest performers in each cohort. - Are there any prerequisites?
No prior programming experience is required. In terms of mindset, we suggest reading this short essay. - When will I get an admissions decision?
Admitted students will hear back by 3/31/25 at the latest. - What is your attendance policy?
If you miss one session, we'll send you a recording so that you can catch up. If you miss more than one session, you will be dropped from the class. - What programming language(s) do you use?
We use a language-agnostic subset of JavaScript we call FoundationScript. We do this because we want our students to learn programming in a way that's broadly applicable and not language-dependent. - Do I need to purchase any course materials?
No, all required materials will be provided. - Is there any required equipment or software?
Students must have a laptop or desktop computer, internet connection, and a webcam. Cameras must be on during class. This is to encourage participation and support interactive discussions. - How is this different from the self-paced (non-live) version?
The main differentiator is obviously the live component. From a curriculum standpoint, the core parts are the same. However, the contexts are slightly different. The self-paced version approaches programming from a web development angle. The live version takes a more abstract approach, that's inspired by algorithmic problem-solving and mathematics. - How will doing this course affect the admissions process for the Premium Membership Program?
After completing the live course, top performers (based on live sessions and homework assignments), will be invited to interview for our Premium Membership Program and will have their application fee waived. Students that need a bit more time to master the concepts will need to go through the usual admissions process (self-paced course > entrance exam > live interview). - Are there mastery-based assessments or quizzes?
Yes and no. Yes in the sense that you won't be admitted to our Premium Membership Program unless you demonstrate mastery of key course concepts. No, in the sense that we won't block you from attending the live sessions as long as you meet the attendance requirements. - How big will the class be?
In the ballpark of ~20 students. We want a size that's big enough to feel lively, but small enough to feel intimate. - I can't make it this cohort due to a scheduling conflict. When is the next one?
Tentatively, we're planning to start another cohort sometime in fall 2025. - How are you able to offer this for free?
If a sufficient number of free participants join our Premium Membership Program, then we can sustainably offer this course for free (this is our hope). If our business cannot fully subsidize the cost, we'll have to charge something, likely in the ballpark of a few hundred dollars, which is on the low end for live classes like this. Either way, from the student side, this is an advantage because there's a large subsidy in either case. - Still have a question?
Send us a note at [email protected].
Reviews:
Radhika Morabia
Software Engineer at OpenTable
January 2025 Cohort
I took Programming Foundations Live on a whim, and had no expectations that it would pay off in the way it did. I'm an experienced engineer, and this course was just for people who weren't that experienced with programming... Right?
The course went above and beyond my expectations. What was supposed to be a fun little refresher for me fundamentally reshaped the way I thought about programming, and ultimately, made me a more resilient programmer.
You can learn how to write programs that will do cool or flashy things anywhere, in a myriad of different languages and platforms. But, what's common between them all? What is that key essence that allows programmers to easily jump from building web sites, to programming rocket navigation systems, to doing scientific data analysis on huge datasets? That is what Gordon and Lily are setting out to teach you -- and huge bonus, they teach you live and personally grade all your work.
I found both to be very thoughtful teachers who clearly spent a lot of time aligning each week to optimize for student success. Even with that pre-work, they still spent a lot of time answering every single unexpected student question and adapting on the fly to changes as they happen. This is not your university professor's Zoom lecture.
I highly recommend this course to anyone who is not just looking to learn to program, but who is looking to future-proof themselves against our rapidly changing world.
Joanna Chandler
Front End Engineer at Auction Technology Group (ATG)
January 2025 Cohort
I am incredibly grateful to have participated in Programming Foundations Live. There is truly no other course like it. The instructors, Gordon and Lily, are rigorous in their approach and hold students to high standards, not to make things difficult, but because they genuinely care about the craft of programming and want their students to succeed.
I have been a front end developer for nearly 10 years and there was still so much for me to learn from the course and in actuality it helped me to recognize a lot of bad habits and shortcuts that I have fallen into over the years. The course can really humble you, but if you are willing to let go of old habits, the fear of being wrong, and the urge to rush through problems, you will absolutely come out of it as a stronger programmer.
Jo King-Yost
Staff Production Engineer
January 2025 Cohort
What sets Watch & Code apart from most computer science and programming coursework is their teaching philosophy. They prioritize, above all else, equipping students to independently and reliably solve any computational problem with logical thinking.
I have a poor memory. I struggled to internalize computer programming lessons that were based on memorizing categories of known computing problems and then doing pattern-matching of known-solutions to those problem categories. I could not rely on my brain to recall the right solution to a given problem "type." To get better, I knew I couldn't just keep trying to "memorize things better." I needed to actually understand the underlying systems and logic of computation in order to independently find solutions on my own.
I did not really have the language to articulate this succinctly before taking Watch & Code's "Programming Foundations Live" course. I sensed that my gap of knowledge of "computer science fundamentals" to be my root problem. Going back to school for a structured degree program was not an option for me. Considering all the free materials online and my personal determination, work ethic, and discipline, I believed I could find my way to filling these gaps on my own. Certainly, I made progress on my own, but it was difficult to identify—and therefore focus on—the core concepts I was actually weak in. I was constantly wading through things like per-language specific problems and details—environment setup and complexity, syntactic quirks, compiler options, best-practice opinions—or I hyperfocused on theoretical mathematics, believing "if only I could understand binary arithmetic, or linear algebra, or information theory, I'd grasp everything else!".
I stumbled on a blog post by Gordon regarding Finally Mastering Big-O Notation, and much of what resonated with me in this Big-O post ended up being a core part of Watch & Code's general teaching practice:
- To reliably solve problems, no one can simply memorize heuristics and do pattern-matching (it's not just me with my poor memory!)
- For computational problems, in any programming language, there are foundational concepts to master (we could call these the "domain knowledge" of computer programming, or the "foundations")
- These "programming foundations" are not actually that wide or deep, and you can master and put them into practice without deep mathematical theory as foundation
- To succeed, what a person needs is a reliable and methodical general problem-solving process, which includes a step to regularly reflect on and update/improve that process over time.
- Having both a reliable baseline problem-solving process and an ability to reflect on and improve the process itself over time, is how we can effectively learn to apply the core "domain knowledge" or programming "foundations" to practical programming problems
Alex Dominguez
QA Engineer at Atlantic Coast Automotive
January 2025 Cohort
When I first started my journey of learning programming, Watch and Code was the only effective material on the subject--and I tried them all. When I recently wanted to refine my problem-solving skills, I fell into the familiar trap of trying different resources and feeling frustrated at the lack of results when going at it alone. Luckily, I remembered where to look and, unsurprisingly, Watch and Code offered not just the content I wanted but the content I needed to succeed.
The instructors, Gordon and Lily, have developed an engaging course that's focused on first principles and promotes participant interaction. By getting at the root of intellectual misconceptions, students are taught to conceptualize problems in ways that make them more approachable, without having to rely on memorization or "hacks." Programming Foundations Live was the means by which I identified my analytical shortcomings, and it provided the perspective shift that's made me a more effective thinker.
If you've tried every course and book out there, it's easy to become cynical about pedagogy as it relates to programming. These instructors can cure that cynicism. This is the Introduction to Programming I wish I had taken years ago and Watch and Code has become the authoritative School on the subject.
Cassius Kiani
Venture Designer at Stealth
January 2025 Cohort
Hard, effective, and worthwhile.
Programming Foundations has helped me to think like a computer, which means I now understand programming in a manner which was previously inaccessible to me. While the process is hard, I would happily do it all over again, as there is a deep joy that success brings when following W&C's methods.
I highly recommend this to anyone that wants to learn programming.
Abhi Routray
Software Engineer at GE Aerospace
October 2024 Cohort
I first discovered Watch and Code back in college, and it was transformative in helping me learn programming fundamentals in a way that felt both approachable and practical. After a few year hiatus from formal study, I decided to return to Watch and Code by enrolling in the Programming Foundations live course, and I’m so glad I did!
As a mid-level developer without a formal computer science background, this six-week course was exactly what I needed to refresh and solidify my fundamental skills. Gordon and Lily have an incredible ability to break down complex ideas into digestible, actionable steps. The curriculum was perfectly paced, with each lesson building naturally on the last.
One of the biggest highlights for me was their focus on building what I personally call 'procedural intuition' — a problem-solving mindset that is key to really understanding why code works, not just how it works. This has reshaped the way I approach writing and reading code, instilling a thoughtful, methodical mindset I hadn’t developed before.
The class discussions and real-time feedback also made a huge difference, creating a supportive environment for learning and growth. If you feel at all lost when confronting programming challenges at school or at work, I cannot recommend this course highly enough!
Brittany Keith
Apprentice Application Developer at Infoware GmbH
October 2024 Cohort
The course with Gordon and Lily was in total opposition to all other programming courses I have taken online, in a good way. Rather than focusing on an end product - some fancy-schmancy, paint-by-numbers project - the content focuses on refining the student's thinking skills in a programming context. Gordon and Lily's teaching methodology strips away all the bells and whistles that some of us become so dependent on in order to understand the fundamental concepts behind those shortcuts. To be honest, it is intimidating at first because they take clear thinking so seriously in a world that does not (squirrel! 🐿️ ) But, adhering to their style will make you a better thinker and programmer in the end, which is a a worthy journey.
Alden Myers
UX Designer
October 2024 Cohort
After a few months of teaching myself programming, I was introduced to Watch and Code. I'm lucky I found them when I did! While fumbling through tutorials online with a "throw everything at the wall and see what sticks" attitude can work, Watch and Code offers a more rigorous approach where you program with intention.
What I found most unique about this course was the level of granularity in tackling problems. Diving into the details was initially humbling because I uncovered some false assumptions I had been carrying. I soon realized that working this way allowed me to build a bulletproof programming foundation.
I greatly appreciated the class atmosphere. Though experience levels varied, the problems we covered allowed everyone in the cohort to make meaningful contributions to the discussions. Solving problems in real-time was a major highlight. I learned a lot from watching other students approach problems in ways I never would have thought of!
Gordon and Lily never simply reveal an answer to a problem. Instead, they know how to prompt students to make their own breakthroughs. Over the course, I developed my problem-solving skills and became more able to critique my own code. As a newbie, this was empowering! I am looking forward to continuing to learn with Watch and Code!
Bijan Boustani
Technical Content Marketer at PostHog
October 2024 Cohort
Programming Foundations Live is a genuinely unique course in a sea of coding content. There are thousands of books and courses out there for learning to code. But it's shocking how similar and ineffective they tend to be.
Rather than focusing on coding syntax and tutorials, Gordon and Lily start with the core skills we all need to cultivate:
- clear thinking
- problem solving
These are evergreen skills. On some level, that's all we're doing all the time. Whether you are a designer, developer, or product manager; you'll benefit from refining the way you approach problems and think critically.
What's the catch? It's difficult. And it requires patience. Why subject yourself to the pain of solving hard problems when you could be learning to write "Hello, world!" in yet another language? Well, challenge means growth. And here's the secret: it turns out that it's actually fun. You learn to love the art of problem solving once you get past the initial frustration, impatience, and embarrassment of feeling inept. It's rewarding to come up with an elegant solution to a problem you worked hard to figure out.
I also appreciate how much effort Gordon and Lily put into the instruction. It's clear they've been doing this a long time, because they've found metaphors that help to understand concepts that otherwise take forever to learn. Learning about scope in JavaScript is one of those notorious concepts that you can struggle with for years, but here they'll share a visualization that makes it intuitively obvious. The same goes for memory allocation and all the other concepts in the course.
For experienced developers, this course provides an opportunity to unlearn some bad habits. And to resist the urge to dive into code when you can think through an optimal solution and build your intuition. And if you're new to programming, this is the best way to get started on the right foot.
Micah Laaker
Founding Product Designer at Across AI
October 2024 Cohort
As a designer who has written code for more than 40 years (but most often just to accomplish a goal), I found Watch and Code’s Programming Foundations Live course exceptionally eye-opening. Instead of focusing on syntax, the program centered on logical reasoning so as to most directly solve problems with the least amount of unintended consequences.
The coursework is challenging, the instructors focused on helping all the students not only meet their higher bar but also understand why it’s meaningful for their work, and the class participants' dialog was super helpful in contextualizing and exploring the subjects each week.
Even if you are not an engineer by trade, the course's unpacking of the computer science rigor is beyond helpful for your collaboration with engineers (not to mention the improved ability to write your own dramatically less-fallible code). I would strongly recommend Watch and Code’s Programming Foundations Live course… it requires serious work, but it is well worth your investment.
Adrian Hale
Technical Support Engineer at Okta
October 2024 Cohort
The Programming Foundations Live class is a unique opportunity for anyone serious about personal and professional growth.
I would describe this class as two things: deconstructing your thought process while problem-solving and examining your habits under a magnifying glass. It’s the complete opposite of learning programming through sheer repetition.
So, what's the value add? Imagine you have to run a mile. Most would start running, aiming to finish in 15 minutes. But what if you first took the time to improve your strength, flexibility, and running form? This course serves as a mental gym where you can lift weights, stretch, and receive personalized coaching.
If you aspire to become a Software Engineer, I genuinely recommend taking this class. When you do, resist the urge to sprint forward. Instead, try running sideways, then backwards, then even doing a crab walk; each approach strengthens your foundation, giving you a solid base to build on.
Dane Middleton
Software Engineer
October 2024 Cohort
Getting to an answer to the problem was not the goal in this course. It was understanding that there can be multiple answers and then pressing on to find the most logical one and being able to clearly explain it.
We were presented with problems that initially looked easy enough on first glance. For one problem, twenty people in the class came to develop almost as many answers showing that even a simple looking problem can be approached in many ways.
One aspect of the course that helped my problem solving approach was reviewing ‘mystery student’ examples of code (student submitted homework). Going through our work during class helped me point out where someone else went wrong or could have improved. More importantly, when my answer was the ‘mystery student’ I was able to step back and listen to feedback on ‘why’ this part is unclear and this part is confusing or could be improved. It is hard to be critical of your own work or listen to it be picked apart when you are immediately defensive about something you have spent time creating. With Watch & Code I have been able to better accept that this criticism is needed from others and myself in order to become a great problem solver.
I could tell that my homework submissions were handled with care by Gordon & Lily based on their feedback. Their struggle to understand how a student came to their answer (whatever it is) and nudge them to fix or improve it is not something I take for granted or something that I have found anywhere else and I am excited to continue.
Abi Castro
Cloud Engineer at G2 Software Systems
October 2024 Cohort
I enjoyed the course structure because it was interactive. During the lesson, it was acceptable to pause and ask questions when something was unclear. These discussions/conversations were packed with great learnings and is what I enjoyed the most from the course. Office hours was another place to ask questions or if there were no questions we would discuss solving a problem like the different strategies and the pros and cons of each unique strategy. This course allowed me the opportunity to witness how others approach problem solving, as well as my own, and ultimately find ways to improve how I perceive problems.
Megha Vaidya
Registered Architect
October 2024 Cohort
Programming Foundations Live is a great opportunity for those looking to learn or refresh fundamental programming concepts. Gordon and Lily present a systematic approach to problem solving, not just writing code, that is applicable to more than just programming. In particular, I found the Week 5 discussion on Correctness and Adversarial Thinking to be a very valuable approach to evaluating solutions.
As a trained architect who started by dabbling in programming by way of serial video tutorials at 1.5x speed, this course was refreshing, challenging, and rewarding. This class is distinguished by the live format and lively discussion environment which provides invaluable exposure to the solutions and code of diverse thinkers. With this course, you get as much out of it as you put in; Gordon and Lily offer tailored feedback on homework assignments and class discussions that's difficult to find in online courses.
If you're newer to programming and have started learning through video tutorials, I highly recommend this course. Sure, you can't consume it at 1.5x speed, and that's a good thing.