Hardware and Software

Slashdot has a link to a story on how it has become substantially more difficult to write software and how this is discouraging children from taking on programming. Even at the “Hello World!” phase, the multiline and multiclass code is necessary in many languages.

There’s been a parallel development I don’t see being discussed. Software and programming is effectively disconnected from the hardware. Java’s write-once/run-anywhere is completely disconnected from hardware. Unix-like systems pride themselves on abstracting the hardware away into files. Even Windows must do this to keep errant software from crashing the system.

But I learned to program on an Atari 1200XL, Atari 400, and in real-mode on the 8086 running DOS. On these systems, the hardware is not abstracted away. On all of these platforms, BASIC’s PEEK and POKE touch real memory. On DOS, INT actually stops the processor and makes it do something else.

The ability to touch hardware allows a learner to see the connection between hardware and software. Abstract data types are important. And while ADTs can solve a lot of problems, the world is not made of abstract data. Sometimes, especially in embedded systems engineering, seeing the connection between hardware and software is necessary to make them both function. I have struggled for a few years about the right way to teach this to my kids. So far, the Arduino has been best. And that’s still a hard system to hack.

Image by Valiant Technology Ltd. / Wikimedia…now those are turtle graphics.