The Accidental Programmer
I bought my first personal computer in 1985. The Commodore 64 was affordable, and I wanted one... so I could write my novel.
I'd been handwriting in notebooks for years. I'd just turned "pro" as a writer. I was working as a stringer for a neighborhood weekly. I was also pounding out pages on a manual typewriter, using carbon sheets and dead trees, successfully producing some polished submissions for polite rejections from national magazines. I was a writer, and I had the rejection letters to prove it.
I knew I could be more efficient and prolific if I were writing (and editing) in the digital domain.
Once I got the C64 home, however, I forgot all about writing, and immediately became addicted to coding.
My first program in Basic was written within hours of unpacking, and I knew that I would be moving deeper and further into the internals of this cool blue-screen-dream-machine.
The next day I ran back to the store and bought all the C64 magazines and books that they had on their shelves, and stayed up all night, tediously typing in long lines of comma-delimited decimal numbers, to produce, by hand, a tiny opcode assembler that would allow me to write 6510 code in "machine language", a term and a concept that just fascinated and enthralled me.
And so it was that I became a programmer... by accident.
A year later I was in deep, madly in love with the Motorola 68000. I'd graduated from the C64 to the Commodore Amiga (for my own personal machine), and I'd hit the jackpot, as far as I was concerned, when I found a position as a floor salesman at the local Computerland (of Niles, later to be called the DOS Computer Center). There, I could hack all day, learning Postscript in a direct serial-port dialog with the interpreter on an Apple Laserwriter, coding extensions on a 128k Macintosh, and sharing time on the demo Amiga with other salesmen.
I became something of a techno-snob in those early daze. I loved the Motorola-based machines, and sneered at the ghastly segmented Intel architecture. I had to hide my distaste when I was called upon to show our walk-in customers the newest Kaypro monstrosity, or the Compaq luggable, or the IBM XT.
During this period, I hit my stride as a programmer. Although I was mainly coding in 68k assembler, I jumped at the chance to install and use the new C compilers that were available for my favorite machines. I didn't much enjoy the Pascal that was in common use then. Yes, they taught Pascal at my university, and I could get along in that language, but I considered it a learning language, like Basic, for beginners. C grabbed my attention and imagination, and it also satisfied my snobby prejudice against interpreters and insulators and anything that put me too far away from the metal. Like many of my kind, I saw C as both a high level and a low level language. I loved that I could write subroutines in assembly, and call them from my main(), if I needed to. I loved that the compiler could produce an intermediate assembly language file.
That was the killer selling point for me, a must-have feature: Let me examine the compiler's output!
I spent a week just writing small programs, reading what the compiler produced, comparing that code to my internal vision of how I might have hand-crafted that assembler code. I actually counted cycles. I measured the cumulative cost of a string-copy routine (for example). Essentially, I did a comprehensive cost-benefit analysis of the switch to coding in higher level languages. I vetted and qualified the compiler, to insure that it did not mar or mutate my designs and implementation. And, to Manx Aztec C's credit, and to Borland's credit, and eventually to Think C and Watcom's and Microsoft's credit, I surrendered my entrenched position as a death-metal opcode-counting cycle-shaving programmer, ultimately giving up assembly in favor of these various incarnations of C.
C++ To The Fore (Front!)
I began exploring C++ in 1989, when it became available on my Amiga. At this point I was simultaneously coding in several languages, towards different goals. I was making a living, such as it was, coding a database application for a Macintosh-based network, using Think C and a delightful niche database product called 4th Dimension. Meanwhile, it my spare time, I was coding at home on the Amiga, creating small utilities and building a library of code that I hoped to leverage in some future entrepenurial venture. I borrowed a copy of a recently released 1.0 C++ compiler (Lattice), and began experimenting. My first C++ classess were little more than reworked structures with related subroutines tucked inside, but I knew immediately that I now had a language that made it easier to do some of the things that I was already doing in C. Encapsulation was already in my vocabulary and was easily the most important feature of this "new" language.
When my employer folded (my first experience of working at a startup, with a now-typical result), I joined forces with Dave Wilson, my first pair-programming partner.
We Invented Pair-Programming
Yes, it's true, Dave and I invented pair programming (long before the Agile and XP gurus had their collective epiphanies). Dave made his living as a solo storefront manager, and deep in the store, way in the back behind the stacks of compressors and valves and the what-it's that he stocked and sold, we had our development lab, I worked back there, on my Amiga, while Dave's Amiga sat at another desk. We used his for play, mine for work. Most of the time, I was coding. When there were no calls or customers, Dave would come back to see what progress I'd made. We'd take turns on my machine. Usually, I'd be coding for hours while he looked over my shoulder. He would kibitz with each iteration.
In the end we produced some products that we advertised in the glossy Amiga magazines of the time. Straightline Software was born, and we bragged that we were the shortest distance between two points. I went from a failed startup, which had been conceived and managed by someone else (Bruno Rocca), to creating a startup of my own. And, although we managed to stay afloat as a cottage industry for a few years, I don't think we made enough money to justify the operating expenses. Dave never really became a full-fledged programmer. He was constantly called away to deal with cash-paying customers.
But during this time I learned enough C++ to land me a good job at a solid company, working for my first great development manager.
Marketing Information Systems
Dave Nicosia was a moderately skilled programmer who was promoted to development lead at Marketing Information Systems in Evanston, Illinois, just in time to hire me for my first C++ programming job.
Jim is the best debugger I've ever seen...
That's what Dave Nicosia said about me when he was called for a reference.