As a veteran programmer who spends far too much time working with computers, I rarely have cause to question their fundamental value. That may be a result of their obvious utility in our modern age. Or the fact that without them our just-in-time economy and online financial system would come to a screeching halt. Or perhaps time has not been scheduled within the relentless project plan for such abstract musings. (As long as the network is up, those minor details are not on the critical path.) Or maybe, like most people, I simply choose not to ponder the fragility of our highly interdependent world — except during a brownout, while searching for a candle and match.
But not long ago I had an opportunity to consider the issue, while assisting my brother, over the telephone, install and initialize a new hard drive in his own Pandora's Cabinet (a.k.a. "PC"). As a master woodworker, he is accustomed to seeing the tangible results of his labors. At any time, he can point to a cedar chest, a mahogany table, or a rosewood candle box, as solid evidence of the real output of his profession. Perhaps that is what prompted him to ask me (wisely, after the hard drive was working…) if it ever bothered me that everything I create as a software developer "does not really exist". What he meant was: does it disturb me that the sum product of my years of toil, the final result of weekdays and weekends devoted to my chosen profession, is little more than tens of thousands of lines of source code, buried in the computing facilities of my previous employers?
When viewed purely from the perspective of a tangible product — aside from the value those programs have provided to the various companies over the years — I have nothing to show for my work but strings of 0's and 1's located on their hard disks, and loaded into system memory occasionally (and reluctantly). If those disks were disassembled and closely examined in a non-clean environment (such as a woodworking shop filled with airborne sawdust?), would I be able to point out the magnetic flux patterns that I had created, before the pine-scented layers of reality settled upon the sensitive platters? No, the closest I could come to proving their existence would be to offer as evidence the (mis)behavior of the host computers as they attempted to execute my programs. Perhaps more proving would be to print the source code on reams of what those computers were marketed to eliminate: paper — the final destination of wood deemed unworthy of fine furniture.
After mulling over his question (and instinctively saving my currently open files to disk), I explained that while source code may admittedly consist of little more than magnetic blips on spinning hard drives, they are very real in their ability to function as instructed, to serve as a malleable record of our creative logic. Their power lies not in any size or mass, but in their deterministic execution of our commands, and the ease in which we can introduce new bugs- er, new features into their workings. A possible analogy in the world of wood, is the crafting of a magical chair, such that tightening one critical screw ever so slightly could convert it into a recliner (hopefully when intended…). Such is the power of our computer code. Within a remarkably concise program, an enormous amount of digital processing can be encapsulated. Anyone doubting that has probably never seen the winning entries in a Perl obfuscation contest.
But on the other hand (the one not throwing a plastic mouse at a blue screen of death), the power to create is invariably attended by the power to destroy. Ask any poor soul who has formatted the wrong hard drive, or entered "rm -r *" in a Unix root directory, mistakenly thinking the current directory was /tmp. Returning to the analogy of woodworking, what if a craftsman were to erase a pencil mark from a finished product, but to realize only too late that he was holding his magical eraser with only the three fingers commonly employed by cursing Windows users, resulting in the immediate deletion of every scrap of wood in his workshop? The Sorcerer's Apprentice comes to mind. (No, that is not a future version of Quake.)
Such questions are worth contemplation, but there is no time for that now. I have to go online and instruct my Internet bank to send some 0's and 1's (more of the former than the latter) to a mutual fund company, which has my life savings stored as a row of data in one of their database tables. I'm just hoping that none of the bits get lost along the way…
All of this of course assumes that the software even gets used. If the software we write does not even get used on its own or integrated into an existing product, does it then exist even less? If it is never run in production, for whatever reason, does it even count? In that case, we can't even point to the additional functionality in the system, to demonstrate the impact of our work upon the world. Instead, our finely crafted source code — immortal bugs and all — languishes on the virtual shelf, residing in source control files never to be read, on network storage that will only be accessed in the form of being formatted to make room for a sales representative's PowerPoint chart. For instance, ages ago, I developed a wargaming chart subsystem comprising over 16,000 lines of code. It took months of effort, and was well received when I demoed it to the customer. Later we learned that they decided that its functionality was unneeded in their system, so it never was deployed. As a result, a sizable chunk of my life was sitting on a backup tape, unused and unappreciated, in the bowels of the Pentagon. The only other artifact of all that work were the paychecks received during that time, but even they, when cashed at the bank, became more vaporous than the software.