Teaching at Code Nation

Code Nation, founded in 2012 with the mission of equipping students in under-resourced high schools with the skills, experiences, and connections necessary to enter careers in tech, will be closing at the end of this school year.

Since our founding in 2012, we have served nearly 10,000 students in more than 100 schools, partnered with 150+ tech companies, and engaged more than 2,000 volunteers. Our mission to equip students in under-resourced high schools with the skills, experiences, and connections necessary to enter careers in tech has touched the lives of so many.

Read more:

It’s sad to hear the closure. I had great memory and learned a lot from working with Code Nation (Cassie Houghton, Ana Rivera and many other volunteers). Here, I’m sharing my old blog written in 2021 here as a reflection and want to say “Thank You” for all the positive impact Code Nation had made on the students and our community.

During the spring semester of 2021, I served as a volunteer at a high school in San Francisco, primarily responsible for teaching web programming to high school students. The fall semester was about to start, and I was planning to switch to a different school to continue teaching. I wanted to record my observations and feelings from the spring semester, hoping to improve in the fall semester.

Remote Teaching Course Design

There were about twelve students, three "teachers" (engineers serving as volunteer teachers), and one program manager. Each teacher took turns teaching two consecutive classes per week. Teachers not lecturing were responsible for managing Zoom and interacting with students in the chat channel. Regardless of whether they were teaching that week, each teacher led a discussion group of three to four students.

The time allocation for each class was as follows:

  • 5 mins: Icebreaker (fun questions or collaborative drawing to break the ice and boost the atmosphere)
  • 5 mins: Popcode quiz (a simple question using popcode to review the content from the last class)
  • 20 - 25 mins: Lesson (generally includes review and teaching, some slides required students to read out loud, some required students to answer questions, and some were explained by the teacher.)
  • 5 mins: Guided practice (teacher demonstrates a practice problem)
  • 15 - 20 mins: Independent practice (students work in groups, each with a teacher. Each student works on solving problems independently, and can discuss with the group if they encounter difficulties.)
  • < 3 mins: Exit tickets (two to three short answer or multiple-choice questions submitted by students on Google Classroom.)

Some Reflections and Experiences

Respect and Encourage Creativity

One project required students to create a questionnaire website. Students needed to design a Q&A site that would reveal something about the user after answering a few questions. For example, a Pokémon quiz site might ask: "Are you large or small? Do you have the power to generate electricity or breathe fire?" If the answer was "small" + "generate electricity," then the website would tell the user, "You are Pikachu!"

The technology behind this was very simple, but it represented important foundational knowledge (input, HTML manipulation, jQuery events, if-else). If I were a student, I might choose a topic hastily to complete the assignment quickly since I know it's just a way to score points, and the topic isn't important. However, the course design was very interesting, providing a whole class period for students to think about what they wanted to do, and they really enjoyed spending time on this. Some created quizzes about cats, while others made quizzes about Breaking Bad. They highly encouraged such creative discussions, even though the creativity was unrelated to the technology.

Emphasize Collaboration

The concept of Pair Programming permeated this course. According to Wikipedia, Pair Programming is an agile software development technique where two programmers work together at one computer. One types in code while the other reviews each line of code. In this course, the one typing was called the Driver, and the one reviewing (guiding) the code was called the Navigator. A project would have several modules, and the plan would detail who would be the driver and who the navigator for each part. The navigator would give instructions for the driver to follow and would also check the driver's code. This was beneficial for fostering a sense of collaboration.

Learnings

Admit When You Don't Know

Once, a student asked me about the difference between mouseover and mouseenter. I tried to explain based on my understanding for quite a while, but it wasn't quite right, so my colleague started to explain. I let them move on to the next segment (group discussion) while I quickly looked up information and prepared a few more slides. After the group discussion, I was finally able to explain it clearly. In the future, when faced with something I don't understand or am unsure of, I should say "I'm not sure" and then respond after gathering the information.

Identify Students Who Are Falling Behind Sooner

The continuity of computer courses is strong, with one part building on another. If a student falls behind on one part, they are likely to struggle with everything that follows. It's crucial to identify students who are quietly falling behind and help them catch up promptly. To achieve this, it's important to frequently CFU (Check For Understanding). Often, because the teacher understands the material, they might assume the students do too. Therefore, it's essential to frequently use different approaches to ensure students truly understand.

Teaching Is the Best Way to Learn

Often, students may adopt a "just get by" attitude, but a teacher's mindset is "I need to thoroughly understand this to teach others." Teaching is indeed the best way to learn, which is also reflected in the Feynman Technique, but I won't elaborate on that here. Actually, I had almost forgotten everything I knew about web programming before this volunteer teaching experience, through which I learned a lot of new things.