Bijna iedereen houdt van een programmeertaal als ze er voor het eerst mee werken. En waarom ook niet, als je met een hello world-voorbeeld ziet dat je in een taal met drie regels code kan bewerkstelligen. Dat laat zien dat talen zijn ontworpen om logisch te zijn. Maar dat betekent niet dat ze altijd overal logica tentoonspreiden. De logica-mechanismen van programmeertalen brengen vaak onlogica, verwarring en twijfel voort.

Het klinkt niet logisch om logica onlogisch te noemen, maar we zeggen het toch omdat we weten dat logica zijn grenzen heeft. Van denkers als Gödel en Turing hebben we geleerd dat er enge dingen gebeuren op de rand van logische extremen. En dat is vaak onze eigen schuld, omdat wij mensen logica verkeerd gebruiken of programmeerfouten maken. Maar als een taal ons mentaal in een bizarre yogahouding positioneert, is het moeilijk om dat die programmeertaal niet euvel te duiden.

En vaak kunnen we er niets aan doen. We moeten wel. De gebruikersbasis is misschien te groot om die taal die ons zo ergert te negeren. De baas droomt misschien zo weg bij een stack dat hij of zij de doodskreten uit het ontwikkelhok niet meer hoort. De wrede waarheid is misschien dat er geen betere opties zijn. We gebruiken wellicht al de beste tools die mensen kunnen bouwen.

Hier zijn zeven voorbeelden van talen die we soms wel eens haten, maar waar we niet zonder kunnen.

1. C

Er zijn zoveel issues met deze taal die je beter 'portable assembler' zou kunnen noemen dan volledige computertaal. Wie wordt er blij van om losse headerbestanden te schrijven? Heeft iemand die preprocessor ooit voor iets uitgebreids gebruikt zonder een beetje gek te worden?

In theorie zouden we superslimme dingen moeten kunnen doen met de pointers, maar durft iemand die te gebruiken voor iets anders dan het toewijzen van datastructuren? Is het eigenlijk wel een goed idee om te slim te zijn met pointers, want daar gaat code nou vaak stuk. Als je wel iets slims doet, moet je het vaak uitleggen in een lange comment en documentatie die de tijdsbesparing bijna teniet doen. Weet iemand alle regels voor het schrijven van C zonder alle potentiële beveiligingsrisico's in te bouwen als bufferoverloopgaten?

Maar we hebben weinig keus. Unix is geschreven in C, net als de meeste telefoons en de meeste hardware in de cloud. Niet iedereen die hiervoor ontwikkelt hoeft C te gebruiken, maar iemand moet op de hoogte blijven van alle code met sterretjes en accolades om te voorkomen dat het misgaat, Dan heb je nog apparaatdrivers en andere embedded programma's. Iemand moet deze last dragen om de Linux/Unix-codebase voort te drijven.

Een inspirerend lied over C.

2. JavaScript

De makers van JavaScript wilden iets moderns maken. Het is alleen jammer dat ze ons daarmee hebben veroordeeld tot het eeuwig tellen van accolades, blokhaken en haakjes, terwijl we er tegelijkertijd rekening mee moeten houden dat ze goed zijn ingesprongen. Tussen de anonieme functies, afsluitingen en JSON-datastructuren door krijgen we pijnlijke pinken tijdens het kloppen van de code.

Daarnaast heb je gekke effecten. Als x een string is met daarin 1, dan levert x+1 de string 11 op, maar x-1 het getal 0. Weet iemand de precieze verschillen tussen false, null, NaN en undefined? Die lijken op elkaar, maar waarom heeft JavaScript ze alle vier? En waarom gedragen ze zich niet consequent?

We kunnen klagen tot we een ons wegen, maar internet, het web en een miljoen miljard browsers veranderen niet. Bovendien heeft het Node.js-team ons zover gekregen om JavaScript op de server te gebruiken. Nee zeggen tegen de taal houden we misschien heel even vol, totdat we onze e-mail willen checken of iets willen kopen. Ja, JavaScript is een blijvertje.

Google's Daniel Kurka legt uit wat de frustraties zijn bij JavaScript en hoe je daar mee omgaat.

3. PHP

Dit is niet echt een computertaal, maar meer een tool om wat intelligentie toe te voegen aan statische HTML. Je kunt informatie opslaan in een database en die concateneren met statische tags. Er zijn misschien wel meer features, maar meestal gebruiken we PHP om strings uit een database samen te voegen.

Het heeft geen zin om te zeuren over speelgoedachtige code of kinderlijke synatxis, want het web bestaat voor een groot deel uit PHP. Mede dankzij WordPress, Joomla en Drupal wordt de meeste webcontent afgeleverd via PHP. Ook dat siteje Facebook is geschreven in PHP en dit is een van de populairste plekken waar websurfers tegenwoordig rondhangen.

We mogen in onze handjes knijpen dat Facebook de HipHop Virtual Machine heeft gebouwd, wat ertoe heeft geleid dat Zend PHP 7.0 maakte. Deze nieuwe PHP-engines zijn twee keer zo snel. Dat is een onweerstaanbare snelheidsverhoging die de wereld miljoenen aan elektriciteit bespaart en ervoor zorgt dat we nog lange tijd in PHP zullen schrijven.

Harvards informaticaprofessor David Malan leert een generatie computerwetenschappers over PHP en webdesign.

4. COBOL

COBOL begon in 1959, lang voordat de meesten van ons zijn geboren. Het zou in onbruik geraakt moeten zijn vanwege de complexe synatxis met honderden gereserveerde woorden. Liefhebbers van COBOL blijven echter nieuwe versies genereren, vaak met concepten uit moderne talen die worden toegevoegd aan een basis van bijna zestig jaar oud.

Wist je dat er iets bestaat dat COBOL 2014 heet? Dat bevat dynamische tabellen, een idee dat ontwikkelaars al sinds de versie uit 2002 in de taal probeerden de krijgen. Dat is niks nieuws. Dacht je dat COBOL was achtergebleven in de jaren 70? Nee hoor.

We hebben misschien betere tools waarmee we databases kunnen manipuleren, maar je kunt net zo goed een nieuwer systeem aanschaffen en de COBOL-code blijven draaien. Op het moment van schrijven zie ik 543 vacatures op banensite Dice.com voor mensen met COBOL-kennis. De early adopters van mainframes destijds gebruiken nog steeds COBOL. Het is een verschrikking voor informaticawetenschappers, maar zolang er gebruikers zijn, zullen er bazen zijn die liever gewoon een nieuw mainframe aanschaffen dan dat ze overstappen.

Programmeerlegende Grace Hopper is een van de pioniers van COBOL. Hier is ze te gast bij talkshowpresentator David Letterman.

5. XSLT

Iedereen begint altijd met een liefde voor XSLT, een functionele taal om XML te transformeren. Het is een slimme oplossing die goed werkt als je stukjes van grote XML-documenten wilt gebruiken. Maar als de baas iets complexers wil dan een simpele zoek en vervang, komen ontwikkelaars in een moeras terecht.

De taal is expliciet functioneel, maar als we de documentatie lezen zien we dat het woord variabele wordt gebruikt zoals een wiskundeleraar het zou gebruiken en niet zoals een programmeur dat doet. XSLT-expert Bob DuCharme schreef in 2001: "XSLT-variabelen hebben eigenlijk meer gemeen met een constante in veel andere programmeertalen en worden voor een soortgelijk doel gebruikt." Als je wil dat een XSLT-variabele zich gedraagt als een variabele in een andere taal - kortom, eentje die daadwerkelijk kan veranderen - moet je daar iets heel slims voor verzinnen.

XML verliest terrein ten opzichte van efficiëntere dataformaten als JSON, maar het is nog steeds een solide basis voor veel verwerkers van big data. Je hebt al die XSLT niet nodig. Je kunt altijd basale code schrijven die de tekst zelf verwerkt. Maar het kan wel eens meer tijd kosten om al die code te schrijven die XML verwerkt, dan het kost om de XSLT-structuur te grokken.

David Malan nog een keer, deze keer over XML-talen XSLT en XPath.

6. Java

De virtuele machine en library's komen uit de jaren 90, maar de syntax komt uit de jaren 70, de tijd van C. De automatische geheugensanering lijkt een stap vooruit, totdat je code even uitrust terwijl dat proces de controle grijpt. Android-ontwikkelaars wisselen tips uit over hoe je ervoor zorgt dat geheugenobjecten van tevoren worden vrijgemaakt, zodat geheugensanering niet op een ongepast tijdstip wordt afgetrapt, bijvoorbeeld als een gebruiker het alarmnummer probeert te bellen.

Java-programmeurs klagen al jaren over verschillende issues, waarvan er enkele zijn aangepakt of tenminste op de radar staan bij eigenaar Oracle. Maar die oplossingen leveren nieuwe problemen: sommige nieuwere code en library's werken niet met de oude VM's. Ik heb een dag geworsteld met een java.lang.UnsupportedClassVersionError maar kon geen permanente oplossing vinden. Het is net of elke versie na Java 1.4 een andere taal is.

Maar al die issues doen niet ter zake, want Java is de basis van het web en mobiele telefoons. Het is de eerste taal die geleerd wordt op middelbare scholen die programmeerlessen geven. Er zijn meer library's met diepe functionaliteiten in Java dan in bijna elke andere taal. Waarom zou je iets anders gebruiken?

Als de president op Undo Java drukt, ontvouwt zich een ramp van bijbelse proporties.

7. Python

Dit is een moderne taal waar de jongere generatie mee wegloopt. Weinig interpunctie en de code oogt heel schoon. Wat is het probleem? Nou, het gat tussen 2.7 en 3.0 bijvoorbeeld. Python moest deze stap wel maken om de taal verder te brengen, maar die stap is zo fors dat je moet bijhouden welke syntaxis je gebruikt. We zullen voor lange tijd blijven controleren welke versie van Python is geïnstalleerd. En wat dacht je van het tellen van spaties om te zien of er juist is ingesprongen? Het tellen van accolades is al vervelend genoeg, maar als je witruimtes moet gaan tellen...

Het deert allemaal niet, want de niet harde bètawetenschappers zijn als een blok gevallen voor Python met dezelfde warme emoties die hen ongeschikt maakten voor die vakken. Biologen en economen lijken te denken dat er niets anders is dan Python. Sommigen uit die laatste categorie willen zelfs Python gebruiken in prospectussen, zodat investeringsbanken ons kunnen overrompelen met Python in plaats van doorwrochte doch onbegrijpelijke juridische taal. Het goede nieuws is dat het voor ons makkelijker is om Python te lezen dan de zogenaamde normale taal die juristen uitslaan. Dat is een verbetering, zelfs mét het tellen van spaties.

Python werd bedacht door de Nederlander Guido van Rossem en de taal en dienst standaardontwikkelomgeving IDLE zijn beide verwijzingen naar Monty Python. Mooi, een excuus om deze van stal te halen: "He's already got one".