Updated: Jul 18, 2021
I vividly recall my mother sending me to a coding class when I was in middle school. There, I was taught C, a rather low-level and intricate language, especially for beginners. I hated it. The teacher made us memorize templates but never explained why coding related to our daily lives or how we can solve a hands-on problem with programming. In addition, surrounded by classmates who have much more coding experience than me, I was constantly discouraged and eventually refused to take any Computer Science electives all throughout high school. I simply decided CS wasn’t for me. At Duke, I started out as a Biomedical Engineering major, took a CS class just because all my friends were taking it, and to my surprise, realized how fascinating it can be. By the end of sophomore year, I even became a CS major myself! Reflecting on my winding journey, I wish I had a passionate and supportive mentor who could introduce me to the world of programming using interesting examples and fun projects. Now that I have the necessary knowledge and experience to teach introductory-level CS courses, I wanted to give back to my community. That’s why I designed “Programming Methodology”, which I am currently teaching from June to August in Taiwan.
Course Promotional Flyer
In addition, the design of the course is also based on my experience tutoring several high school students in AP Computer Science (AP CS) this past year while in Taiwan. Throughout the tutoring sessions, I noticed that quite a few students were lacking significantly in coding fundamentals and had no idea about good software engineering practices despite having already taken the majority of a one-year AP course at school. When I casually conversed with them, they complained about how the AP CS course at their high schools “taught to the test” and focused heavily on the intricacies of Java syntax instead of teaching a problem solving mindset. When asked about school projects, I vividly recall one of my tutees saying how he had almost zero experience building anything “that actually works” since “the teacher just told us to write down code on paper to prepare for the paper-based AP exam”. He had no clue what an IDE (integrated development environment) was. At this point, I realized that CS education in Taiwan can be improved substantially to encourage more kids to develop an interest in programming and go into Computer Science careers. Traditional Asian education has a stereotype of focusing heavily on memorization instead of creativity. I had a vision to change how coding is taught in Taiwan and allow students to realize that they are capable of innovating.
I went to work. Meeting with my business partner (a Stanford graduate who is also passionate about CS education) every week, we discussed our visions and came up with course material together. Inspired by Stanford’s open-source CS106A course, we spent countless hours creating engaging lecture slides that included interesting analogies to help students digest more abstract programming concepts. From utilizing Karel the Robot’s tasks to teach basic control structures to introducing memory & scope through a tragic “Romeo & Juliet: Java Version story”, we wanted to make coding less daunting and more fun! We agreed that the goal of this course is not to teach students everything about the “Java language”. Instead, the goal is to teach students how to break down a complex problem and implement code using good software practices to boost not only performance, but also readability and reusability. I also envision this course to encourage students who have little to no programming experience and motivate them to further explore the endless possibilities of CS.
Here are some interesting assignments that students will be working on throughout the course!
Control a robot (Karel) to complete a set of tasks (such as producing a checkerboard pattern out of any rectangles)
Enter a graphics competition with classmates and create a mascot using Java’s Graphics Library
Build a customized arcade video game from scratch
I’m super excited about working with diverse students and putting them together in teams to complete innovative projects. Stay tuned for more updates about the course on this blog!