Thursday, October 6, 2022

How I started in Software

I'm writing this instead of sleeping. Be grateful! ;)

I was thinking about why I get asked so many questions about software, and what makes my answers any better than someone else's (the answer is battle scars, in case you wondered). And that got me thinking to my early days.

When I got out of the armed forces in '95, I knew that I wanted to work on software. Computers were what I was best at, after all. I bought my first PC (before that I was staunchly anti-PC, going through my TI, Atari ST and Amiga 2000 and defending them voraciously). Without Windows 95, I might have kept that attitude, honestly... but that's another story.

I had found a free small C compiler - GCC what? For DOS? Hah! But this compiler let me build simple programs with 64k code and 64k data (because that's how the 8088 segmented memory). I was largely working from books, which is like printing out a wiki and sticking the pages together, but there's no search.

Anyway, this was the period that I published on my 5MB website my epics Super Sales Acer, Super Sled Acer and Super Shooting Acer. You can actually find them on archive.org in playable form, and of course still on my website (nothing I have released is abandonware, and anyone who says otherwise is lying to you.)

I'm going to link Super Sled Acer, cause it's relevant:

https://archive.org/details/msdos_SuperSledAcer_shareware

For some reason, this game received my first professional review. I can't remember where, or who the reviewer was, and sadly this was before I started printing everything off. But hoo-boy, was he mad! I remember phrases like "before Doom and anything good, this is what shareware meant", and "fun for maybe 5 seconds, then you turn it off to play anything else".

I was baffled... who asked him to review it? But from my standpoint, I quite liked it. I still do, actually. First off, it was a port of my TI game, with muchly improved graphics and animation. Secondly, it's a really silly game. And thirdly it was my first go at joystick controls. Complex? No. But I defy you to pass the last stage.

Anyway, while deciding what to do about it, I noticed that the system requirements he had posted were ridiculous. As I noted, I only had an 8088, 64k compiler. As such, I wrote my games to run in CGA or VGA mode (automatically!), and only a PC XT was needed. Sound support was limited to a simple PC speaker beep. But he had listed 4MB RAM, 486 PC with VGA and Sound Blaster card.

I wrote in and noted to them that they were welcome to say what they liked about the game, but they had grossly mis-represented the minimum system specs. They updated the specs as I requested, but about a week later the review was gone. I guess bashing on a PC-XT game in 1995 wasn't quite as exciting a thing.

But anyway, time went on. I began to think that I needed to get more notice. I did something which is probably still the most audacious thing I've ever done. I wrote up a flyer describing myself as the best of the best for software, and I faxed it out (yeah, remember fax? Of course not, you're way too young) to every game company I could find information for.

I wish I had kept that, too. But my hard drive was always full, and I deleted a lot of things from those days. Those were the "A gigabyte? Yeah, THAT'D be nice" days.

Anyway, I only got one contact. A recruiter for Visual Concepts reached out, and we had a number of pretty nice conversations. I sent them samples of my code - the above mentioned games, and my work-in-progress TI emulator from the Amiga (Ami99, now Classic99, could boot the raw console and run TI BASIC and A-Maze-Ing, very slowly.)

Most of the feedback was pretty decent. They felt my code showed inexperience (valid). They thought it was all very simple code -- I asked what was wrong with simple code and the recruiter didn't know. We'll come back to this.

Everyone's comments were generally very constructive, though. Except for one fellow. Again... I really brushed this guy the wrong way. All of his comments were ridiculously hostile. To his credit, the recruiter filtered nothing, though I think he was a little embarrassed when I asked what this one guy's problem was. The one feedback that stuck with me was "The worst programmer in the world could have written this!", about Classic99. Even then I thought it was a stretch to think that the worst programmer could create a functioning CPU and video core from scratch -- or even plot a color pixel on a bit-plane display for that matter. But on the other hand, Classic99 is still around and Visual Concepts is not, so what (apparently) do I know? ;)

I wondered for a long time what set that guy off, and I think that one statement really clarifies it. My fax promised I was the best programmer in the world, and this guy apparently felt that was a challenge of some sort. I guess I sort of get it, but even I wouldn't be that mean about it.

I ended up getting a local job installing networks for local businesses. This was a good way to get a lot of PC experience quickly - I mean, on my first week I needed the boss to help me understand how to sys a C drive to get DOS back up. But it wasn't long before I was doing everything myself. It was a good company and will always be remembered fondly.

But I still wanted to write software, and just before I darted off to my first Canadian software job, a good friend stole me down south to work in the States. I was really excited, until I got there and realized I didn't even know C++ yet. I can still remembering sitting there with a C++ book (remember, the printed wiki with no search function), and going through step by step. I wrote test programs I could step through until I understood how classes worked, how inheritance worked, what happened when you derived a class, and so on. All the same, I was really, really depressed. Maybe this was all too much for me, I feared.

But it wasn't, and I did master it, and a number of other techs I'd never seen before. From that telephony background, through to robotics and animatronics, I learned that I never get to work on a project I know how to do. So the first couple of weeks are ALWAYS miserable as I wonder whether I can actually learn this. So if you are feeling that, JUST EMBRACE IT.

So I've got about 25 years professionally now, and a good 5-10 before that depending on how much of it you want to count. What's the biggest thing I've learned?

KEEP. IT. SIMPLE. STUPID.

And you can read those last two words in every context, they all work.

But seriously. The downfall of code is complexity. The code you write needs to make sense when you write it. It needs to make sense when you read it six months from now. It needs to make sense to the next person who reads it. You have to be able to debug it.

Simple code meets all of these in the easiest manner. It's generally easier to write. It's easier to understand. It's easier to debug (particularly because simple code lends itself well to testing just parts of it). And nine times out of ten, the compiler can make it run faster too.

The whole art of programming is condensing complex tasks into simple steps. Don't make your own task harder. Bed time now.