Software-ontwikkeling is als carrièrepad op dit moment in zwang. We worden overspoeld met programmeertalen en een Amerikaans statistiekenbureau verwacht een groeiratio van 17 procent in de sector de komende tien jaar - tegenover een gemiddelde van 7 procent voor alle sectoren. Dus het is wellicht geen wonder dat studenten en niet-IT'ers een carrière als programmeur overwegen.

Maar omdat er zoveel specialisaties, takken en talen zijn, is het mogelijk overweldigend voor de meeste beginners om te kijken waar ze op moeten letten. We vroegen aan enkele vooraanstaande mensen uit de softwarewereld om advies, zodat jij je als toekomstige programmeur kunt oriënteren op de mogelijkheden.

We bevroegen onder meer de Nederlandse Python-grondlegger Guido van Rossum, JavaScript-uitvinder Brendan Eich, Clojure-oprichter Rick Hickey, Spring Framwork-bedenker Rod Johnson en Npm-oprichter Isaac Schlueter. Hier volgt wat ze te hadden melden over opleidingen, belangrijke talen en welke elementen programmeurs goed maken in hun werk.

1. Kijk verder dan code

Er is een debat over of je daadwerkelijk een master moet halen in informatica, maar over één ding zijn de ondervraagden het wel eens: een brede opleiding is belangrijk, waarbij genoeg tijd moet worden besteed aan het bestuderen van studiemateriaal dat niet op een console wordt weergegeven.

"De grootste uitdagingen in het leven draaien niet om techniek", zegt Eich, "dus het is belangrijk om kennis te verzamelen die niet met computers te maken heeft, zoals geschiedenis, literatuur en andere studies." Verder kijken dan je code lang is dus. "Programmeren is een erg nieuw metier in onze geschiedenis", vindt Hickey. "We moeten niet aannemen dat we begrijpen hoe we dit het beste kunnen doen."

2. Leer problemen begrijpen

Daarvoor in de plaats vindt Hickey het belangrijk dat mensen andere soorten onderwijs genieten om de problemen beter te begrijpen die je kunt oplossen met software. "De beste programmeurs zijn mensen die problemen uit hun deelgebieden begrijpen, erover kunnen communiceren en ze kunnen oplossen", zegt hij. "Software is slechts een tool om dat te doen."

Rod Johnson van Spring is het ermee eens dat mensen die software willen bouwen uit het wiskundelokaal of computerlaboratorium moeten komen om te zorgen voor een bredere ontwikkeling, want uiteindelijk "draait programmeren om mensen in plaats van wiskunde".

3. Opleiding of niet?

Over een formele informaticaopleiding is hij verdeeld. "Het meeste gebruik je dingen die je tijdens het werken leert", zegt hij. "Er is waarde te vinden in een opleiding computerwetenschap, maar ik heb een heleboel geweldige programmeurs gezien die een heel andere achtergrond hadden."

Guido van Rossum herkent hetzelfde fenomeen. "Je hebt mensen die Engels hebben gestudeerd die vervolgens een Django Girls-workshop volgen en zich vervolgens toeleggen op webontwikkeling", vertelt hij. "Je hebt ook mensen die traditioneel vier jaar lang een informaticaopleiding volgen en een master behalen."

Dat neemt allemaal niet weg dat een theoretisch kader heel nuttig kan zijn. Johnson haalt een voorbeeld aan van kennis die hij heeft verkregen door zijn opleiding. "Ik gebruikte gisteren nog wat compiler-theorie die ik tijdens mijn studie computerwetenschap heb opgepikt, waarmee ik een nette, robuuste oplossing kon maken voor een probleem waar ik tegenaan liep. Maar dat gebeurt niet zo vaak."

4. Verdiep je in wiskunde

Eich ziet meer waarde in het leren van wiskunde als wiskunde, dan als basis voor het gebruik bij informatica. "Programmeren draait niet alleen om wiskunde - in sommige gevallen zelfs nauwelijks", begint hij. "Maar als je goed bent in wiskunde, hou het dan in eerste instantie bij wiskunde als je nog jong bent en maak je niet druk om programmeren." Volgens van Rossum kun je je het beste richten op "het soort wiskunde dat logisch denken ontwikkelt".

.5. Ontwikkel schrijfvaardigheid

Volgens Npm's Schlueter is er overigens nóg een waarde in een algemenere studie dan wiskunde of informatica: "Er is geen ander moment in je leven waarin je simpelweg lol kunt hebben en zo lang kunt feesten zonder dat de maatschappij op je neerkijkt." Daarnaast denkt hij dat schrijfvaardigheid een belangrijke eigenschap is van een goed programmeur.

"Maak tijd om literatuur en filosofie te lezen, en schrijf vervolgens zoveel opdrachten, teksten en andere dingen die je kunt. Dit vak wordt bijna volledig uitgevoerd online en je communiceert daarbij grotendeels met tekst. Hoe effectiever je kunt schrijven, hoe duidelijker je communicatie en hoe beter af je bent."

6. Leer talen, meervoud

Als je eenmaal gaat zitten om aan de slag te gaan met hands-on programmeren, welke talen zijn dan belangrijk? Dat hangt voornamelijk af van je specifieke doelen en de meningen lopen daarom ook uiteen, maar over één ding zijn deze programmeerhelden het in ieder geval eens: leer meerdere talen.

Eich noemt OCaml, Haskell, Rust, C++, TypeScript, JS, Racket of Scheme als in SICP. "Niet iedereen hoeft al deze programmeertalen te leren, maar een paar op het juiste moment leren geeft je een brede armslag, vooral als je net begint te leren en een interesse hebt en vaardigheden begint te ontwikkelen."

7. Kies een talenpakket

Hickey onderschrijft ook een aanpak met meerdere talen, maar heeft een meer theoretische aanpak om een talenpakket samen te stellen. "Kies een taal die duidelijk maakt hoe een computer werkt (C) of eentje die de werking bevat (Haskell, Prolog). Daarbij een goede taal met statische typering (wederom is Haskell hier prima) en een taal met dynamische typering met een nadruk op het functionele paradigma. Ik ben misschien bevooroordeeld en kies daarvoor Clojure."

Johnson raadt aan om talen te kiezen die met elkaar contrasteren. "Talen beïnvloeden de manier waarop je tegen programmeren aankijkt en daarom is het belangrijk om er een paar te kiezen die met elkaar contrasteren", zegt hij. "Bijvoorbeeld een objectgeoriënteerde taal en een functionele taal, in plaats van simpelweg diverse talen als Java en C#."

8. Pak een beginpunt

Menig ontwikkelaar begint vandaag de dag met Java als breed instappunt. "Ik denk uiteraard dat Python een goede begintaal is", zegt Python-vader Van Rossum. "Dat roept onmiddelijk de vraag op welke versie je dan moet pakken en ik raadt Python 3 aan. Als je vanuit niks begint is dat zonder twijfel de beste taal. Het is makkelijk genoeg om in een latere stadium Python 2 te leren voor een specifiek project of baan."

Johnson stelt voor dat jonge ontwikkelaars kijken naar Swift. "Het is een mooie moderne taal met een hoop goede ideeën en ik denk dat we het van iOS ook op andere platforms zien verschijnen", aldus Johnson. "JavaScript is nuttig, maar geen goede eerste taal. Java is de moeite waard; het is geen buitengewoon ingewikkelde taal om te leren, blijft toenemen in populariteit en de JVM vind je overal."

9. Lees code

Hoe til je na dat begin en een paar projecten je vaardigheden naar een hoger niveau? Eich denkt at je het beste kunt leren van de meesters door goede code te bestuderen. "Lees code met hoge kwaliteit, zelfs op afdrukken zodat je notities kunt maken."

"Wat code van hoge kwaliteit betreft, is The C Programming Language van Brian Kernighan en Dennis Ritchie nog altijd een aanrader, maar daaruit blijkt waarschijnlijk mijn leeftijd. Ook The Unix Programming Environment is een goede. Recentere goede code vind je bijvoorbeeld in dit artikel over het oplossen van Sudoku-puzzels en eigenlijk alle artikelen op norvig.com zijn geschikt."

10. Programmeer zonder computer

"Het belangrijkste werk van programmeren gebeurt als je niet achter de computer zit", zegt Hickey. "Probeer van tevoren te zien wat je gaat doen, in plaats van code te kloppen tot je iets ziet wat lijkt te werken." Volgens Eich is het vooral belangrijk om opties te bedenken, voordat je daadwerkelijk plaatsneemt achter een toetsenbord. "Ik denk graag aan de woorden van Ken Thompson: 'When in doubt, use brute force'. Loop niet vast en blijf proberen."

11. Omarm open source

"Je kunt veel leren van goede open source-projecten en er zijn een heleboel mogelijkheden om bij te dragen", weet Johnson. Het helpt je ook met het ontwikkelen van een andere belangrijke vaardigheid: samenwerking. "Ik heb gemerkt dat dit een waardevolle brug is tussen het gat tussen opleiding en praktijk, of om over te stappen van een saaie baan naar opwindender werk."

12. Zoek iets boeiends

De belangrijkste maar wellicht moeilijkste vraag: wat is een opwindende toekomstige carrièrerichting? Eich denkt aan ruimtevaarttechnologie, 3D-printen, 3D-rendering, bio-informatica en web. Hickey zegt dat er opties genoeg zijn en je in vrijwel elke sector en domein aan de slag moet kunnen. "Zoek iets wat je interesseert."

Van Rossum adviseert dat je vooral niet moet inschikken als je werk zoekt. "Vermijd dat je werk accepteert waarvan je vermoed dat je geen plezier hebt. Er is zoveel werk voor programmeurs. Zoek iets waar je werkelijk lol aan beleeft, want je zult productiever zijn, je gelukkiger voelen en dat is beter voor iedereen."

13. Houd rekening met je toekomst

Wat je ook kiest, Schlueter stelt dat je wel moet blijven kijken naar wat er op de horizon staat. "Programmeren is eigenlijk best eenvoudig als je geduldig bent en blijft leren. Maar uiteindelijk leiden alle carrièrepaden naar een of andere leidinggevende functie of komen ze op een doodlopend spoor terecht", aldus Schlueter.

"Zelfs als je focust op technologie, zul je uiteindelijk leiding geven aan anderen, zodat je een groter bereik hebt en meer kunt bereiken." Daarom adviseert hij om boeken te lezen over leiderschap, communicatie en het bedrijfsleven gedurende je loopbaan. "Dat is allemaal complexer dan je zou denken en is erg belangrijk", zegt hij.