Kehitettäessä
tietokoneohjelmia kirjoitetaan ohjelma yleensä jollakin korkeantason
ohjelmointikielellä. Tällainen kieli on ihmiselle ymmärrettävää ja
matemaattisesti yksiselitteinen. Sitä kutsutaan ohjelman lähdekoodiksi.
Se voi olla
esimerkiksi tämän näköistä:
function(margin)
{
if (margin < 0) {
return "Negative margin";
}
if (margin == 0 || margin == null || margin
== "" ) {
return "Zero margin";
}
return "Ok";
}
Tietokoneen
suoritin (=prosessori) ei ymmärrä tästä vielä mitään. Se pitää kääntää
konekielelle. Jos siis katsoisimme prosessorin sisälle, olisi ajettava ohjelma
hyvin paljon erilainen ja paljon vaikeammin ihmisen ymmärrettävissä. Se on
matalammalla tasolla, joten kokonaisuuden näkeminen siitä olisi hankalaa. Se
sisältää myös paljon enemmän käskyjä ja siellä ei enää ole tunnistettavia
sanoja. Niiden tilalla on vain numerosarjoja useimmiten muistipaikkojen
osoitteita. Tuollainen muutaman rivin ohjelma voi helposti tarkoittaa
kymmenkertaista määrää käskyjä prosessorille.
Prosessorin
sisäisistä tapahtumista on vaikea muodostaa kokonaiskuva. Siksi lähdekoodi on
niin tärkeää: jos havaitaan ohjelmassa virhe, se kohdistetaan takaisin johonkin
lähdekoodin riviin ja tutkitaan kyseistä riviä, eikä sitä, mikä meni
prosessorin sisällä pieleen.
Lähdekoodin
muuttamista prosessorin sisäiseen muotoon kutsutaan koodin kääntämiseksi
(build). Kääntämisen yhteydessä koodille tehdään kieliopin mukaisia
tarkistuksia. Pyritään varmistamaan, että koodi toimii ajettaessa. Kieliopin
tarkistus ei silti pysty ottamaan kantaa tekeekö ohjelma järkeviä asioita.
Ohjelman merkitys
Merkitys on
aina ohjelman luojan mielessä. Hän ensin ajattelee, mitä ohjelman pitää tehdä
ja sen jälkeen kuvaa sen koodilla. Luova prosessi tapahtuu siis ensin ihmisen
mielessä ja loppu onkin aika mekaanista tekemistä, jossa tosin helposti syntyy
virheitä.
Virheiden
välttämiseksi ohjelmoijat kirjoittavat testitapauksia. Niissä ohjelmalle
annetaan syötteitä, joiden vastaukset tiedetään. Näin testitapauksia ajettaessa
voidaan vertailla saatuja tuloksia odotettuihin tuloksiin. Jos on eroa,
tiedetään koodissa olevan virheitä.
Koodi pitää
olla täsmälleen oikein, muuten se kaatuu joko kielioppitarkastukseen tai
testitapauksiin. Näiden varmistusten jälkeen ohjelma toimii teknisesti, mutta
voi loogisesti tehdä jotain muuta kuin sitä, mitä ohjelmoija mielessään
ajatteli.
Jokainen
ohjelmoija tietää, että satunnaiset muutokset koodiin eivät sitä korjaa. Ne
todennäköisesti estävät ohjelman kääntymisen. Varsinkaan uutta logiikkaa ei
satunnaisuus luo.
Solun ohjelma on vaikeaselkoinen
Kun katsomme
solun sisälle, tuntuu samalta kuin katsoisi prosessorin sisään. On vaikea
ymmärtää kokonaisuutta - näkyy vain loputtomasti pieniä yksityiskohtia.
Tutkimalla näitä yksityiskohtia tutkijat pyrkivät muodostamaan kokonaiskuvan:
miten elämä on ohjelmoitu. Mikä vaikuttaa mihinkin ja mistä seuraa mitäkin.
Jos olisi
pääsy biologisen elämän lähdekoodiin, olisi biologisten prosessien ymmärtäminen
paljon helpompaa. Sieltä suoraan näkyisi, mitä logiikkaa on missäkin vaiheessa
kirjoitettu.
Siinä kuin
prosessorissa on sähköisiä piirejä, on soluissa molekyylimekaniikkaa. DNA:n syvä
salaisuus ei ole niissä molekyyleissä, mistä se muodostuu, vaan siinä, missä
järjestyksessä siihen on koodattu tietoa eli missä järjestyksessä eri molekyylit ovat. Vielä tämäkin on vain
passiivista talletettua tietoa. Tosi biologinen elämä on siinä
käyttökoneistossa, joka lukee tätä tietoa ja tämän käyttökoneiston omassa
tiedonkäsittelyssä eli DNA:n ulkopuolisessa tiedossa, epigenetiikassa.
Perimän muuttaminen on vaarallista
Näin
ajatellen on helppo ymmärtää, miten vaarallista on DNA:n muuttaminen
geenimanipulaation avulla. Siellä me muutamme jotain matalan tason
yksityiskohtaa, mutta emme tiedä, miten se vaikuttaa kokonaisuuteen.
Todelliseen muutokseen tarvitaan lähdekoodi ja sen jälkeen pitää testata
huolellisesti, ettei mikään missään muualla mennyt rikki muutoksen tähden.
Tässä on
myös syy, miksi ohjelmistoprojekteissa ei aina korjata kaikkia virheitä, vaan
ainoastaan dokumentoidaan ne: lukuisia kertoja on tapahtunut niin, että
vähäpätöisen virheen korjaaminen viime hetkellä on synnyttänyt fataalin virheen
muualla. Tämä virhe saattaa tulla esille vasta pitkällä tulevaisuudessa. Näin
on myös geenimanipuloidun ruuan kanssa.
Missä on elämän lähdekoodi?
Biologinen
elämä on siis tältä osin ohjelmoinnin tulos, ajonaikainen koodi. Se ei ole itse
itsensä alkuperä, vaan sen alku on ulkopuolella. Raamattu sanoo selkeästi, että
Jumala loi kaiken Sanallaan. Tässä on kaksoismerkitys. Jeesus on Jumalan Sana
ja se sana on meillä tallessa Raamatussa. Mutta Raamatun kielenkäytössä sana
(logos) tarkoittaa myös tietoa. Jumala loi siis myös kaiken tiedollaan, Sanansa
kautta, joten Jeesus oli siinä läheisesti mukana. Elämä perustuu tietoon,
Jumalan Sanaan.
Ei kommentteja:
Lähetä kommentti