Today, I was reminiscing with a Twitter buddy about old school personal computing of the late 1970s and early 1980s. Back then, I was in junior high school and I remember how exciting it was to learn how computers worked. My first computer, the TRS-80 Model I, didn't even have an operating system. When I booted the computer I was immediately placed into a BASIC interpreter. From there I could either write a program from scratch or load one from a cassette tape. In those days there was no multitasking – only one program could be loaded in memory at a time.
There were two types of programs that I could load into my computer, either BASIC or machine language. With BASIC I learned the fundamentals of computer science: variable assignments, tests, and jumps. I recall how thrilled I was to learn more advanced data structures like arrays where I could randomly pull values out of the array, systematically.
After learning this high level language I moved onto assembly language for the Z-80 microprocessor which was fast but at the expense of having formal data structures created on the heap. The Z-80 could only add and subtract so I'd have to manually loop through addition or subtraction routines to multiply and divide numbers.
One nice thing about multiplying by even numbers in binary is that it's faster to simply shift bits which is how we humans multiply by a factor of ten. Trying to figure out what 12 x 31 is in your head is not easy… trying to figure out what 123 x 100, even though they're bigger numbers, is simple to do without a calculator. Just shift the digits.
My first useful assembly language program was a memory tester that systematically wrote values to every single memory location and then read them back to make sure they hadn't changed.
Nowadays, computers are so inherently fast that low-level programming isn't required unless you need to touch the "metal" (direct memory addressing) for applications like device drivers.
Yup, the good ol' days of personal computing were simple, yet very exciting.