Als we kijken naar de recente Tiobe-indexen - die niet de totale grootte meten, maar de toenemende en afnemende interesse van programmeertalen - zien we dat vooral Google Go in een opwaartse beweging zit en Dart en Swift in iets mindere mate. Maar programmeertaal C zit al een tijdje in een neerwaartse spiraal.

C de moeite?

High-level talen zijn in dit tijdperk met grote vraag naar web- en mobiele applicaties meer in de mode. Die zijn makkelijker te leren en je maakt minder snel fouten - in vergelijking met C tenminste. Je zou daarom kunnen aannemen dat het niet zo nuttig meer is om een low-level taal als C te leren.

Is C nog de moeite waard? Dat is een vraag zonder simpel ja- of nee-antwoord, omdat er duidelijke pluspunten en minpunten zijn. Dus laten we daar even dieper naar kijken om te zien wat de meerwaarde is van C - en voor wie.

Vraag neemt af

C is een fundamentele taal in de geschiedenis van de IT en wordt nog steeds gebruikt. Maar Gartner-analist Mark Driver denkt dat dit wel eens kan veranderen. "C en C++ zijn de moedertalen voor systeemprogrammeren en dat zal wel jaren zo blijven. Maar op den duur zullen andere talen als Google's Go of D deze talen vervangen."

"We zien bijna geen vraag naar C of C++ bij onze IT-klanten", zegt Driver. "We zien wel vraag naar Java en andere high-level talen. Met C heb je niet de mogelijkheden om moderne best practices voor het ontwerpen van architecturen te gebruiken. Talen als C# en Java zijn juist ontworpen om dit soort problemen aan te pakken en groeien daarom nog steeds."

Ode aan de in 2011 overleden grondlegger van C, Dennis Ritchie, met het onder veel programmeurs welbekende liedje 'Write in C'. Hierna: Maar het zou zomaar kunnen dat de vraag naar kennis van lowleveltalen in de zeer nabije toekomst weer flink groeit, namelijk samen met de groei van internetverbonden hardware.

Maar er is een gebied waar wellicht wel vraag ontstaat naar kundige C-programmeurs en dat zijn internetverbonden apparaten (IoT). Zoals we al eens schreven over de terugkeer van Assembly, is de reden dat er voor zuinige sensorflow behoefte is aan talen met een piepkleine codebase en runtimes. Moderne methodes die code veiliger maken, zoals geheugensanering, vertragen bovendien de verwerking op zulke niet-krachtige hardware die toch performance vereist.

Kilobyte-tijdperk terug

"Voor traditionele workloads is er geen noodzaak om bytes te tellen zoals we dat vroeger deden", zegt Driver die terugdenkt aan de tijd dat programma's beperkt waren door de geheugengroottes van enkele kilobytes. "Maar met IoT-toepassingen zien we die noodzaak terugkeren. Het kan dus dat we opnieuw een groei van de vraag naar C gaan zien."

In veel fora over dit onderwerp, zie je dat een populaire argumentatie is dat het leren van C te vergelijken valt met het leren van Latijn: de kans bestaat dat je het nooit nodig gaat hebben, maar het maakt het makkelijker om andere talen te leren en grammaticaal sneller te begrijpen. Azriel Fasten, een software-ontwikkelaar die lesgeeft in JavaScript, onderschrijft dat. "Je kunt het vergelijken van het halen van een BA-titel. Helpt een bacheloropleiding Geschiedenis je? Ja, dat helpt. Helpt een C-opleiding je? Ook ja."

Foutgevoelig

Maar betekent dit dat C een goed beginpunt is voor programmeurs? Fasten betwijfelt dat. Hij denkt dat studenten beter fundamentele vaardigheden kunnen leren als de aanpak om een probleem op te lossen of een algoritme te ontwikkelen dan om bugs op te sporen, wat waarschijnlijk nodig is wanneer je met C gaat werken. "C is erg foutgevoelig en dat levert bijvoorbeeld beveiligingsproblemen op. In andere talen wordt 80 procent van de fouten meteen ontdekt die je zou maken met C."

Hij wijst er verder op dat mensen die leren programmeren buiten een vierjarige complete opleiding om vaak op zoek zijn naar werk in ontwikkeling voor web of mobiel en in dat veld is C irrelevant. Omdat een webapplicatie een heleboel I/O uitvoert zal het veel moeten wachten op het netwerk en de voordelen van C haal je juist met high-reformance applicaties in combinatie met low-level code waarmee je de hardware direct aanspreekt. Je ziet C daarom veel terug in hardware-aansturende code als kernels en drivers.

Beter programmeerinzicht

We spraken een voormalig softwareontwerper van onder meer Cisco en HP die er niet aan twijfelt dat het leren van C hem een betere programmeur heeft gemaakt. Miguel Marales is momenteel bezig met een leertraject of te ontwikkelen voor toepassingen van zelfrijdende auto's met C en C++. "Indirect helpt het: begrijpen hoe een machine werkt, hoe het met data omgaat en hoe geheugentoewijzing precies gaat geeft je een voordeel als programmeur."

Op de laatste pagina: Laten we tot de kern van de zaak komen van wat voor de meesten belangrijk is: levert C-kennis je werk op?

"Je gaat verantwoordelijker om met het maken van variabelen, gebruikt het best mogelijke algoritme om een specifieke taak te bereiken en vermijdt onnodige statements", zegt ontwikkelaar Marales over de meerwaarde van C-kennis. "En ja, moderne talen hebben mooie optimalisatiefeatures, maar het punt is dat een dieper begrip ervoor zorgt dat je slimmer omgaat met code."

Als latere taal

Toen we onderzoek verrichten voor dit artikel, liepen we vaak op tegen de mening dat C de moeite waard is om te leren, maar alleen als een tweede of derde taal. Op die manier kun je relatief snel aan de slag met programmeren en ontwikkel je later een dieper begrip over wat je low-level uitvoert. Dat is zeker de mening van ontwikkelaar Raymond Phan van Zebra Technologies:

Sommige concepten in C kunnen behoorlijk intimiderend zijn, dus het is beter om eerst de basisbegrippen van een high-level taal te leren om daarna pas diep in low-level C-code te duiken als je high-performance wilt programmeren", zegt Phan. "Maar als dat niet je doel is, zou ik het bij high-level houden."

En om programmeren beter te begrijpen en sneller andere talen te leren? Heeft daar C nut? Phan heeft daar gemengde gevoelens over. "Je leert het geheugenbeheer niet grondig begrijpen als je C niet kent, dus ik denk dat het leren van C er wel voor zorgt dat je beter inzicht hebt van wat er onder de motorkap gebeurt bij een systeem. Maar als je verder doorgaat met C kan het ook averechts en verwarrend zijn."

Sneller een baan?

Een laatste praktische punt waar we in zijn geïnteresseerd: zorgt C op je CV ervoor dat je sneller aan een baan komt, zelfs als de vacature-eisen geen C vermelden? Kortom, maakt het je gewilder op de arbeidsmarkt. "Ik denk dat C een pluspunt is, maar voor een vacature word je vooral beoordeeld op voor de functie relevante vaardigheden. Dus het zal een bonus zijn, maar geen doorslaggevende factor", aldus Phan.

Ook Gartnet-analist Driver is die mening toegedaan. "Maar het laat je wel opvallen", als je CV tenminste wordt geëvalueerd door iemand met programmeerkennis en eerst moet je nog langs personeelszaken komen. "De vuurdoop van C maakt het onderscheid tussen de meeste ontwikkelaars en hardcore programmeurs die echt iets willen begrijpen."