My Unexpectedly Awesome AP Computer Science Class
December 2013 (postdoc)
I summarize my unexpectedly awesome experience taking AP Computer Science in high school from a math teacher who learned the material only a month before he tried teaching it to us.
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.
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.
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.
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.
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.
Last modified: 2013-12-09