Herrick Fang

Teaching Programing to Secondary School Students

  • Created: 02 Jul 2019
  • Modified: 26 Jan 2024


When I went through the public school system here (~2002-2015), I didn’t have a lot of opportunity within the city. Reflecting back from college, I see that there is a disparity in resources people in San Leandro are offered. Isn’t it strange that we are so close to Silicon Valley, yet our students only have little access to tech resources?

I ran a program over the summer (2019) to teach high school students how to program. The students come from a variety of high schools around San Leandro. For reference, most students in this city come from relatively lower income households in the Bay Area. Additionally, most of the surrounding schools have terrible CS programs. Running this program was my experiment to see if something sustainable can form to help the community.

After the initial high school program ended, my family had a few friends who had 6 younger children in 4th and 6th grade who wanted to learn. So, I re-ran the setup with lessons learned from the prior run.

High Schoolers: Summer 2019


I ran 5 two hour sessions on 5 consecutive days for two of my younger cousins. At the end, they produced really cool pieces of work: here, here, and here.

Both of these little cousins had little to no experience. One of them took an intro CS course at the local high school where he had learned HTML/CSS and the other had gone through tutorials years ago in middle school but has never made anything himself. From experimenting on these two, I was able to come up with roughly 4-5 weeks of material.

What hatched from this sessions was the idea of building games. A lot of coding doesn’t provide visual feedback which is difficult when you are already unsure what the code should be doing. Having visual stimulus would be provide a good channel to understand what should be happening. So, using a graphics library seemed like a sensible choice.

Short: I tested my plan on my younger cousins to verify the practicality of the curriculum. Then, I applied these lessons to a new student group.


The program consists of making drawings and games using the p5js library through Open Processing. By building out various components of the game, students learn basic control structures and other relevant concepts. In the end, I hope to expose some version control through github, so that the students can display their drawings on the free website that github allows for.


Initially, 21 students signed up for the program to learn for 2 hours each Saturday during the summer. This reduced to roughly 6-7 students by the last lesson. We also had 7 instructors with 3-6 showing up depending on the weekend.

We started with teaching students in a classroom style where we would go over several topics and engage them by presenting a set of tasks to complete where they could ask questions to any of the instructors. We found that this was not the best form of engaging students because it didn’t meet them where they were at.

After the second session, we transitioned to a tutoring-style lesson where we would match one instructor to ~2 students. This new style engaged the students a lot more and they were able to complete the tasks at their pace. However, this style may not scale well because we would have to scale linearly for the # of instructors to the # of students presenting a large problem for 30+ students.


Overall, the program was a success! We were able to expose students to CS who had no previous exposure. Additionally, the students had a lot of fun and the instructors were able to learn the challenges of teaching effectively. I am pretty satisfied with the work that we did and we are currently thinking of future evolutions of this experiment!


It’s quite difficult to teach high school students who miss sessions. With the setup of teaching once a week, it is particularly challenging when students miss the first week or/and second week then come the third week because it disrupts the remaining students when you go over new material. We solved this problem later by changing to the tutoring style of instruction.


  1. A 1x/week course is not great for learning. Instead, 3+ times per week would be better.
  2. Students should not miss the first few sessions. (Meet students where they are at.)
  3. Students enjoy the visual feedback of p5js!
  4. There is a large trade-off between individual attention and teaching many students. The limits manifest in terms of resources and student comfort.
  5. Good exposure is pretty key at an early age to cultivate a sense of curiosity in students.

Younger Children: Nov 2019 - March 2020


I ran 2 hour sessions each Sunday morning with the same program taught to the summer class.

In this edition, there was an added difficulty of getting the children to pay attention, which was solved by breaking tasks into smaller, achievable goals that the students could tackle without getting distracted. The children were very interested in learning, but they also seemed to have been trained to ask others to do their task for them when they needed help rather than explore on their own. So, I helped push them in the direction of asking more targeted questions, so that they could get the answers that they needed.

There is definitely a bright generation ahead. I think programs like the two that I have run are really good for exposure. They lack the consistency necessary to build out deeper skills, but they have a nice weekly cadence that allows these kids to experience something they wouldn’t have before.

High Schoolers: June 2020 - August 2020


I mentored two students by working on multiple projects with them, some of which were open sourced here: https://github.com/drizzleco.

Pair programming and code reviews quicken the feedback loop. Quantity is greater than quality in the beginning to get students motivated in building something, especially in speeding up the feedback loop. Adding mentorship via having different perspectives in the field seems to really help the students see themselves having a future in the field.