sunnuntai 22. maaliskuuta 2020

Elämä on ohjelmoitu ja ohjelmat eivät synny itsestään - osa 6


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