Software Skills for an AI Future
As I was writing my post about planning my future career in the age of AI, there was something I couldn't quite articulate in the back of my mind that I think I might finally have figured out.
In the post I came to the conclusion that for software, I should focus on communications, managerial, and design skills. For right now I'm going to focus on design or architecture skills and why I think they will be particularly important, at least for quite a while.
I just started Uncle Bob's Clean Architecture book and am simultaneously in the middle of The Pragmatic Programmer, both of which heavily emphasize the craft of good architecture and good coding practices. It's had me reflecting on what separates junior from senior engineers and how this relates to AI, which is obviously very good at coding tasks, but doesn't necessarily have the same skills and deficiencies as human software engineers.
Clean Architecture starts by describing a company which started with 100% productivity on a new project, but as more developers joined and more code was written, found progress (measured in lines of code written) slowed down substantially. He describes how every new change would break something already written. This type of software is often referred to as a big ball of mud. He says that it wasn't for lack of effort. The developers were trying hard! They were just spending so much time doing maintenance that they could barely write anything new.
So how does this relate?
Well, AIs might have plenty of time to do maintenance and write new features because of the increased productivity they offer. However, unless they are superhuman in EVERY coding task, not just short sprints of solving hard problems, but writing entire architectures, then they will suffer from tech debt in the same way many modern projects do. I would also venture a guess, and this is speculation, but I would imagine that many of the examples of software out in the wild that AI is trained on, does not have the cleanest, least resistant to change, architecture. I mean, AI probably won't write Clean code for some time, right? Right?!
In this piece another dev talks about reducing his reliance on AI for specific coding tasks, going back to the old gym (a Rocky reference I don't super relate to cuz I've never seen it). To practice with friction again. To focus on the craft of coding. I think this will be really important for quite a while.
In the aggregate, AI will probably be able to write all software. But for the few years ahead, I think this is the best path and it's where I'm going to spend my attention and energy.