From Aug 2013 to Dec 2013, I was selected by Asst Prof Ben Leong of NUS to serve as the Head Tutor for CS1010S Programming Methodology, an introductory programming course in NUS. It was a new NUS course that aims to impart fundamental concepts of problem solving by computing and programming using the Python language.
There were a few phases of this project:
- Recruitment Phase - Recruitment of strong programmers into the teaching staff team
- Course Preparation Phase - Creating materials (lectures slides, tutorial questions) for the students and staff to use during the course
- Execution Phase - After the semester has started, conduct weekly tutorials for our assigned students
- Wrapping Up - Reflection on what went well and how we can improve for future semesters of teaching CS1010S
There were lots of administrative issues to handle, because being a new course, much of the course materials had to be newly prepared. We used tons of Google services for our admin (Google groups for communication, Google spreadsheets for issue tracking and student data, Google sites for documentation). We did not use specialized project management tools like Asana or Jira because everybody was comfortable with Google services and it seems to be sufficient for our purpose.
I value good documentation as it helps orientate people that are new to a team. Hence I wrote a wiki document for the course so that new tutors would have an easier time familiarizing themselves with our working style. Also, during the course preparation phase, I would review the work of the other tutors to the best of my ability so that the quality of materials that we release to the students were of high standards. Being the source of information to tutors and students, I kept myself well-informed so that I could answer almost all questions thrown at me. I also ensured that everyone was up to date with the course's progress.
I did not know Python prior to CS1010S and hence I had to pick it up on my own before the course material preparation phase even started. Fortunately, it was easy to pick up a new programming language because I have been exposed to various languages. To save the time of the other tutors, I gathered resources, created tools and teaching aids and shared them with the other tutors. Even though it took up more of my personal time, but overall it was for a greater good: It saved the staff team more time due to the large size of the team and helped everyone get the job done more effectively.
"People" here, is divided into two categories - the staff team and the students. It was my first time managing a professional team of people. My approach was to get to know most of the people (staff and students) on a personal level outside the classroom. The motivation behind this was to better understand each individual's personality so that delegation of work could be more efficient and prevent mismatch of interests.
As the team was huge, and there were many side-roles to cover, I/Cs were nominated and some tutors would be in-charge of certain materials/aspects of the course. Whenever other tutors needed help, I would step in and took over their role or get someone else who is available to help.
As the Head Tutor, I also set a positive example by marking by students' assignments as early as possible and topping the tutor leaderboard (yes, we had a leaderboard which showed the number of assignments we marked and the delay between a student submission and us marking it).
In making decisions, often I would seek the opinions of the other tutors so that everyone had a part to play in the final decision being made. This would give a sense of ownership of the course to people and trigger their intrinsic motivation to work hard on it.
I have done private tuition before but it was my first time standing in front of a class to conduct tutorials. I felt that I needed to customized my teaching according to the standard of the class. For the stronger classes, I did not always go through the code, instead, I encouraged the students to formulate alternative approaches to solve the problem.
Caring for students was also essential to being a good teacher. Often, I chatted with them outside class and treated them as friends rather than students. This helped break the teacher-student barrier which helped in making the lessons more enjoyable.
I had a few main motivations behind undertaking the role as Head Tutor:
- Learn to work with a team of talented individuals (elite bunch of tutors)
- Learn how to run a course well. Many courses in NUS left students uninterested in the subject matter
- Leave a positive impact in the students' lives and possibly get them interested in a career in Computer Science
- Teaching the students to learn how to learn. Train them in being independent learners and increase their potential
- 230 students were taught programming concepts that may be needed to solve problems in the coursework by a professor and a team of 17 tutors
- Gave students a memorable time in NUS
- Sparked interest in many students to take programming courses beyond CS1010S (even though they were only required to take one)
- Lost plenty of sleep in the process
- Conducted 10 tutorial sessions and marked many missions
- Wore multiple hats (designing, admin, coordinating, chaperoning)
- Leveled up and grew by a whole lot (no longer just a coding monkey)
- Got to know many students and made meaningful relationships with them
- Came up with new teaching initiatives that helped students be better programmers
I was rather glad with the outcome of the course and would deem it a success. It left a deep impression in many students' hearts as the toughest, most painful, most time-consuming yet enjoyable freshmen module.
I'm also glad that my students didn't hate me. In my teacher performance report, I received an average rating of 4.56/5.00 in my overall effectiveness as a teacher. Positive remarks from my students included: hardworking, responsible, approachable, caring, friendly, efficient, patient and nice.
Overall, I think it was a successful project with the combined hard work of everyone. (: