A Series of Tiny Problems

The first computer program I ever shared with friends at high school was a rudimentary file tester called "HashDash". This was back in the mid-90s when home computers were insanely expensive, beige, ran DOS version 5 or 6, and often had their autoexec.bat file automatically launch Windows 3.1 after completing the boot cycle. The Internet was just starting out and companies like Prodigy and America Online mailed out millions upon millions of floppy disks or CDs in an effort to get people to sign up to their portal services. A number of viruses had gone around the school, wiping out homework and generally causing a panic, and both McAfee and Norton AntiVirus had been around for a couple of years, but the products were generally priced higher than most people were willing to pay. Being an egotistical geek, I figured that I could make something that might not classify as an anti-virus but would let people know when an application or system file had been modified.

The program was written in Turbo Pascal and was incredibly simple. A person would copy the file to their computer, add a line to autoexec.bat, and forget about it. Every time the computer was booted, which was generally every day in the 90s, the system would spend a couple of minutes verifying files.

The first time HashDash would run, it would scan every file on the computer, work out a hash1, and record the 32-character string to a file. Every subsequent boot would load the database of hashes and compare the files on the hard drive against those strings. Anything that appeared different would appear on the screen in a list and people could choose what to do next; ignore, update the hash, or delete the file and overwrite it with zeroes.

The program proved quite popular at school and it wound up being shared from floppy-to-floppy as software generally was at the time. I don't know if it caught any changed files or not, but this didn't stop people from coming up to me and asking how I could learn to build a piece of software that could do "something so amazing".

The fact of the matter is simple: HashDash wasn't amazing. It was just a simple piece of code that did math on computers that were so resource constrained that a mis-typed while statement could crash the whole system.

As a 15 year old, these comments were like music to my ears. Time went on, though, and I eventually grew tired of being "the computer guy" that everyone ran to when they had a question. I figured that the best way to have people leave me alone would be to follow the advice of an old proverb: Give a man a fish and he eats for a day. Teach a man to fish and he eats for a lifetime. I needed to encourage people to learn about their computers, think things through, and try to solve their own technology problems before calling for help.

Unfortunately, this proved to be a lot harder than anticipated.

For a long time I've tried to tell people that "Computers are just calculators. If you like math, you can figure out anything with a computer." While this is certainly true to a degree, the explanation puts up a rather high barrier right from the beginning. For me, math is as important a part of my life as music and writing. I love numbers and creating the equations that form algorithms that solve complex problems. Many people, however, do not. By saying "If you like math …" I am putting a pretty large barrier in front of people who just want their piece of technology to perform a given activity. What I should be telling people is that "A computer — and software in particular — is just like a game of sudoku."

Sudoku is a series of small problems that, when solved one by one, untangle a grand solution. The work that many of us do on a computer is much the same. We have a thousand little problems to work out and, when everything is done, we can sit back and appreciate for a moment that something intrinsically complex now exists. We have extracted from the chaos a tiny glimmer of order.

Perhaps by saying something like this, more people will be encouraged to better understand the technologies that so many of us have started to take for granted.

  1. A hash is a verification mechanism. It's determined with an algorithm that creates a digest of characters that — ideally — uniquely identifies a file. This hash can then be compared to see if the contents of the file have changed in any way.