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

Omnidirectionele Engineers in het tijdperk van Liquidware

Het is algemeen bekend dat generatieve AI fotorealistische beelden, illustraties en schilderijen kan produceren door simpelweg instructies te ontvangen.

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

Conversationele AI wordt aangedreven door grote taalmodellen, een fundamentele technologie, en blinkt uit in het voeren van gesprekken in diverse talen en het vertalen ertussen.

Programmeertalen, gebruikt om programma's te creëren, zijn ook een soort taal. Menselijke programmeurs vertalen, in zekere zin, softwarevereisten die verbaal zijn ontvangen naar programmeertalen.

Dit is de reden waarom conversationele generatieve AI, die gebruikmaakt van grote taalmodellen, ook zeer bedreven is in programmeren.

Bovendien is programmeren een intellectuele taak waarbij de correctheid van de resultaten vaak automatisch en direct kan worden geverifieerd. Dit komt doordat een gemaakt programma kan worden uitgevoerd en automatisch gecontroleerd kan worden of het de gewenste uitvoer produceert.

In feite creëren menselijke programmeurs, wanneer ze een programma maken, vaak tegelijkertijd testprogramma's om de resultaten te verifiëren, waarbij ze het hoofdprogramma ontwikkelen terwijl ze controleren of het functioneert zoals bedoeld.

Generatieve AI kan ook op dezelfde manier voortgang boeken met programmeren tijdens het testen. Als een mens precieze instructies geeft, is het voor de AI mogelijk om automatisch te itereren en het programma te voltooien totdat het alle tests doorstaat.

Natuurlijk zijn er, vanwege de beperkingen van de programmeermogelijkheden van generatieve AI en de ambiguïteit van menselijke instructies, veel gevallen waarin tests niet kunnen worden doorstaan, zelfs na talrijke iteraties. Bovendien leiden ontoereikende of incorrecte tests vaak tot bugs of problemen in het voltooide programma.

Echter, naarmate de mogelijkheden van generatieve AI verbeteren en menselijke engineers hun instructiemethoden verfijnen, gekoppeld aan mechanismen om de programmeerkennis van generatieve AI te verbeteren via internetzoekopdrachten, neemt de reikwijdte voor het automatisch genereren van geschikte programma's dag na dag toe.

Bovendien, met de focus van het bedrijfsleven, investeren topbedrijven die zich bezighouden met onderzoek en ontwikkeling van generatieve AI, ook zwaar in het verbeteren van de programmeermogelijkheden van generatieve AI.

In deze situatie wordt verwacht dat de uitbreiding van de reikwijdte en het volume van geautomatiseerde programmeertaken die aan generatieve AI kunnen worden toevertrouwd, zal versnellen.

Er zijn veel gevallen bekend van individuen die nog nooit eerder programma's hadden ontwikkeld, maar met behulp van internetinformatie een basisontwikkelomgeving hebben opgezet, vervolgens vertrouwden op generatieve AI voor het programmeren, en projecten als een team van twee hebben voltooid.

Als programmeur gebruik ik zelf generatieve AI voor het programmeren. Zodra ik de slag te pakken heb, kan ik software voltooien zonder het programma ook maar te bewerken, simpelweg door code te kopiëren en te plakken in bestanden volgens de instructies van generatieve AI.

Zeker, er zijn veel momenten waarop ik vastloop. Dit komt meestal door kleine verschillen tussen de instellingen van mijn computer of programmeerontwikkeltool en de gangbare configuraties, of doordat gratis softwarecomponenten nieuwer zijn dan waar generatieve AI op getraind is, wat een kenniskloof veroorzaakt, of doordat mijn verzoeken enigszins ongebruikelijk zijn.

In gevallen zonder dergelijke kleine discrepanties of speciale omstandigheden, en wanneer de instructie is om zeer gangbare softwarefuncties te creëren, worden in de meeste situaties geschikte programma's gegenereerd.

Naar het Liquidware Tijdperk

Als softwareontwikkelaar kan ik de software die ik creëer uitbrengen, en die software, door ons engineers uitgebracht, wordt vervolgens gebruikt door diverse gebruikers.

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

Dit is echter niet alleen een verandering aan de softwareontwikkelingskant; er komen ook aanzienlijke veranderingen aan de gebruikerskant.

De taak om generatieve AI mondeling te instrueren om automatisch functies aan software toe te voegen of te wijzigen, kan niet alleen tijdens de ontwikkelingsfase vóór de softwarerelease worden gedaan, maar ook tijdens het gebruik ervan. Bovendien kan dit door de softwaregebruiker zelf worden uitgevoerd.

Softwareontwikkelaars kunnen de reikwijdte bepalen van wat wel en niet kan worden gewijzigd, en vervolgens software uitbrengen met door generatieve AI aangedreven aanpassingsfuncties.

Dit zou gebruikers in staat stellen om generatieve AI te vragen kleine ongemakken of voorkeuren voor schermontwerp binnen de software aan te passen.

Bovendien zouden gebruikers handige functies van andere applicaties kunnen toevoegen, meerdere bewerkingen kunnen combineren in één klik, of veelbezochte schermen allemaal op één display kunnen bekijken.

Voor softwareontwikkelaars biedt het mogelijk maken van dergelijke gebruikeraanpassingen aanzienlijke voordelen: het elimineert de inspanning om zelf functieverzoeken te implementeren, en het kan de softwarepopulariteit vergroten door negatieve recensies en ontevredenheid over bruikbaarheid te voorkomen.

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

Het zou passender zijn om het "Liquidware" te noemen, wat duidt op iets dat nog vloeibaarder en adaptiever is dan software (dat al flexibeler is dan hardware), en iets dat perfect aansluit bij de gebruiker.

Functies werden ooit uitsluitend door hardware gerealiseerd. Toen kwam er verwisselbare software, waardoor functies mogelijk werden door een combinatie van hardware en software.

Vanaf daar kunnen we de opkomst van Liquidware voorstellen, wat betekent dat onderdelen kunnen worden gewijzigd door generatieve AI. Bijgevolg zullen functies worden gerealiseerd door hardware + software (geleverd door ontwikkelaars) + Liquidware (gebruikersaanpassingen).

In dit Liquidware-tijdperk zullen de ideeën van gebruikers voor aanpassingen exploderen.

Een baanbrekend aanpassingsidee, uitgevonden door één gebruiker, kan een hot topic worden op sociale media, wat ertoe leidt dat anderen diverse Liquidware-applicaties nabootsen en aanpassen.

Bovendien zal er waarschijnlijk ook Liquidware ontstaan dat in staat is om diverse softwaretoepassingen op een geïntegreerde manier te beheren. Dit betekent dat gebruikers tijdlijnen van meerdere verschillende sociale mediaplatforms in één app kunnen bekijken, of dat zoekresultaten resultaten van talloze platforms kunnen integreren.

Op deze manier zullen, in een wereld waar Liquidware wijdverspreid is, diverse apparaten, waaronder pc's en smartphones, functies bieden die perfect aansluiten bij elk van onze individuele levens en activiteiten.

Een Huidig Fenomeen

Voor software-engineers zoals ikzelf is het cruciaal om te begrijpen dat Liquidware geen futuristisch concept is of iets van over enkele jaren.

Dit komt omdat zelfs zeer eenvoudige Liquidware al haalbaar is.

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

Zo'n webapp zou databases, verkoopbeheersystemen en productverzendsystemen hebben op servers die intern worden beheerd of via een cloudservice worden gecontracteerd. Wanneer een gebruiker een aankoop doet, koppelen deze systemen om de betaling en de verzending van het product af te handelen.

Cruciale bedrijfssystemen en databases zoals deze kunnen niet willekeurig worden gewijzigd.

Het ontwerp van een gebruikersgerichte webpagina van een e-commercewebsite kan echter worden aangepast aan individuele gebruikers zonder significante problemen te veroorzaken. Uiteraard zou het een probleem zijn als de wijzigingen van één gebruiker de schermen van andere gebruikers beïnvloeden, maar individuele gebruikersspecifieke aanpassingen zijn prima.

Zo zijn er diverse aanpassingen denkbaar: tekst vergroten, de achtergrond een donkere tint geven, veelgebruikte knoppen verplaatsen voor gemakkelijker bediening met de linkerhand, items sorteren op prijs in een lijstoverzicht, of de details van twee producten naast elkaar weergeven.

Technisch gezien kunnen deze aanpassingen worden gerealiseerd door de configuratiebestanden en programma's zoals HTML, CSS en JavaScript, die het scherm in de browser weergeven, te wijzigen.

Vanuit een veiligheidsperspectief draaien deze bestanden oorspronkelijk in de webbrowser. Daarom behandelen onderdelen die door een engineer met kennis van webapps kunnen worden gewijzigd alleen functies en gegevens die veilig zijn om aan te passen.

Aldus kan aan de serverzijde van de e-commerce-webapplicatie een mechanisme worden gecreëerd om deze bestanden afzonderlijk op te slaan voor elke ingelogde gebruiker, een scherm toe te voegen voor gesprekken met een chat-AI, en vervolgens de HTML-, CSS- en JavaScript-bestanden van die gebruiker op de server aan te passen volgens hun verzoeken.

Als deze tekst, samen met de configuratie-informatie en de broncode van de bestaande e-commerce-webapplicatie, aan een generatieve AI zou worden gepresenteerd, zou deze 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 nu al een voortdurend fenomeen was.

Omnidirectionele Engineers

Zelfs met de toenemende reikwijdte van AI-gestuurd automatisch programmeren en de opkomst van het Liquidware-tijdperk, kan softwareontwikkeling nog steeds niet uitsluitend door generatieve AI worden uitgevoerd.

Het is echter zeker dat de nadruk op programmeren in softwareontwikkeling aanzienlijk zal afnemen.

Bovendien is voor een soepele softwareontwikkeling een breed scala aan kennis en engineeringvaardigheden vereist, variërend van algemeen programmeren tot cloudinfrastructuur, netwerken, beveiliging, platforms, ontwikkelingsframeworks en databases – van boven naar beneden in de systeemstack, zodat het hele systeem kan functioneren.

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

Traditioneel zorgden enkele full-stack engineers voor het algehele ontwerp, terwijl de overige engineers zich specialiseerden in programmeren, of zich richtten op specifieke niet-programmeergebieden binnen de systeemstack, waardoor de rollen werden verdeeld.

Echter, naarmate generatieve AI het programmeeraspect op zich neemt, zullen de softwareontwikkelingskosten aanzienlijk worden verlaagd, wat leidt tot de planning van diverse nieuwe softwareontwikkelingsprojecten.

Als gevolg hiervan zullen in elk ontwikkelproject engineers die louter programma's kunnen schrijven grotendeels overbodig zijn; in plaats daarvan zal er veel vraag zijn naar een groot aantal full-stack engineers.

Bovendien zal in dit scenario enkel full-stack kennis en vaardigheden onvoldoende zijn. Dit komt doordat de soorten software die nodig zijn in diverse ontwikkelprojecten zullen diversifiëren, wat betekent dat ontwikkeling niet altijd zal worden aangevraagd met dezelfde systeemstack. Bovendien zal de vraag naar complexe systemen die meerdere systeemstacks vereisen ongetwijfeld toenemen.

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

Op dezelfde manier hebben webapplicaties, smartphone-apps en pc-applicaties elk verschillende systeemstacks. In de wereld van embedded software, zoals IoT, zal de systeemstack voor elk embedded apparaat volledig verschillen.

Echter, naarmate de nadruk op programmeren afneemt en de totale softwareontwikkelingskosten dalen, zal de ontwikkeling van complexe systemen die software met deze verschillende systeemstacks combineren waarschijnlijk toenemen.

Hoewel voor een dergelijke ontwikkeling het samenstellen van meerdere afzonderlijke full-stack engineers nodig is, zullen engineers die het hele systeem kunnen overzien en de basisontwerpen kunnen uitvoeren een cruciale rol spelen.

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 tijd komen dat de vraag naar full-stack engineers die beperkt zijn tot een enkele systeemstack ook zal afnemen.

Als je in dat tijdperk actief wilt blijven als IT-engineer, moet je onmiddellijk beginnen met de weg naar een omnidirectionele engineer.

De Rol van Omnidirectionele Engineers

De programmeertalen, platforms en frameworks die ontwikkeld zullen worden, zijn divers.

Een omnidirectionele engineer hoeft ze echter niet allemaal te beheersen, want ook zij kunnen assistentie krijgen van generatieve AI.

Als je het aan generatieve AI overlaat, kunnen zelfs programmeertalen, platforms of frameworks die je nog nooit hebt gebruikt, worden gegenereerd door simpelweg mondelinge instructies te geven.

Natuurlijk bestaat het risico dat er bugs of beveiligingslekken worden geïntroduceerd, of dat er technische schuld wordt opgebouwd die toekomstige wijzigingen moeilijk kan maken.

Om deze risico's te identificeren en te beperken, is kennis van de specifieke taal of bibliotheek noodzakelijk. Deze kennis kan echter ook van generatieve AI worden verkregen. Een omnidirectionele engineer hoeft alleen maar procedures en mechanismen solide op te bouwen voor het detecteren en voorkomen van deze problemen, of voor het afhandelen ervan na het optreden.

Deze procedures en mechanismen veranderen niet drastisch met verschillende systeemstacks. Als de procedures en mechanismen voor het voorkomen van bugs en beveiligingslekken en het waarborgen van toekomstige uitbreidbaarheid worden geformaliseerd, kan de rest worden overgelaten aan generatieve AI of engineers die gespecialiseerd zijn in die specifieke gebieden.

Omnidirectionele engineers hoeven geen gedetailleerde kennis of langdurige ervaring te bezitten met elke individuele systeemstack.

Eén van de belangrijkste rollen van een omnidirectionele engineer is het ontwerpen van de functiedistributie en de interoperabiliteit van complexe softwaresystemen die gezamenlijk over verschillende systeemstacks heen werken.

Daarnaast is het overwegen hoe de gehele software te ontwikkelen en te beheren ook een cruciale rol voor een omnidirectionele engineer.

Omnidirectionele Software

Laten we eens kijken voor welk soort softwareontwikkeling een omnidirectionele engineer nodig is.

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

Onder leiding van een leidinggevende, belast door het topmanagement met het vernieuwen van deze e-commerce webapp, kan het planningsteam met de volgende vereisten komen:

Integratie van Gebruikerscommunityplatform: Dit betekent het bieden van een platform niet alleen voor een speciale e-commerce-app of -site, maar een plek waar gebruikers met elkaar kunnen interacteren over de producten zelf en hoe ze te gebruiken. Het doel is gebruikersretentie, mond-tot-mondreclame, contentverrijking door gebruikersbijdragen, en de integratie van feedback (zowel positief als negatief) in productontwikkeling, nieuwe productplanning en marketing.

Omni-apparaat compatibiliteit: Dit maakt de gebruikerscommunity en productinformatie toegankelijk vanaf diverse apparaten, waaronder niet alleen webapps, maar ook smartphone-apps, stemassistenten, draagbare apparaten en slimme huishoudelijke apparaten.

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

Vernieuwing van Bedrijfssystemen: Dit omvat, naast de tijdelijke koppeling met bestaande verkoopbeheer- en productbezorgingssystemen, ook het vernieuwen van deze systemen. Na de vernieuwing omvat het plan real-time aggregatie van verkoopgegevens en vraagvoorspelling, en integratie met voorraadbeheersystemen. Bovendien zal de koppeling met regionaal verspreide voorraadsystemen van bezorgbedrijven en bezorgdiensten van de vervoerder geleidelijk worden ingevoerd, wat vereist dat het informatiesysteem zijn integraties dienovereenkomstig geleidelijk aanpast.

Liquidware compatibiliteit: Alle gebruikersgerichte interfaces zullen uiteraard Liquidware-compatibel zijn. Bovendien zullen interne gebruikersinterfaces voor productontwikkeling en planning (zoals informatieaggregatie en feedback), afdelingen voor systeembeheer en rapporten voor het management ook allemaal worden omgezet naar Liquidware.

Als een ontwikkelingsplan voor dergelijke complexe software zou worden gepresenteerd, zou een traditioneel softwareontwikkelingsteam het waarschijnlijk niet onmiddellijk accepteren. Als alternatief zouden ze, door discussies over systeemspecificaties, logisch aantonen dat enorme ontwikkelingskosten en -tijd nodig zijn, en aandringen op aanzienlijke reducties van de specificaties.

Maar wat als generatieve AI het meeste programmeerwerk kon automatiseren, en meer dan de helft van de voorgestelde systeemstacks al bekend was bij iemand in het team? En wat als het team een bewezen staat van dienst had in het succesvol lanceren van nieuwe systeemstacks, platforms en frameworks vanaf nul met de hulp van generatieve AI? En wat als jij, als omnidirectionele engineer, al aan dit pad begonnen bent en van plan bent het te vervolgen?

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

Er is ook de geruststelling van bestaande systemen. Het is tevens een project dat stapsgewijs kan worden uitgebreid via een agile ontwikkelproces, beginnend met snel te realiseren, impactvolle functies en het verzamelen van feedback van early adopter-gebruikers.

Al met al zou de ontwikkeling van deze omnidirectionele software een zeer aantrekkelijk project moeten lijken.

Conclusie

Met automatische programmering, gedreven door generatieve AI, worden Liquidware en omnidirectionele softwareontwikkeling al huidige realiteiten.

In deze context moeten IT-engineers steeds vaker verder kijken dan full-stack en streven naar de rol van omnidirectionele engineer.

Daar voorbij zal hun reikwijdte nog verder uitbreiden, voorbij het domein van IT-systemen, om omnidirectionele bedrijfsengineering te omvatten – het engineeren van organisatorische activiteiten zelf, door klanten, interne medewerkers en AI met elkaar te verbinden – en omnidirectionele community-engineering.

En zelfs nog verder, voorzie ik de opkomst van een vakgebied genaamd omnidirectionele sociale engineering, gericht op het alomvattend verbeteren van de samenleving.