Thoughts on teaching
This summer, I taught my first class, an intro to programming (procedural Java) course at my university, for students with no background in the area, open to students of any major. I was a TA for the two semesters prior, and at my undergrad I was a general tutor for the computer science department. However, this summer was my first experience leading a class, and the first time where I was the lecturer. The course was entirely online, which brought more challenges. I wanted to share some of my experiences from this time, and some of my thoughts on teaching in general.
Teaching Java to start does have some difficulties too. The course got into basics of source code vs byte code, which makes some sense, but Java throws in a virtual machine here too. The class also focused on procedural programming. Java requires you to have a class, which is confusing. Some Java editors automatically add packages, which causes problems with the unit test grading.
Creating lectures is difficult. I required the reading for a chapter to be done before the lecture on that chapter. That way, most learning could be done from the reading, and the practice examples in the textbook would reinforce this. Then the lecture would be for clarifying things, going deeper into concepts, and showing examples that would help them with projects.
My philosophy was to give students a lot of practice seeing code problems. Much of lecture was live coding in front of students. I think the students who did show up live and could ask questions about these examples, benefited the most. It was great when students asked “what if you changed it to…” and we could find out together. As a programming, my instinct is to run code when I have these questions, but this is something that has to be taught. So any question I was asked, I tried to answer by writing code.
I also focused in lecture on the patterns behind programming. When writing a new method that iterates through an array for example, often there is a similar pattern: initialize a variable, loop through the array, return the variable. Similarly, there are simple patterns for things like using Scanner: import, create the scanner, use the scanner. If students can remember these patterns, they can mix them together to write all the required programs. As they learn more, they begin to understand what these patterns are, once they learn things like what using an instance method really is.
I had a few TAs that I worked with, who were my peers in prior semesters. I do not think I managed them very well. Primarily, their job was to hold office hours to help students with homework, and this went fine, though I should have asked for more help with creating assignments and review material. I got these jobs done fine myself, but it may have benefited to have examples created from the minds of multiple people.
It was also my first time managing students. As a TA, the only conflict I had was with regrade requests. As an instructor, you are exposed to many more situations. Students have emergencies, forget things, and communicate too late. Usually, I was very relaxed with policies. When something came up, I would think of what is the best for the student’s education. I find it easy to be a stickler about rules, but very soon into the course I realized this is not helpful for learning. If a student asks for an extension on an assignment they missed, it is better they do it late than not at all, especially in programming, where so much learning comes from the actual practice of programming.