Programming Foundations LIVE!

An accelerated, 6-week introduction to programming and computer science

Application deadline: 12/27/2024

Because of limited capacity and rolling-admissions, you should apply as soon as possible. It takes less than 5 minutes.

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-8PM Pacific Time).

  • Week 1: Tuesday 1/7/25: 5-7PM Pacific Time
  • Week 2: Tuesday 1/14/25: 5-7PM Pacific Time
  • Week 3: Tuesday 1/21/25: 5-7PM Pacific Time
  • Week 4: Tuesday 1/28/25: 5-7PM Pacific Time
  • Week 5: Tuesday 2/4/25: 5-7PM Pacific Time
  • Week 6: Tuesday 2/11/25: 5-7PM Pacific Time

Admissions:

  • To be considered, you must apply by 12/27/24.
  • 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:

The linguistics of computing
There are many ways to express computational logic; from natural language to binary. In-between, you have pseudocode and programming languages. But which form is best for thinking about programming? By the end, you'll learn my exact process for thinking about code, without code. That way you can engage in structured problem-solving in the most natural way possible.
Week 1
Transforming natural language into executable code
Most programming languages provide numerous ways of doing the same thing. This is what often makes learning programming so overwhelming. But there's no reason it has to be like this. If you throw away the non-essential parts, what's left fits compactly on a small page. We will introduce you to that small page today. By the end of the session, you'll see how we can use code to turn natural language into executable computer programs.
Week 2
Building your notional machine
To be fluent in computing, you must be able to flawlessly simulate the computer in your mind. Only then can you bend it to your will. Fail to do this, and you will be a “let’s copy it from the internet and see what happens” programmer. This is the nightmare outcome; nothing makes me more sad. In an abstract sense, you must build a functioning computer inside of your mind. This "computer" is your notional machine.
Week 3
Adding memory to your notional machine
Learn our unique system, refined over many years, for understanding the intricate nuances behind how memory is stored and allocated. This is one of the most important yet most misunderstood topics in programming, even amongst experienced programmers and computer science graduates.
Week 4
Correctness and adversarial thinking
Programmers fall into the following camps: “routinely wrong”, “sometimes wrong”, and “rarely wrong”. Everyone starts in the “routinely wrong” camp, but few emerge from it. We will take deliberate, systematic steps to move into the “rarely wrong” group. To do so, we'll borrow some powerful ideas from mathematics.
Week 5
The unlikely story of Watch and Code
What is the most effective way to teach programming? In doggedly pursuing this question over the last 10 years, I've learned a lot of things, both beautiful and ugly, about the industry, about society, and about myself. I'll reflect on the major highlights in this frank discussion.
Week 6

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 12/30/2024 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.
  • 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 1-2 months after this one ends (likely in April 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:

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.