■ The Structure of AI-Assisted Programming Today
Traditionally, programming languages have been a way for humans to instruct computers. So what changes in the AI era?
Today, AI-assisted programming typically looks like this:
Human → [Natural Language (Prompt)] → AI → [Program] → Computer
From here, one natural idea is:
Human → [Next-Generation Language] → AI → [Program] → Computer
In other words, can we introduce a shared language between humans and AI?
Taking this a step further:
Human → [Next-Generation Language] → AI → [Next-Generation Language] → Computer
If this were possible, then—even in principle—humans could verify what the AI produces.
When problems occur, we could trace and understand the original intent behind the system.
At this point, a natural criticism arises:
Human → [Next-Generation Language] → AI
AI → [Next-Generation Language] → Computer
If the same language is used on both sides, wouldn’t AI simply return what the human provided?
In fact, this can certainly happen.
The key point is the value of having a shared language across humans, AI, and computers.
Why not just use natural language?
A next-generation language would instead aim to:
And compared to traditional programming languages, the key difference would be:
This idea may sound radical, but it is not entirely new.
It is closely related to the concepts explored in logic programming languages during the Fifth Generation Computer era.
For example, Prolog—one of the most well-known logic programming languages—was once widely discussed in Japan.
The language I’ve mentioned occasionally in this blog, ADP, is also based on Prolog.
Languages like Prolog are often described as declarative.
That means:
Interestingly, modern AI-assisted coding follows a similar pattern:
humans specify what they want, and AI handles how to implement it.
If we properly recognize this division of roles, we can respond to the earlier criticism that “AI would just return the input as-is.”
A more concrete idea would be:
Here, a “predicate” is a concept from logic programming, somewhat similar to a function.
Instead of describing step-by-step procedures, we describe conditions to be satisfied.
This makes it easier for humans to verify whether the result is correct.
Of course, this kind of idea is much easier said than done.
The Fifth Generation Computer project itself failed, which raises the question:
Can AI solve the challenges that existed back then?
More concretely, several dilemmas remain:
This creates a fundamental tension.
Declarative programming was once a briefly popular paradigm, but pushing it too far can make systems impractical.
At the same time, AI-generated output can also be procedural.
How to balance these aspects remains an open challenge.
That said, I personally had fragments of this idea over 30 years ago.
And if the language I’m developing—ADP—can incorporate the necessary characteristics of such a next-generation language, it might itself become one.
It’s an ambitious thought, but for now, I’ll continue working on it little by little, whenever time allows.