For the past year, I've led my school's programming course for middle schoolers. This year (2022-2023) my high school opened 4 courses in total - 3 for beginners and 1 for intermediate / advanced students. I lead the one for intermediate / advanced students, since I wanted to go over more complex stuff with them. Here's how it went.

    The course took place every Wednesday and officially started on 29.11.2023 and ended on 03.05.2023. During that time, the number of students dropped from the original 8 to 3. Now, hearing this, you must be thinking that I'm some kind of a bad lector, and truth be told, I'm not the best, however all 5 of these were transferred in the first month to the beginner groups. From the start, I wanted to have people that already knew how to program, so that I could go more swiftly through countless number of topics. Also, I technically led only half of the course, however in the middle of it, my colleague left the school (and teaching the course as well). At that point Vojtěch Volf agreed to teach the other half of the course with me. Just wanted to make that clear before we begin.

    We started by having the first lessons focused on the basics of programming and algorithms. We've done some basic programs, explained variables, functions, OOP, bubble sort, quick sort, binary search, etc,... you know the drill. By this point in time, we already knew which of these people were capable of putting in the hours and understanding the material we prepared and suggested to the other ones that maybe it would be better for them to consider the beginners' course (mind you we did not force anybody to do anything, as a matter of fact, some of them even came up to us with the idea themselves first).

    After that, we went on a roller-coaster ride of technologies. We wanted them to dip their toes into a couple of sub-fields of programming and gain basic knowledge of / about them. So, after the algorithms were done (mind you, we did just the basic ones, we didn't go into anything interesting like graph / tree algorithms), we started by creating a basic discord bot in Python. Some of them made bots that responded to you, and some of them made bots that did stuff for you. It wasn't anything mind-blowing, however playing rock, paper, scissors with bots is something that's fun and I would argue educational at the same time.

    When they understood the concept of APIs (some of them did already, but whatever :D), we went into simple web-dev stuff. We designed a web page inside Figma and then programmed it using HTML, CSS, and JS. When we were done, we built a simple Python flask API of our own. Originally, what we were building was a command and control center for our imaginary "virus". We went with the idea for a while, however, we stopped at the "virus" part (for a lot of reasons).

    Now that we had a functioning application, we had to deploy it somewhere. Thankfully, I have a couple of cheap VPS instances that I could provide. Deployment / Server management is another chapter on its own. You have to know how the networking works, set up a web server, database, reverse proxy, split stuff up with permissions, know your terminal commands, etc, etc... We spent a lot of time just managing servers and learning how it really works. If I had to, I would summarize what we did as basic networking, Linux commands, and virtualization (docker). Since this sub-category of software development includes a lot of stuff, we probably spent most of the time on it (and some people even spend their whole lives just in this one sub-category of IT / Programming alone).

    At the end, we brought out a couple of Arduinos and tried more of a "hands-on" programming of the hardware. We tried different input / output devices and ended up making little embedded project every lesson (like an alarm clock, light detector, starting lights, etc,..). I would say that overall the course was more hands-on, since that's the method I personally prefer while learning. Of course, there was some theory involved, yet, they (the students) mostly learned by making projects that they wanted to make.

    And that concludes it. Personally, I really enjoyed and am thankful for this experience / opportunity, truth be told, it gave me a lot of insight to see the process of teaching from the other side, however, I do not feel like I would like to repeat it in the near future again. It was fun and all, and the students were more than amazing, however, it was very, I mean VERY, hard. I always questioned myself if the lessons were enjoyable, whether I explained something correctly, and whether I communicated the knowledge the way I intended it. I like explaining stuff I know a lot about, and sharing my knowledge with the people that ask me in general, however, 90 minutes is a bit too much (even for me :D). Another thing I did not like was the position of authority. I usually prefer more leveled / equal work-related relations. Don't get me wrong, I am able to respect and acknowledge that something / somebody is an authority, but, I feel like I don't have it in me to BE the authority at the moment (like come on, I'm 17 :D). Oh, and unfortunately, since all of them were underaged, I haven't taken a photo of us, so you just gotta believe me :D (tbh I was too lazy / socially insecure to get the agreements from their parents).

    I hope you enjoyed this article/blog post!

    If you have any questions, problems or want to start a discussion, don't hesitate and write me an email!

    Disclaimer: The opinions, views and values expressed in this post are solely my own and do not reflect the opinions, views and values of my current or past employer, any open source groups I am or have been involved with, or any other groups/organizations I am or have been associated with.