Ik bedacht me dat het misschien niet voor iedereen duidelijk is wat nou de hele moeilijkheid is aan wat ik precies doe. Het verhaal dat ik tot nu heb verteld over mijn werk bij Riken is ongeveer dat ik computers gebruik om biologische vragen te beantwoorden, en dan met name vragen waar heel veel gegevens bij komen kijken. Dat is wel een correct verhaal, maar om nu te zeggen dat het volledig weergeeft wat ik doe… nee. Daarom zal ik hier proberen te beschrijven wat nu precies de uitdaging is.

Als je computerprogramma’s schrijft heb je je aan een aantal regels te houden. Allereerst zijn er de regels van de programmeertaal. Iedereen die begint met programmeren krijgt te horen dat zijn programma’s het per definitie nooit in één keer zullen doen, omdat je altijd wel per ongeluk een stom regeltje overtreedt, en vrijwel niemand gelooft dat ook als het hem wordt verteld. Je bent toch slim genoeg om aan het eind van elke opdracht een puntkommaatje te zetten?!
Maar er zijn twee manieren waarop een programma het niet kan doen, en het handige is dat het programma in beide gevallen te vergelijken is met een automotor. In het eerste geval start het programma niet. Dat is bijvoorbeeld het geval als je tóch zo’n rottige puntkomma vergeet. In het andere geval start het programma wel, maar doet het niet wat het moet doen. In mijn geval kan dat betekenen dat er honderden miljoenen regels onzin geproduceerd worden door mijn programma, zonder dat het programma aangeeft dat er iets mis is: het programma start (in computertaal: “compileert”) immers.

Dit soort uitdagingen zijn lastig, maar altijd van een oplosbare aard. Maar iets anders dat je als beginnend programmeur verteld wordt – en terecht – is dat je programma’s altijd een zo algemeen mogelijke oplossing voor het probleem dienen te zijn. Dus je leest niet honderd regels van een honderdregelig bestand in, maar alle regels – stel je voor dat iemand er een regel afhaalt of bijdoet. Vaak zijn dit soort oplossingen niet heel moeilijk, maar ze kosten meer tijd dan gewoon de juiste getallen in je programma zetten. Neem ter illustratie voor nu maar even aan dat elk getal in je programma vervangen moet worden door een algemene versie (computertaal: “variabele” of “parameter”), tenzij dat getal een 0 of een 1 is.

Dan gaan we nu de bovenstaande (heel algemene en in een paar weekjes of maandjes te leren) gegevens combineren met een biologische vraag. Eentje waarbij heel veel gegevens komen kijken. De bestanden die het programma leest (de invoer) komen uit allerlei hoeken van de biologische kennis: de plaats van een gen op het genoom (het genoom is alle genetische informatie in een cel), de plaatsen waar zo’n gen kan worden opgesplitst, de plaatsen op het genoom waar andere interessante dingen te vinden zijn, de namen van allerlei voor mijn experiment interessante dingen, de gegevens die uit “mijn” experiment zijn voortgekomen, enz. enz. De informatie in de bestanden kan op alle denkbare volgordes staan en de bestanden kunnen elkaar tegenspreken.
En uiteraard wil je alle vragen zo algemeen mogelijk stellen: niet voor één gen opzoeken wat er voor interessants in de buurt ligt en wat het in mijn experiment doet (voor één gen kan het nog wel met de hand), maar voor alle genen en alle plaatsen op het genoom (iets 30.000 keer doen wordt toch een beetje vervelend).

Is de hoeveelheid gegevens in één experiment al enorm, vermenigvuldigd met het aantal keren dat je een dergelijk programma maakt en laat lopen is de hoeveelheid verwerkte informatie ronduit duizelingwekkend. Heb je thuis wel eens een programma gedraaid dat een uur nodig had om te voltooien? Ik betwijfel het. Sommige programma’s die ik gebruik hebben dagen nodig voordat ze klaar zijn. Kun je nagaan hoe rottig het dan is als er aan het eind een programmeerfoutje in blijkt te hebben gezeten en het hele ding weer overnieuw mag…

En als nou aan alle bovenstaande “kleinigheden” is gedacht en alles doet het, kom je terug bij het belangrijkste: je biologische onderzoeksvraag. Is het antwoord ja (1% van de gevallen) dan ben je blij. Is het antwoord nee (90% van de gevallen) dan ben je niet zo blij. En is het antwoord onduidelijk (de overige 9%) dan is je gemoedstoestand ergens daar tussenin. In elk van deze gevallen is de volgende stap echter het verzinnen van nog een vraag – hetzij om meer bewijs te vergaren voor je waargenomen fenomeen, zodat het statistisch aannemelijk kan worden gemaakt, hetzij om een nieuw fenomeen te vinden. En inderdaad, dan begint het hele programmeercircus weer opnieuw… En als het je dan uiteindelijk lukt om genoeg moois te vinden én te bevestigen kun je er een artikel over publiceren – en dat is waar we nu op mikken voor mijn stage.

Frustrerend? Soms. Maar dat zijn alle vormen van onderzoek. Niemand zei dat het makkelijk zou zijn… Leuk? Jazeker… als je een beetje affiniteit met computers hebt tenminste. Op dit moment staat een clustercomputer die honderd keer zo krachtig is als de trots van de VU te rekenen aan een vraag die ik hem heb gesteld. Om precies te zijn: welke van deze 5 miljoen kleine stukjes DNA (27 letters lang) passen precies op een of meer van deze andere stukken mRNA (bij elkaar 300.000.000 letters lang)? En dat dan 8 keer, telkens met andere gegevens. Da’s toch best een coole gedachte. Nu alleen maar hopen dat ik er niet morgen achter kom dat er een klein foutje is opgetreden…

Filed under RIKEN. Date: February 11, 2009, 9:23 pm | 4 Comments »

4 Responses

  1. b Says:

    ik ga t allemaal nog ff rustig lezen…..:-|)

  2. Tineke Says:

    Tjonge Joost. Ik word er een beetje stil van. En reuze trots!

  3. Z Says:

    “Dan gaan we nu de bovenstaande (heel algemene en in een paar weekjes of maandjes te leren) gegevens combineren met een biologische vraag.”

    Dat klinkt wel heel simplistisch.

    Ik vraag me af hoeveel ik uiteindelijk zal gaan bloodgesteld worden aan programmeren.

  4. Wieneke Says:

    En dit is nu precies waarom ik maar niet voor natuur&gezondheid heb gekozen haha, maar wel knap hoor!