I am a student in Germany myself and got the rare chance to influence the education about CS/responsible use of technology people get in a special course I will give for the interested in my school this year.
The students will be eight grade and up, and it is a reasonable assumption that I will not have to deal with uninterested students (that and the probably small course size gives me an edge over normal courses beyond my actual planned lessons).
My motivation for investing substantial amounts of time and effort into this is my deeply hold belief that digital literacy is gonna be extremely important in the future, both societally and personally. I have the very unique chance to do something about this, even if only on a local level, and I’m gonna use that. I fail to see the current CS classes in German “high schools” (Gymnasien), and schools with our specialization (humanism) especially, provide needed education. We only had CS classes from grade eleven—where you learn Scratch or something similar and Java basics (most don’t really understand that either, or why you should learn it (a circumstance I very much understand)).
This state of affairs, and the increasing prevalence of smartphones instead of PCs means most students lack any fundamental understanding of the technology they’re using everyday.
My reason to believe that I’d be better at giving CS lessons than trained teachers is that these have to stick to very bad specific guidelines on what to teach, and a lack of CS graduates wanting to become teachers means our school has not a single one who studied any CS (I did).
Some of my personal ideas:
- how do (basically all) computers work hardware-wise (overview over parts)
- what is a computer/boot chain/operating system/program
- hand out USB drives/cheap SSDs to students that they can keep (alternative: a ton of VMs and Proxmox users of one of my hosts) and have everyone pick and install their Linux distro of choice (yes, this is gonna be painful for all involved, but is also—as I suspect many of you already know—extremely rewarding and can be quite fun)
- learning some “real” programming (would probably teach Python), my approach would be to learn basics and then pick projects and work alone or together (which is useful for learning Git/coding in a remotely readable way)
- some discussion of open/closed source, corporate tech, enshittification, digital minimalism and philosophy of technology (which would be okay because, you know, humanistic school…)
- maybe some networking (network stack, OSI, hacking Wifi networks…)
What are your thoughts and suggestions? Took me some time to get to an agreement with the school over this, so I’d like to do my absolute best.
Possibly relevant questions: what fundamental knowledge about tech do you suspect to be still relevant 15 years from now, what would you like to have learnt, what would you find interesting as a student this age…
Handing out drives has to go hand-in-hand with education about how “you shouldn’t just plug in any drive that someone hands you or you find on the street.” That’s basic security consciousness at this point. You might point them towards the Open Source schematics for this USB Firewall: https://globotron.nz/products/usg-v1-0-hardware-usb-firewall
Don’t start with “real” programming. Start with scripting. A place where you can get the feel of the ideas of programming while starting somewhere more basic. Linux scripting and Powershell scripting are both good places to start. You still get programming fundamentals (what is a loop, what’s an if-else statement, etc) without jumping into confusing versioning or where to get updates (should I let Windows update Python, or do I want to update it with pip? You have to choose one or things get fucky with them overwriting each other).
When I mean more basic I mean literally things like SYNTAX and PATH are way more important for students to be understanding before they start programming. Syntax and path (relative and absolute), in my opinion, are easier to learn when you’re learning them on the OS you’re using. That means “real programming” is obfuscating things like syntax and path, and students need to understand these core concepts before they move on to "real programming.*
I will have to teach some explicit security consciousness as well, basic and maybe not so basic stuff, maybe even spice it up a notch and do an intro to opsec to interest people (probably not gonna fit for time reasons, but will do basic security in any case)?
The best way to do this is to show them the exploit in action. Nothing perks a kid’s ears up like holding up a USB drive and saying “there is a virus on this”.
Run a demo in class of how easy it is to plug a random drive into one computer, and suddenly have full access from another computer (remote viewer and webcam access to really drive the point home. They’re not going to be amazed when you type
whoami
and the console saysroot
.)Doing this is like saying “I know black magic and if you listen to me, I can teach you how it works, and how to defend yourself against it”. What you have is no longer hypothetical to them, they will be invested.
Yeah, I will definitely start with scripting first, although I think Python scripting or similar is better for getting used to actual programming/loops and variables are just better and more intuitive than in scripting languages.
I actually only have programming on the list because I felt like I somehow needed to teach it, which is definitely true, but not at the very beginning.
You’re absolutely correct about the PATH thing, I think I should teach about how filesystems work in general (like, most people use devices that only have “apps” and have never used a file system/directory structure)