woensdag 28 januari 2009

Hoe werkt wetenschap? (5) Het Plan

De vorige keer heb ik besproken hoe het idee van een van mijn onderzoeken was ontstaan. We wilden een winkelmandjesanalyse gaan uitvoeren op moleculen, door te kijken naar wat voor dingen je ontdekte als je moleculen in stukjes hakte bij de ringbindingen, zoals op de afbeelding


Er was een database die we goed voor konden gebruiken voor onze analyse, de NCI database (van het Amerikaanse nationale instituut voor kankeronderzoek), waar op dat moment 250,000 moleculen in stonden.

Je kunt je waarschijnlijk voorstellen dat het splitsen van 250,000 moleculen in fragmenten een heleboel werk is, zelfs voor een wetenschapper. Je moet een grote catalogus maken van alle fragmenten die er bestaan, van elk molecuul opschrijven welke fragmenten erin zitten... kortom, een typisch geval dat je dingen niet met de hand moet doen, maar er een computerprogramma voor moet schrijven. Gelukkig kon ik dat.

Nu zijn er veel misverstanden over het programmeren van computers. Het eerste misverstand is dat programmeren heel erg moeilijk is – dat valt reuze mee. Een computerprogramma is net een kookrecept, als je ooit een recept hebt opgeschreven of instructies aan iemand hebt gegeven hoe hij bij het stadhuis kan komen kan je programmeren (zelfs al moet je de woorden van de taal leren, maar dat is ook zo met Engels of Frans). Een tweede misverstand (dat zou kunnen ontstaan op een school) is dat je als programmeur computerprogramma's maakt in Gamemaker enzo. Nee. De tekstverwerkers, de computerspellen, de internetbrowsers, het besturingssysteem van je computer zijn bijna allemaal geschreven in C++, C#, en soms Java of Python, omdat je met die talen veel meer kunt doen en veel sneller kunt programmeren. Het laatste misverstand tenslotte is dat een goede programmeur hoort wat de opdracht is, achter de computer gaat zitten en gaat programmeren. Maar als je ooit je computerdocent zoiets ziet doen bij een programma dat ingewikkelder is dan “hallo!” op het scherm af te beelden, verlaat dan de klas onmiddellijk of schuif hem een goed boek over programmeren toe (ik vind zelf “Code Complete” van Steve McConnell erg goed)

Afijn, toen ik eenmaal wist wat ik wilde, ging ik gelijk aan de slag … met plannen. Net zoals een goede bouwvakker als je hem vraagt een huis voor je te bouwen niet gelijk een vrachtwagen bakstenen, een ton cement en 1000 planken koopt en begint met metselen en timmeren, moet je als je gaat programmeren of iets gaat onderzoeken altijd een plan maken – wat moet er gebeuren? Je kunt natuurlijk gelijk achter de computer gaan zitten en programmeren (of achter de labtafel gaan staan en potjes chemicaliën bij elkaar gooien), maar net zoals de enthousiaste bouwvakker die zonder plan meteen begint te metselen, is de kans gewoon te groot dat het rotzooi wordt en dat je het later nog eens over moet doen – maar dan goed!

Plannen kun je het beste doen volgens het “verdeel en heers”-principe. Je stelt een doel, en dat splits je op in kleinere doelen, en die splits je weer op in nog kleinere doelen, tot een doel zo klein en simpel is dat je gelijk weet hoe je dat moet doen. In dit geval:

DOEL: wat wil ik precies bereiken?
Dat er een database met moleculen ingaat, en eruit komt een lijst met voor elk molecuul welke fragmenten erin zitten.

Hoe wil ik dat precies?
Een database van moleculen moet erin gaan
eruit komt:
-een database met een heleboel losse fragmenten
-een lijst met daarin: “molecuul 1: bevat fragment 1, 2 en 3. Molecuul 2: bevat fragment 1, 2, en 4. Molecuul 3: bevat fragment: 5” De nummers van fragmenten verwijzen naar de database

Wat moet het programma dus doen?
-lees een molecuul uit de molecuuldatabase
-splits dat molecuul in fragmenten
-kijk bij elk fragment of dat fragment in de fragmentdatabase voorkomt
ja: schrijf het fragmentnummer achter het nummer van het molecuul
nee: voeg het fragment aan de database toe, geef het een nummer, en zet dat nummer achter het nummer van het molecuul.
-Ga naar het volgende molecuul (stap 1)

Elk van deze stappen is erg grof, en je moet ze dus verder opsplitsen. Bijvoorbeeld: lees een molecuul uit een molecuuldatabase doe je door
-lees atomen van het molecuul.
-lees de bindingen van het molecuul
-maak de atomen aan elkaar vast met de bindingen.

Als je eenmaal dat plan hebt uitgeschreven, controleer je of je niets vergeten bent en dàn kun je gaan programmeren.

Duurt dat allemaal lang? Ja. Maar het is de moeite waard. Een van mijn studenten schreef eens een programma zonder eerst een ontwerp te maken. Na een hele week van aanpassen, uitbreiden en sleutelen werkte het nòg niet goed. Toen vroeg ik hem eerst een plan te maken. Vier uur later was hij klaar met het plan èn het programma. En het werkte ook nog! Als je echt snel wilt werken, plan dan eerst!

Natuurlijk kom je in de wetenschap, en zelfs bij het programmeren, ook verrassingen tegen... maar die bewaar ik voor de volgende aflevering...

Geen opmerkingen:

Een reactie posten