Advocaat van de duiVBel

Wat maakt een programmeertaal tot een Goede Programmeertaal?

Als je bij een software-ontwikkelhuis zoals Sogyo werkt, word je – als je daar nog weinig kaas van had gegeten – eerst eens flink warmgestookt in Java en/of C#. Twee Goede Programmeertalen, met een belangrijke overeenkomst: ze draaien allebei op een virtuele machine (VM). Code in deze talen wordt niet direct gecompileerd naar enen en nullen maar naar een tussentaal, Java Bytecode dan wel MSIL (“Microsoft intermediate language”) die door de VM – de JVM resp. het .Net-platform – wordt uitgevoerd.

Het voordeel van deze constructie is dat er meerdere talen naar die tussentaal gecompileerd kunnen worden. Een programma dat op deze VM draait, kan dan de bibliotheken gebruiken van andere programma’s, ook als die in een andere taal geschreven zijn. Ook de standaardbibliotheek kan zo gedeeld worden tussen de verschillende talen.

Enige tijd geleden kreeg ik van mijn opdrachtgever de vraag of ik even wat kon sleutelen aan een van hun programma’s. Nooit de beroerdste zei ik dat ik dat wel wilde doen. Maar wat bleek: dit programma was niet geschreven in C#, maar in ‘die andere’ veelgebruikte .Net-taal: Visual Basic. En het bleek zelfs dat sommige van mijn collega’s nauwelijks iets anders programmeerden dan VB.Net.

Shock! Horror! Ik zit toch bij een serieuze ICT-afdeling?! Want laten we wel wezen: overal waar je komt wordt er toch wel een beetje op VB neergekeken. Het is een taaltje voor beginners, hoor je dan, en inderdaad is BASIC destijds precies met die bedoeling opgezet. En ook toen ik bij Sogyo eens vroeg waarom we eigenlijk zo weinig in VB programmeren was het antwoord ook iets in de trant van ‘Ja, dat doe je nou eenmaal eigenlijk niet.’ En terecht, dacht ik toen.

Maar toen ik eens verder nadacht had ik ineens toch wel moeite om te bedenken waarom dat zo zou zijn. Misschien dat lezers mij kunnen herinneren, maar ik had eigenlijk veel minder moeite met argumenten bedenken waarom VB.Net juist net zo geschikt (of in elk geval niet minder geschikt) is als andere talen:

  • VB.Net is object-georiënteerd. Object-oriëntatie is tegenwoordig een minimumvereiste om als ‘echte’ programmeertaal aangemerkt te worden. Maar het oorspronkelijke BASIC mag dat dan wel niet geweest zijn – inmiddels zijn we toch al een heel stuk verder. Klassen, overerving, encapsulatie, interfaces, het zit er allemaal in.
  • VB.Net compileert ook naar het .Net-platform, dus de onderliggende motor is dezelfde als die van pakweg C#
  • Ook VB.Net kent annotaties, gestructureerd commentaar (<summary>…</summary>, <returns>…</returns>) bij methoden e.d., events, delegates, enz. enz. enz.
  • Als je Microsoft-examen doet, mag je zelfs kiezen of je C# of VB.Net-code wil zien. De bijbehorende studiekits zijn tweetalig. MSDN heeft, als er voorbeeldcode in meerdere talen beschikbaar is, VB.Net prominent bovenaan staan, en op de rest van het internet vind je ook bijzonder veel VB.Net-(voorbeeld)code.
  • Je hoort soms het argument dat je in VB makkelijk spaghetticode kan schrijven, maar uit ervaring weet ik inmiddels dat je daar VB helemaal niet voor nodig hebt. Het kan net zo goed in, bijvoorbeeld, C#.

Nou zijn er natuurlijk wat kleine verschillen tussen wat C# kan en wat VB kan. Inline delegates bestaan bijvoorbeeld niet in VB, dat is soms lastig. Maar om een taal daarop af te rekenen? Dan zou Java al lang en breed bij het grof vuil moeten staan, terwijl dat toch als een Goede Programmeertaal wordt gezien.

Verder is VB vaak net even wat breedsprakiger. Maar is dat dan een argument om een taal af te keuren? Dan zouden we ook eens naar een taal als C++ moeten kijken, waar je veel meer dingen met het handje moet regelen, zoals geheugenmanagement. Dat maakt dat je ook meer, en veel minder business-relevante, code moet schrijven. Toch vindt men VB.Net niet superieur aan C++.

Nou is deze blogpost niet bedoeld om iedereen maar aan VB.Net te krijgen. Ikzelf schrijf toch ook nog altijd veel liever code in C#. Maar… waarom is dat nou eigenlijk? Wat maakt een programmeertaal dan wèl tot een Goede Programmeertaal? Dat vraag ik me weleens af.

Discussie!