Jorin jutut / ohjelmointi

Mitä on ohjelmointi

Tämän tekstin tarkoitus on selittää millaista on tietokoneen ohjelmointi. Teksti on suunnattu ihmisille, joilla ei ole tietoa tietokoneiden toimintaperiaatteista.

Monet naiset osaavat sellaista mitä tämän kirjoittaja ei, kuten esimerkiksi leipoa kakkuja. Karkeasti yksinkertaistettuna leipomistapahtumassa on neljä osaa:

  1. jauhot, maito yms.
  2. nainen
  3. lopputuloksena oleva kakku
  4. kakkuresepti

Olennainen on viimeinen kohta: kakkuresepti ohjaa kaikkea toimintaa. Reseptiä vaihtamalla samoistakin lähtöaineista saadaan erilainen kakku. Tietokoneen toiminta voidaan kuvata samaan tapaan:

  1. lähtötiedot, esimerkiksi suorakulmion sivujen pituudet
  2. tietokone
  3. lopputulos, vaikkapa suorakulmion ala
  4. tietokoneohjelma.

Tässä toimintaa ohjaa tietokoneohjelma. Ohjelmaa vaihtamalla voitaisiin samoista tiedoista laskea esimerkiksi suorakulmion piirin pituus.

Tietokoneohjelmalla ja kakkureseptillä on kuitenkin eräs tärkeä ero: leipuri ymmärtää mitä on tekemässä, tietokone ei. Jos kakkureseptissä lukee "sekoita teelusikallinen vehnäjauhoja ja kolme desilitraa leivinjauhetta", leipoja varmaankin huomaa jotain olevan vialla. Paremmin tietokoneohjelman toimintaa kuvaa tilanne jossa leipoja ei lainkaan tiedä mitä lähtöaineet ovat ja mikä on haluttu lopputulos. Näin ohje voisi olla "sekoita 2 dl jauhetta A ja 3 dl jauhetta B". Tietokone toimii juuri näin - se ei koskaan kysy miksi haluat jotain tehdä, se vain suorittaa antamasi käskyt järjestyksessä.

Tietokone on periaatteessa vain joukko peräkkäisiä muistipaikkoja, joihin voidaan tallentaa jokin luku, ja suoritin, joka muuttaa näiden muistipaikkojen sisältöä tietokoneohjelman mukaan. Erilaiset suorittimet - ja näin siis erilaiset tietokoneet - ymmärtämät erilaisia käskyjä. Kuitenkin käskyt ovat aina hyvin yksinkertaisia, esimerkiksi

  1. nollaa muistipaikka 100
  2. nollaa muistipaikka 1
  3. lisää muistipaikkaan 100 luku, jonka saat muistipaikasta 200+muistipaikan 1 sisältö
  4. lisää muistipaikan 1 sisältöä yhdellä
  5. jos muistipaikan 1 sisältö ei ole viisi, palaa kohtaan 3

Tällainen ohjelma laskisi muistipaikkaan 100 muistipaikkojen 200..204 sisältöjen summan. Tätä kutsutaan konekieleksi.

Tietokoneen ohjelmointi tällä tasolla on aivan mahdollista. Nopeaa se ei kuitenkaan ole, ja ohjelman toiminnan ymmärtäminen on hankalaa. Siksi on kehitetty erilaisia korkeamman tason ohjelmointikieliä, joissa ohjeet voidaan antaa joidenkin englanninkielisten sanojen ja itse nimettyjen tunnusten avulla, esimerkiksi tähän tapaan:

VAR luvut: ARRAY[1..5] OF INTEGER;
VAR i: INTEGER;
VAR summa: INTEGER;
BEGIN
     summa := 0;
     FOR i := 1 TO 5 DO
     BEGIN
         summa := summa+luvut[i];
     END;
END;

Tällainen ohjelma täytyy ennen käyttöä kääntää ylempänä kuvattuun muotoon, jotta se voidaan suorittaa tietokoneessa. Käännös voidaan joko tehdä kerralla koko ohjelmalle tai kääntää ja suorittaa rivi kerrallaan. Ensinmainitussa tapauksessa puhutaan kääntämisestä, viimeksimainittua kutsutaan tulkkaukseksi - yhteys vieraan kielen kääntämiseen ja tulkkaamiseen on ilmeinen. Kääntämistä voidaan verrata siihen, että kakkureseptin "Tee kermavaahtoa" muutetaan muotoon "Ota kermapurkki jääkaapista - Avaa kermapurkki - Ota kulho kaapista - Kaada kerma kulhoon..."

Jokaisella tietokonetyypillä on oma konekielensä, joten konekieliohjelmat joudutaan kirjoittamaan kaikille koneille erikseen. Samasta korkean tason kielellä kirjoitetusta ohjelmasta voidaan tarvittaessa kääntää eri versioita eri koneita varten. Tarvitaan ainoastaan kyseisen kielen kääntäjä (tai tulkki) juuri tälle tietokoneelle, ja kaikki kyseisellä kielellä kirjoitetut ohjelmat ovat saatavissa. Näin ainakin periaatteessa, käytännössä esimerkiksi PC:lle tehtyä Windows95-ohjelmaa ei kuitenkaan aivan kivuttomasti voi siirtää Macintosh-koneisiin.

Ohjelmointikieliä on erityyppisiä, mutta perusidea on aina sama: jaa ongelma pienempiin osiin. Esimerkiksi synttärikutsujen "ohjelmassa" voisi olla

1. Keitä kahvia
2. Tee täytekakku

josta kohta 2 jaettaisiin tarkemmin

2.1 tee kakkupohja
2.2 täytä kakkupohja

ja josta voitaisiin edelleen jatkaa

2.2.1 halkaise kakkupohja
2.2.2 laita väliin mansikkahilloa
2.2.3 laita päälle kermavaahtoa