Tuesday, June 19, 2018

My spring in a high school CS classroom

(This is cross-posted from Medium, where it's better formatted)

Computer Science isn’t yet a requirement at the K-12 level, but fortunately, there are a growing number of CS classrooms across the US. Many of those CS classes are taught by teachers that are relatively new to CS, like former math or science teachers, so they have a lot to learn quickly.
That’s where the TEALS program comes in: its a program that matches teachers up with volunteers from the software engineering industry. In the co-teaching model, the volunteers actually teach much of the first year (with the goal of serving as an example for the teacher for the next year). In the TA model, volunteers help students with their questions and debugging.
For those who don’t know me: I’m a software engineer half the time and a teacher the other half. I created all the programming courses for Khan Academy, and most of those were based on in-person workshops for GirlDevelopIt SF. I recently took a break from teaching to do the startup thing, and when I got over the startup thing, I realized how much I missed being in a classroom, so I signed up to be a TEALS volunteer.

The AP CS A Class

I got matched up with Berkeley High School’s AP CS A, a class which uses Java to teach programming concepts, particularly of the object-oriented variety. My very first language was Java (back when Applets were cool), but I hadn’t done any in years, so I binge coded CodingBat problems to prep.
I showed up, and discovered the class was basically as a 100% lab class. The teacher assigned Runestone chapters and CodingBat problems on Google Classroom, and the students worked independently through them, asking for help or helping each other when needed.
I’d walk around with my mini whiteboards, ready to diagram a coding problem at a moment’s notice. I found that always having a whiteboard on hand made me much more likely to guide the student to the answer than just provide the answer immediately.
Helping the students was very fun, and I liked getting deeper into the intricacies of Java. However, I’m a very project-oriented person when it comes to coding, so I was eager to introduce these students to projects: longer assignments with less structure and more creative coding. Thankfully, the teacher welcomed my ideas and was happy to try them out.
We started with a simple Valentine’s Day project, ASCII Candy Hearts —as it turns out, that was their first introduction to ASCII art, and it quickly became a mainstay in every project after that. ♥♥♥
Then we introduced Pair Programming starting with the WordGuesser Game project, and the energy of the room shot up. It was so fun seeing them working together and checking out their takes on each project.

Bringing in chocolate bars for each pair sure motivated them on the ChocolateBar project…🍫

We still needed to prep the students for the AP exam, so we spent the month before the exam on more individual work, like paper programming and multiple choice exams. Ok, and we squeezed in some Binary Bingo…

After the AP, we spent the final month learning the Processing library, and everyone went to work on making visualizations and games. It was a great way for them to use all the Java concepts they’d learnt (like classes for game objects, arrays and ArrayLists of multiple objects, conditionals for collision detection), while also producing a really fun output.

In case it’s useful to anyone else teaching or helping out in an AP CS A class, I’ve written up our sequence of materials in this document.

Intro to Programming

Many CS teachers teach more than one CS course. That means that not only do those teachers need to learn programming, they often need to learn programming in multiple environments and languages, plus CS concepts like algorithms and logic. That’s part of why the TEALS program is so needed — there’s just so much to learn in CS land, let’s give teachers a helping hand!
At Berkeley High School, I soon found out that the teacher taught two sections of an “Intro to Programming” class right after the AP CS A class. Those students started off in Python and Turtle Graphics for the first half of the year, following the Runestone tutorials. Then around the time I started volunteering, it was time for them to switch over to HTML/CSS, and what do you know, their teacher decided to assign them my Khan Academy course.
Of course, I started volunteering in the Intro classes as well. I wasn’t doing the job thing at the time, so I couldn’t resist helping out a classroom of budding web developers. 😄
Once the students learned JavaScript, we started on projects like TicTacToe and MadLibs. We quickly discovered these students weren’t as into pairing as the AP class, likely due to being younger/shyer and not feeling as comfortable with each other. BHS is a high school of 3100 students, aggregated from multiple middle schools, so sadly, many of them just don’t know each other.
As I was helping the students, I noticed they were frequently distracting themselves on GeoGuessr.com, a game where you see a random streetview and have to guess where it is in the world. I became determined to prove to them that they too could build GeoGuessr. Five projects later, they’d learnt about iframes, query parameters, APIs, and geocoding, and they all made their very own GeoGuesser game.

Now what if they shared their GeoGuesser project with friends and wondered how well how they scored? They wouldn’t be able to see that yet, because they didn’t know about databases yet. To me, the magical part of the web is being able to see how people all over the world can use what you’ve made, which means you need to store their data somehow. So I showed them AJAXSQL, and a simple Express+SQLite server. There wasn’t enough time for them to deeply understand Node, but I could at least put the idea in their head, and a number of them used Node to store results for their final.
Students made a big range of final projects, like games in Canvas/Processing, charts using Plotly/CanvasJS, personality quizzes, Jeopardy games, encryption puzzles, and custom maps of fantasy worlds. My favorite was Flickr Feud, a game that pulls random photos from Flickr, asks Watson to identify them, and scores based on your ability to guess what Watson said.

If any of you are teaching a web development class and are looking for more project ideas, I’ve written up the Intro materials in this document.

Reflections on the high school classroom

In the past, my classroom teaching experience was mostly workshops, where the attendees were very eager to be there and to learn. That’s not always the case with high school students — sure, CS classes are electives, so they did choose to be in them at some point, but they’re also busy with other classes and just growing up. And hey, maybe they’re not as into CS as they thought they’d be, or maybe their parents picked their electives.
The point is: high school students aren’t always that into you (me), and not always that into what I’m teaching or how I’m teaching it. That can feel like a downer, but it’s also refreshingly humbling. I tried teaching with a slide deck once, looked out upon a sea of bored faces, and from then on, I only taught via whiteboarding and live coding, and no more than 15 minutes of that.
I feel like I improved my teaching skills thanks to the honesty of high schoolers, so I am thankful for that. 🙏

Thinking of being a CS classroom volunteer?

I’m hoping that a few of you reading this post are software engineers and considering volunteering in a local classroom. I went every day and came up with project ideas, because I had the luxury of being funemployed at the time.
However, TEALS volunteers can come in as little as 1–2 days a week and simply be a TA and answer student’s questions about the tech industry. Plus, TEALS partner schools often schedule the classes as the first period of the day, so that you can wake up, volunteer, and still get to work on time.
You can learn much more on the TEALS website here: https://www.tealsk12.org/volunteers/
Another way to volunteer in classrooms is to email the local schools, like if you’re keen to help out in a middle school or elementary school. I spent every Thursday afternoon this spring at the local middle school coding club, helping with SCRATCH and WoofJS, and I found that opportunity by emailing the local school system.
Classrooms are fascinating. If you have the time, go find one and see! 😊