Development

Software-ontwikkeling
Syntax

Syntax

Wat is dat eigenlijk?

© MIT
14 juli 2021

Sinds ik onderzoek doe naar programmeren voor kinderen, krijg ik heel vaak de vraag van programmeurs over wat eigenlijk de beste programmeertaal is om te leren programmeren. Een veelvoorkomende variatie van deze vraag is de vraag of het beter is om een programmeertaal te gebruiken met veel of juist weinig syntax.

Omdat ik die vraag steeds weer heb beantwoord de afgelopen jaren, merk ik dat ik weer anders tegen de vraag ben gaan aankijken. De Japanse schrijver Murakami schrijft dat het leuke van ouder worden is dat je altijd dezelfde persoon blijft, maar jezelf ook nog kunt blijven verrassen. Ik vind dat een heel mooi sentiment en ik herken me er ook steeds meer in naarmate ik ouder word.

Bij deze vraag ben ik over de jaren heen vooral meer en meer over de vraag gaan nadenken, in plaats van over het antwoord. Laten we dus, voor we aan het antwoord op de vraag toekomen, eens kijken wat nu de vraag is.

Wat is een taal met weinig syntax eigenlijk? Even een kleine opfrisser voor diegenen voor wie het lang geleden is: syntax is hoe een taal eruitziet, semantiek is wat het betekent. Dat wij in het Nederlands stam + t schrijven is syntax, dat een boek een ding is met papier en verhalen erin is semantiek.

Met een taal met weinig syntax bedoelen programmeurs meestal talen zoals Lisp. In Lisp typ je ongeveer de abstracte syntax tree. Als je bijvoorbeeld de gebruiker zijn naam wilt vragen en wilt antwoorden met Hallo <naam>, doe je dat zo:

(write-line (print (concatenate (“Hello ” (read)))))

Dat vertaalt zicht naar deze syntaxboom:

 

Even ter vergelijking, in mijn taal Hedy kan dit zo:

name is ask What is your name
print Hello name

Hoe meer ik er over nadenk, hoe gekker ik het vind dat mensen Lisp “weinig syntax” vinden hebben, en vinden dat Hedy meer syntax heeft (en Python of Java natuurlijk nog meer). Het interessante is dat dit een kwestie is van perspectief. Het is zo dat Lisp weinig syntax heeft, als je ermee bedoelt dat je als maker van een parser van Lisp weinig moeite hoeft te doen om de syntaxboom te verkrijgen. Je hoeft maar de haakjes langs te lopen en je bent er. In Hedy moet je meer moeite doen. Je moet bijvoorbeeld bepalen dat 'name' een variabele is in de tweede regel code en 'Hello' een string.

Maar het 'parsegemak' is sterk het perspectief van de programmeertalenmaker. Er zijn veel meer gebruikers van talen dan makers, en als gebruiker zou je kunnen zeggen dat er in Lisp veel meer 'gekke karakters' zijn die je goed moet typen. Meer syntax dus, en niet minder. Het is grappig om je te realiseren dat heel veel programmeurs Lisp classificeren als “weinig syntax” zonder erbij stil te staan wat ze daar eigenlijk mee bedoelen.

Het maakt weer eens duidelijk dat makers van programmeertalen een fikse stempel drukken op de denkwijze van programmeurs, meer dan ze misschien beseffen.

Magazine AG Connect

Dit artikel is ook gepubliceerd in het magazine van AG Connect (juni-julinummer 2021). Wil je alle artikelen uit dit nummer lezen, klik dan hier voor de inhoudsopgave.

Reactie toevoegen
2
Reacties
Peter Manz 15 juli 2021 17:46

Syntax is ook van toepassing op (informatie) analyses die worden opgesteld in de fase voordat software met een programmeertaal wordt gemaakt. Begrijpen waar een analyse over gaat en wat de impact van zo'n verhaal is blijkt vaak bijzonder lastig. Door een eenvoudige syntax af te spreken wordt dat veel eenvoudiger. Het is zelfs mogelijk om de tekst van een analyse geautomatiseerd om te zetten naar het publiek dat de analyse moet lezen en er iets mee moet doen. Naast syntax is dan ook structuur belangrijk. Wat hoort bij elkaar? Waar heeft het mee te maken? Is het een hoofdzaak of is het een detail. Syntax en Structuur horen bij elkaar.

Peter de Mare 14 juli 2021 21:14

Dat de denkwijze van mensen (dus ook programmeurs) gestuurd wordt door de beschikbare notatiemethoden (lees programmeertalen) is al lang geleden (1979) geponeerd door Kenneth E, Iverson in zijn Turing Award lecture " Notation as a tool of thought".
Hij ontwikkelde een wiskundig georienteerde taal APL (a programming language) waarin operatoren universeel gedefinieerd waren en elke variabele een n-dimensionaal array (met dimensie 0 voorscalaire waardes) kon zijn