It can’t be that hard, it’s only ones and zeros!
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.
August 1st, 2008 at 02:26
There are some aspects of this that I take exception to - not that you’re factually wrong, but that you give an impression that is not correct. For example, to state that a computer program (or any other file) is just a long string of binary digits is somewhat akin to saying that speech is merely a sequence of compression and rarification of the atmosphere. Technically true, but there are components that are left out.
For instance, there is a convention that is agreed upon by both parties. There is also a shared culture and learning. There is a common viewpoint or agreement on at least some of the (sometimes extreme) basic assumptions underlying the world view.
In the same manner, the program is more than just the 1s and 0s. You do allude to that in that you state it is a matter of perspective, but the perspective is the central key point and not just a sideboard to the entree. That perspective is not just intent - how you wish to use the ones and zeroes - but is also in how they are interpreted, by what they are interpreted, etc.
It is, perhaps, more correct to say that computer languages are exactly that - an expressive language for communication. It is extremely precise and detailed but it is still communication. How it is represented in the computer (as ones and zeroes) is no more important to the central concept than how it is represented in your brain (as electro-chemical changes in neurons). And, truthfully, it is NOT stored as ones and zeroes in a computer. That is still an interpretation on our part. It is stored either as magnetic state changes (on disks, etc.), reflectivity state changes (on CDs), or other electrical phenomena (in the various memories, caches, etc. of the RAM, ROM, CPU, Peripherals, etc. - I admit I get a little fuzzy on the “holes” idea of solid state transistors).
August 1st, 2008 at 06:55
Kevin,
Your comments on the importance of perspective are warranted. Perhaps I should have emphasized more that how those bits are interpreted is key.
And your observation as to how bits are stored is important too. Perspective goes all the way down! I love the idea of information being stored by holes - absence of electrons. A very Sherlock Holmes idea, “The dog did not bark at night”. Or like the bit about the wagon wheel and clay pitcher being useful because of the hole in the middle (from a work long before Holmes and on the other side of the world).