On day 1, they barely knew what a float was. On day 14, they had programmed a game of minesweeper, a cipher decoder, or a zombie apocalypse simulation. And I helped teach them how to do it.
Each summer, MIT hosts a program called WTP, or Women's Technology Program.
In the program's own words, its goal is:
"to spark interest in the future study of engineering and computer science among high school rising seniors".
The program fosters a collaborative, women-focused community for those who have not had opportunities to explore engineering and technology.
This year, I had the privilege of being the Computer Science Instructor for the EECS (Electrical Engineering and Computer Science) track of WTP. This meant I would be teaching 20 high school girls how to code – none of whom had any prior exposure to programming.
In two short weeks, I, along with four brilliant tutors from MIT, would teach them the foundations of programming in Python: data types, variables, conditionals, loops, functions, classes, and even inheritance. The last week of the program would be reserved for working on a programming project of their choice, putting their new skills to the test.
As the instructor, I spent over a month preparing the materials for the class. During the course (no pun intended) of the class, I spent three hours a day running lectures and one hour a day running office hours for the students. Here's what I learned along the way:
1) Anyone Can Learn to Code
On day 1, I handed everyone a Python cheat sheet. They looked at it with horror and intimidation (I will admit, the formatting was a little scary). But by day 8, we discussed the cheat sheet and the general consensus was that they understood almost everything!
The girls I taught came from all over the country, all with varying backgrounds and access to resources. By the end of the class, all the students felt like they understood the basics and simply needed more repetition.
Perhaps some students with more access to math and science resources grasped concepts faster, but those without the same background were still able to understand those topics eventually. It did take extra work.
These students often sought extra help with assignments, or voluntarily spent their time reviewing additional problems. Nonetheless, at the end of the day, they were able to complete the same tasks and projects as their accelerated peers.
2) Community Matters
When you learn with other people, it makes all the difference. A supportive, inviting community can help you answer questions, explain a concept from a different perspective, and remind you that the road ahead is tough, but you are all in this together.
Often, my students formed their own problem-solving groups to discuss approaches tackling different assignments. In fact, this collaboration is encouraged by MIT policies.
In these groups, when you discuss different solutions and weigh the pros and the cons of each solution, you are exposing yourself to new ideas and new concepts.
Ultimately, these will build problem-solving skills. At the core of programming, is problem-solving.
WTP created a unique community of supportive women, led by women in STEM. I noticed that the key to building a supportive and welcoming community is patience, understanding, and open dialogue–ensuring that nobody feels alienated, ridiculed, or belittled.
3) Coding Takes Practice
At the beginning of the course, I asked my students if anyone knew or was learning another language. Ten hands went up. Then, I asked my students if they could write a book in that language. No hands were in the air.
Learning a programming language is much like learning any other language. While it is critical to understand grammar, vocabulary, and syntax, these become intuitive with practice.
But programming a script is much like writing a book (or maybe an essay). The idea and structure are as important as the language itself.
Words alone do not write a book. Ideas write the book, and language simply expresses those ideas. Similarly, conditionals and loops alone do not make up a script. Logic writes the backbone, and conditionals/loops tell the computer how to execute it.
How do I keep track of used letters in hangman? How do I find the index of the smallest number in a list? How should I represent this polynomial?
For a beginner programmer, these are daunting questions. For someone who has experience, these come with intuition. The only difference between the beginner and the expert is the time spent on practicing the skill.
4) Teaching is Rewarding
I could have spent my summer relaxing on the California coast. Instead, I chose to teach. I have no regrets.
Teaching is difficult. There is a saying along the lines of: if you can't teach it, you don't know it. Teaching forces you to fully understand a concept so that you can explain it in multiple ways to others. It is exhausting to repeat yourself over and over, hoping that maybe the concept finally clicks.
However, when a student has that AHA! moment when something finally makes sense, it is the best feeling in the world. To know that you have passed on your knowledge to someone who desired to learn it means you have given a priceless gift.
I have been extremely privileged to go through an education system that values learning and to be able to attend one of the most renowned colleges in America. I attribute much of this to the teachers I had growing up. This is proof that teachers can have a huge impact.
At the end of the course, some of the students were excited to show their friends what they learned and to help then learn to code as well.
The act of teaching is exponential.
Initially, I was hesitant to be the instructor. It meant three weeks of my summer after graduation occupied by teaching. Twenty high school girls' introduction to programming through me, their thoughts about STEM influenced by how I taught my course. I was nervous.
However, reflecting upon the summer, I am extremely grateful to have had this once-in-a-lifetime opportunity to interact with and teach these students. I helped them learn not just how to program in Python, but also how to think like a computer scientist. It inspired me to continue teaching, especially in interactive environments where I could ask real-time questions.
At the very end of the program, the students created a monthbook and wrote cute notes to one another and the staff. Upon reading the messages addressed to me, I felt honored to be part of their introduction to computer science. They were just as inspirational to me as I was to them.