Software schrijft software

Automatische aanvullingen op ingetypte woorden zijn er al langer. Het nieuwe programma Copilot doet dit niet met tekst, maar met computercode. Hiermee komt een wereld waarin iedereen computertaal kan schrijven dichterbij.

‘Kun je alle postcodes op discriminatiemeldpunt.nl in een spreadsheet zetten?’ Het is een vrij normale taak voor Joris Heijkant, onlineprogrammeur voor de Volkskrant. Hij is geroutineerd in het schrijven van een simpel computerprogramma dat zo’n website kan aflopen en automatisch data als postcodes op een rijtje zet. Maar tijd kost dat wel. Kan zo’n taak niet sneller en handiger?

Sinds kort kan dat inderdaad, met nieuwe software genaamd Copilot, die tijdens het programmeren meekijkt en -helpt. Terwijl Heijkant computercode tikt, geeft Copilot suggesties voor hoe de regels mogelijk verder kunnen gaan, zoals toetsenborden op smartphones dat voor ‘menselijke tekst’ al doen.

Copilot kan nog meer: als Heijkant typt ‘verzamel voor alle postcodes de bijbehorende meldingspunten’, verschijnt direct een heel blok code, dat precies uitvoert waar Heijkant aan zat te denken. Met een druk op de knop voegt hij de suggestie aan zijn programma toe: automatische automatisatie.

  • Group Created with Sketch.

    commando gegeven aan Copilot (de software werkt het beste in het Engels)

  • Group 2 Created with Sketch.

    code die Copilot voorstelt

  • Group Created with Sketch.

    Set up axios, fs and a base url variable

    Group 2 Created with Sketch.
                 const axios = require('axios');
    const fs = require('fs');
    const baseUrl = 'https://www.postcodes.io/postcodes/'
                
  • Group Created with Sketch.

    Set up variables hasPoint, noPoint and the array absentPostalCodes

    Group 2 Created with Sketch.
                 let hasPoint = 0;
    let noPoint = 0;
    let absentPostalCodes = []
                
  • Group Created with Sketch.

    Set up an async scrape function

    Group 2 Created with Sketch.
                 async function scrape() {
        const response = await axios.get(baseUrl);
        const data = response.data;
        const result = data.result;
        const postcodes = result.map((item) => item.postcode);
        for (let i = 0; i < postcodes.length; i++) {
            const postcode = postcodes[i];
            const response = await axios.get(baseUrl + postcode);
            const data = response.data;
            const result = data.result;
            const latitude = result.latitude;
            const longitude = result.longitude;
            if (latitude && longitude) {
                hasPoint++;
            } else {
                noPoint++;
                absentPostalCodes.push(postcode);
            }
        }
        console.log('Has point: ' + hasPoint);
        console.log('No point: ' + noPoint);
        console.log('Absent postcodes: ' + absentPostalCodes);
        fs.writeFile('absentPostcodes.json', JSON.stringify(absentPostalCodes), (err) => {
            if (err) {
                console.log(err);
            }
        });
    }
                
  • Group Created with Sketch.

    call the scrape function

    Group 2 Created with Sketch.
                 scrape();
                

De charme van Copilot is tweeledig: het kan code aanvullen én menselijke taal omzetten naar code. ‘Handig, zo’n collega’, zegt Heijkant. Hij is niet de enige programmeur die onder de indruk is: onderzoekers en softwareontwikkelaars spreken van een ‘technische revolutie’. Een revolutie bovendien die iedereen zal gaan merken doordat het programmeren steeds gebruiksvriendelijker zal maken. Wellicht zullen digibeten met dit soort technologie aan de slag kunnen in hun dagelijks leven: schrijf het commando ‘Maak een website voor het 25-jarig huwelijksfeest van mijn ouders’, upload de leukste foto van het paar en de computer doet de rest.

De robotschrijver bleek ook computercode te hebben geleerd|

Om te begrijpen hoe software zelf software kan schrijven, is de verrassende oorsprong van Copilot een goed beginpunt. In 2020 haalde het Amerikaanse bedrijf OpenAI krantenkoppen met GPT-3, dat aan de hand van een betrekkelijk simpele opzet zoals een vraag of voorbeeldzin behoorlijk menselijk ogende teksten kan produceren. ‘Schrijf een sonnet over broccoli in de stijl van Shakespeare’ en zonder probleem komen veertien versregels over de groente tevoorschijn.

Deze software kan verschillende talen verwerken en genereren, het liefst Engels, Russisch of Chinees. Maar toen een experimenterende gebruiker meldde dat hij er computertaal mee kon schrijven, verbaasde dat zelfs de onderzoekers van OpenAI. De gebruiker had niet gevraagd om een sonnet, maar om wat regels code voor een knop op een webpagina.

De verklaring zit in hoe het artificialintelligenceprogramma (AI) onder de motorkap werkt. Het is goed in het herkennen van patronen in teksten, zoals zinsconstructies en vaak gebruikte woorden. Dit krijgt het programma aangeleerd aan de hand van ‘trainingsdata’, bergen aan voorbeeldteksten om van te leren. Het team van OpenAI trainde de software door gigantische verzamelingen tekst van het internet te plukken. De crux: een portie van die tekst was computercode, waardoor de robotschrijver ook daarover had geleerd. Er was alleen een toevalstreffer nodig om die onbedoelde kennis te ontdekken.

Maar GPT-3 was niet gemaakt om code te genereren en was er dan ook niet bijzonder goed in. Daarom maakte OpenAI een programma dat hier wél voor was bedoeld, Codex, beschikbaar voor een kleine groep geselecteerde gebruikers. Zij schrijven een opdracht in ‘natuurlijke taal’, zoals menselijke taal ook wel wordt genoemd en Codex zet het om naar een computertaal naar keuze.

Het slimste software-producerende stuk software tot nu toe|

Codex kan code beter uit natuurlijke taal genereren dan alle voorgangers. Dat het zo’n grote sprong kon maken komt doordat OpenAI de trainingsset slim samenstelde: met onlinecodebibliotheken waar programmeurs hun code openbaar op kunnen zetten, een soort Wikipedia voor programmeurs. OpenAI zag hierin een openbare database van miljoenen programma’s, waarmee ze Codex konden ontwikkelen tot het slimste software-producerende stuk software tot nu toe.

Vervolgens ontwikkelde OpenAI in samenwerking met code-bibliotheek GitHub een commerciële versie van Codex: Copilot. Na een experimentele gratis voorpublicatie verscheen het van de zomer officieel op de markt, voor 10 dollar per maand en gratis voor studenten.

Dat het programma goed werkt, blijkt uit de enthousiaste reacties van softwareontwikkelaars: meer dan 30 procent van alle code die op GitHub staat is geschreven met gebruik van Copilot. Die populariteit ziet Jim Stolze, oprichter van het AI-bedrijf Aigency, terug op de werkvloer, waar niemand meer raar opkijkt van wat virtuele assistentie.

Waarom gebruiken zoveel professionele programmeurs Copilot? Volgens Stolze komt dat doordat veel programmeurs klussen aan problemen door online te kijken of anderen niet toevallig al iets vergelijkbaars hebben opgelost. ‘Je zoekt iets wat al bestaat en past dat aan. Copilot automatiseert dat proces en doet dat goed, omdat het zulke problemen al tienduizenden keren langs heeft zien komen in de trainingsdata.’

Interessant voor mensen zonder ervaring met code|

Andere problemen vereisen creativiteit van de programmeur, wat de robotprogrammeur niet kan bieden: die kan immers alleen reproduceren wat hij heeft geleerd uit trainingsdata. Als een probleem daar niet in voorkwam, kan Copilot het antwoord niet verzinnen. Veel experts halen dit aan als argument dat Copilot niet zelf kan coderen, of dat GPT-3 niet echt kan schrijven: ‘Kunstmatige intelligentie zoals deze is in wezen dom, maar omdat er zoveel data in is gegaan, kan het alsnog nuttige resultaten geven’, zegt Tijs van der Storm, expert programmeertalen bij het Centrum Wiskunde & Informatica en Rijksuniversiteit Groningen.

Het brede publiek heeft vooralsnog weinig aan Copilot, zegt Van der Storm: het is ontworpen als een virtuele assistent die kan helpen en wordt als zodanig verkocht aan programmeurs. De technologie achter Copilot, daarentegen, is wel degelijk interessant voor mensen zonder ervaring met code. Dat is Codex, waarmee men ideeën kan omzetten in computertaal: zo maakte een gebruiker het beroemde spel Snake na met Codex, zonder zelf maar een regel computertaal te hebben geschreven. Anderen gebruikten het om persoonlijke websites, apps voor spraakherkenning of automatisch gegenereerde kunst te maken.

Zowel Stolze als Van der Storm kan zich goed voorstellen dat dit soort software binnenkort kan worden gebruikt door bijvoorbeeld kantoorpersoneel, om een deel van hun werk te automatiseren. ‘Hopelijk kunnen niet-programmeurs op een dag gewoon in duidelijke taal met een machine praten, die begrijpt en uitvoert wat we van ze vragen’, zegt Greg Brockman, technisch directeur van OpenAI. Misschien is het in de toekomst genoeg om tegen de computer te zeggen: ‘Maak een samenvatting van de notulen van de dagelijkse vergadering en mail die naar de collega’s in mijn team.’

Een korte geschiedenis van het programmeren

De geschiedenis van het programmeren begint bij het eerste algoritme, een serie instructies voor bijvoorbeeld een berekening. In 1842 schrijft Ada Lovelace, een dochter van dichter Lord Byron, een algoritme voor een mechanische rekenmachine, waardoor die onder meer automatisch priemgetallen kon genereren. Een lange tijd blijft programmeren iets voor onderzoekers.

Copilot in dit stuk

Ook de code van de website die u net hebt bekeken is deels gegenereerd door middel van Copilot. Sommige artikelen van de Volkskrant (waaronder dit stuk) krijgen een speciale behandeling van een team van ontwerpers en programmeurs die het voorzien van interactieve elementen. In dit geval werd het schrijven van de benodigde code deels geautomatiseerd via Copilot. “Je moet nog steeds veel cureren, maar vooral als je in gewone taal vraagt om wat je nodig hebt, werkt de software bizar goed”, aldus programmeur Joris Heijkant. “Het is wel duidelijk dat het programma soms hele stukken van andermans code overneemt, inclusief bijvoorbeeld Russische labels. Dat voelt wel een beetje als stelen, vooral omdat je weet dat jouw code dus ook in andermans projecten terecht kan komen.” Het is dus wel de vraag of het gebruik van Copilot een blijvertje is: “daar moeten we het even met de collega’s over gaan hebben.”