Watching it made me reflect on how I first learned programming as a kid.
Unlike many of my peers in science and engineering, I didn't grow up in
a technical household. I was very lucky that both of my parents were
well educated and middle class, but since
their background was in the humanities, they didn't know how to foster
my interest in computers.

My first foray into programming was buying this Qbasic
book in 6th grade:

I tried to teach myself using that book but didn't get very far since I
had no mentor to help me get unstuck. And back then, in 1994, there was
no way to search online for help ... unless you were already a
computer expert. I remember getting stuck on the concept of defining
functions and then giving up.

Mr. H

Fast forward five years: The next time I attempted to learn programming
was in 11th grade in the AP Computer Science course at my public high
school. It was 1999, and AP Computer Science was taught in C++ back
then, which, in hindsight, was a terrible language for introducing
kids to programming.

At the time, few public schools had a dedicated AP Computer Science
teacher, so usually a math teacher would teach the course in addition to
their regular math course load. In our case, our most tech-savvy math
teacher, Mr. H, bravely took on the task of teaching the first AP
Computer Science class in our high school in recent memory (I think
someone else taught a Pascal version a long time ago).

Mr. H had done a little bit of programming before but didn't have a
formal CS background. To prepare for teaching the course, he attended an
intense three-week summer training seminar to learn C++ and the AP
Computer Science curriculum materials. That was it! When we started the
first day of school in September 1999, Mr. H had only a three-week head
start on all of the 30 students in our class. However, despite its
imperfections, this course sparked my lifelong love for programming.

Unexpectedly Awesome

My high school operated on a block schedule where students attended
three classes on “even” days, and another three classes on
“odd” days. This unique schedule meant that we had two-hour
class periods, which was dreadfully boring for some classes but turned
out to be awesome for AP Computer Science.

For the first 30–45 minutes of class, Mr. H would give a lecture,
usually directly out of the lecture note handouts from his summer
training session. He would give all of the students a copy of his
lecture notes afterward. Then we would spend the rest of time in the
computer lab doing programming exercises from those notes.

There were enough computers for everyone to get their own. In hindsight,
even a 2:1 student-to-computer ratio would've been fine, since it
would've forced pair
programming.

We had 75 to 90 minutes of uninterrupted programming time every class
period. Since the computers weren't connected to the Internet and were
all within visible view of Mr. H, there was no way to goof off.

As we were all programming, Mr. H would walk around the computer lab to
help students one-on-one, or explain concepts in more detail on the
whiteboard. But here is where things got awesome: Some of the students
who finished the problems faster would go around the room and start
helping other students. After all, what else was there to do? We
couldn't browse the Web or play games (actually we later found a way to
play games behind his back, but that's for another article ...). And
since we were stuck in lab anyways for the rest of the class period, it
was actually fun and gratifying to help out our fellow students.

Mr. H gladly welcomed our help, since he was only one person in a room
of 30 students. And plus, he hadn't completed the programming problems
before, either! So he was almost as clueless as we were. Oftentimes he
would himself be stuck when trying to help a student debug, and one of
us would come up to help out; soon enough, small groups would naturally
coalesce around someone's monitor. Impromptu mini-celebrations would
then ensue when we defeated some gross C++ compiler error.

After a few weeks, it didn't feel like Mr. H was the teacher –
instead, it felt like we were all in this fight together to make it
through the 50 or so sets of lectures and problems in the AP Computer
Science packet he had received in the summer prior to teaching us.
Lectures soon became more like “let's figure out what the hell
this bizarre C++ program does together” therapy sessions, with
many of us puzzling through arcane C++ syntax and semantics on the
whiteboard.

C++ was terribly frustrating, but at least we were all in this struggle
together. And every little victory was a shared one. Soon we realized
that Mr. H, who taught AP Calculus, the most advanced math course in our
school, was just a guy who had to learn this stuff from scratch like
we were all doing. He wasn't some omniscient demigod who spewed code
from his fingertips. So if he could do it, then why couldn't we?

That class ended up being one of my favorites from high school. Without
it, I wouldn't have had the courage to major in Computer Science at MIT
and then go onto grad school and beyond. And it wasn't because Mr. H was
some inspirational genius of coding or had a Ph.D. in Educational
Psychology from Harvard or whatever. Rather, he was just a guy who was
humble enough to admit that he didn't have all the answers, and who was
willing to work with us to figure them out together.

Epilogue

Unfortunately, this magic lasted only for that inaugural year that I
took the class. In subsequent years, two major things changed: First,
obviously Mr. H developed better mastery of the material, so lectures
became more like traditional “man talking to kids from the front
of the room” and not “let's figure this stuff out together
... really, I need your help to figure this stuff out!” Second, he
hired the top students from prior years (including myself) as TAs for
the course (earning independent study elective units). So instead of
students helping out one another as peers, now a staff of 4 to 6 older
TAs roamed the lab to serve as tutors.

I was one of the TAs during my senior year, which was the second year
that the class was taught. And already, the dynamic had changed to
resemble more of a traditional high school classroom. Instead of Mr. H
and us being more like peers (at least with respect to Computer
Science), students were once again treated like kids, just like in all
of our dozens of other classes.

Parting Disclaimer

I think this unique setup only worked since we were the first class
and that it was an elective that only the uber-nerds – mostly
white and Asian boys – took. For the most part, everyone in the
class was already interested in computers and programming. We just
needed a dedicated place to practice and learn together, and those
two-hour class periods in the computer lab were perfect for that
purpose.

Thus, I'm not at all suggesting that this kind of ad-hoc setup is
optimal for encouraging diversity or promoting broader access to
Computer Science amongst traditionally underrepresented populations. The
underlying social challenges there are far deeper than I can attempt to
tackle in this short article. Unlocking the
Clubhouse
is a great starting point for learning about this important issue.