Teaching CS50 in 2019
During the fall semester of my sophomore year, I had a blast teaching CS50 to Yale students. Not only did I get to teach material from one of my favorite classes at Yale, I also met some of the coolest people in the CS department.
During orientation, we learned about pedagogy, what it means to represent the teaching staff on campus, and key methods for both guiding student understanding and creating student engagement. With these lessons in mind, I taught a weekly section, a two hour class I taught Tuesday nights to 20 undergraduate and graduate CS50 students. Each week, I prepared slides, exercises, and walkthroughs, so students would feel prepared to tackle each week’s challenging coding problem set.
We started with C, including syntax, data structures (pointers, linked lists, hashtables, and allocating memory), and algorithms (running time, sorting, recursion). Problem sets for this unit included making cipher algorithms and filtering (color grading and blurring) images using C’s file input/output functions.
We moved briefly to Python, covering mostly just syntax before moving onto SQL databases and its integration into Python. We made websites with HTML, CSS, and JavaScript and finally connected Python, SQL, HTML, CSS, and JavaScript with a Flask server and Jinja. The final problem set involved creating a multi-routing stock selling/buying website, with session management and user history.
CS50 is notoriously fast-paced, teaching seven languages in just about that many weeks. As one of the only members of staff who was teaching just one year after taking CS50, I was nervous about my skills. But I found so much support from my co-TA’s, asking them about their teaching methods while we taught at office hours, which we all hosted for 4-6 hours a week.
After teaching eight weeks’ worth of material, I was assigned eight final projects to advise and grade. CS50 final projects are meant to be a practical and cumulative application of the skills students learned.
My students had some amazing projects: a real-time database of IPO lock-up, a website matching users to ideal vacation spots, and a Chrome extension that changed webpage colors for viewing accessibility at night, to name a few — miles away from their first problem set, where they just printed rows of hashes in the terminal!
Each step of the way, I tried to push them to explore features that would make their site more user accessible and useful. I showed several groups how to web scrape with BeautifulSoup, how to implement dynamic Bootstrap features, and how to implement GitHub authentication for site sessions.
Helping someone understand something, and, more importantly, develop confidence in themselves to tackle a challenge they once thought impossible, is one of the most rewarding things you can do.
After I came home from the CS50 Fair (our project exhibit and end-of-term celebration), I was surprised to see an email from one of my students from section. I wasn’t advising his final project because he was doing an iOS app project and I covered web and Chrome extension projects, so I hadn’t heard from him in over three weeks.
I don’t think I’ll ever forget that email. My students have inspired me so much, and I’m so glad I decided to join CS50 staff this semester.