Back

Een jaar lang pair programming

PHP in het kort

Als developer heb ik de afgelopen jaren voornamelijk in PHP doorgebracht. Een veelgebruikte programmeertaal #10 in de Stack Overflow Developer Survey waar veel stigma’s omheen hangen. Een programmeertaal wordt namelijk verder ontwikkeld. Net als de software die op basis van de programmeertaal geschreven wordt. PHP 8.2 is de laatste versie, deze versie is vele malen volwassener dan de PHP zoals de meeste ontwikkelaars hem herinneren van jaren geleden, de oorsprong van de stigma’s.

Het is een programmeertaal die ik in normale termen zou classificeren als “relaxed” of “losjes”, je komt met best veel “weg”. PHP 8.2 heeft inmiddels veel opties om de taal tóch wat strakker te krijgen, zaken af te dwingen, in oudere versies was dit niet mogelijk. Soms heb je liever dat iets kapot gaat wanneer het niet 100% klopt dan dat het (foutieve) aannames doet en tóch door gaat. En het liefst voordat het naar een productieomgeving gaat (tijdens compilation bijvoorbeeld). Hier is vooral sprake van in bedrijfskritische software. Bij PHP kom je hier pas achter tijdens runtime, als het draait en wordt gebruikt (of automatisch getest). Daardoor kun je wel lekker snel ontwikkelen en dus business waarde toevoegen.

Open-source

Wanneer je kijkt naar de populariteit (Stack Overflow Developer Survey) valt PHP precies tussen de corporate talen zoals Java & C# en de experimentelere talen zoals Go & Rust in. Het is daarmee een taal die het érg goed doet op gebied van open-source. Er zijn complete open-source oplossingen te vinden die zijn geschreven in PHP (Laravel) zoals bijv; boekhoudpakketten, content management systemen & help desk systemen. Daarnaast zijn er in het eco-systeem ook veel open-source integraties met andere services te vinden, kleine pakketjes die je zo kunt inzetten binnen jouw eigen systeem. Of pakketjes voor veelvoorkomende uitdagingen binnen de software ontwikkeling.

Taalagnostisch

Het woord 'agnostisch' is afgeleid van het Griekse woord 'gnosis', dat 'kennis' betekent en het voorvoegsel 'a-', dat 'geen' betekent.

De dure term taalagnostisch (lees programmeertaal-agnostisch) staat voor onafhankelijke van taal.

Dan ga ik nu iets verklappen; ik ken niet alle functies van PHP uit mijn hoofd, welke parameters ze moeten ontvangen en in welke volgorde. Dit is niet vreemd, er zijn namelijk best wat inconsistenties in PHP. Daarnaast wil ik het ook niet uit mijn hoofd weten, verspilling van de opslagruimte. Talen veranderen, concepten blijven. Dus leer ik de concepten, de “design patterns” en pas ze toe indien mogelijk. Deze zijn namelijk taalagnostisch.

Generalist

En tóch is het belangrijk dat je de taal waarin je software schrijft in zekere mate kent. Om deze conceptuele zaken goed te kunnen implementeren. Voor mij telt de afgelopen tijd vooral PHP (Laravel) en Javascript (Vue 3). Twee talen (en frameworks) waarbij ik bij aanvang van het project, waar ik op dit moment mee bezig ben, niet alle ins en outs wist. Gelukkig heb ik sinds juni 2022 een collega: GitHub Co-Pilot. Gelijknamig aan de AI ondersteuning die naar Office 365 komt. Co-Pilot voorspelt de code die ik wil schrijven on-the-fly en dit werkt goed, heel goed. Dit bespaard mij mij veel grasduinen door de documentatie van deze frameworks. Als generalist ben ik dankzij Co-Pilot in staat om meer klanten te bedienen, in verschillende talen en in verschillende frameworks. En dat voor 10 dollar per maand, koopje, ik adviseer elke developer die dit leest om het te proberen.

Clean code

Buiten dat Co-Pilot mij helpt bij het schrijven van code in verschillende talen en frameworks zorgt de assistent er indirect óók voor dat mijn code “clean” is. Netjes, doeltreffend, duidelijk en daarmee vooral: begrijpbaar voor de volgende lezer. Korte functies, betekenisvolle namen voor variabelen en functie parameters. Eventueel comments. Waarom? Om ervoor te zorgen dat Co-Pilot mij goed helpen kan moet deze begrijpen waar ik mee bezig ben. Dit kan op dit moment enkel op basis van de code die reeds aanwezig is. En hoe “schoner” deze code is des te beter Co-Pilot in staat is om deze te interpreteren. Om efficiënter te kunnen werken moet ik dus rekening houden met mijn collega, Co-Pilot. Die mij op zijn beurt voorziet van suggesties waar ik zelf waarschijnlijk niet aan had gedacht. Suggesties die soms beter zijn dan hetgeen wat ik wilde gaan schrijven of suggesties die ik gebruiken kan om tot een nóg beter stuk logica te komen. Het resultaat; code die goed te interpreteren is (clean code), niet alleen voor Co-Pilot, maar ook voor mijn collega. Én oplossingen waar ik zelf misschien niet aan had gedacht, maar beter zijn dan hetgeen wat ik in mijn hoofd had.

Nadelen

Afleiding

De voorspellingen die Co-Pilot doet leiden af. Ik ben niet per se snel. Wel goed. En soms, terwijl ik mijn regel code schrijf, ben ik iets te traag en vult Co-Pilot aan wat ontbreekt. Dit komt in sommige gevallen niet overeen met wat ik wilde gaan doen en nog erger, soms klopt het niet. Maar door deze aanvulling, ga ik op zoek. Waarom deze aanvulling, is het beter dan hetgeen wat ik in mijn hoofd had? Google, StackOverflow, Reddit.. en nu, ben ik toch al uit mijn flow, facebook, WhatsApp, LinkedIn. 15 minuten verder. En de regel waar ik mee bezig was? Nog niet af.

Privacy

In aanloop naar het volgende punt; privacy. Wat gebeurt er met mijn codebase wanneer ik Co-Pilot gebruik? Waar gaat deze heen? Wordt deze codebase gebruikt om op te trainen? Van het laatste is volgens Github geen sprake.

GitHub Copilot is powered by Codex, a generative pretrained AI model created by OpenAI. It has been trained on natural language text and source code from publicly available sources, including code in public repositories on GitHub.

En verder:

  • The transmitted data is encrypted both in transit and at rest; Copilot-related data is encrypted in transit using TLS, and at rest using Microsoft Azure’s data encryption (FIPS Publication 140-2 standards).
  • Access is strictly controlled. The data can only be accessed by (1) named GitHub personnel working on the GitHub Copilot team or on the GitHub platform health team and (2) Microsoft personnel working on orwith the GitHub Copilot team.
  • Role-based access controls and multi-factor authentication are required for personnel accessing Prompt or Suggestion data.

Wat ik je wil meegeven, kijk uit met het gebruik van Co-Pilot in codebases waar vertrouwelijke informatie aanwezig is.

Prompt injections

Ik heb een IT-security achtergrond. De ontwikkelingen blijf ik op de voet volgen. En dus ook de ontwikkelingen gerelateerd aan AI of beter gezegd Large Language Models. Enkele maanden geleden presenteerde Kai Greshake een proof-of-concept waarbij de Bing Chat integratie werd “geïnjecteerd” met malafide prompts. Het resultaat; de browser begon tegen de gebruiker te praten alsof het een verkoper van Microsoft was (voor de duidelijk, vanuit een chat, binnen de browser Edge, van Microsoft). De AI achterhaalde de gevoelige gegevens en stuurde deze door naar de kwaadwillige. In dit specifieke geval onder andere creditcard gegevens voor het aankopen van een Microsoft Surface laptop. Dit alles binnen de vertrouwde Microsoft Edge omgeving. Het probleem in het kort; de AI interpreteert de pagina, deze pagina bevat teksten die de AI een nieuwe opdracht geven, het achterhalen van gegevens, de AI interpreteert deze tekst als daadwerkelijke opdrachten. Thats’t it. Vanaf dat moment is de AI in dienst van de pagina die je bezocht. De malafide teksten, heb jij nooit gezien, deze zijn verborgen in de pagina.

Vanuit een andere hoek; als ik ervoor kan zorgen dat Co-Pilot malafide code gaat aanvullen bij vakgenoten, op obscure wijze, onopgemerkt, hoe kwalijk is dit? Het enige wat je hiervoor hoeft te doen is zorgen dat jouw malafide data in de trainingsset zit, garbage in, garbage out. Het risico van een taalmodel, zonder input, zonder training, geen output. Github erkent dit probleem.

Wil je meer weten?

Vanuit mijn expertise als ontwikkelaar van (web)applicaties zet ik mijn tanden graag in jouw probleem. Ik zorg ervoor dat bedrijfsprocessen minder foutgevoelig worden en realiseer kostenbesparing dankzij automatisering. Mijn diensten omvatten onder meer het implementeren van bestaande oplossingen, ontwikkeling en onderhoud van (web)applicaties, en het realiseren van integraties tussen verschillende systemen. Bovendien bied ik oplossingen op maat, omdat ik begrijp dat elke organisatie uniek is en zijn eigen uitdagingen heeft.

📞 + 31 (0) 76 204 5555

✉️ billy@2b-it.nl