Ik moet in 15 jaar softwareontwikkeling de eerste klant nog vinden die tot in de punt en komma kan specificeren wat er verwacht wordt... Er worden dus aannames gedaan in allerlei stappen van het proces, zowel toen als nu. Ironisch overigens dat AI getraind is op code met daarin diezelfde impliciete menselijke aannames. Hoe ga je AI instrueren om op iets te letten dat impliciet onderdeel is van de trainingsdata en daarmee het gegeneerde resultaat?
De toekomst is dat de AI vertelt wat de performance moet zijn. Dat wil zeggen: specificeer volume en minimale verwerkingstijden. Ga niet vertellen HOE dat bereikt moet worden want dat levert geen waarde op. Je wilt geen code of deployment-modellen reviewen om te controleren of de gewenste performance bereikt kan worden. Je wilt slechts toetsen of aan de specificatie voldaan wordt.
En dat is niet anders dan hoe het voorheen werkte (of zou moeten werken). De klant geeft de 'wat' en eventuele kaders, het softwareteam bedenkt de beste manier om dit te realiseren.
Architectuur is alleen noodzakelijk als leidraad voor mensen als zij zelf de bouwer van een applicatie zijn. Als je geen code genereert heb of niet zelf de exploitatie-infrastructuur inregelt heb geen architectuur nodig. Als het resultaat voldoet aan de eisen dan is het goed.
Totdat je moet gaan uitbreiden, migreren, koppelen met externe systemen of debuggen. Architectuur biedt houvast en maakt de kaders concreet waarbinnen men kan analyseren, plannen en bouwen. Software op zichzelf is fluïde en veranderlijk. Succes met koppelen en onderhouden als het als los zand tussen je vingers weg glipt.
Jouw argument is hoogstens valide in een bubbel waarbij je niks met de buitenwereld van doen hebt en/of altijd van nul begint. Legacy systemen, datamigraties, koppelingen met derde partijen en andere aspecten waarbij formats, standaarden en protocollen leidend zijn, zijn blijkbaar niet meer relevant?
Foutafhandeling zijn alternatieve executiepaden in de functionele eisen aan een applicatie en de exploitatie-omgeving. Die neem je dus gewoon mee in de specificatie voor de AI.
Foutafhandeling is juist het pad wat je níet expliciet functioneel afvangt, maar als 'buiten de kaders' beschouwd. Indien dat wel zo zou zijn, wordt het simpelweg business logica i.p.v. foutafhandeling. Het is daarnaast een utopie om alle mogelijke alternatieve paden functioneel te omvatten, dus je zult altijd een onverwacht pad moeten afvangen buiten je specs om.
Niet relevant als er geen code gegenereerd wordt. Wel relevant in de zin dat de instructies aan de AI eenvoudig aan te passen moeten zijn. Merk op dat de instructies aan een AI in natuurlijke taal vooral handig is voor mensen, net als programmeertalen vooral handig zijn voor mensen. Een AI heeft geen natuurlijke taal of programmeertaal nodig als modellering van de context. Een AI heeft zijn eigen interne model. Mogelijk dat in de toekomst er een AI-gerichte taal komt zodat de ambiguïteit van natuurlijke taal vermeden kan worden. Of dat natuurlijke taal zelf evolueert naar een vorm met minder ambiguïteit.
Programmeertalen zijn bedoeld om grijs gebied uit te sluiten. Een IF is altijd ja of nee, en niet misschien. Een Integer bevat geen letters. Een FOR-loop draait evenveel iteraties met dezelfde input. Natuurlijke taal is echter wel grijs, dubieus en voor meerdere interpretaties vatbaar. Het resultaat van de vertaalslag van een AI met als input/prompt natuurlijke taal zal dus inherent dubieuze logica bevatten.
Laat nou net die kritische menselijke ontwikkelaar de brug hebben gevormd tussen de wens in natuurlijke taal en de formele programmeertaal die uitgevoerd wordt. Zonder dat stukje menselijke
grounding en de daaropvolgende zichtbare code heb je niks meer dan een blackbox en wat goede hoop dat het (altijd) doet wat je verwacht.
Tsja, de fierheid zal in de toekomst komen uit het juist instrueren van de AI om het gewenste resultaat te krijgen. Als geen code genereerd wordt, zijn codeerstandaarden en best practices geen overweging meer.
AI heeft de kennis en ervaring van de beste vakmensen tot zich genomen en kan deze op schaal toepassen, maar deze kennis is alleen nodig in de transitiefase waar we nu inzitten. De AI-native manier van werken maakt het genereren van code, gebruik van compilers, toepassing van architectuurprincipes, cloud deployment descriptors, enz. allemaal overbodig. We zullen zeer binnenkort op een niveau zitten dat Al deze zaken kan abstraheren zodat mensen zich puur met functionele en niet-functionele eisen aan applicatie kunnen bezig houden.
Buiten dat de volgens jou overbodige zaken ook gewoon non-functionals zijn, durf ik te betwijfelen dat "AI de kennis en ervaring van de beste vakmensen tot zich heeft genomen". Niemand weet waar het op getraind is én er zijn maar weinig mensen die zich tot de beste mogen rekenen. Daarnaast zal met het toenemen van gegenereerde code het incestueuze/inbreeding aspect een steeds grotere rol gaan spelen.