Jorge Manrubia

January 16, 2023

The augmented programmer

IMG_8433.jpg


If you are a programmer and have tried ChatGPT, you have probably realized it’s a landscape-changing technology. The history of programming is a history of raising the abstraction level, and with all the cautions and disclaimers you want, the jump that ChatGTP represents is monumental.

Right after college, I got a research grant to explore Model Driven Engineering. I was intrigued by the idea of creating software based on high-level models and domain-specific languages. Eventually, I realized my research line was, in practical terms, a dead end, and my interest dried out. I remember this question by Martin Fowler from this article strongly resonated with what I was seeing:

But here lies the crucial question. Can you get a design that is capable of turning the coding into a predictable construction activity? And if so, is cost of doing this sufficiently small to make this approach worthwhile?

Last week, I wanted to create a Python script to split a large CSV file into smaller ones, with a slight transformation of the dates in the process. This is what I entered in Chat GPT:

CleanShot 2023-01-15 at 16.48.42@2x.png

And ChatGPT nicely complied:

CleanShot 2023-01-15 at 16.49.04@2x.png


As a Python newbie myself, I was curious about doing this without pandas, so I asked:

CleanShot 2023-01-15 at 17.03.19@2x.png


And ChatGPT delivered:

CleanShot 2023-01-15 at 17.04.05@2x.png


That looked like a great starting point for what I wanted. I adapted the code a bit and got it working in no time.

Then, I wanted a little bash script to keep only the most recent subdirectories in a given folder that I kept populating with some tests. This was the interaction:

CleanShot 2023-01-15 at 17.17.28@2x.png


And then I asked for a more compact version I could run in a single line:

CleanShot 2023-01-15 at 17.17.35@2x.png


I then got to work on a little Rails tools to visualize Quantconnect backtests results locally. I wanted to read some compressed CSV files containing the data to render the corresponding candlesticks and filled orders, which I always miss in the built-in reporting system. This is what I entered:

CleanShot 2023-01-15 at 22.07.05@2x.png

And this is what I got:

CleanShot 2023-01-15 at 09.44.29@2x.png


I then asked for a little refinement:

CleanShot 2023-01-16 at 07.56.23@2x.png

And it did:

CleanShot 2023-01-15 at 09.46.08@2x.png


These are certainly trivial examples; I’m sure you have seen way more mind-blowing ChatGPT prompts elsewhere. They were meaningful to me because I was trying to get value out of ChatGPT when building something real. And I did. I’ll let others speculate about how software development will look in the future, but here are three thoughts I have right now:

First, ChatGPT lets you move faster when programming. It saves you a lot of time compared to checking APIs and googling how to do things. And this is something that any programmer, senior or not, does all the time.

Second, using natural language to express what you need, keeping a conversation with a machine to shape the final result, and getting functional code you can copy and paste, is a mind-blowing flow. I’ve been using it for a few weeks, and I still have a hard time wrapping my head around the fact that it works. I am certain it’s a workflow that will become mainstream. This is here to stay. 

And third, ChatGPT doesn’t remove the need to know what you are doing. Obviating the fact that the code it generates doesn’t always work, you still need to decide when to use it, define what you need, understand the code it generates, and know how to integrate it. You still need to keep things fast, the code clean, and the system well-designed and maintainable. In this incarnation, I don’t think this technology belongs to the no-code realm but to the code assistant one. It’s like an IDE on steroids, but an IDE, nevertheless. 

This way of using ChatGPT can save you a lot of time googling and typing code, but that is a relatively small part of the software development equation. I haven’t explored other scenarios, such as pondering alternative solutions to a problem, analyzing existing code, or generating more involved systems. I certainly intend to keep trying things here.

Regarding the initial quote by Martin Fowler, I don’t think ChatGPT-like systems will make software development a predictable activity, but the abstraction jump they represent is unprecedented. Natural language for generating code sounded like science fiction yesterday and is a reality today. Do you know what’s better than a fancy DSL that is very costly to create? Plain English working out of the box! With all its ambiguity and fuzziness, human language is the ultimate abstraction. And ChatGPT proves we can make it work, at least for certain scenarios.

For the particular case of augmenting a programmer writing code, I think ChatGPT is a game-changing tool, even in its current very embryonic vessel, with a throttled web interface that keeps going down and can’t keep your past sessions for demand reasons. 

I intend to keep playing with it. Eager to see the next chapters here 🍿.

---
Picture: Lieutenant Ripley wearing a P-5000 Powered Work Loader from Aliens.
jorgemanrubia.com

About Jorge Manrubia

A programmer who writes about software development and many other topics. I work at 37signals.

jorgemanrubia.com