Naar inhoud springen
Dit artikel is vanuit het Japans vertaald met behulp van AI
Lees in het Japans
Dit artikel is in het Publiek Domein (CC0). Voel je vrij om het vrij te gebruiken. CC0 1.0 Universal

De Omnidirectionele Ingenieur in het Tijdperk van Liquidware

Het is algemeen bekend dat generatieve AI afbeeldingen kan creëren, waardoor fotorealistische beelden, illustraties en schilderijen worden geproduceerd, simpelweg door instructies te volgen.

Ondertussen richt de zakelijke wereld zich op het vermogen van generatieve AI om programma's te genereren.

Chatgebaseerde AI wordt gerealiseerd door fundamentele grote taalmodellen, waardoor het zeer bedreven is in het converseren in verschillende talen en het vertalen ertussen.

Programmeertalen, die worden gebruikt om programma's te maken, zijn ook een type taal. Menselijke programmeurs vertalen, in zekere zin, softwarevereisten die mondeling zijn ontvangen naar programmeertalen.

Om deze reden is conversatie-generatieve AI die gebruikmaakt van grote taalmodellen ook zeer bedreven in programmeren.

Bovendien is programmeren een vorm van intellectueel werk waarbij de correctheid van de output vaak automatisch en onmiddellijk kan worden geverifieerd. Dit komt doordat het uitvoeren van het gemaakte programma het mogelijk maakt om automatisch te bepalen of de gewenste resultaten worden geproduceerd.

Sterker nog, menselijke programmeurs maken vaak tegelijkertijd met het hoofdprogramma testprogramma's om te verifiëren dat het hoofdprogramma naar behoren functioneert, en controleren het gedrag ervan naarmate de ontwikkeling vordert.

Generatieve AI kan ook vorderen met programmeren terwijl het test, waardoor een mechanisme ontstaat waarbij, als een mens nauwkeurige instructies geeft, de AI automatisch kan itereren en het programma kan voltooien totdat het de tests doorstaat.

Natuurlijk zijn er, door de beperkingen van het programmeervermogen van generatieve AI en de ambiguïteit van menselijke instructies, veel gevallen waarin tests niet kunnen worden doorstaan, zelfs na meerdere iteraties. Ook kunnen tests onvoldoende of onjuist zijn, wat vaak leidt tot bugs of problemen in het voltooide programma.

Naarmate de mogelijkheden van generatieve AI echter verbeteren, menselijke ingenieurs hun instructiemethoden verfijnen en de programmeerkennis van generatieve AI wordt uitgebreid via internetzoekopdrachten, neemt de reikwijdte voor het automatisch genereren van passende programma's met de dag toe.

Bovendien richten toonaangevende bedrijven die onderzoek en ontwikkeling doen naar generatieve AI zich, met de aandacht van het bedrijfsleven, ook op het verbeteren van de programmeermogelijkheden van generatieve AI.

In dergelijke omstandigheden wordt verwacht dat de uitbreiding van de gebieden en volumes waar automatisch programmeren kan worden toevertrouwd aan generatieve AI, zal versnellen.

Er zijn veel gevallen waarin individuen die nog nooit programma's hebben ontwikkeld, een basisontwikkelomgeving hebben opgezet op basis van internetinformatie, en vervolgens generatieve AI het programmeren hebben laten afhandelen, waardoor programma's in een gezamenlijke inspanning werden voltooid.

Ikzelf gebruik als programmeur generatieve AI voor programmeren. Zodra ik er handigheid in krijg, kan ik software voltooien zonder het programma ook maar enigszins te bewerken, simpelweg door programma's naar bestanden te kopiëren of te knippen en plakken volgens de instructies van generatieve AI.

Natuurlijk zijn er veel gevallen waarin ik moeilijkheden ondervind. Deze zijn meestal te wijten aan mijn computer of programmeerontwikkeltools die enigszins afwijkende instellingen hebben van de typische configuraties, of aan gratis softwarecomponenten die nieuwer zijn dan wat de generatieve AI heeft geleerd, wat leidt tot een kenniskloof, of soms is de door mij gevraagde inhoud wat ongebruikelijk.

In de meeste gevallen, als er geen van dergelijke kleine verschillen of speciale omstandigheden zijn en ik instructies geef om een zeer gangbare softwarefunctie te maken, worden er geschikte programma's gegenereerd.

Op Weg naar het Tijdperk van Liquidware

Als softwareontwikkelaar kan ik de software die ik ontwikkel uitbrengen. En de software die wij ingenieurs uitbrengen, wordt door diverse gebruikers gebruikt.

De toekomst waarin iedereen deze softwareontwikkeling met generatieve AI kan uitvoeren, is een verlengstuk van de discussie tot nu toe.

Dit is echter niet alleen een verandering aan de softwareontwikkelingskant. Een aanzienlijke verandering zal ook aan de gebruikerskant plaatsvinden.

Generatieve AI mondeling instrueren om automatisch functies aan software toe te voegen of te wijzigen, kan niet alleen tijdens de ontwikkelingsfase vóór de softwarerelease, maar ook terwijl de software in gebruik is. Bovendien kan het door de softwaregebruikers zelf worden gedaan.

Softwareontwikkelaars hoeven alleen de toelaatbare en onveranderlijke bereiken te definiëren en de software uit te brengen met een door generatieve AI aangestuurde aanpassingsfunctie.

Dit zou gebruikers in staat stellen om generatieve AI te vragen kleine bruikbaarheidsproblemen of voorkeuren voor schermontwerp te wijzigen.

Bovendien zou het mogelijk zijn om handige functies van andere apps toe te voegen, een combinatie van meerdere bewerkingen met één klik uit te voeren, of veelgebruikte schermen op één display te bekijken.

Vanuit het perspectief van de softwareontwikkelaar biedt het mogelijk maken van dergelijke gebruiksaanpassingen aanzienlijke voordelen. Het elimineert de noodzaak voor hen om functies toe te voegen op basis van gebruikersverzoeken, en gezien het feit dat het de populariteit van software zou kunnen vergroten door negatieve feedback en ontevredenheid over de bruikbaarheid te vermijden, is het een grote winst.

Wanneer gebruikers op deze manier vrijelijk schermen en functies kunnen wijzigen, wijkt het concept aanzienlijk af van wat we traditioneel "software" noemden.

Het zou passend zijn om het "liquidware" te noemen om aan te geven dat het nog vloeibaarder en aanpasbaarder is dan software (wat flexibel is vergeleken met hardware), en dat het perfect aansluit bij de gebruiker.

In het verleden werden functies uitsluitend door hardware gerealiseerd, maar toen kwam vervangbare software op, waardoor functies konden worden gerealiseerd door een combinatie van hardware + software.

Van daaruit kunnen we denken aan de opkomst van liquidware, dat verwijst naar onderdelen die kunnen worden gewijzigd door generatieve AI. Zo zouden de algehele functies worden gerealiseerd door hardware + software (geleverd door ontwikkelaars) + liquidware (gebruikersaanpassingen).

In dit tijdperk van liquidware zullen de ideeën voor gebruikersaanpassingen exploderen.

Een baanbrekend aanpassingsidee, bedacht door één gebruiker, kan een hot topic worden op sociale media, wat ertoe leidt dat anderen verschillende liquidware nabootsen en aanpassen.

Ook zal liquidware ontstaan dat verschillende soorten software kan integreren en verwerken. Dit zou gebruikers in staat stellen om tijdlijnen van meerdere verschillende SNS-platforms in één app te bekijken, of zoekresultaten van talloze platforms te integreren.

Op deze manier zullen in een wereld waar liquidware gemeengoed is, verschillende apparaten, waaronder pc's en smartphones, functies bieden die perfect passen bij het leven en de activiteiten van elk individu.

Een Huidig Fenomeen

Wat belangrijk is voor software-engineers zoals ik, is dat liquidware geen futuristisch concept is of iets van over een paar jaar.

Dit komt omdat zeer eenvoudige liquidware al realiseerbaar is.

Stel je bijvoorbeeld voor dat ik een engineer ben die een webapplicatie ontwikkelt voor de e-commercewebsite van mijn bedrijf.

Dergelijke webapplicaties hebben doorgaans databases, verkoopbeheersystemen en productverzendsystemen op servers die door het bedrijf of gecontracteerde cloudservices worden beheerd. Wanneer een gebruiker een aankoop doet, koppelen deze systemen om betalingen te innen en producten te verzenden.

De kernsystemen en databases voor deze operaties kunnen niet willekeurig worden gewijzigd.

Als het ontwerp van de e-commercewebsite die gebruikers zien, echter wordt aangepast voor het gemak van elke gebruiker, levert dit meestal weinig problemen op. Natuurlijk, als de wijzigingen van de ene gebruiker het scherm van een andere gebruiker beïnvloeden, is dat een probleem, maar individuele gebruikersspecifieke aanpassingen zijn prima.

Verschillende wijzigingen zijn denkbaar: tekst vergroten, de achtergrond naar een donkere tint veranderen, veelgebruikte knoppen verplaatsen naar posities die gemakkelijk toegankelijk zijn met de linkerhand, items sorteren op prijs op een lijstscherm, of de details van twee producten naast elkaar weergeven.

Technisch gezien kunnen deze wijzigingen worden bereikt door de configuratiebestanden en programma's zoals HTML, CSS en JavaScript, die het scherm in de browser weergeven, aan te passen.

Op het gebied van beveiliging draaien deze bestanden oorspronkelijk in de webbrowser, dus ze kunnen worden gewijzigd door engineers die bekend zijn met webapplicaties. Daarom verwerken ze alleen functies en gegevens die veilig kunnen worden gewijzigd.

Dus, aan de serverzijde van de e-commerce webapp, zou men deze bestanden afzonderlijk kunnen opslaan voor elke ingelogde gebruiker, een scherm voor conversatie met een chat-AI kunnen toevoegen, en een mechanisme kunnen creëren om de HTML-, CSS- en JavaScript-bestanden van die gebruiker op de server te wijzigen volgens hun verzoeken.

Als je deze tekst, samen met de configuratie-informatie en broncode van een bestaande e-commerce webapp, aan generatieve AI verstrekt, zal het waarschijnlijk de stappen en benodigde programma's leveren om dergelijke functionaliteit toe te voegen.

Op deze manier is liquidware al een actueel onderwerp; het zou niet verrassend zijn als het een doorlopend fenomeen is.

Omnidirectionele Ingenieur

Zelfs als de reikwijdte van AI-gestuurd automatisch programmeren toeneemt en het tijdperk van liquidware al is aangebroken, kan softwareontwikkeling nog niet uitsluitend door generatieve AI worden uitgevoerd.

Het staat echter vast dat het gewicht van programmeren in softwareontwikkeling aanzienlijk zal afnemen.

Bovendien is voor een soepele softwareontwikkeling een breed scala aan kennis en technische vaardigheden vereist, niet alleen algemeen programmeren, maar ook cloudinfrastructuur, netwerken, beveiliging, platforms, ontwikkelingsframeworks en databases – allesomvattend van boven naar beneden in het systeem.

Personeel met dergelijke kennis en vaardigheden wordt full-stack engineers genoemd.

Tot nu toe behandelden enkele full-stack engineers het algehele ontwerp, terwijl de overige engineers zich ofwel uitsluitend op programmeren richtten, ofwel specialiseerden in specifieke niet-programmeergebieden binnen de systeemstack, en zo de rollen verdeelden.

Naarmate generatieve AI echter het programmeergedeelte overneemt, zullen de kosten voor softwareontwikkeling aanzienlijk worden verlaagd, wat zal leiden tot de planning van diverse nieuwe softwareontwikkelingen.

Bijgevolg zullen in elk ontwikkelingsproject zeer weinig engineers nodig zijn die alleen maar code kunnen schrijven; in plaats daarvan zal een groot aantal full-stack engineers nodig zijn.

Bovendien zal in deze situatie het louter beschikken over full-stack kennis en vaardigheden onvoldoende zijn. Dit komt doordat diverse softwareontwikkelingsprojecten uiteenlopende typen software zullen vereisen, wat betekent dat ontwikkeling niet altijd binnen dezelfde systeemstack zal worden gevraagd. Ook zal de vraag naar composietsystemen die meerdere systeemstacks vereisen onvermijdelijk toenemen.

De systeemstack voor een webapplicatie verschilt bijvoorbeeld van die voor bedrijfs- of kernsystemen. Daarom kan een full-stack webapp-engineer niet worden belast met een kernsysteemontwikkelingsproject.

Bovendien hebben webapps, smartphone-apps en pc-applicaties verschillende systeemstacks. In de wereld van embedded software, zoals IoT, verandert de systeemstack volledig afhankelijk van het apparaat waarin het is ingebed.

Als de nadruk op programmeren echter afneemt en de totale kosten van softwareontwikkeling dalen, zou de ontwikkeling van composietsystemen die software met verschillende systeemstacks combineren, moeten toenemen.

Hoewel dit de samenstelling van meerdere afzonderlijke full-stack engineers voor de ontwikkeling zal vereisen, zullen engineers die het totale plaatje kunnen overzien en basisontwerp kunnen uitvoeren een cruciale positie innemen.

Dit betekent dat er vraag zal zijn naar engineers met omnidirectionele kennis en vaardigheden over tal van systeemstacks, die de grenzen van individuele systeemstacks overstijgen.

Dergelijke engineers zullen waarschijnlijk omnidirectionele engineers worden genoemd.

En net zoals de vraag naar engineers die alleen kunnen programmeren zal afnemen door generatieve AI, zal er uiteindelijk een tijdperk komen waarin de vraag naar full-stack engineers die beperkt zijn tot een enkele systeemstack ook afneemt.

Als je in dat tijdperk actief wilt blijven als IT-engineer, moet je nu meteen beginnen te streven naar het worden van een omnidirectionele engineer.

De Rol van de Omnidirectionele Ingenieur

De te ontwikkelen programmeertalen, platforms en frameworks zijn divers.

Dit betekent echter niet dat men ze allemaal hoeft te leren. Dit komt omdat de omnidirectionele ingenieur ook hulp kan krijgen van generatieve AI.

Als het aan generatieve AI wordt toevertrouwd, kunnen zelfs programmeertalen, platforms of frameworks die men nog nooit persoonlijk heeft gebruikt, worden gegenereerd door simpelweg mondelinge instructies te geven.

Natuurlijk bestaat het risico op het introduceren van bugs of beveiligingslekken, of het opbouwen van technische schuld die toekomstige wijzigingen moeilijk zou kunnen maken.

Om deze risico's te identificeren en te beperken, is kennis van de specifieke taal of bibliotheek noodzakelijk. Die kennis kan echter ook van generatieve AI worden verkregen. De omnidirectionele ingenieur hoeft alleen in staat te zijn om de procedures en mechanismen voor het detecteren en voorkomen van deze problemen, of voor het achteraf afhandelen ervan, grondig op te zetten.

Deze procedures en mechanismen veranderen niet significant met verschillen in de systeemstack. Als men de procedures en mechanismen kan formaliseren voor het onderdrukken van de introductie van bugs en beveiligingslekken, en voor het waarborgen van toekomstige uitbreidbaarheid tijdens de ontwikkeling, dan kan de rest worden toevertrouwd aan generatieve AI of ingenieurs die bedreven zijn in die specifieke gebieden.

De omnidirectionele ingenieur hoeft geen gedetailleerde kennis of langdurige ervaring te bezitten met elke individuele systeemstack.

Bovendien is een van de belangrijkste rollen van een omnidirectionele ingenieur het ontwerpen van hoe functies worden verdeeld en hoe ze samenwerken binnen complexe software die samenwerkt over meerdere, verschillende systeemstacks.

Daarnaast wordt het overwegen hoe de gehele software moet worden ontwikkeld en beheerd ook een belangrijke rol voor de omnidirectionele ingenieur.

Omnidirectionele Software

Laten we eens kijken welk soort softwareontwikkeling vraagt om een omnidirectionele ingenieur.

Eerder gaf ik het voorbeeld van het ontwikkelen van een e-commerce webapplicatie.

Onder leiding van een verantwoordelijke leidinggevende, die van het topmanagement van het bedrijf de opdracht heeft gekregen deze e-commerce webapplicatie te herzien, zou het planningsteam met de volgende vereisten kunnen komen:

Conversie naar Gebruikerscommunityplatform. Dit betekent niet alleen een e-commerce-specifieke app of site, maar het bieden van een platform waar productgebruikers met elkaar kunnen interacteren over de producten zelf en hun gebruik. Het doel is gebruikersbehoud, mond-tot-mondreclame, verrijking van inhoud door gebruikersbijdragen, en integratie van feedback over productontwikkeling (zowel positief als negatief) met nieuwe productplanning en marketing.

Omni-apparaat Compatibiliteit. Dit maakt toegang tot de gebruikerscommunity en productinformatie mogelijk vanaf niet alleen webapps, maar ook smartphone-apps, stemassistenten, draagbare apparaten, slimme huishoudelijke apparaten en alle andere apparaten.

Omni-platform Compatibiliteit. Dit omvat niet alleen het eigen gebruikerscommunityplatform van het bedrijf, maar bijvoorbeeld ook productvermeldingen en het delen van recensies op algemene e-commercesites, integratie met sociale media, en functionele en informatiekoppeling met diverse AI-tools.

Verversen Bedrijfssysteem. Terwijl tijdelijk wordt gekoppeld aan bestaande verkoopbeheer- en productleveringssystemen, zullen deze systemen ook worden ververst. Na de verversing worden real-time verkoopdata-aggregatie, vraagvoorspelling en integratie met voorraadbeheersystemen voorzien. Bovendien, naarmate de geleidelijke integratie met regionaal gedistribueerde voorraadsystemen en productverzendservices van bezorgbedrijven vordert, moeten de informatiesystemen zich ook geleidelijk dienovereenkomstig integreren.

Liquidware Compatibiliteit. Uiteraard zullen alle gebruikersinterfaces compatibel zijn met liquidware. Daarnaast zullen alle interne gebruikersinterfaces, zoals die voor informatie-aggregatie en feedback voor productontwikkeling en -planning, systeembeheer afdelingen en managementrapporten, ook worden omgezet naar liquidware.

Als een ontwikkelingsplan voor dergelijke complexe software zou worden gepresenteerd, zou een traditioneel softwareontwikkelingsteam het waarschijnlijk niet onmiddellijk accepteren. Of, tijdens het proces van het verfijnen van systeemspecificaties, zouden ze logisch de noodzaak van enorme ontwikkelingskosten en -tijd aantonen, en aandringen op aanzienlijke reducties in specificaties.

Maar wat als generatieve AI het grootste deel van het programmeren zou kunnen automatiseren, en meer dan de helft van de gepresenteerde systeemstacks bekend waren bij iemand in het team, en het team eerdere ervaring had met het succesvol introduceren van nieuwe systeemstacks, platforms en frameworks vanaf nul met hulp van generatieve AI? En wat als jij, als omnidirectionele ingenieur, deze weg al was ingeslagen en van plan was deze voort te zetten?

Vanuit dat perspectief zou het een zeer aantrekkelijk project moeten lijken. Je zou kunnen samenwerken met een planningsteam dat ambitieuze voorstellen doet onder leiding van de planningsleiding, en een ontwikkelingsteam met het potentieel om uit te groeien tot een omnidirectioneel softwareontwikkelingsteam.

Er is ook de geruststelling van bestaande systemen. Het is ook een project dat agile ontwikkelingsprocessen toelaat, waarbij impactvolle functies snel kunnen worden gebouwd, en het systeem geleidelijk kan groeien met feedback van early adopter gebruikers.

Gezien dit alles, zou de ontwikkeling van deze omnidirectionele software een aantrekkelijk project moeten lijken.

Tot Slot

Dankzij automatische programmering door generatieve AI worden liquidware en omnidirectionele softwareontwikkeling reeds actuele realiteiten.

In een dergelijke situatie moeten IT-ingenieurs steeds vaker verder kijken dan full-stack en ernaar streven omnidirectionele ingenieurs te worden.

Bovendien zal hun reikwijdte zich daarna uitbreiden tot omnidirectionele bedrijfskunde, die organisatorische activiteiten omvattend ontwerpt door klanten, interne medewerkers en AI met elkaar te verbinden buiten de scope van IT-systemen, en omnidirectionele gemeenschapskunde.

En nog verder daar voorbij, geloof ik dat er een vakgebied zal ontstaan genaamd omnidirectionele sociale ingenieurswetenschappen, gericht op het omvattend verbeteren van de samenleving.