Back to the basics! Get students close to the hardware! Really? Just how much hardware knowledge to students need today? This post was prompted by a post getting some attention in Facebook this weekend. The Decline of Hardware Knowledge in the Era of Cloud Native Compute
Now I have been around for a while. I programmed using punch cards and paper tape. I spent some time in an operating system development group where I analyzed crash dumps, wrote code in assembly to traverse stacks and queues to understand what was going on. Great fun. In hindsight anyway. But do high school students need to get that close to the computer today? Probably not.
Would it hurt them? Also probably not. Most students don’t really need assembly language or detailed hardware knowledge. Once upon a time, for example, it was important o know exactly how data was stored on a disk with block sizes especially important. For solid state “disk” that is less important if it matters at all.
It’s a mistake to assume that the way we were taught and the things we were taught should still be taught in the same way.
Typical instruction about hardware today is about the parts of the computer – CPU, memory, maybe some talk about cache . In some schools students disassemble and reassemble computers but that is getting harder to do as parts get smaller and more tightly integrated. I don’t want to mess with my laptop at all if I can avoid it.
That is probably enough at the high school level. Now in university I would like students to have some knowledge of things like how micro code is used to code today’s CPU instructions, pipelining, caching, and yes, maybe a little assembly programming. The latter more as a unit than a full course. Let the students who want to take more advanced assembly or micro coding course work.
One big problem with expecting the sort of deep in the woods course work in high school is the lack of teachers who can really teach it. We have enough trouble finding teachers who know Java or Python. Finding teachers who can teach assembly language, explain the inner workings of an OS or the machine hardware? Good luck!
Be sure to read Mike Zamansky’ related post Low Level CS in HS - C'est la Z (cestlaz.GitHub.io)