I’m taking a brief break from my career retrospective to address a very current-for-me topic.

I am a skeptic

Through the years I’ve become extremely skeptical about new technologies. My luck with trying products - both hardware and software - that are new has been spotty at best.

So, when the hype started about AI, I was more than just a little wary. I’ve been through the cycle of “4th generation languages”, “CASE” tools (computer-aided software engineering), “UML” program generators (Unified Modeling Language), “Smart Code Completion”, etc.

All of these have been introduced with a great amount of hype, persistent sales staff, strong advertising campaigns, and positive reviews.

I’ve been involved with different trials and evaluations of many of them. I’ve been asked to judge their effectiveness and opportunities for use.

Most of them came up very short. They either required much more significant hardware than what we had available, making them too expensive for wide-spread adoption; or took an unacceptable length of time to generate the code; or didn’t allow for certain requirements to be modeled; or didn’t generate accurate code.

So yes, when general purpose AI started becoming available, my first thought was “Here we go again.”. Then I started seeing others using it with some erratic and dangerous outcomes, and that really turned me off.

Then, after seeing and hearing about more useful results, I started to believe that there might be some value in well-defined and well-constrained situations. But I remained skeptical - I felt like my situations were outside the range of what those tools could reasonably do.

Trying it myself

First steps

Then an opportunity arose for me to give it a try myself.

I have an old Perl / CGI based website that I’m currently supporting. I “inherited” it from the original developer about 10 years ago. The site is built as two separate parts. The first part accepts spreadsheets emailed to it, and uses the data in those spreadsheets to update data.

The second part are a set of scripts to display that data as web pages.

While I’ve been able to keep it running, and have made some minor improvements around the edges, I haven’t really been able to make any substantial changes.

I’ve been wanting to convert it to a Python / Django since the time I assumed responsibility for it, but it has never made it to the top of my list of priorities. (I can work in Perl a bit, but I’ve never really gotten comfortable with it. It’s definitely a “second tier” language for me.)

So I thought this site would be a perfect test case for me to try using AI. I decided to upload all the individual Perl scripts and a rather lengthy description of the system, its organization and objectives.

I also uploaded a set of sample spreadsheets and the data extracted from them, along with the html of the pages generated from that data.

I asked for a Django-based system. The spreadsheet-processing scripts were to be generated as custom management commands, the page scripts were to be converted to views. The html generated by the scripts were to be converted to templates.

It took a few iterations, some clarifications, and some digging for me to understand some parts of the original that I wasn’t familar with - but eventually I got a functional project.

It took me about a day, and I haven’t fully tested it yet, but so far it’s looking really good.

Project #2

The next project I wanted to attempt was to find a way to have a particular closed-source project generate its text output to a file.

The program produces that text to a panel within the application. I could have it print some, then copy/paste that to a file, print some more, copy/paste again, and repeat this process until I got all the output I was interested in. The program provided no facilities for writing that log out to a file.

I uploaded the program with some sample data files and their corresponding text logs that I had created using the copy/paste process.

I asked ChatGPT to find a way to have that program produce the log output and write it to stdout.

This only took me about half a day to get a usable program, but it works!

That’s two-for-two with very impressive results.

A serious project

My third attempt is something more real.

I decided to start a project from scratch. It’s a web-based version of an old board wargame, to run within my Django/Channels boardgame engine. I’ve already completed 4 other games in this engine, so I’ve got a pretty good handle on how to approach things - but this title is clearly my most ambitious project so far.

For some background, This is a typical early 80s wargame. The rulebook itself is 36 pages of 9 & 10pt text, the official errata and Q&A as of 1998 is 11 pages of 9pt text, and the unofficial rulings, decisions, and interpretations is at least that long. It’s a complex game that takes a day to learn. And after 43 years of playing it, people are still finding gaps and questions in those rules. (Granted, most of those are very low probability and extreme edge cases - but when you’re doing a computerized implementation, pretty much everything needs to be accounted for.)

When starting to look at doing this myself, I had easily estimated that it would take me at least six months to just get something running that I could show to people, and probably a year or more to have enough of it coded to open it up for outside testing.

Relying heavily on AI, it has only taken me two weeks to create a playable version to demo. It’s not complete - there’s still a lot of UI-related work to do, but I would have never imagined that I would have gotten this far this quickly. I can play some scenarios through to completion, and that has left me absolutely amazed.

There’s probably still about a month of work remaining, but the effort has been well worth it.

A board game port makes an interesting problem to solve, especially with any medium+ complexity game. The “business logic” is usually fairly well defined, as are the essentials of the UI.

There are lots of nits I could pick. Is it the class structure I would have designed? Absolutely not, but I can live with it. (I wouldn’t be surprised if it actually works out to be a better design than what I would have developed.)

Has it been perfect? Far from it. Some of the issues I have run into have been humorous, some simply aggravating, and some are addressing edge cases that have never been asked before.

As the saying goes, the devil is in the details. I think the most frustratingly tedious part of this process has been having to define the specific logging format for messages. I haven’t yet found a way to describe some of the patterns I would like to see used - and have the AI implement that across the board.

Of course, the AI doesn’t have any “feel” for the game. It has no basis for judging what information is worth displaying and what would just be useless verbiage. But defining those logs is something I would have needed to do anyway, so it’s not like it’s creating any “extra” work for me.

But right now I’m at the stage where I’m manually testing this by playing the game - seeing what all odd situations I can create to see how the engine handles it. I have to do this manually because I need to see what information is being presented, and how, to determine if it’s the information that a player wants and needs to see.

At heart I am quite pragmatic about this. What’s most important to me is that I have a functional game.

And so, I freely admit, I was wrong. An AI tool in the hands of someone who understands the problem to be solved, and can express that adaquately, is a real force multiplier. I am easily more than six months ahead of where I would have otherwise been by doing it manually, and that’s a big plus any way I look at it.

I’ll add this to my rather long list of bad technology predictions. It’s yet another example of my crystal ball being broken.