Programming Foundations LIVE!

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

The current cohort (10/1/24-11/5/24) is at maximum capacity.

Apply now to be considered for our next cohort, tentatively planned for early 2025.

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 10/01/24: 5-7PM Pacific Time
  • Week 2: Tuesday 10/08/24: 5-7PM Pacific Time
  • Week 3: Tuesday 10/15/24: 5-7PM Pacific Time
  • Week 4: Tuesday 10/22/24: 5-7PM Pacific Time
  • Week 5: Tuesday 10/29/24: 5-7PM Pacific Time
  • Week 6: Tuesday 11/05/24: 5-7PM Pacific Time

Admissions:

  • To be considered, you must apply by 9/15/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?
    If you're admitted into the program, you'll hear back by 9/17/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 January after the holidays).
  • 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].