Generate from Constraints
Using Prompt-Hoisting for GPT-based Code Generation
As society deals with the broader implications of generative pre-trained transformer (GPT) technology, developers are trying to understand how it will impact software development. While there are a wide variety of ways to leverage it, the easiest, and most common, is code generation.
Today, there are a number of GPT-based tools that . . .
(Possible) AI Impacts on Development Practice
The View from April 2023
We can’t accurately predict AI’s impact but we can explore some possible disruption points.
Source Code:
Currently most software systems are developed using source code – a human readable, (hopefully) deterministic specification of system behavior. Development tools that allow end-user programming often bypass the need . . .
Gateway Teams
First experiences of your organization matter
One of the things that is hard to appreciate in complex systems is path-dependence — the fact that most systems have memory. What we see today is a consequence of what came before. This is a very simple thing to say but even when we know it, we forget it and we don’t really think about its ramifications. If we want to change things, it helps . . .
System Personas and Design Integrity
It’s taken me a while to appreciate Edsger W. Dijkstra. I had a professor in college who used to comically refer to him as “fearless leader” whenever he mentioned some piece of bombastic wisdom from him. But, beyond the bombast, Dijkstra’s contributions to computer science and software engineering were seminal. Even though I didn’t pay as . . .
Unit Conversations
Writing characterization tests interactively
There are many ways to look at unit testing, but one of my favorites is to see it as an attempt to have a REPL in languages that don't have one.
When you have a REPL, you can call a function and learn how it works interactively. You get immediate feedback—you can have a conversation with it. In dynamically-typed languages this . . .
Testing Warranties
Managing API use across an organization
Access specifiers in programming languages can be frustrating. Superficially, they seem ok. You use public to mark the methods you want to allow anyone to call, and use private to hide the ones that people shouldn’t call. When you’re writing code, it’s easy enough to make that decision, but there are situations where it would be useful to . . .
Functional Code is Honest Code
I’ve been reading quite a few attempts to define Functional Programming recently. It’s hard because we’ve taken so many paths in the industry. There’s some nexus around immutability, referential transparency, and typing. Each language makes its choices, and — if we are looking at those three qualities — it’s clear that you don’t need all of . . .