Dr. Dobb's Journal August 1998
Everything "retro" is popular as we approach the end of the 1990s. As the century and millennium near their end, we seem somewhat reluctant to completely let go of the past. You can buy a retro Volkswagen Beetle, dance to retro swing music, and watch "retromercials" on cable TV. In that spirit, I suppose a column on C can be retro, too. But instead of reverting to retro programming and serving up some K&R C to digest with nostalgia, I will engage in some simple retrospection. This month marks four anniversaries for me: First, it is was 38 years ago that I married Judy, about whom you have read so many times in this column; second, it was 40 years ago that I started right out of high school programming computers for the government; third, it was 20 years ago that I quit my last formal employment position to become a freelance programmer and writer; and finally, this month is the 10th anniversary of this column. I will use this issue to indulge myself in some retrospective meandering about what the column has been, how it came to be, and what it has meant to me.
Ten years ago this month, I was finishing a consulting assignment in Puerto Rico and wondering what my next job would be. In the previous three years, I had written books about using the C language to solve problems on the PC. In early 1988, the late Computer Language magazine published a two-article series about the memory-resident parts of those books. I wrote the articles to promote the books and leverage the work into additional revenue, a common practice among computer authors. The articles caught the eye of a small company in Walnut Creek, California. The books were noticed by Ray Duncan, a prominent writer of programming books and a regular contributor to Dr. Dobb's Journal. Ray had asked if he could post the source code from the books on his electronic bulletin board, which was okay with me.
When I returned home from Puerto Rico, two telephone messages were waiting for me. One was from the company in Walnut Creek, a town about 30 miles east of San Francisco, the other from Jonathan Erickson, the editor-in-chief of Dr. Dobb's Journal headquartered in Redwood City (at the time), a town about 30 miles south of San Francisco.
The company in Walnut Creek offered me an on-site assignment working on a memory-resident software product. Jon wanted to talk to me about writing a programming column as a regular monthly feature in the magazine. DDJ had been looking for someone to fill that position, and Ray Duncan, who knew about me only through my books, suggested that Jon call me. In case I never said it, thank you, Ray.
The coincidence of the Walnut Creek assignment and the call from DDJ was a lucky convergence of time and place. Inasmuch as I would be within easy driving distance of Jon's office, perhaps we could meet face to face.
To understand why this fateful meeting almost did not take place, consider that I received Jon's message on my answering machine as I passed through town between Puerto Rico and some other destination. Jon did not say why he wanted to talk to me, and I was plenty curious, so at every phone I passed in airport terminals, hotel lobbies, and client offices, I called his number but could never catch him at his desk. Finally, I left a message that said, "I'm on the road and never near a phone very long; I'm too busy to wait in one place for you to call; I'm tired of playing tag; I'll call at a specified time; if you want to talk to me, answer the [expletive deleted] phone; if not, have a nice day." When I called at the appointed hour, Jon answered the phone.
We met for lunch in Walnut Creek. It's worth noting that then, as now, Jon doesn't spring for the fanciest restaurants on the block. Jon kind of interviewed me, and asked how soon I could have a column ready for the August issue, which was in production as we spoke, adding that this was an inquiry, a fishing expedition, not a formal offer. Jon said that if he offered me the job, I would have to sign an agreement that specified in detail the terms of our understanding, among them a condition that permits DDJ to republish and distribute in any media any source code that accompanies my articles. Thus began a friendship and professional relationship, the likes of which has not been seen since Rick and Louis strolled arm-in-arm, across the tarmac and into the mist, with the sound of a DC-3 departing the Casablanca airfield.
I was a longtime reader of DDJ, considered it the best of the programmer's magazines, and cherished the notion that I might become a DDJ columnist -- to me the most prestigious assignment for any programmer/writer. Jon didn't know it then, but I'd have done it for nothing. Well, maybe not. I do not remember just why I submitted those earlier two articles to Computer Language magazine instead of to DDJ. Perhaps I did not feel worthy. More than likely, it was fate taking a hand. My Walnut Creek client might not have seen the articles in DDJ, and, consequently, it might not have been possible to meet Jon and begin a relationship with a magazine and an editor that has lasted 10 years, the longest time I have spent doing any one thing in the 40 years of my professional career.
There have been many coincidental occurrences related to this saga. Miller Freeman, the publisher of DDJ's rival Computer Language magazine, purchased M&T Publishing, which published Dr. Dobb's Journal. The new owners closed down Computer Language lest they be in competition with themselves. The Computer Language editor who handled those two articles I wrote was Regina Ridley, and she is now my boss three or four times removed at Miller Freeman. Miller Freeman sold the M&T book imprint to Henry Holt, who also bought MIS:Press, the publisher of my books. Henry Holt subsequently sold the MIS:Press and M&T Books imprints to IDG Books, who had earlier recruited editors from DDJ to publish books for dummies, which I have often denigrated in print (which, in retrospect, was a bad idea because now I write books for them).
It's a small world, but I wouldn't want to paint it.
So, 10 years ago this issue I wrote the first "C Programming" column. I had to dash it out in a hurry on a laptop in a hotel room because Jon told me at the last minute that I had the job and he needed something the next day. There had to be some source code, so I worked up an interactive program to help solve newspaper cryptograms. What is most notable about this remembrance is the technology. I wrote the program on an 8088 Toshiba laptop with 640K and no hard drive -- only one 720K floppy disk drive. Everything -- MS-DOS, WordStar editor, Turbo C command-line compiler, source code, object code, executable program, text for the column, and the ProComm communications program to send the column into the magazine -- had to fit on that diskette. What amazes me now is not that it fit but that I fully expected it to, so there was no surprise when it did.
To give you an idea of how programming has changed in the past 10 years, consider this quote from my second column in September 1988:
For those who do not know what a videowindow is, here is a brief description...
I began this assignment with the notion that it had to be temporary. There could not be that much to say about a small language like C. I figured that after a few months I would run out of material. Then it occurred to me that this forum would be ideal for publishing software solutions that use C as the tool. Rather than being about a particular language, the column could emphasize the development of real programs where the language was an incidental tool. Then, as significant events occurred that affected language issues, I could write about them. From that approach, I launched projects for the column, projects that spanned many columns; as I developed the code for a project, I published it and updated it. This approach evolved into a concept for using the distribution of free source code to do some good.
I had a concern about source code. DDJ established at its beginning the tradition that articles are about source code and source code accompanies the articles. You could type in the source code or send for a diskette that had all the source code for all the articles for a particular issue. Getting source code an issue at a time would not work for what I had in mind. First, the code evolves. What I print in June might change by July. Second, the code of the month is incomplete. A project spans many months and readers would need as-yet-unpublished code to use anything. I needed a more effective distribution method.
It was clear from our first conversation that Jon did not want columnists selling source-code diskettes and promoting those sales in the magazine. I had no problem with giving it away, and it was important for readers to get all the code at once, but I did not want to spend the time copying, labeling, and mailing diskettes. So I decided to ask the readers to make it easy for me. If they would send a self-addressed, stamped diskette mailer and a formatted diskette, I would copy the source code onto their diskette, stick it in their mailer, and drop it in the mailbox.
It occurred to me that people tend to value something more when it is not completely free, so I added an optional condition to the offer; if readers wanted to, they could include a dollar bill with their diskette, which I would donate to the local food bank, a charity that I have supported for years by playing the piano at their annual jazz benefit concert.
I called this voluntary donation program "careware."
Two things happened that I was unprepared for: First, the staff at DDJ graciously took on the job of copying and mailing the diskettes without being asked to; second, about once a month they sent me an envelope with careware proceeds. It added up to a lot of money. Many readers sent more than a dollar. Some sent checks, money orders, $5, $10, and $20 bills. I got a lot of international postal certificates and stamps. But every dollar made a difference. The generosity of DDJ readers made a significant dent in the problems of hungry and homeless people in my community. The program went on without slowing down for several years. Its success encouraged me to keep adding to the projects and writing more code. That monthly envelope full of money really raised my spirit. Eventually, however, the response began to dwindle because of the Internet. Most readers gained Internet access and could now download the code. The convenience of getting the code without delay took a natural toll on the careware program and, in July of 1996, I closed it down.
I sure do like to make predictions. I like to apply my experience to the parameters of the present and conclude how things are likely to be in the future. It makes me look wise. In August 1989 I made this prediction:
My prophesy is that the prevailing OOP language will be C++, and that its full acceptance will occur when and if Borland and Microsoft introduce C++ compilers.
It's nice when history proves you right. But in August 1990, I said,
...consider...what did not happen in [the first half of 1990]...Graphics user interfaces did not replace text-based applications. Every workstation does not have a CD-ROM.
I should have waited a couple of months before making that observation. Continuing that pattern of enlightened vision, I said later in the same issue,
A prevalent platform target for programmers will be, I believe, workstations operating in a network. For the foreseeable future, at least, the workstations will be MS-DOS machines, and the networks will be NetWare.
I hope nobody ran out and spent $10,000 on a development platform based on those sage prophecies.
I have formed many friendships and have seen much of the world as a result of this job. I represent the magazine and the column at conferences and know a lot of people through those experiences and have many memories, some of which I wrote about in this column. I'll share a few more of them here.
There was a party at a fine restaurant in New Orleans. Several of us had started early by sampling the liquid wares at the hotel lounge. Then we formed into a group and set out to dine at one of New Orleans' finest restaurants. We were stopped at the door. The maître d'hôtel would not allow one DDJ editor on the premises without a tie, which he did not have. The establishment, however, was prepared for Californians. They had ties for tieless customers, and they issued one to our friend, who spent the evening wearing the ugliest tie I have ever laid eyes on. It was wider than his beard and wildly decorated with colorful pictures of New Orleans plant life and statuary on a paisley background. After way too much fine cuisine, he got even, though. He righteously rendered that outrage evermore unwearable; the next patron to be required to wear a house tie need not submit to the shame of that particular offensive accoutrement. A pale and shaky but triumphant DDJ editor withstood a barrage of congratulatory handshakes and back-pounding as he made his way past his adoring fans to a waiting limo, er, taxicab.
At another conference, Neil Rubenking of PC Magazine announced that he had implemented an idea that would revolutionize the computer book industry. His new DOS book would be packaged in a can. A cylindrical can like the one some potato chips come in. Everyone would want one. Who could resist? Neil was really excited. He'd show those "dummies" guys a thing or two about creative book marketing.
At Comdex, BYTE's Jerry Pournelle stood near a vendor booth bellowing, "I just want to find someone here who knows who I am!"
J.D. Hildebrand had recently criticized in print a book published by Jeff Duntemann. Someone in charge of booth placement at Software Development had a sense of humor. They put Jeff's Coriolis Books booth directly across the aisle from J.D.'s Oakley Publishing booth. J.D. spent the duration of the show feeling the heat of Jeff's relentless glare. All J.D. could say was, "Isn't anybody in this for the fun of it anymore?"
I saw the gentle humor of the good people of Singapore in the slogan on the side of a city bus. It said, "If Mohammed won't go to the mountain, we'll take Mohammed to the mountain."
A reader approached me at a conference and proceeded to rail about something I had written about a subject in which he was expert. This particular fellow was a typical nerd. I don't know a better way to describe him than to say that all he had going for him was his perceived dominance of expertise in a small problem domain. Few social skills. Not particularly good-looking. A squeaky voice. Awkward movements. Kind of like Bill Gates. He ragged on me without letting up while I listened. Paul Farrel, then managing editor with M&T Books, was standing by. I introduced them and this fellow proceeded to dismantle a book the development of which Paul had overseen. When the fellow was finished with his diatribe, I thanked him, solicited more of his viewpoints, and suggested that he write an article for DDJ to share his knowledge. My deference softened him, and we had a nice lets-keep-in-touch chat after which the fellow went off to find someone else to assail. Paul said to me, "You are a saint," referring to my patience with what he saw to be a pushy, overbearing jerk and what I saw to be a lonely loser who needed some attention and recognition. Our reactions were, of course, based on that brief encounter; the fellow is probably neither loser nor jerk, just someone who protects his turf and wants to be acknowledged.
Nonetheless, I have never before or since been called a saint, and I had to tell someone.
Through the "C Programming" column projects over the years, I managed to cover many algorithms and address many problem domains. Sometimes, I had to learn about those things in order to write about them. More often, I used code from real projects that I worked on in outside assignments. Among the topics covered here in the last 10 years are serial communications, file-transfer protocols, multimedia authoring, language interpreting, expression parsing, simulation, sorting, text searching, B-trees, object persistence, encryption, compression, memory-resident programs, MIDI processing, various Windows programming idioms, CGI programming, raycasting, text editors, hardware interfacing, and software for the physically impaired.
Whenever it occurs to me, I use this forum to advance my opinions about how programming is and should be practiced and managed, why there are problems designing and building software, and where I think the craft is headed. You do not always agree with me.
I have never been one to shy away from controversy, particularly when I do not see it coming. Many of the opinions I advance in this column generate lively responses from readers and heated exchanges in news groups and online forums. I have taken positions on software patents, product licenses, mandatory employee blood testing, the proceedings of committees, favorite frameworks, job interviews, and whether you should use certain language usage idioms.
Probably the most rewarding personal satisfaction I get from this job is when you write to tell me that something I say has a positive effect on your lives and careers.
It doesn't always happen that way. Twice readers accused me of being on the payroll of compiler vendors. One reader wrote in an e-mail message that, based on my columns, he had concluded that I sold out to Microsoft. When I responded that 10 of the previous 12 columns were not about Microsoft platforms at all, the reader did not reply. One reader advised me to find another line of work based on problems I reported installing OS/2. Another reader sent me a vile message containing many expletives directed toward me and my journalistic practices because a program I published would not compile with an older compiler.
And when I represented the magazine and addressed a group of programmers at a software conference, an attendee said on his anonymous session-evaluation form that I must have been drunk.
Maybe it was the stains on my tie.
DDJ