Somehow, I’m already two semesters into my PhD program, and I just finished my second semester of teaching. In this article, I want to reflect on my second semester by asking myself a few questions like “how did this semester go?” and “how was it different from last semester?” That said, if you haven’t had a chance to check out my first reflection, do that now. Otherwise, let’s get into this!
Table of Contents
Like last time, I’ll kick things off with logistics. In particular, I want to talk about the class I was teaching and my set of responsibilities for the semester.
Just like last semester, I taught a 3-credit introductory Java course with about 40 students from all sorts of majors:
|Computer & Information Science||2|
|Computer Science & Engineering||2|
|Industrial Systems Engineering||1|
As you can see, an overwhelming number of my students were math majors. Also, most students were double or even triple majors, but I only listed their first major in this table.
At any rate, this time around, I held the latest class of the semester at 4:10 PM until 5:05 PM. As a result, a lot of students were tired, so I didn’t get a ton of engagement.
Just like last semester, I held two lectures a week and one lab. The difference, however, was the location of the lab. Instead of grouping up with another class in the large Baker lab, we got together in a much smaller lab across campus. The lab layout was a quite a bit different as well. Unlike the Baker lab which had computers set up in pods, the Pomerene lab had everyone sitting in rows, so the dynamic was a bit different. On the plus side, there was a projector and a white board.
As with the previous semester, I had to grade a lot of assignments. In total, I was stuck grading around 12 projects, 14 labs, 14 homework assignments, and 3 exams per student. When everything was said and done, I ended up with the following table of final grades:
As it turns out, I didn’t fail anyone this semester! Though, I did have a few people in the D+ range. Otherwise, most of my students had an 80% or above. Part of that is a testament to how light I grade, and part of that is a testament to how strong this group was.
As always, you’re welcome to check out the course schedule as long as the university continues to host it.
At this point, I’d like to take some time to reflect on the second semester of teaching. Let’s get into it!
Overall, I was much happier with my class this semester. I think part of that was my familiarity with the material, so I was a lot more confident in my teaching. Of course, there were also a lot more high achieving students than last semester which made it more fun to dig into philosophical topics and debates.
In addition, my office hours were always busy. Instead of sitting around for a few hours a week, I actually had students visit me regularly. I think my favorite part of having dedicated students like that is that they let me guide them toward a deeper understanding of the material. For instance, instead of discussing the mechanical process of creating a constructor, we would talk about memory allocation and references.
Also, I had a lot of positive interactions with students this semester. I even had a student drop the class, and they still gave me a rave review:
I will not be there to take Midterm II today as I am in the process of dropping the class. I originally took the class as a way to explore a career option. However, the class became increasingly difficult for me to keep up with. This, coupled with the fact that I do not think coding is my forté, resulted in many missed assignments and projects. I would like to apologise for my approach to this class. You are one of the better professors I have this semester, so its difficult for me to drop the class as it stands. I hope you can understand my situation, and thank you for your time and patience!Anonymous, Spring 2019
To which I responded:
No sweat, …! I’m glad you gave it a shot. If you ever want to give coding another chance, let me know. Best of luck with the rest of your semester.Jeremy Grifski, Spring 2019
Finally, grading was much easier this semester thanks to the grading tool I wrote for myself. Instead of running each solution by hand, I now had an automated way to verify correctness. As a result, I got my weekends back which is both a gift to myself and my students. No one wants a cranky instructor.
While overall I was more than happy with teaching this semester, I started to notice a few things about myself that I didn’t love. For instance, I’m a workaholic. Of course, I already knew this, but I like literally can’t sit around and do nothing anymore. Otherwise, I’ll feel guilty.
Now, how did that play out this semester? Well, I was buried in work as I’ve complained about a few times. When I didn’t have school work, I felt the need to fill the void with something productive like writing articles for this site or creating practice material for my students. Naturally, since I’ve been working nonstop since August, I’ve started to get burnt out which affects my ability to teach.
On several occasions this semester, I found myself growing impatient with student questions which was a first. Usually, I’m extremely patient because I always see myself in my students. Learning is hard, and I don’t want to be a barrier to a student’s education. Yet, I was still getting irritated like “why aren’t you getting this?!”
Naturally, I wasn’t a huge fan of that part of myself this semester, so I made it a point to just not do work from time to time. Of course, I can’t sit idly, so I like to go for walks. That is usually the best way for me to burn some energy while focusing on something like a podcast.
On a side note, I had a lot of students coming and going this semester. For instance, I received several emails from the Student Advocacy Center about students who had been hospitalized or had lost loved ones, so that wasn’t so fun this semester. Of course, I tried to be as supportive as possible to those students. It was just tough to navigate for the first time.
Last semester, you may recall that I had a student who manipulated me quite a bit to get their way. Fortunately, I didn’t have that problem this semester. However, I did have a new problem: exam grading was frustrating.
For whatever reason, we introduced a second exam form this semester. In other words, instead of distributing 40 exams, I had to distribute two sets of 20 exams. While that wasn’t exactly an issue on its own, it did make my life a little more difficult.
When I first issued the two forms, I didn’t really think anything of it. I took the exams home, and I got to grading them. As I’ve probably mentioned before, my grading strategy is to remain as unbiased as possible, so I usually fold over the first page of every exam to hide the names. Then, I shuffle the exams and begin grading one problem on every exam at a time.
Of course, this process can be as hard for me as it is for the students. After all, I get really invested in the success of my students, so I’m sometimes disappointed when I’m totaling their grades.
That said, that wasn’t even the worst part. See, in order to ensure consistency between sections, our exam scores had to hit a certain range around a median. Several times this semester, my students scored far above the median, so I was stuck regrading the exams a handful of times. As you can probably imagine, the regrading process often involved doing what I hate: taking points for things that don’t actually matter. For example:
- Leaving out a token from the output transcript (i.e. “Goodbye!”)
- Forgetting to close resources like Scanners
To make matters worse, we often had to ensure the grades between exam forms were similar. Considering that the sample size for each exam form was only 20, it was very possible that all the high/low achieving students got the same form. As a result, I ended up with one exam that had a 15-point swing in the medians between forms (i.e. 91 vs. 76). Also, who’s to say that question ordering doesn’t have an affect on exam outcome? I’m sure there’s research somewhere.
Once again, I shared the same exact survey from last semester to my students this semester. Since I’m a bit lazy, I’m going to share the aggregate feedback from both semesters.
Level of Effort
As a reminder, the level of effort questions measure the amount of work required to be successful in the course. Below you’ll find a screenshot of the results:
As it turns out, a lot of students felt they had to work pretty hard, and I don’t doubt that. I spent a lot of time grading this semester, so I know how much work they had to do to get through the course.
Contribution to Learning
As usual, the survey asks a set of questions about the student’s learning trajectory. In other words, how much did they know coming into the course, how much did they know by the end of the course, and how much did the course contribute to that knowledge. Below you’ll see a set of bar graphs which represents the results of those questions:
I always find these questions really interesting because they give a lot of insight into how students feel about their growth. As it turns out, almost all of my students had no background in coding, and now they feel very confident in their skills. How cool is that?
Skill and Responsiveness of Instructor
Naturally, the survey asks a few questions about my skill as an instructor. Below you can find the results of those questions:
Obviously, I love this graph because it’s incredibly positive, and I think it shows where my strengths are: feedback, availability, time management, and teaching. Some things I have to work on are organization and stimulating interest. If anyone has any tips, let me know!
After all that, the survey asks a few questions about course content. Obviously, I have my own opinions about the content, but here are my student’s opinions:
Overall, I think the students were generally pretty happy with the course content. Obviously, some students thought we assigned too much work, and others thought the content wasn’t well organized. Regardless, I think these reviews are an indicator of how well the course coordinator put together the material.
The last multiple choice question asks students to select why they chose the course. The following pie chart shows the results:
Despite the wide variety of majors, a lot of students said the course was a degree requirement, so I’m inclined to believe the university is forcing people to learn how to code. I suppose that’s fine with me! #JobSecurity
Following the multiple choice questions, the survey includes a few open-ended questions. For instance, it asks them to share the most valuable aspect of the course. In the following subsection, I’ll share some of the results:
The Value of 1:1 Interaction in the Labs
This semester, a lot of students chose not to come to the labs. While I think most students lost out on a good opportunity, it opened the door for other students to take advantage of my time. Apparently, one of my students really appreciated that:
Having help in the closed labs was definitely a highlight and useful in figuring out how to solve problems and better understand the material taught in lecture earlier in the week.Anonymous, Spring 2019
I had a lot of fun this semester working with the 15 or so students who regularly came to lab, and I’m glad they appreciated it.
The Value of Transferable Knowledge
The fact that a lot of the information we learned will help with learning other programming languagesAnonymous, Spring 2019
I think it’s nice to be able to walk away from a class knowing that the information you learned will be helpful in the future.
Apparently, last semester I forgot to include this section, so I’ll be covering some of the improvements from both semesters this time around. In the following subsections, I’ll share a few of the improvements students would like to see in the course moving forward.
Assignments and Course Material Didn’t Line Up
This semester was a bit weird. For one, we lost a day of class due to weather, so we spent a lot of time trying to catch up on material. Likewise, I wasn’t always paying attention to assignments when preparing lectures. As a result, I received a lot of comments like this:
Some projects were confusing because I felt like we did not cover the material in class beforehand so a lot of the project work must be self-taught.Anonymous, Spring 2019
Teamwork Makes the Dream Work
One thing I forgot to mention in the logistics section was that one of the course policies changed between semesters. In particular, students were not able to work on projects in teams last semester while this semester they could. As a result, the following feedback came to life:
I think one way to improve the course would be to make the Projects kind of like the labs. In the sense that maybe you could have them done in groups, because if you’re working on a project and get stuck, sometimes it’s very difficult to move on and complete it, whereas with the labs if you get stuck, you can help and learn what you are doing wrong.Anonymous, Fall 2018
As an instructor, I also loved this change because it cut my project grading load in half. That way, I could focus on feedback and not feel rushed to get grades back.
Exams Have Too Much Weight
Something that sort of bothers me a lot about this course is the stress on exams. In total, three exams make up 70% of the final grade, and you all know how much I hate exams. After all, nobody really knows what they’re doing when they write them. That’s why I try to be as transparent as possible with the types of questions my students should expect to see. Unfortunately, that’s no always enough to ensure the students do well.
Luckily, I’m not the only person who is deeply bothered by our exam culture. In particular, one of my students from last semester had a lot to say:
My biggest problem with this course were the exams and grade distribution. I am not a computer science major but I learned MatLab and C++ in my honors engineering course my freshman year, and we had online exams in that class which I felt were more fair. To me, coding is about problem solving. When actual coders work, I am sure they make mistakes all the time. On projects and labs I messed up countless times, but I think there is great value to be a coder that knows how to find and solve errors. When our exams are written and it is expected we can physically write code correctly the first time, I just think it isn’t representative of what coding is supposed to be. Additionally, weighting the exams incredibly heavily was kind of ridiculous. In my opinion, I think there is much more value in completing projects and labs. To me, this is more representative of the field we are studying. Exams being worth 70% in a coding class just doesn’t make sense to me. Additionally, some of the homeworks were very tedious and long, especially as the semester went on. They simply got to the point where it wasn’t worth my time to complete such lengthy assignments with my whole attention if they were only worth 4% of our grade. TL;DR: I think that this course could use a change of examination policy and definitely a change in grade weight distribution to become a more fair and representative of coding.Anonymous, Fall 2018
I am totally on board with everything this student said. Exams almost exclusively test for rote memorization—not real world skills like critical thinking and problem solving. As a result, exam scores are almost always skewed toward students who do well with memorization which I think isn’t really indicative of actual skill.
Ultimately, exams serves as much a purpose in coding curriculum as white board interviews serve in hiring. Neither actually test the abilities of the individual, and I stand by that wholeheartedly. Of course, you’re welcome to read through the slug-fest that is Stack Exchange’s opinion on the subject. Considering how elitist that community is on the whole, I’m not really surprised the vast majority of responses think paper testing is the way to go.
Course Could Benefit from Proper Scaffolding
One thing that has always bother me about this course is the order of the material. For whatever reason, we teach Java as if it were C (i.e. no classes). In other words, we teach imperative syntax starting with variables and moving through control flow and methods. Ultimately, we introduce the main method and go from there.
Of course, Java is very much not C in the sense that the language is built entirely on classes. Unfortunately, we don’t introduce this idea of classes until the end of the semester at which point students get very confused. As a result, I’m hardly surprised when I get the following feedback:
I would introduce objects and classes towards the beginning of the course instead of at the end.Anonymous, Fall 2018
When I took my intro Java course, I learned classes right away. By the sixth week, I was implementing my own bank account class which included a ton of getters and setters. At this point, I had barely any knowledge of control flow, but I got a solid foundation in classes and methods. This opened the door for more complex concepts like generic types, comparators, iterators, and data structures: topics I couldn’t even imagine introducing in my class.
As always, I closed the survey with an opportunity for students to share what the loved about the course and my teaching. Naturally, I love this part because it’s great for my ego. Of course, these are always nice to look back on when I’m having a rough day.
One thing I always push my students to understand is that there are always multiple solutions to a problem. In fact, I even wrote an article about the consequences of this advice. However, I still stand by it because coding is a creative process, and no one can tell you what is or isn’t the correct way to solve a problem. For the second semester in a row, a student has said they really appreciated that aspect of my teaching:
Jeremy provided great, timely feedback for each assignment and always made sure students understood concepts as much as possible. Even when he wasn’t fresh on a topic (which is understandable with a language as extensive as java), he made an effort to work through problems and explain the thought processes behind solutions, as well as offering alternatives not outlined in the course material.Anonymous, Spring 2019
And, they weren’t the only one to be excited about alternative solutions:
Dr. Grifski usually provides various ways to solve a certain problem. Oftentimes, some solutions are intuitive yet takes more lines of code, while the relatively more efficient solutions require the programmer thinking in a higher level. From my personal experience, this is really helpful to students’ learning, since we are able to better understand how to link human thinking with computer “thinking”.Anonymous, Spring 2019
Hopefully, this advice begins to permeate tech culture because we could all use a little more compassion. Also, I’m flattered they think I have a PhD already.
Hopefully by now, it’s clear that I love to teach. In fact, I’ve been a lot happier since I left engineering, and I think that’s evident in my teaching. Take this testimonial for instance:
I appreciated [Jeremy’s] availability in both office hours and labs. I could tell [he was] passionate about teaching the class and that rubbed off on me trying to learn the material. Having a teacher/professor that enjoys their work makes a contagious atmosphere and makes the class more enjoyable for everyone in the classroom.Anonymous, Spring 2019
As someone who had a lot of fun teaching this semester, I’m glad that my energy carried through into the classroom.
Of all the reviews I’ve gotten, I think this one takes the cake:
Honestly, Professor Grifski may hands down be the best professor I had this semester. He truly cared about his students not only learning the material but the “how and why” of coding. Its only now that we begin to talk about Objects and Classes that he seems to light up more. I believe the more theoretical the coding gets, the more he enjoys it. He gives students the benefits of the doubt and pushes them to think for the answer rather than giving it to them. I hope he teaches more upper level classes in CSE so I can schedule him.Anonymous, Spring 2019
I’m glad that some students enjoyed the class so much that they’d be willing to take other classes with me. If all goes well this summer, they may just get their wish!
Student Evaluation of Instructor
In addition to my feedback form, students were asked to fill out a university-wide student evaluation of instructor (SEI) form. Just like last semester, I have the results from that survey here!
|The subject matter of this course was well organized||4.48||4.22||4.20||4.25|
|This course was intellectually stimulating||4.48||4.16||4.20||4.20|
|This instructor was genuinely interested in teaching||4.68||4.30||4.38||4.47|
|The instructor encouraged students to think for themselves||4.65||4.28||4.35||4.40|
|The instructor was well prepared||4.61||4.26||4.29||4.37|
|The instructor was genuinely interested in helping students||4.71||4.31||4.38||4.43|
|I learned a great deal from this instructor||4.58||4.07||4.12||4.17|
|The instructor created an atmosphere conducive to learning||4.53||4.13||4.17||4.27|
|The instructor communicated the subject matter clearly||4.55||4.09||4.13||4.21|
|Overall, I would rate this instructor as||4.77||4.24||4.30||4.37|
Since I love data visualization, I’ve also opted to share the detailed report. Feel free to browse that. I don’t think there’s too much personal information there.
Finally, I figured I could share some of my favorite comments from this survey as well:
Jeremy was the best instructor I have had so far at Ohio … State. He genuinely loves teaching [and] he is so caring. He goes out of his way to ensure everyone understands. I can tell he has a passion for teaching and I would not have enjoyed or done well in the class at all if it was not for him.Anonymous, Spring 2019
Professor Grifski is an amazing professor. He clearly cares for his students and that they actually learn the material rather than just teach to the test.Anonymous, Spring 2019
Overall, it looks like I performed even better than last semester. Although, I did get my first set of “strongly disagree” responses. Someone was apparently very unhappy with me this semester! Regardless, I’m excited to carry this success into the next semester.
As it turns out, I might be moving on from the introductory Java course. In particular, I’m training this summer to teach the next course in the series: CSE 2221 (Software I: Software Components). I’m under the impression that I’ll be stuck training for the course in the fall as well, but I may just get lucky enough to get back in front of a class soon. For now, I’ll be doing a lot of grading!
Unfortunately, I can only teach for about two years for as far as I know. In other words, I’ll probably start grinding away on my research as soon as possible, so I’m not kept out of the classroom for too long.
In the meantime, I’m excited to start teaching some higher level concepts. I found out this semester that as much as I love working with beginners, the concepts don’t exactly excite me. It’s not until we start getting into more philosophical debates near the end of the semester that my excitement really comes out in class.
At any rate, we’ll see what happens! For now, why not support me in my journey with a subscription? Writing is fun for me, but it’s a lot more fun when I’m not doing it for free. No pressure!
Kicking off a new series of reverse engineering content inspired by VirtualFlatCAD. Today, we're trying to roll our own uppercase function.
When it comes to capitalizing strings in Python, you have a few options. Use the tools Python provides or roll your own.