This is the first part of a series of posts describing what writing software is like from the view inside my own head. To make this more available, this is generally written for a non-technical audience but does include some occasional technical terms. However I’d also be interested in responses from other software people too. What’s it like in your head?
Software, like anything in a computer, is ultimately a long series of ones and zeros in computer memory (or on the hard disk). Just a very, very large binary number. When I put it that way, it doesn’t seem so hard. But when that “binary number” is well over 2 million digits long, well, it becomes another story.
That’s way too large to deal with by hand. So, there’s tools like computer languages which are just software to translate those computer languages into the ones and zeros, and software to help debug those applications. Our brains cannot deal with that level of detail, so, techniques and approaches like modularization and structuring computer code become necessary. We build up ways of abstracting detail into higher-level constructs. Like the phrase “make dinner” actually means a wide range of decisions and steps in the kitchen. Only in software, those steps and decisions are encoded in binary numbers that the computer recognizes as instructions.
Of course, in a computer, everything is a string of binary digits. Your files, your software, video, your MP3s, and your word processing documents are just ones and zeros. The interesting thing, the zen-like thing, is that all those files are either information, software, or random garbage. It just depends how you, through the software you’re using, interpret those bits. It’s all a matter of perspective. Ultimately there’s just a collection of bits in a file, or pixels on the screen - more bits displayed for your eyes. The computer knows data, we decide what’s information.
It can be a wonderfully creative and magical process to make something out of nothing. Making software is creativity exercised within a framework of rigid rules. Computers are painfully exacting. Creation is making something out of literally nothing. In software we make a consensual illusion of reality out of figments of the programmer’s imagination.