Waarom is coderen zo moeilijk? | Deel 1

Dit is een post over een technisch onderwerp: coderen. Maar voor alle duidelijkheid: ik heb geen technische achtergrond.

Ik ben de trotse zoon van een kunstenaar die me heeft geleerd hoe ik mijn emoties als kompas kan gebruiken om door het leven te navigeren, in plaats van logica. Klei, grafiet, inkt, verf, doek, papier en lijm stromen door mijn aderen.

Ik worstelde op school om vele redenen-onder hen waren twee leerstoornissen: cerebrale zenuwbeschadiging door complicaties bij de geboorte en dyslexie en dat zou ongediagnosticeerd blijven tot mijn late twintiger jaren. Mijn beste testscores waren zo slecht dat ik bijna niet op de universiteit kwam.

Ik studeerde politieke wetenschappen op school en mijn eerste mislukte pogingen voor een carrière waren in Film en Grafisch Ontwerp.

Ik heb mezelf geleerd hoe te coderen-het is een van de moeilijkste dingen die ik ooit heb gedaan. Ik heb ook ongeveer vijf jaar lesgegeven in code op een bootcamp hier in D.C. en af en toe vrienden begeleid.

Hoewel het moeilijk is, is het niet onmogelijk. Wanneer je autodidact bent, leer je stukjes en beetjes. Soms is iets meteen duidelijk, terwijl andere pas over jaren zullen klikken. Het pad van de uitleg is platgetreden, maar ik heb gemerkt dat je levenservaringen, aanleg en opleiding betekenen dat de helft van je strijd bestaat uit het vinden van de juiste leermiddelen.

Twee dingen voordat we beginnen:

  1. Als ik het kan, kun jij het ook.
  2. Je bent niet alleen.

Nieuwe woordenschat, nieuwe concepten, nieuwe… alles

Een van de lastige hindernissen bij het leren coderen is dat de termen die worden gebruikt om iets te beschrijven in “code speak” vaak iets heel anders kunnen betekenen in gewoon Engels. Mijn voorbeeld is het woord “Class”.

In tegenstelling tot de academische of sociologische connotaties die we gewend zijn, is een Class in programmeertaal anders, afhankelijk van welke programmeertaal je gebruikt. Nog verwarrender in deze verschillende programmeertalen is dat een Class conceptueel genoeg verwant is om parallellen te trekken over waarom de oorspronkelijke auteurs ervoor kozen om het een Class te noemen, maar het feitelijke gebruik is verschillend genoeg om echt iets heel anders te zijn. (Specifiek CSS classes versus Object Oriented Classes)

Het spreken van code is bijna verwant aan jargon, wat, zoals elke ouder weet, frustrerend is. Het kan in het begin moeilijk zijn om aan te geven wat een normaal Engels woord is en wat een “code” term.

Meer nog, je hoort ze vaak in hoog tempo achter elkaar, dus een volledige code-speak zin zal grammaticaal correct zijn en je zult elk van de woorden afzonderlijk kennen, maar niet wanneer ze op deze manier gerangschikt zijn.

“Nadat ik zowel de browser cache op local had doorgespoeld en John had gevraagd de server caches op staging te wissen, in de veronderstelling dat het een of ander hardnekkig geheugen of state probleem moest zijn, bleek het een naambotsing te zijn waarbij de eerder in de root gedefinieerde invocaties werden overschreven. Ik zal een ticket maken om source maps toe te voegen zodat we instantiaties makkelijker kunnen opsporen in plaats van de repo te doorzoeken.”

Niet alleen bij nul beginnen, maar ook definiëren wat nul is

Overigens zijn er concepten die je nog nooit bent tegengekomen, laat staan dat je ermee hebt moeten vechten.

Een voorbeeld dat ik graag met mijn studenten gebruik is:
Stel dat je je computer wilt programmeren om een kop koffie voor je te maken. Simpel toch?

Jij: Hé computer: maak eens een kopje koffie voor me.

Computer: PIEP BOOP: ZEKER PAT. WAT IS KOFFIE EN WAT IS MAKEN?

Bedenk eens op welke manieren je koffie kunt zetten… stel je dan eens voor hoe het proces verloopt om de koffieboon van de boom waar hij aan groeit, in een vorm te krijgen die je in dit proces kunt gebruiken… jakkes.

We beginnen vaak vanaf nul, en zelfs kleine, eenvoudige dingen zijn voor ons eigenlijk vaak verbluffend ingewikkeld om met code te bereiken.

Je moet niet alleen dingen programmeren, je moet in de eerste plaats definiëren wat ze zijn. Dan moet je je code versterken om alle mogelijke manieren waarop het fout kan gaan te verwerken. Eenvoudige taken worden verbluffende kathedralen die de goden van het expliciete eren.

“Just Google it”

Misschien wel het advies dat me het meest irriteert van mijn collega’s aan nieuwe ontwikkelaars is om “Google it”.

Iedereen die tot zijn borst in de modder heeft gestaan weet hoe onbehulpzaam dit is.

A. Je weet niet hoe je moet vaststellen wat er mis is, dus je weet niet eens waar je moet beginnen. (Als je dat wist, zou je het niet vragen).
B. Zelfs als je dat wel wist, weet je niet welke termen met het probleem geassocieerd worden.
C. En zelfs als je dat wel wist, zijn de resultaten vaak zo verbijsterend dat je het niet zou weten als het je recht in je gezicht zou staren. (Of zoals mijn opa zei: je zou nog geen water uit een laars kunnen gieten als er instructies op de bodem stonden.)

Coding is like a Foreign Language

Er zijn opvallende parallellen tussen leren coderen en het leren van een vreemde taal. Ik heb gemerkt dat studenten van talen, Engels of anderszins, de neiging hebben om syntaxen sneller op te pikken.

Ja, er zijn patronen en logica in de systemen.

Ja, sommige dingen zijn eigenzinnig en kunnen niet beknopt worden overgebracht in hun Engelse equivalent.

Ja, er zijn uitzonderingen op de bovenstaande 2 punten die in tegenspraak zijn met of geen zin hebben, maar het is zoals het is, dus je moet het onthouden.

Half dominee / half wetenschapper

De meest gekmakende tegenstrijdigheid die een programmeur moet vervullen is misschien wel dat je zowel moet weten hoe het allemaal werkt, als een gezonde meerderheid aan geloof moet hechten.

Om te programmeren, moet je logica, rede en gevolgtrekking gebruiken. Debuggen is een deductief proces. Goede code is goed gestructureerd, opzettelijk logisch en goed georganiseerd.

Aan de andere kant gebruiken we gesteente dat we tot denken hebben aangezet (computers). We vertrouwen op frameworks, bibliotheken, en snippets geschreven door andere mensen die we ofwel niet begrijpen vanwege de tijd of puur op geloof nemen. Er gebeurt zoveel in elke regel code dat we de functie nooit zouden kunnen afmaken als we moesten stoppen en nadenken over wat het allemaal doet.

Om een programmeur te zijn, moet je zowel een op geloof gebaseerde priester/priesteres als een steenkoude Spock-logicus zijn.

Beeld via Paramount Pictures.

Conclusie

Zoals u ziet, hebben we veel werk voor de boeg. Maar net zoals we niet op deze wereld kwamen terwijl we wisten hoe we moesten spreken, of schrijven, of welke van de taken dan ook die we nu routine vinden, maar waar we ooit moeite mee hadden: we kunnen het.

De diepe waarheid achter coderen is dat het het product is, het niveau beste inspanningen – de goede bedoelingen – de eerlijke gift van een aantal zeer slimme mensen om het leven gemakkelijker te maken. Een slim iemand, ergens zei: “Dit is klote. Er moet een betere manier zijn dan dit.”

En code nam zijn eerste adem.

In het volgende deel geef ik je een aantal strategieën om dit proces glad te strijken en je op weg te helpen naar je doelen. Code is hier om te blijven, het is hier om te helpen, en als er niets anders is, zou je gewoon een beetje plezier kunnen hebben.

Leave a Reply

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.