Clueless about computers
I want to share two stories of embarrassing ignorance about computers and the internet. Of my own ignorance, specifically. In retrospect, I think these vignettes paint a revealing picture of: a) how far we've come in software in thirty years or so; and b) what it looks like to be clueless as a goldfish about some subject.
At high school, around the mid-90's, some of us were discovering the internet — in particular the web, IRC, and electronic mail. (It's weird to think of it that way now, but the internet comprises, or enables, a set of such services; such as Usenet, FTP, Gopher, or the World Wide Web.) In those days I would go to an internet café, or visit a schoolmate who had a dial-up modem at home, and use mIRC to explore random Freenode channels, or fire up Internet Explorer to visit the handful of web sites I knew about. I didn't even have a mail account yet, but was starting to get acquainted with that too.
One day during recess I was chatting with my friend M.T.C. and we both realised that we hadn't the faintest idea about “where” e-mail messages “lived” while both the sender's and the recipient's computers where switched off. As in: an e-mail is travelling through the internet from computer A to computer B; what if computer B happens to be off, or offline, when the message “arrives”? Wouldn't the message miss its target and be lost forever? Perhaps messages can be transmitted only when both parties happen to be connected simultaneously? (but that didn't seem to be the case). Or does e-mail live in some kind of vacuum until it can descend upon the recipient? What mysterious ether is that, anyway? Where is it physically located? Halfway in between both parties? I remember how we puzzled over this for a while, and then shrugged it off.
A few years later I was a computer science freshman, and a bit less ignorant. But only a bit. A few months into our five-year-long MSc degree, my classmates and I had been introduced already to the foundations of information theory, computation, electronics and digital architectures — and we were programming in x86 assembly and in C. It was hard and mind-expanding, and we started to be confident about the rudiments of imperative programming. We had been told that computation was universal and we knew that this Turing-complete C language had everything we would ever need (namely, loops and jumps). We knew how to read input, process, and show results. I mean, what else is there anyway, right? Classic Dunning-Kruger effect, we kind of assumed we could tackle almost any problem handed to us, given sufficient time to “program it off”.
Then one day, talking to my friend A.C.C., it dawned on us that all the programs we knew and used “did things on their own”, ie acted asynchronously with user input. Software wasn't all “wait for user to do something, compute stuff, spit something back”. In fact, almost everything that looked interesting or useful seemed to happen following a clock of its own, or at the same time that other things were happening: WinZip would notify us when an archive finished uncompressing; StarCraft didn't stay idle at all while we contemplated our next move; Winamp was decoding MP3 while displaying visualisations while we were messing with its settings… and, most important of all, all those programs would be running at the same time. How on earth would one do that, no matter how many structs, matrices or pointers? Not only did we not know how to do parallel programming, multi-threading, interruptions or event-driven interfaces — we hadn't even realised those were a thing.
Aren't those anecdotes cute?
Looking back, it's clear I learnt so much in those formative years. Not only about computers, but also about maths, physics, logic and other subjects.
I forgot an awful lot of that, and so I remain mostly ignorant. And to make things worse, the number of areas I want to learn about has increased with time: philosophy, economics, history, literature, languages — to name a few.
What post will I be writing in twenty or thirty years from now?
What appalling gaps in my knowledge will I have filled by then?
IBM PC 5150: Wikimedia (Creative Commons)
Winamp 5.666 media player:
Wikimedia (copyrighted, fair use)