C and C++ Journey

I started commercial programming in C and C++ when one great IBM colleague affectionately called it "C Double Plus" back in the 1980s. At home, I dabbled using what I think was a Microsoft compiler, later moving on to the unforgettable Turbo C. To be honest, back then I spent more of my time with Assembly and BASIC—languages that didn't mind if you bent the rules a bit.

Things got serious in 1995 when I joined IBM in New Zealand. That's where C++ and I really became an item. We were working on a major transition—moving a green screen application to a shiny new client/server solution that could run on OS/2 or Windows NT. IBM had just released VisualAge, a C++ compiler that came bundled with its own take on MFC-style libraries. It ran on Windows, OS/2, and—believe it or not—even the AS/400. That's right: C++ on the AS/400. Yes, it was possible. No, it wasn't quick.

IBM VisualAge Logo
IBM's VisualAge: The C++ development environment that powered cross-platform development

Accessing the AS/400 meant using either a "dumb" terminal or installing IBM Personal Communications from a stack of floppy disks tall enough to qualify as office décor. I've been tempted to try installing it again for the nostalgia—but usually decide golf is a better use of my time. I think one of the floppies was labeled "confidential." What secrets did it hold? Access keys? Hidden features? The location of Jimmy Hoffa? We may never know.

"C and C Double Plus have been lifelong companions—grumpy, elegant, quirky, powerful. Kind of like a classic car you still enjoy taking out for a spin, just to hear the engine purr (or scream, depending on the pointer arithmetic)."

Cross-Platform Development

One of the things I loved most was getting all these systems to talk to each other. We had Windows NT, AIX running CICS2 with a DB2 database, and C++ applications on the AS/400. It was like a symphony of systems—if the symphony occasionally exploded and required overnight compiles.

Speaking of which, compiling our project on the AS/400 took ages. Kicking off a build was a "set it and go home" operation—ideal if you enjoyed suspense and unexplained crashes.

Working at IBM

Working at IBM also meant dealing with real power—like, "trip-the-breakers" power. And since we were targeting both OS/2 and Windows, we avoided using the Windows Registry for configuration. Instead, we opted for environment variables. Seemed clever—until we hit a snag: exporting over 32K of them caused Windows to throw a BSOD tantrum. Being IBM, we escalated it directly to Microsoft. Two days later, we had a patch from Mr. Gates himself. That's the kind of service you get when your name starts with "I" and ends in "BM."

AS/400 System
The legendary AS/400 system - where compiles were measured in coffee breaks

I'm probably one of the few people who have written C++ on an AS/400. And yes, I've also used RPG IV ILE, and even wrote a little assembly for the platform. I might not remember syntax details (I'm an F4 key fan when it comes to prompts), but I never forget where to find the answers. For what it's worth, if someone ever asks you in an interview "What position do you put an 'A' for allowing addition to a file in the F-Spec?"—the answer is position 66. You're welcome.

F-Spec for AS/400
F-Spec diagram: Position 66 is where the 'A' for addition goes

Years later, around 2000 (when COVID was just a twinkle in a virus's eye), I found myself helping a customer migrate off J.D. Edwards—a financial system running on, you guessed it, an AS/400. I hadn't touched one in a while, but the key sequences came back like muscle memory. I could still navigate the emulator like it was 1995.

Recent C/C++ Work

These days, I still turn to C/C++ when the situation calls for it. I've contributed to the Kodi project (specifically the pvr.iptvsimple plugin), and most of my electronics work was done in C/C++—at least until Rust came along with its beautiful Hardware Abstraction Layers.