Thoughts on teaching

August 22, 2020

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

Java is a great language to learn at first. This may be my bias, as it is also my first language, and so it holds a special place in my heart. Lately, a lot of people suggest Python or Javascript as a first language because they are “easy” to learn. I disagree entirely. Python and Javascript are caught up in fast changing usage, the definition of “pythonic” changes, and so does ECMAScript. If you look up a programming question for one of these languages on stack overflow, you will find so many answers it is overwhelming. Java has less syntactic sugar, and so the syntax is easier to learn. Additionally, in both of these languages, looking up a question will likely instead give you the name of a recommended library function. While learning how to use libraries is important, it is better to start with learning a few in the standard library of the language. Programming beginners are already overwhelmed, and adding in 3rd party libraries extends a programming language too much right away. Lastly, Java is also statically typed. Static typing is great when you are learning programming, since the compiler will offer corrections.

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

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.

Managing people

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.