Wat voor werk doe jij?

Eens in de zoveel tijd krijg ik de vraag: “Wat voor werk doe je?”, mijn gebruikelijke antwoord is dan “Ik schrijf software” maar meestal is de reactie daarop niet meer dan een glazige blik in de ogen, of “Oh iets met computers..”. Af en toe hoor ik zelfs “Ik heb even op je website gekeken maar ik snapte er niks van”. Wat is dat eigenlijk software schrijven? En wat voor werk doet hij eigenlijk?

Normaal gesproken schakelt het gesprek daarna al snel over op een ander onderwerp, maar ik ben trots op het vak dat ik uitoefenen en beleef een hoop plezier aan het werk dat ik dagelijks kan en mag doen. Vandaar deze poging om wat licht te werpen op het duister vak van software ontwikkelaar.

Laat ik beginnen met het soort projecten waar ik aan werk. Over het algemeen zijn dat webapplicatie, dus websites waar je iets kunt “doen”, bijvoorbeeld je boekhouding, of je digitale leermiddelen raadplegen, of een reservering voor iets maken. Er is dus een duidelijk onderscheid tussen een website als deze en een webapplicatie. Naast webapplicatie heb ik ook ervaring met het bouwen van Apps maar die gebruiken veel van dezelfde technieken als een webapplicaties.

Het bouwen van dergelijke applicaties is een heel creatief proces, software is (bijna)oneindig in z’n mogelijkheden dus ontdekken wat je wel of juist niet wilt, behelst vaak veel communicatie, brainstorm sessies en onderzoek. Bijna altijd is het bouwen van zulke applicaties een groepsactiviteit, of zelfs een inspanning voor meerdere groepen/teams. Het samenwerken aan software heeft zijn eigen uitdagingen en beloningen. Kortom het werkelijk schrijven van software is maar een deel van de werkzaamheden van een moderne ontwikkelaar.

Software

Iedereen weet wat een computer is, bijna iedereen weet ook dat er zoiets bestaat als internet. Apps en andere digitale gadgets zijn overal om ons heen. Maar hoeveel van ons begrijpen nu echt hoe die zaken werken? Vergelijk het eens met een kraan, hoeveel van ons hebben werkelijk een idee wat er allemaal nodig is aan infrastructuur om het mogelijk te maken dat je aan de knop draait en het water gaat stromen.. of wat dat betreft weer via het riool weg kan lopen. Voor velen is het een wazig geheel.

Een computer of telefoon zet je aan, je start een programma, je typt een webadres in en er gebeurt iets. Heel bijzonder als je er over nadenkt, en nog vreemder als men je vertelt dat dit kan omdat het gebeurt vanwege het bewerken van enen en nullen.

Die mentale stap van, ik heb een ding dat ze een CPU noemen (het hart van elke computer) en die kan veel(echt heel veel) berekeningen doen per seconde, tot ik kan mijn muis bewegen en naar muziek luisteren op m’n computer is ook bijna niet te bevatten, bijna magisch.

Bevat ik dat dan wel als software ontwikkelaar? In alle eerlijkheid.. nee maar mijn mentale plaatje over zulke processen zijn wel iets completer dan bij de meeste mensen. Het is uiteindelijk mijn vak.

Computers werken d.m.v. instructies en die instructies moet eenduidig een expliciet zijn. Elke soort CPU heeft van zijn fabrikant een ingebakken set aan mogelijk instructies en software is in feite niks meer dan een recept, samengesteld uit die lijst van mogelijke instructies, om iets te bereiken. Maar daarmee heb ik wel een hele algemene beschrijving gegeven van software.

De kracht van de moderne computers ligt voornamelijk in de vele software lagen die door de jaren heen ontwikkelt zijn. Dat wil zeggen dat je als doorsnee software ontwikkelaar je niet druk hoeft te maken over het soort hardware dat er gebruikt word. Je kunt verder bouwen op de bouwstenen die reeds bestaan, dit heeft enorm veel voordelen, maar met deze abstracties ontstaan ook nieuwe mentale plaatjes en uitdagingen. Het internet is zo’n dergelijke abstractie, computers die aan elkaar verbonden zijn en die het mogelijk maken informatie uit te wisselen met een onvoorstelbare snelheid. Snelheden die zo hoog zijn dat je via internet met elkaar kan bellen met of zonder video.

Dus het beeld en geluid word opgevangen, gedigitaliseerd vaak nog bewerkt zodat het zo min mogelijk overbodige informatie bevat(compressie) opgeknipt in pakketjes, geadresseerd en verzonden. Aan de andere kant worden de pakketjes opgevangen aan elkaar geritst, weer bewerkt en vervolgens getoond en afgespeeld. En dat alles zonder een merkbare vertraging voor de gebruikers. Dankzij de rekenkracht van de hardware en de vindingrijkheid van de gebruikte software.