Becoming More
Introduction
There's a lot of anxiety and reflection going on about the impact of AI on software development. I'm not sure why this is hitting the culture of software development in this moment in particular. I'm not really convinced by the "this new LLM model changes everything" narrative, as I've only seen incremental advances of models which were perfectly capable of doing a lot of programming a year ago. Perhaps it's that agentic coding tool usage has spread widely enough for more people to appreciate their impact and think about what it means.
I recently wrote about my anxieties too, which I definitely have, both personally and for society at large. But I have kept this document in draft. I'm not going to be sharing it today, and perhaps I will never share it.
This article is about my excitement about being a centaur software developer. But it's not about productivity. It's not about multi-tasking multiple agents in a feature factory. It's not about 100x developers. It's not about making more of the same, faster.
It's far more ambitious than that, and a lot more fun. It's about using AI to expand what you can do as a software developer. Who you can be.
What's a Centaur Software Developer?
A Centaur in mythology is a creature with the upper body of a human sticking out of the neck of a horse lower body. As a centaur, you have the mind and hands of a human being, combined with the ability to run like the wind, and kick the stuffing out of anyone.
A centaur chess player in chess is a combined human/computer chess player.
Occasionally, average players have been able to achieve a performance higher than that of computer programs and top grandmasters
It's debated whether this is still true with advancements in computer chess engines. But chess is a seriously constrained domain.
The notion of being a centaur programmer is derived from this concept, in a 2023 paper.
We introduce the idea of Centaur Programmer, based on the premise that a collaborative approach between humans and AI will be more effective than AI alone.
I'm not talking about productivity
We could now go into a discussion on why a centaur software developer could be more productive than either by themselves, and whether that's true, and quote various studies and rumors at each other, in a field that isn't very well studied. But I'm not interested in that. I'm interested in something else. Let's talk about curiosity, creativity and play.
Curiosity and play
I've been curious, creative and playful my whole life - this is an important part of what makes life worth living to me.
I'm also a very good software developer.
Those two things are connected. The reason I'm a very good software developer is not because I somehow started out this way, but because I have a growth mindset. I don't sit back and say "hey, I'm pretty good at this" and stop. I admit that's nice to do once every while; we all have egos.
But I frequently end up actually underestimating myself, because I look in admiration to others who know and do things I cannot do. I realize my many limitations and the things I have yet to learn. And that is why I keep improving, and why I'm a very good software developer.
I don't think I'm alone in this; I think many good developers share this attitude towards curiosity and play. I think you can see it in what they make and how they title their autobiographies.
Autobiographic narrative to back up my point
Over 40 years ago I learned how to program computers because I wanted to be able to make computer games. Many computer programmers share a similar history.
About 6 or 7 years ago I decided to put serious effort into learning the Rust programming language. I did not do this because I had any need for it in my career. I mostly wanted it so I could create faster artificial life simulations and maybe games one day.
You may say artificial life simulations and games are not enough because it's all about productivity, but in that case I'm not like you.
A few years ago I read a bunch of papers on how to create human readable diffs of structured content like XML. It's a surprisingly thorny problem, and carefully going through those papers and understanding them allowed me to create a successful implementation and iteratively improve on it. I used Rust because this tool needed seriously performance. Rust had empowered me.
A little over a year ago I read a bunch of papers on succinct data structures, something I knew nothing about before. So far this had lead to a few interesting experiments.
You may say interesting experiments are not enough because it's all about productivity, but in that case I'm not like you.
Creativity, curiosity and playfulness made me. It's how I learn: play expands what I know and what I can do. It empowers me. I have fun and I'm empowered to have more fun.
AI Empowerment
When I tried to understand some very tricky aspects surrounding succinct data structures a year ago, I started to experiment with AI to help me read those papers and associated code.
I did most of it without AI. But if I were to do it again today, I think I could have understood more, and had help with the implementation. I could have been more ambitious. 1
I've found this is very effective way to learn more about computer science topics, and use them. You can question and answer. You can have it write code.
I'm not saying AI has mades any of this easy for me; it's still hard! But it's easier. This means that things that were beyond my reach, due to a lack of time to study, or ability to comprehend, are now in my reach. I'm empowered.
On Understanding
I want to admit that this AI/human me, this centaur me -- my human understanding is on occasion limited. I lean on the AI quite a bit. Perhaps it isn't genuine understanding. A tricky question in epistemology. Let's not even talk about the AI understanding something, or not.
I do know this. I've always leaned on other people's understanding - I've reused computers, programming languages, software libraries, implemented algorithms from books and wikipedia. I've used search engines. This is more broad than software development. I am limited and don't understand everything about the world as it's far, far too much. I stand on the shoulders of giants.
And that's okay. I'm still empowered.
Becoming More
Let this empowerment sink in. Have you realized what this means? Have you realized what you can do now as a software developer?
I can use AI to do more. Not be more productive, that's boring and that's debatable 2. I'm not interested in grind culture.
Instead, I want to reach higher; expand my capabilities, grow. My creativity, my curiosity, my play can become more powerful. I can lift myself up by climbing on more shoulders.
I'm becoming more. And so can you.
Is that always the right approach? It can take time for ideas to sink in, especially if you want to be creative with them. But I was not looking to advance the field of succinct data structures - I wanted to be able to use them effectively to do cool stuff.
Yes, of course all this growing and learning makes me a lot more productive too. I won't hide that it's nice that this has made it easier for me to support myself and my family. But my life is not about productivity, is yours?
Comments
You can use your Mastodon account to reply to this post. Learn how this is implemented here.