Manager vs Craftsman
As we begin to enter the new age of software development; I’m noticing a shift in myself. I’m less engaged in the work I’m doing. I find that as I delegate the writing of functions, or the correction of statements to LLM’s my mind is no longer active in the process. I’ve shifted from manual to auto-pilot, I check over my LLM’s work - usually correct - then accept it’s incoming changes.
When one is emersed in their craft, they enter a state of flow - this is what it’s like to be a craftsmen. You are removed from the subject-object barrier, your mind is completely entangled in the complex puzzle you’re trying to work through.
Many have argued that this latest rise of LLM’s in their programming workflow is just introducing work at a higher level of abstraction - there was Binary, Assembly, then C, eventually higher level languages. Each giving us more and more power on a ‘per character’ basis. But, I think this latest change is different. There’s something else going on. When we made the shift from Binary to Assembly, we reduced our cognitive load, we stopped worrying about the wrong character codes and could focus on more of the logic of our program. When we shifted from Assembly to C, the same thing happened. With the assistance of an LLM, one could argue that we’re making the same shift, we’re less focused on the logic of our program and more focused on the overall structure of our program. But, I believe this is a poor analogy.
Our program gets built piece by piece. We understand our program by understanding the entirety of the pieces which assembles it. By delegating the construction of these pieces, we’re delegating the work of craftmenship in favour of managing their construction. Our mind is less engaged in its construction, and the real result is that we have less ownership of the code our LLM produces.
That is, we’ve traded our craftsmenship for management. We now are less immersed in the exact pieces we’re putting together and more interested in the outcome of the work. To us, programming has now become a means to an end, instead of an end in itself.
Fortunately, or unfortunately for us, things still go quite wrong and I find myself diving into context and try to untangle the unruly codebase my LLM agent has produced.
I think it is possible to be more immersed in using an LLM agent to program, where we are focused at the high level abstractions and the LLM agent is diligent about the changes being made. But, I think we don’t have the right tools yet. The cognitive load of many sequential changes is quite high and we need some way to handle this. As our human psychology is quite limited (7+-2 items for our short term memory), we need tools which are better designed to represent information at different levels of abstraction, allowing us to drill into the details, and also zoom out to the larger picture.