Recently, I read a few posts about AIs, including Uncle Bob’s post, in response to Grady Booch (about this tweet).
I think the fact that some people believe AIs might replace developers leads to interesting questions about what is programming?
What is programming?
As Bob recalls us, Alan Turing defined programming as a sequence of simple statements of the following form:
Given that the sstem is in state s1,
When event E occurs,
Then set the system to state s2 and invoke behavior B
We express some needs in terms of state transition to be executed by a machine, in other words we build state machines in order to satisfy precise specifications.
This explanation makes it crystal clear that the complexity increases with the number of states in the system.
Lots of people consider coding as a translation in a given language. You can translate a text from French to English, so you should be able to translate specifications from human readable to computer understandable.
Of course, it is only the emerged part. The translation from human readable to machine understandable code is already automatic, it’s called the compilation.
Developers must be Domain Driven
Under water, developers must express business needs in an unambiguous way, which is the hard part. Coding would be a translation only if the requirements were already a precise state machine, ie a suite of exhaustive Given/When/Then.
As the specifications are never precise enough, we developers must complete them. We have to challenge existing specifications with our understanding of computer, and we have to fill the missing parts with our understanding of the domain.
Thus, considering developers as simple translator who do not need to understand what they are writing about is a sure recipe for failure.
Believing that coders can be replaced by AIs is believing that coders do not need to understand what they are writing about.
AIs might help developers to do a better job though, if they are designed to optimize automatic part like compilation.