If you know me you know I am interested in everything. Now that I am retired I have a chance to go in a million directions at once. It drives my wife crazy.
The biggest part of my working life was as a programmer and then later the leader of teams of programmers. I didn’t go to school for programming or management. I just happened to be a small example of what Malcolm Gladwell talked about in “Outliers.” I taught myself to program at a time when someone who didn’t have a degree and wasn’t “certified” could get a job writing code. Keep in mind this was before the internet, but not too much before, so the demand for people who could code was about to explode right as I was finding out I like to do what people were going to want.
I loved programming, and I was good at it. I worked at several different companies, working on all sorts of problems and discovered that programming was really just breaking down problems into their component bits, and then solving those bits one at a time. All the rest is just syntax.
When I got tired of keeping up with the constant churn of software companies (Microsoft/Oracle etc.) always updating the languages and tools so they could keep selling both, I turned to managing developers instead. This was fun! I had to keep up with the churn less, but still got to help do the problem solving. I never stopped programming, I would still do little projects of my own, and wrote tools for work, but the heavy lifting I left to better programmers.
Leading development teams was as much a learning experience as was becoming a decent programmer. Dealing with people is hard, mainly because in your own mind you think you are better at everything than you really are, and so do they. The ability to communicate is probably the area where perception and reality are farthest apart. And then, there’s everything else about the other person to contend with. You never know what is going on in their heads, and it often surprises, sometimes frightens, you when you get a glimpse in there!
For example, I was working as a dev team leader at a company in Oklahoma City and one of the projects we were working on was really under the gun time-wise. We had hired a contractor to work on it and he needed to go to Chicago for a family function. I told him it was fine for him to go as long as he met his dates, which he promised he would do.
Later that week he and I had a call to go over his work. He was writing a data entry form and he was presenting on Citrix from Chicago as I was checking it out from my office in Oklahoma City. It was a long form as there were a lot of data fields we were going through field by field. When we finally got to the bottom of the form he asked me what I thought.
“Where’s the save button?” I asked.
“There is no save button mentioned in the requirements.” He countered.
Now, I can have a short fuse as anyone who knows me can attest. An answer like this cuts that fuse in half.
“It’s a data entry form!” I exclaimed. “Can we agree that we need one even if it’s not specified?”
The save functionality was added, the project was completed, and I learned a valuable lesson. Don’t expect people to think, at least…not like I do.
Years pass.
After retiring, I thought I was done with all that. But one unsolved problem from my early programming days kept popping into my mind. A couple of years ago, I took it up again. I worked in Ruby with free tools, and eventually had a decent framework running. But the problem was complex, generating huge amounts of data that were hard to analyze on a laptop. My results were way off.
When AI and large language models became available I played with ChatGPT a bit, and for the most part I was impressed, but I was using it more like google than what it was designed for. I had my wife have a spoken conversation with it in French and even she was impressed.
So I started to ask it how to solve some of the problems I was having with my program. I would upload code or data and it would fiddle with it and come back with code or suggestions to try.
I did that for a good while and as the models improved I would give it more responsibility. But that came at a price. You have to know exactly what you want to ask it and never assume that it interprets what you are saying the way you think it should or will. It also has the memory of a gnat. You can be talking with it about a given file or problem and it can forget everything you said fifteen minutes ago, sending the whole conversation straight into lala-land!
I tried tools like Cursor (a VS Code variant) and GitHub Copilot. Cursor moves fast — too fast — rewriting working code into broken code before you can stop it. Copilot is better, since it only works with the files you show it, but that doesn’t stop it from confidently guessing wrong about how the rest of the program works. Even GitHub’s AI agent, which can see your whole codebase, is capable of breaking things spectacularly.
Yes, they save time blasting out code, but you have to watch them like a hawk. I’m not under a time crunch, but I don’t want to spend my days herding digital cats who can code beautifully — and wrong — at the speed of light.
So now, like Michael Corleone in The Godfather Part III, I’m back to working with that contractor, or a freshly minted, certified developer who’s never seen a line of production code. Smart, eager, full of potential, but convinced they have something to prove — fast. <sigh>