Application Developers and Software Engineers most often work with high-level programming languages designed to make it easy for humans to write instructions for machines.
Consider the following example:
if (apple.isRotten()) {
apple.dispose();
}
Even without any training in computer programming, the average person should be able to figure out that the above statement checks to see if an apple is rotten, and if it is then disposes of it.
High-level programming languages contain a more robust syntax than just the example above, and are full of data structures and variables and functions all sorts of other things. But, it is a syntax that can be learned by any motivated person of at least average intelligence.
Despite this, over the past couple of decades, I have seen consistent efforts to abstract away the syntax of high-level languages and replace them with what I call “ultra-high level programming.” In the early 2000s, this effort was usually marketed as “RAD” (Rapid Application Development), in the 2010s it was marketed as “low-code”, and now we are seeing “vibe coding” (or using AI prompting) to abstract application creators away from high-level programming.
The interesting thing about all this effort is that learning high-level programming language syntax is one of the easiest parts of a building and maintaining a complex information system. Anyone of at least average intelligence, with the motivation to learn, can learn the syntax of a high-level language like Python, Java, JavaScript, or C# in a matter of weeks. Yet learning how to effectively design, build, and maintain systems that are reliable, accurate, secure, cost-effective, user-friendly, and scalable – in the context of real problems – is the part that takes years of practice.
The consistent pattern of an ultra-high level programming language is that it removes the developer from an easy part of system creation, and locks them into a limited framework for resolving any non-trivial problems. An expert in resolving the gaps and inconsistencies in the ultra-high level framework is then needed to make things work. I have seen this pattern play out over the past couple decades, and the latest iteration (AI prompting), appears to be no exception.
This isn’t to say there is no value in ultra-high level programming. In fact, AI prompting (and RAD and low-code) are excellent tools for prototyping information systems and user interfaces. When used in this manner, it can allow a product team to provide a guide for development teams that is much more useful than written requirements alone. However, when an ultra-high level programming tool, like AI prompting, is treated as a production system generator, then it falls into the pattern described in the previous paragraph.