40 jaar programmeren

Daarom


In dit blog deel ik met zevenmijlslaarzen mijn beleving van 40 jaar programmeren.

Jaren 80
Na ruim 40 jaar code krassen om (te proberen) computers te laten doen wat jij wilt is het leuk om eens achterom te kijken naar de ontwikkeling van programmeertalen. De tijd van ponskaarten en vooral Cobol heb ik net gemist. In mijn opleiding werd als eerste de logische machinetaal Assembler (2GL) onderwezen, daarna is elke andere taal in ieder geval makkelijker! Ik ben gestart met software ontwikkelen op de IBM mini computers (34, 36 en 38) en de opvolger AS/400. De programmeertaal op de IBM mini’s was RPG (3GL) en dateert al uit 1959. Volgens Wikipedia was RPG in 2020 nog steeds de meest gebruikte taal in IBM omgevingen. RPG in combinatie met DB2 was vooral krachtig in het omgaan met data en werd hoofdzakelijk ingezet voor administratieve toepassingen. In dezelfde periode (begin jaren 80) kwamen de eerste PC’s op de markt. Deze werden vooral zakelijk gebruikt met standaard software zoals Wordperfect en Lotus 1-2-3. Voor het zelf programmeren was je vooral aangewezen op (Visual)Basic.

Jaren 90
Eind jaren 80 kwamen er ook generatoren op de markt waarmee je op een hoger abstractie niveau code kon definiëren op basis van bijvoorbeeld Jackson structuren (JSP). Vanuit deze definitie werd dan vervolgens de 3GL code gegenereerd. Voordelen waren: tijdwinst, minder programmeerfouten en vaste structuren. De generator waar ikzelf de nodige ervaring mee heb opgedaan was Synon waarmee je vanuit 1 definitie verschillende code kon genereren zoals RPG, Cobol of C. Deze groep van ‘programmeertalen’ werd de 4e generatie programmeertalen (4GL) genoemd.

PC (en Mac) gebruik nam pas echt een vlucht naar het particuliere domein met het uitdijende internet midden jaren 90. De browsers, vooral Netscape, deden hun intrede en daarmee ook de noodzaak om je (server) applicatie te kunnen aansluiten op een HTML cliënt. Deze ontwikkeling hielp Sun bij het promoten van Java op de server en het gebruik van applets en Javascript aan de cliënt kant. Al snel kwam de behoefte om verder te gaan dan leuke statische pagina’s te kunnen weergeven in de browser.

Transactie georiënteerde applicaties zagen het licht waarmee een heel nieuwe wereld aan mogelijkheden werd gecreëerd. Zelf ben ik nauw betrokken geweest bij het opzetten van de eerste bancaire internet spaarrekening. Om de, veelal, jaren geleden gebouwde applicaties te kunnen aansluiten op het web werden nieuwe, op services gebaseerde, architecturen ontwikkeld. Hierdoor konden de verschillende lagen op een transparante en betrouwbare wijze met elkaar samenwerken terwijl ze met verschillende talen waren ontwikkeld en op verschillende systemen draaiden. In de beginjaren van de zakelijke internet toepassingen heb ik zelf de nodige, positieve, ervaring opgedaan met de messaging oplossing van IBM, MQSeries later Websphere MQ, nu IBM MQ.

Het Nieuwe Millennium
Met de komst van de slimme mobieltjes brak weer een nieuw tijdperk aan. Zeker toen Apple de IPhone en Google Android op de markt brachten vanaf 2007 had je het gehele internet in je broekzak. Het mobieltje was de nieuwe cliënt tot het internet. Ik heb geen ervaring opgedaan met het (zelf) specifiek ontwikkelen voor mobiele apparaten maar met de komst van allerlei hulpmiddelen, de toepassing van ‘responsive’ design en de ontwikkelingen op gebied van HTML 5 voor de front-end is dat ook steeds minder noodzakelijk.

In de loop van dit millennium werden ook zogenaamde ‘low code’ omgevingen populair. Deze omgevingen gaan weer een stap verder dan de eerder beschreven 4GL omgevingen. Bij low-code maakt men veelal gebruik van een grafische gebruikersomgeving (GUI) en het instellen van configuraties, in plaats van het schrijven van traditionele computercode. Alhoewel 3GL code nog steeds kan worden ingebed voor specifieke doeleinden. Denk bij deze vorm van software ontwikkel omgevingen aan oplossingen als Salesforce, Appian, Outsystems en Mendix. Een nadeel van deze vorm van ontwikkelen is de lock-in bij de specifieke leverancier. Ikzelf heb de nodige ervaring opgedaan met Salesforce in een grote corporate omgeving met veel data en een paar duizend gebruikers en ben sindsdien fan van deze manier van configureren/ontwikkelen. En misschien nog wel meer van het feit dat je geen zorgen meer hebt over de onderliggende systemen en het up-to-date houden daarvan.

Meest Recent
De laatste jaren heb ik ervaring opgedaan met Python en het web micro-framework Flask. De Python basis bestaat al vanaf 1989 en is gebouwd door de Nederlander Guido van Rossum. De eerste release van Python dateert van 1991. Ik ben zelf wat later ingestapt in deze open source Python wereld. Ondanks deze beperkte ervaring was ik al snel een fan van Python. Het verbaast mij steeds weer hoe je met een beperkt aantal regels code indrukwekkende functionaliteit kan realiseren. Dit komt door de enorme hoeveelheid modules die ondertussen beschikbaar zijn en ‘achter de schuifdeuren’ jou gratis van de gewenste functionaliteit voorzien op elk denkbaar gebied. Niet voor niets is Python tegenwoordig de meest populaire programmeertaal. Dat met Python serieuze applicaties gebouwd kunnen worden bewijzen bedrijven als Instagram, Spotify, Dropbox en Pinterest.

De meest recente ervaring die ik heb opgedaan is niet zozeer met een nieuwe programmeertaal maar meer de manier waarop de code tot stand komt. Ik gebruik al jaren Visual Studio en heb daar vorig jaar de extensie CodeWhisperer (CW) van AWS op geïnstalleerd. CW is een op AI gebaseerd hulpje voor de programmeur die coderegels voorstelt. Voor veel gebruikte functionaliteit is programmeren dan niet moeilijker dan tekstverwerken. Je beschrijft je functionaliteit in het commentaar en CW komt met de code. Als je bedenkt dat dit pas in de kinderschoenen staat en ziet wat het nu al kan dan belooft dat nog veel moois. Hieronder een eenvoudig voorbeeld:

Beschrijf je functionaliteit in commentaar:
# Function to read csv file test.csv and print the header.
# Then read the details to calculate the number of rows in the file.
# Print the total number of rows.
Druk op alt/C en CW stelt onderstaande code voor die deze functionaliteit ondersteunt.
# Open the file in read mode
with open("test.csv", "r") as f:
# Read the first line of the file
header = f.readline()

# Print the header
print(header)

# Read the details to calculate the number of rows in the file
details = f.readlines()

# Print the total number of lines
print(len(details))
Als je deze, 100% CW, code uitvoert dan wordt het juiste antwoord geprint op het scherm.
main,sub1,sub2,sub3,condition1,value1,andor,condition2,value2,sequence,record
165

De komende 40 jaar
Niemand kan voorspellen hoe het software domein er over 40 jaar uitziet. Mogelijk is de Quantum computer dan al gemeengoed. Dat in combinatie met nog 40 jaar AI ontwikkeling geeft waarschijnlijk zulke exponentiële groei in mogelijkheden dat we ons er nu geen voorstelling van kunnen maken. Het zou zo maar kunnen dat een globale functionele beschrijving van een probleem voldoende is om de computer het zelf te laten uitwerken.

Computer Programmeur zou zo maar een beroep kunnen zijn dat je over 40 jaar alleen nog op markten en braderieën tegenkomt.