What Teaching Taught Me
Last month, I finished teaching an 8-week long supplemental course at my university, on behalf of Purdue IEEE’s Software Saturdays program. I covered the basics of Linux (files and directories, packages, basic commands etc.) and some shell scripting (scripting in Linux, using grep, sed, awk, etc.). It was a very rewarding experience, and I learned a surprising amount (surprising, because I didn’t think I would learn so much from the other side of the classroom). In this post, I would like to share the motivation behind this course, the basic structure, and a few lessons I learned along the way.
Motivation
My aim was to fill a perceived gap in Purdue’s undergraduate Computer Engineering curriculum - obviously, theory is important, and the curriculum places heavy emphasis on that. However, I noticed a distinct lack of practical knowledge being taught - I couldn’t find any resources offered by the university (official or supplemental) to teach practical skills. Specifically, I wished there was a course that taught the basics of Linux and using the command-line, since I believed students could benefit immensely from these topics. In the absence of such a course, I decided to create the material for one myself and approached Purdue IEEE, who approved of the idea.
Course structure
It’s hard to overstate the fact that I was stepping into unfamiliar territory here. I had never taught a course of any length before. Hell, I had only taken two semesters’ worth of college courses! I spent most of the summer figuring out a way to structure the course, and came up with three ‘goals’, that I wanted students to take away from this course.
Engagement: First and foremost, I wanted the course to be fun. I wanted students to enjoy learning about these topics, not least because I enjoyed them myself.
Foundational Knowledge: I wanted to expose students to new ways of thinking about problems. Throughout the course, I placed heavy emphasis on the ‘UNIX Philosophy’ - the idea of ‘Do[ing] one thing and do[ing] it well’.
Practical Applicability: I also wanted to expose students to specific tools that have changed the way I use my computer - grep (and regular expressions) and awk being the most important ones.
Topics Covered
Here’s a short list of the topics I covered. At some point in the future, I might open-source the slides and other material I used.
- Files and Directories
- Navigating a UNIX system (Listing files, copying and moving files, creating and deleting files)
- Users and Groups
- Permissions and Ownership
- Regular Expressions and grep
- Pipes and streams
- Bash scripting
- sed
- awk
- Processes
- Packages
What did I learn?
- Know your audience
This was an unexpected lesson, but one that stuck with me throughout the course. I realized that there’s a few people who were there because they wanted to be there, and a few who are there because they had to be there (every student who completed the course received a certificate). Not that there’s anything especially wrong with that, but I didn’t consider those people my ‘target’ audience.
I took the same approach while advertising the course as well - I realized that by trying to appeal to everyone, I wouldn’t be successful in appealing to anyone.
- Be prepared
This sounds obvious, but it bit me on more than one occasion. It could be as simple as an innocuous typo in a slide, or a small factual innacruacy, but each of these little mistakes gave the impression (or at least I thought it did) that I was unprepared.
The most glaring example of this was in the fourth or fifth week of the course. The projector on which I showed my slides had stopped working halfway through the lecture. This was not a scenario I had prepared for, so I scrambled to find a solution. I settled on using my laptop to view the slides which, as you can imagine, wasn’t very effective in communicating the material since the students couldn’t view the slides. Had I prepared better, I might have found another, more effective way to conduct the lecture.
By the end of the course, I had realized the importance of practice and preparation.
- Encourage curiosity
This also sounds obvious, but it struck me just how curious some students were, asking multiple questions during every lecture. Others might have found the interruptions annoying, but I wholly welcomed them, since they gave me a chance to think deeper about the material I was teaching - it’s one thing to rattle off of slides, it’s another thing entirely to be questioned why things behaved a certain way (especially when you’ve typically taken them at face-value). They also gave me the opportunity to go on fun tangents: I noticed a ton of engagement and questions during the lecture on Regular Expressions, so I decided to do a little demo of ccat, to show useful they could be.
- Interact with students (and with the professor)
One of my professors once remarked that the only thing worse than a loud classroom is a completely slient one. After this course, I wholeheartedly agree with him. Yes, a loud classroom during an important lecture can be annoying, but complete silence in response to a question definitely felt worse. Whenever I encountered this, I thought that students either didn’t know the answer, or didn’t care enough to answer. Both possibilities made me feel like shit, since they meant I wasn’t doing my job properly.
The worst part is that I’ve definitely been guilty of this in lectures, as a student. Ever since teaching the course, I have actively tried to change my behavior and participate more in lectures, and professors seem to appreciate it.
- Teaching is fun…
This was definitely one of the more important takeaways - I realized that I love teaching. It’s something about the process of sharing information that lights a fire within me, and I would definitely like to teach again, if given the chance.
- …and you learn a lot
If the last five paragraphs didn’t convince you already - I learnt a tremendous amount from teaching this course, and it was truly an impactful experience.
Most of this article focused on ‘soft skills’, but I gained a lot of technical knowledge as well. Albert Einstein noted that “If you can’t explain it simply, you don’t understand it well enough”. Teaching this course made me realize just how true that statement is. I received positive reviews from students regarding the course, and most people agreed that they’d gained a solid understanding of the basics of Linux and Bash.
So I hope I’ve passed that test now.