Codebeez

EuroPython 2023 Reisverslag

Wij zijn Codebeez. We zijn gespecialiseerd in alles wat met Python te maken heeft en helpen onze klanten met het bouwen van maatwerk, schaalbare, robuuste en onderhoudbare oplossingen.

Ik ben onlangs teruggekeerd van de EuroPython 2023-conferentie in Praag. Ik stapte net op tijd uit mijn vervangende vlucht (de oorspronkelijke vlucht werd geannuleerd) voor de eerste keynote. Vanaf dat moment was het 3 dagen onderdompeling in Python (al wisten een paar Rust-talks zich naar binnen te wurmen), het Python-ecosysteem en de vakgebieden waarin Python een hoofdrol speelt.

Ik ging uiteindelijk alleen, wat ruim gelegenheid bood om met mede-bezoekers in gesprek te raken. Naar mijn inschatting bestaan de bezoekers van EuroPython onevenredig uit consultants, freelancers en andere zelfstandige developers. Hun andere gemeenschappelijke eigenschap was natuurlijk dat ze allemaal erg enthousiast waren over Python en goed op de hoogte van de laatste ontwikkelingen, wat ze interessante gesprekspartners maakte.

In dit artikel behandel ik eerst alle keynote-talks, en daarna de parallelle talks die ik heb bijgewoond.

Keynotes

De eerste keynote legde uit hoe je meetups organiseert, wat handig was omdat ik dat ook van plan ben te gaan doen voor Codebeez. Tips die ik me specifiek herinner voor het organiseren van meetups zijn:

  • Je hoeft geen sprekers te hebben om een meetup te organiseren
  • Regelmaat in de planning is essentieel, zodat mensen niet hoeven te vragen of/wanneer de volgende plaatsvindt.
  • Delegeren door af te haken: vertrouw erop dat iemand anders de leegte opvult die je achterlaat door je afwezigheid.

De keynote van die middag ging over Large Language Models (LLM’s, momenteel populair door de ChatGPT-hype) versus NLP-modellen. De spreker zelf was een voorstander van NLP en core developer van SpaCy. Hier leerde ik dat NLP en LLM volledig van elkaar verschillen (en inderdaad, dat wist ik niet), en dat NLP-modellen cruciaal zullen blijven voor het coderen van gespecialiseerde kennis. Het meest opvallend is dat de spreker aanraadt om LLM’s als prototype te gebruiken, dat later kan worden vervangen door een specifiek getraind NLP-model.

De keynote op donderdagochtend was bijzonder interessant: die ging over de geschiedenis en toekomst van microprocessors. Mijn meest opvallende inzicht was dat de “nanometerprocessen”, zoals de 10nm die door Intel is aangekondigd en de 4nm die door TSMC is aangekondigd, grotendeels gewoon marketing zijn. Er zijn geen kenmerken van de transistor die werkelijk 4nm groot zijn. Sinds de toevoeging van FinFET’s staan deze termen juist voor de dichtheid van transistors per oppervlakte-eenheid. Maar de transistors zelf worden nu in drie dimensies gestapeld, wat deze dichtheid verhoogt. Dit stapelen leidt echter tot problemen met warmteafvoer, en daarom correleert de nanometermaat niet goed met de prestatiewinst die je anders zou verwachten. Deze spreker pleitte er ook voor dat alle software-engineers meer parallelle programma’s gaan schrijven, maar dit pleidooi blijft inmiddels al 15 jaar onbeantwoord.

De keynote-spreker op donderdagmiddag was helemaal geen programmeur, maar een auteur die een boek heeft geschreven over de developer-community. Wat ik me vooral herinner is dat hij een ongelooflijk goede spreker was, die de kracht van stem, toon en ritme vakkundig inzette om het publiek met zijn woorden te boeien.

Op vrijdagochtend kregen we de volgende vraag voorgelegd: is AI een product of een persoon? De zaal stemde overweldigend voor product. Voor mij lijkt dat het enige voor de hand liggende antwoord. Blijkbaar heb ik het mis, en verschillende doelgroepen stemmen heel anders op deze vraag. Volgens de spreker is het belangrijk of AI een product is of niet voor de regelgeving die momenteel wordt opgesteld, om verantwoord gebruik van AI te waarborgen en bescherming te bieden tegen desinformatie.

Parallelle Talks

Naar mijn eigen inschatting kunnen de talks die ik uiteindelijk heb bijgewoond grofweg in drie categorieën worden ingedeeld:

  • Algemeen Python: features van de taal en hoe je ze benut
  • Trucs en tools om de Python-performance te verbeteren
  • AI: vooruitgang in machine learning en ondersteunende frameworks

Ik ga per categorie enkele punten langs die ik persoonlijk interessant vond

Algemeen Python

Er waren een paar talks over de Python-taal, de features ervan en het gebruik van de standaardbibliotheken. Hieronder de punten die me zijn bijgebleven:

Er was een interessante discussie over subclassing versus compositie. Wat me prikkelde was de aanbeveling om niet voortijdig te dedupliceren (oftewel een base class maken met code die twee classes gemeen hebben in plaats van de members van de class gewoon twee keer te schrijven). Omdat ik dit soort deduplicatie bijna instinctief doe, was het goed om een stap terug te doen en opnieuw te overwegen of het echt altijd de moeite waard is. Want nu ik erover nadenk, is het vaak misschien overbodige moeite.

Ik leerde dat andere programmeertalen zoals Go helemaal geen subclassing gebruiken. Voor compositie gebruikt Go echter iets wat struct embedding heet, wat in essentie de members van een andere ‘class’ in je gedeclareerde class inlinet. Dit leek me een goede methode om een bekend probleem op te lossen.

Ik leerde ook dat functies een __signature__ dunder-methode hebben die kan worden gebruikt om de method help en autocompletion tijdens runtime bij te werken. Dit kan worden gecombineerd met Python descriptors om dynamisch functiedocumentatie te bieden op een manier die goed aansluit bij het dynamische karakter van Python. Dit is helaas niet bruikbaar voor static type hinting/checking. Als groot fan van static type checking ben ik altijd op zoek naar manieren om er meer van te hebben, dus ik was enigszins teleurgesteld dat deze trucs zo’n oplossing niet boden.

Python Performance

Python is niet populair geworden vanwege zijn geweldige performance, maar er zijn een heleboel manieren om C-niveau performance te benaderen zonder de flexibiliteit van Python te verliezen. Enkele die besproken werden, staan hieronder.

De maintainers van HPy werken hard aan de conversie van numpy naar hun vervangende Python C-api. Gebruikers van PyPy en GraalPy zullen profiteren van deze nieuwe API die kan worden gebruikt om C-extensies voor Python-libraries te schrijven. Een grote performanceboost komt voort uit het feit dat refcount garbage collection kan worden weggelaten ten gunste van een echte Garbage Collector, die veel sneller blijkt te zijn dankzij de verfijning van moderne GC’s. De migratie van numpy zou een grote prestatie zijn op weg naar massale adoptie van HPy. Helaas zullen libraries die numpy gebruiken, zoals pandas, hier niet van profiteren zolang hun eigen C-API niet ook gemigreerd is.

Cython3 is onlangs uitgebracht, 5 jaar nadat de eerste commit hiervoor werd gepusht. Cython3 is een manier om C-niveau performance te behalen zonder te ver af te wijken van de Python-syntax. De spreker, die ook de maintainer van Cython is, belooft performanceboosts van een factor 250 vergeleken met naïef geschreven Python. Dit vereist echter een aanzienlijke investering in het leren van alle features van Cython (vooral ufunc en numpy-interoperabiliteit). De performanceboost is ook veel minder schokkend wanneer je benchmarkt tegen piek-numpy-performance. Toch ben ik erg geneigd om het in de toekomst te gebruiken, ook al weet ik niet zeker of het zoveel sneller is dan code die numpy en numba JIT-compilatie gebruikt.

Draaien op ARM-processors kan zeer gunstig zijn voor de performance, maar alleen bij programma’s die gebruikmaken van multiprocessing. AArch64 kan nu Python 3.11 efficiënt draaien en belooft performancevoordelen, hoewel benchmarks met pyperformance en codespeed nog niet beschikbaar zijn om deze claim te bewijzen. Verder zal Windows-on-ARM officieel ook Python 3.11 en hoger ondersteunen, maar populaire packages zoals Tensorflow en PyTorch hebben nog geen native ondersteuning op dit platform.

Tot slot kun je Rust-modules schrijven en ze in Python importeren, waardoor ze on the fly worden gecompileerd. Dit kan zowel performance als geheugenveiligheid bieden voor kritieke delen van je Python-code. Interessant, maar het vereist het leren van Rust en is minder volwassen vergeleken met Cython of pybind. Memory leaks voelen voor mij ook minder waarschijnlijk wanneer je code grotendeels Python is en slechts een kleine reikwijdte aan performance-zware secties in een gecompileerde taal is geschreven.

Machine Learning en (Generatieve) AI

Het voelt overbodig om dit onderwerp in groot detail te bespreken. Blogs over generatieve AI zijn talrijk, en er zijn geen grote inzichten die ik kan bieden om aan die kennis toe te voegen. Dus ik houd mijn gedachten kort.

Veel AI-presentaties bleken uiteindelijk slechts exposities te zijn van de verschillende machine learning-modellen en hun mogelijkheden, in plaats van de technologie uit te leggen of Python-code te gebruiken om zulke modellen aan te sturen. Natuurlijk maken het gebruiksgemak van generatieve AI en hun direct voelbare, vaak betoverende resultaten zulke presentaties op zichzelf interessant. Maar één presentator merkte terecht op dat de mensen die deze modellen daadwerkelijk ontwikkelen een minuscule fractie zijn vergeleken met de mensen die ze trainen, op hun beurt een minuscule fractie van degenen die AI-modellen alleen maar gebruiken, binnen een gigantische zee van mensen die over AI praten.

Dit is jammer, want ik hoopte iets technischers te leren. Als slechts een software-developer loopt mijn kennis van data science merkbaar achter, en ik voorspel dat dit in de toekomst een nadeel zal zijn. Omgekeerd was ik echter tijdens een presentatie over de nieuwe mogelijkheden van PyTorch 2.0 volledig de weg kwijt. Het lijkt erop dat ik mijn toevlucht zal moeten nemen tot wat intensieve zelfstudie.

Tot slot vond er tijdens de talks op EuroPython een levendige discussie plaats over open source in het tijdperk van AI. Als over het algemeen voorstanders van open source lijken de presentatoren ervan overtuigd dat open source AI-modellen uiteindelijk de proprietaire modellen zullen overtreffen, zelfs die van industriereuzen als Meta en Microsoft. Persoonlijk geloof ik dat de toekomst fundamenteel onkenbaar is, vooral als het gaat om nieuwe technologieën. Maar ik hoop natuurlijk, zoals de meeste redelijke mensen zouden doen, dat generatieve AI een gezamenlijke inspanning wordt die van iedereen is.

Inzichten

Ik verliet EuroPython met hernieuwde motivatie om mijn eigen vaardigheden te verbeteren. Er zijn veel spannende manieren waarop Python kan worden gebruikt waarvan ik nog maar het oppervlak heb verkend. Ik hoop deze lessen mee te nemen en manieren te vinden om ze toe te passen aan de grenzen van mijn eigen projecten. Daarnaast blijft generatieve AI een gebied waarop ik achterloop: ik ben slechts vaag bekend met de gebruikte termen en technologieën, ondanks het feit dat het aantal potentiële toepassingen van dit opkomende vakgebied snel groeit.

Verder kreeg ik de kans om te praten met en te luisteren naar mensen die net zo enthousiast zijn over Python en de technologieën die het toegankelijk maakt. Het was interessant om hen tijdens de pauzes te ontmoeten en te spreken, om te ontdekken welke uitdagingen en kansen anderen in het vakgebied hebben ervaren. De drempel om naar mensen toe te stappen is hier erg laag, en er zijn sociale evenementen waar dit wordt aangemoedigd, waardoor het heel makkelijk is om veel mensen te ontmoeten.

Er worden veel andere conferenties over Python georganiseerd in veel landen in Europa en de rest van de wereld. Ik hoop er in de nabije toekomst nog een bij te wonen, deze keer wellicht als presentator.

Blog