My 10 commandments on teaching computer science
18 May 2024
Thoughts
Recently, I managed to write my teaching statement for a position I’m applying to. It came out that I have 10 commandments that I observe when I teach courses. I think it could be valuable for someone, so here it is my teaching phylosophy.
Teaching computer science is very challenging, for several reasons:
- The high scalability of software allows digital technologies to widespread at tremendous pace, making fastly obsolete existing things. Computer science teachers must update every year their syllabi, in order to stay up-to-date with the state of the art and state of practice. And it is not enough to read documentations or articles, we perfectly know that mastering a technology needs practice.
- Computer science students are very curious, many of them develop highly specialized skills by their own, for pure passion. Computer science teachers, being very busy, risk to not meet students’ expectations, remaining at a descriptive and argumentative level of novel technologies. As a result, clever students risk to get bored.
- Teaching computer science is not like teaching math or history: computer science teachers don’t know everything about the subject they teach. They can’t answer every question.
- On the Internet, one can find thousands of solutions for the same problem. The solution to be shown during the lecture must stay within a limited amount of time, be coherent with the previously seen topics, be challenging for the clever students, reasonably simple for average students.
- Students may be confused by the enourmous quantity of technologies, most of them are based on opposite principles. What is the right way of creating software architectures?
- Syllabi may be detached from the expectations of the industry. Software factories want practical skills, while students spend lot of time studying theory.
For the abovementioned reasons, I developed my own teaching philosophy by defining and following my 10 commandments:
- Study, study, study! Syllabi are “perpetual beta” just like software, and must be always updated and refined, also according with the needs expressed by the industry. But teaching IT technology requires mastering it. How to get the required skills – which are time consuming to acquire – while continue daily duties? Personally, I force myself by putting new technologies in the syllabus (and then publishing it). When the lecture approaches, I’m obliged to study it, even overnight if needed. The first time I teach a new topic, it will be stressful and it might be not the perfect lecture, something might go wrong, I might not be able to answer a question. But the second time it will be better, and so on.
- Be practical. An hands-on approach is the only way to transfer skills in computer science. My lectures are always structured this way: first, show a brief set of introductive slide, very essential and concise. Then, let’s open IntelliJ (or whatever IDE) and develop together.
- Keep it logical to foster self-confidence. A clear, simple, modular, incremental path, from where we are now to where we want to arrive, is mandatory to let students be confident in theirselves. If I fail in this, students get lost during the path, which we cross very fastly to cope with all the topics of the lecture, they’ll lose their self-confidence, becoming demoralized, believing the are not able to understand the subject.
- Be onest. I don’t pretend to be the smartest people in the room, I explicit declare that I don’t know everything, and if I can’t reply a question, then let’s google it together. Or “Will it work this way?” – “I don’t know, let’s implement and test it!”
- Challenge them! Students are full of duties with other exams, but with me they have the opportunity to absorb the most knowledge they can for my topic. I usually offer a baseline approach to the course, fitting with their other duties, and I also give the optional possibilities to partecipate to an hackathon, writing a paper, attending a conference, and more, for the more dynamics.
- Give extra opportunities and tools, e.g. provide credits to explore paid services, or access to super computers. Also host industry during classes (I don’t let them deliver classes, they are not able to) to explain what they are working on and what they’re seeking.
- Adapt. Yes we know that every year the class is different. One year it’s difficult to cover all the topics while extensively replying to all the questions, then the next year they’re so shy that it seems that I’m talking alone. In the first case, I set a fixed amount of time for questions. In the second case, I actively engage chats with each of them after and before the class, and durign the break.
- Dedicate time, particularly to students working on their thesis. They have chosen me for one of the most important milestone of their lives, they deserve you listening and supporting them.
- Be authoritative, not authoritarian. I daily build a strong positive reputation, by doing and publicitizing lot of stuff that expose me as a hungry innovator.
- Be an example. Besides my professional career, I am a musician, I have a social life, I travel a lot, I practice sport, I have a kid. I provide daily evidences that you can be a computer nerd while enjoying your lifetime on Earth.