Artikkeli on yli 3 vuotta vanha

Koodi on kaikkialla – lyhyt johdatus ohjelmoinnin maailmaan

Televisio, jossa koodia.
Kuva: Yle/Annukka Palmén-Väisänen

Elokuvissa näemme usein hulluja koodareita, jotka silmät kiiluen hakkaavat tietokoneelle yötä myöten käsittämättömiä komentorivejä toisensa perään. Oikeasti koodaaminen eli tietokoneohjelmointi ei ole lainkaan noin mystistä. Se on oikeastaan vain yksityiskohtaisten ohjeiden antamista tietokoneelle.

Mitä ohjelmointi on?

Nykyisin ohjelmakoodia on kaikkialla. Tietokoneiden, tablettien ja älykännyköiden lisäksi esimerkiksi jääkaapeissa, liesissä, ilmalämpöpumpuissa ja autoissa. Koodin määrä elämässämme lisääntyy koko ajan, vaikka emme sitä ehkä huomaakaan.

Esimerkiksi uusimmissa Fordin automalleissa on ohjelmakoodia jopa 150 miljoonaa riviä. Ilman ohjelmistoja kaikki tietokoneet ja muut älylaitteet ovatkin vain hyödytön kasa elektroniikkaa.

Ohjelmointi ei ole lainkaan mystistä. Siinä vain annetaan tietokoneelle tarkka toimintaohje eli algoritmi, jonka avulla se tekee halutun asian. Tietokoneohjelma voi esimerkiksi vähentää palkastasi verot ja sivukulut ja laskea näin käteen jäävän nettopalkan. Tätä tarkoitusta varten tietokone tarvitsee tiedon veroprosentistasi sekä sivukuluista ja käskyn, että ne pitää vähentää alkuperäisestä luvusta.

Koska tietokone ei suoraan ymmärrä ihmisen ohjeita, täytyy ohjeet kirjoittaa jollakin tietokoneen ymmärtämällä ohjelmointikielellä. Tällaisia nykyään yleisesti käytettyjä ohjelmointikieliä ovat mm Python, Java, C++ ja Ruby.

Ilman ohjelmistoja kaikki tietokoneet ja muut älylaitteet ovat vain hyödytön kasa elektroniikkaa.

Usein vaaditun tehtävän suorittamiseen tarvitaan erilaisia ehtolausekkeita, vertailuja ja toistolausekkeita.

Muutamia esimerkkejä tällaisista lausekkeista liittyy vaikkapa nopanheittoon. Tietokoneelle nopanheitto tarkoittaa yhden ja kuuden välillä olevan kokonaisluvun arpomista satunnaislukugeneraattorilla:

Edellisissä esimerkeissä esitellyt ohjeet on kirjoitettu Python-kielellä if, if-else, for in range, while ym. käskyillä. Vastaavanlaisia rakenteita löytyy lähes kaikista ohjelmointikielistä, niiden kirjoitusasu vain vaihtelee kielestä toiseen.

Tietokone tekee mitä käsketään, mutta ei välttämättä sitä mitä halutaan

Ohjelmointi vaatii tarkkuutta ja huolellisuutta, koska tietokone noudattaa saamiaan ohjeita mekaanisesti. Tietokone tekee mitä käsketään, mutta ei välttämättä sitä mitä halutaan. Pienikin virhe ohjelmassa voi aiheuttaa täysin odottamattoman lopputuloksen.

Joskus ohjelmointivirhe voi olla jopa kohtalokas, esimerkiksi Yhdysvalloissa 1980-luvulla koodausvirheen takia säteilyhoitolaite antoi viidelle potilaalle tappavan annoksen säteilyä. Toinen tunnettu esimerkki ohjelmointivirheestä on Ariane 5 -avaruusraketin tuhoutuminen 40 sekuntia laukaisun jälkeen vuonna 1996. Lähellä oli, että raketista putoavat romut olisivat vahingoittaneet laukaisua seuranneita vieraita.

Toisaalta, jos ohjelma on koodattu oikein, tietokone suorittaa sen erittäin nopeasti ja virheettömästi.

Konekielistä symbolisiin ohjelmointikieliin

Tietokoneen ohjelmointikieliä on kehitetty paljon vuosikymmenten varrella. On tulkinnanvaraista mikä oikein on ohjelmointikieli, ja sen vuoksi niiden määrää on mahdoton sanoa täsmällisesti. Joka tapauksessa niitä on satoja, eräiden laskutapojen mukaan jopa tuhansia.

Ensimmäiset ohjelmointikielet olivat niin sanottuja konekieliä, joita tietokoneen suoritin ymmärsi. Niillä kirjoitetut ohjelmat olivat pelkkiä nollien ja ykkösten jonoja, ja ne syötettiin syötettiin tietokoneelle kytkimiä kääntelemällä. Esimerkiksi konekielinen käsky 10110100 10110111 merkitsee suorittimelle, että se laskee kahden sisäisen rekisterin sisällöt yhteen ja siirtää tuloksen kolmannen rekisterin osoittamaan muistipaikkaan.

Myöhemmin kehitettiin kuitenkin ihmiselle havainnollisempia tapoja esittää käskyt tietokoneelle, koska konekielinen koodaaminen oli ymmärrettävästi vaikeaa ja vaati äärimmäistä tarkkuutta. Näin syntyi symbolinen konekieli eli assembler language. Symbolisella konekielellä edellinen käsky olisi esimerkiksi muotoa ADD A,B,@C

Nämä havainnollisemmat ohjelmat oli sitten käännettävä erityisellä ohjelmalla, kääntäjällä, konekieliseksi koodiksi, joka voitiin syöttää tietokoneeseen sen ymmärtämässä muodossa, eli bitteinä. Vielä 1980-luvulle saakka ohjelmakoodia saatettiin syöttää tietokoneelle reikäkorteilla.

Ohjelmointikielien tarkoitus on toimia ihmisten ja tietokoneiden välisenä rajapintana

Symbolisenkin konekielen käyttö on vaivalloista, joten yleensä ohjelmoinnissa käytetään korkean tason ohjelmointikieliä. Niiden tarkoitus on toimia ihmisten ja tietokoneiden välisenä rajapintana. Nykyisin yleisessä käytössä olevia ohjelmointikieliä ovat esimerkiksi Java, C-kieli ja Python. Nämä korkean tason ohjelmointikielet eivät myöskään ole aikaisempien kielien tapaan konekohtaisia, vaan mahdollistavat myös saman ohjelman käytön eri konekieliä käyttävissä tietokoneissa.

FORTRAN-ohjelmointikieli mullisti tietokonemaailman

Ensimmäistä tietokoneohjelmaa on vaikea nimetä. Se on myös määrittelykysymys.

Jo kauan ennen elektronisten tietokoneiden aikaa mekaanisten koneiden ohjaamiseen käytettiin algoritmeja. Usein ensimmäisenä tällaisena pidetään Ada Lovelacen laatimaa algoritmia Charles Babbagen mekaaniselle tietokoneelle v. 1842. Tämä ohjelma laski Bernoullin lukuja.

Lovelace's diagram from Note G, the first published computer algorithm
Ada Lovelacen algoritmi Bernoullin lukujen laskemiseksi. Sitä pidetään ensimmäisenä tietokoneohjelmana Kuva: Public Domain/Wikipedia

Ensimmäisenä korkean tason ohjelmointikielenä pidetään saksalaisen insinöörin Konrad Zusen> toisen maailmansodan aikana kehittämää tietokoneohjelmaa Plankalkülia, jota hän käytti mm. shakkivastustajanaan Z3 tietokoneessaan. Plankalkül hautautui kuitenkin arkistoihin eikä sillä ole ollut muuta kuin kuriositeettiarvoa.

Piti odottaa 1950-luvun puoliväliin asti, ennenkuin syntyi ensimmäinen korkean tason ohjelmointikieli, jolla oli merkitystä. Tuolloin kehitetty FORTRAN (FORmula TRANslator) yleistyi nopeasti samalla kun elektroniset tietokoneet kehittyivät. Iästään huolimatta sitä käytetään edelleen runsaasti erityisesti raskasta tieteellistä laskentaa vaativissa tehtävissä, mitä varten se aikanaan kehitettiinkin.

Monet sen ominaisuudet: taulukkomuuttujat, muuttujan ohjaamat silmukat (ns. for-silmukat) sekä haarautuva if-lause, löytyvät nykykielistäkin.

Koodia.

Ohjelman toiselta riviltä ilmenee että arvattava luku on 42 (LUKU=42). Jos arvaa liian pienen luvun, ohjelma kertoo rivillä kahdeksan arvauksen olevan liian pienen (PRINT*, 'LIIAN PIENI ARVAUS'). Jos se on liian iso niin vastaavasti se kertoo rivillä 14 luvun olevan liian suuri. Kun arvaus osuu kohdalle se kertoo arvauksen olevan oikein ja arvausten lukumäärän.

Yhä uusia ohjelmointikieliä syntyy

1950-luvun lopussa kehitettiin COBOL (COmmon Business Oriented Languange) joka on kaupallis-hallinnollinen kieli. Kieli oli tarkoitettu suurten tietomäärien yksinkertaisiin käsittelyyn. Cobolin käskyt on laadittu niin lähelle käyttöenglantia kuin mahdollista. Jos ohjelman parametreiksi ja muuttujiksi vielä valitaan sopivia sanoja, saattaa koodaamista osaamatonkin ymmärtää mitä ohjelma oikein tekee.

1960-luvun alussa kehitettiin ALGOL. Siitä tuli Euroopassa 1960-luvun lopun suosituin kieli. Algol on siinä mielessä merkityksellinen kieli, että sen pohjalta kehitettiin myöhemmin paljon käytössä olleet Pascalin ja C-kielen eri versiot.

Pascal kehitettiin 1960 ja -70-lukujen taitteessa erityisesti opetuskäyttöä varten. Se oli hyvin käytetty ohjelmointikieli Suomessakin opetuskäytössä 1970-luvulta 1990-luvun alkupuolelle asti kunnes C-kieli syrjäytti sen.

Toinen paljon opetuskäytössä ollut ohjelmointikieli on 1960-luvun puolivälissä kehitetty BASIC (Beginner´s All-purpose Symbolic Instruction Code). Basicistä on kehitetty tehokkaampia uudempia ohjelmointikieliä, kuten Microsoftin Visual Basic.

Kotitietokoneiden yleistyessä 80-luvulla moni sai ensikosketuksensa ohjelmointiin nimenomaan Basic-kielellä, jolla pystyi tekemään omia pieniä pelejä mm. Commodore 64, Vic-20 tai Amiga-koneisiin. Näitä ohjelmia levitettiin jopa radio-ohjelman kautta, kuten Elävän arkiston artikkelissa kerrotaan.

Yleisradio opetti Basic-ohjelmointia 1970-luvulla jopa televisiossa.

Algolista kehitetty C on yleiskäyttöinen ohjelmointikieli, joka on levinnyt laajalle 1970-luvulta lähtien. Sen vahvuuksia ovat yksinkertaisuus, tehokkuus ja joustavuus ja siirrettävyys. Monet uudemmat ohjelmointikielet, kuten C++, C# ja Java pohjautuvat C-kieleen.

Seuraavassa esimerkkiohjelma C-kielestä, joka kysyy käyttäjältä kaksi lukua ja tulostaa niiden summan. C-kieli poikkeaa suhteellisen vähän konekielestä ja sen vuoksi sen kieliasu ei ole maallikolle yhtä helposti aukeavaa esim. Fortran-ohjelmointikieli. Toisaalta sillä kirjoitetut ohjelmat ovat vastaavasti hyvin pienikokoisia ja tehokkaita.

Koodia.

Internetin kehitys tuo uusia tarpeita ja uusia kieliä

1990-luvun puolivälissä ohjelmoinnin fokus siirtyi kohti verkkosovelluksia internetin leviämisen myötä, ja näitä varten kehitettiin uusia ohjelmointikieliä. Tässä esitellään niistä muutamia yleisimpiä.

Ylen etusivu 22.5.2001.
Ylen etusivu 22.5.2001. Kuva: Yle

Ensimmäisiä erityisesti verkkosovelluksia varten kehitetty kieli oli oli Java, joka on C-sukuinen oliokieli. Java on tällä hetkellä maailman yleisin ohjelmointikieli. Sillä toteutetut ohjelmat toimivat esimerkiksi Windows-, Linux- ja Mac-ympäristöissä. Myös Androidin sovellukset kirjoitetaan Java-kielellä, mutta Windows-maailmaan tarkoitetut ohjelmat eivät suoraan toimi Androidilla (ja päinvastoin).

1990-luvulla kehitettiin myös ohjelmointikieli Python. Se on monipuolinen, tulkattava ohjelmointikieli ja sopii erityisesti verkkosovelluksiin. Pythonia voi käyttää myös vaativassa ja tieteellisessä laskennassa ja sitä käyttäen voi tuottaa myös graafisia esityksiä. Pythonia pidetään helppona oppia sen yksinkertaisen syntaksin(lauseopin) ja korkean tason tietorakenteiden takia. Monet suosittelevat sitä ensimmäiseksi ohjelmointikieleksi.

Myös Ruby on ohjelmointikieli, jota käytetään erityisesti verkkopalveluiden toteuttamiseen Ruby on Rails (RoR) laajennuksen avulla. Ruby on monessa suhteessa mielenkiintoinen kieli, ja selkeän syntaksin vuoksi sen alkeita pidetään melko helppoina oppia. Esimerkiksi mikroblogipalvelu Twitter on toteutettu Rubyllä.

PHP kehitettiin webin alkuaikoina helpottamaan dynaamisen sisällön lisäämistä kotisivuille. Sitä hyödynnettiin aluksi erityisesti web-lomakkeiden käsittelyyn. Vuosien myötä PHP on laajentunut täysimittaiseksi ohjelmointikieleksi, jota käytetään monissa suurissakin palveluissa.

JavaScrip on ohjelmointikieli, jota yleensä käytetään verkkoselaimessa toimivien skriptien eli komentosarjojen tekemiseen ja se perustuu löyhästi C-ohjelmointikieleen. Sen tärkein sovellus on mahdollisuus lisätä verkkosivuille dynaamista toiminnallisuutta. Esimerkiksi JavaSript käsky alert ('Oletko valmis?'), luo koneen ruudulle ikkunan ja siihen tekstin "Oletko valmis" ja odottaa, että käyttäjä kuittaa tämän klikkaamalla ikkunassa olevaa OK-painiketta.

Nimestään huolimatta JavaScriptillä ei ole mitään tekemistä Java-kielen kanssa.

Lisää ohjelmoinnista radio-ohjelmassa

Millaista ohjelmoijan työ sitten oikein on ja millaisia taitoja se vaatii? Ja mitä tulevaisuudessa on vielä koodaamiselta odotettavissa? Ja tarvitaanko peruskouluihin ylipäätään ohjelmointia? Näitä kysymyksiä pohditaan allaolevassa Tiedeykkösen jaksossa.

Tiedeykkönen: Koodi on kaikkialla - lyhyt johdatus ohjelmoinnin maailmaan

EDIT 19.9: Korjattu ulkoasua
EDIT 21.9: Korjattu koodiesimerkkejä
EDIT. 7.12.2016: lisätty metatietoja
EDIT. 23.2.2022: poistettu toimimaton osuus