Honestly, probably the most important thing is to move away from any tools that hide what is going on. "Magic" is bad for learning, though it can be useful once you already know what is going on.
If I were to teach a class like this, it would be something along the lines of:
start in a terminal, perhaps using the Ubuntu server distro
begin with basic commands like help, ls, and cd.
show how to write shell scripts
show how to install new programs using a package manager like apt
After they are comfortable with the terminal, I would walk through installing the Ubuntu desktop distro so they now have a GUI. Then, I would teach them a "real" programming language, probably Python:
at first, I would require them to write their program in a plain text editor and compile/run it from the command line
after they are comfortable with that, I would let them use a code editor
as part of the programming unit, I would introduce the network stack and have them create a server
at some time during this unit I would also teach them git
After that, I'm not sure where I would go--there's a lot of different directions! Some ideas:
how computers work on a more low level (transistors to assembly)
how to build a desktop computer (or even just take one apart and put it back together)
how operating systems work (syscalls, time sharing, memory management, basics of C)
bootstrap their own programming language (assembly -> Forth -> Lisp -> ???)
web development (requests, databases, basics of HTML+CSS+JS)
I also think a capture the flag event would be fun (like /u/half_built_pyramids@lemmy.world suggested), but maybe wait till closer to the end of the year/semester for that
Honestly, probably the most important thing is to move away from any tools that hide what is going on. "Magic" is bad for learning, though it can be useful once you already know what is going on.
If I were to teach a class like this, it would be something along the lines of:
help
,ls
, andcd
.apt
After they are comfortable with the terminal, I would walk through installing the Ubuntu desktop distro so they now have a GUI. Then, I would teach them a "real" programming language, probably Python:
git
After that, I'm not sure where I would go--there's a lot of different directions! Some ideas:
I also think a capture the flag event would be fun (like /u/half_built_pyramids@lemmy.world suggested), but maybe wait till closer to the end of the year/semester for that