Mitä ohjelmointi on?

Ohjelmointi on ongelmanratkaisua

Ohjelmointi on prosessi, jossa jonkin ongelman ratkaisemiseksi tuotetaan ohje sellaisella merkintätavalla, siis ohjelmointikielellä, joka voidaan antaa tietokoneelle suoritettavaksi. Ohjelmoinnin kaltaista toimintaa esiintyy jokaisen ihmisen arkielämässä lähes päivittäin. Yksi esimerkki voisi olla tilanne, jossa annamme jollekin puhelimessa ajo-ohjeet, joiden avulla hänen tulee päästä perille ennestään vieraaseen paikkaan. Tällöin luomme sarjan ohjeita ja komentoja, ja kun henkilö "suorittaa" nämä komennot järjestyksessä yksi kerrallaan, alusta loppuun, hän pääsee perille haluttuun paikkaan. Vastaavasti kirjahyllyn mukana tulee yleensä ohje, jonka toteuttamalla saa hyllyn kasattua kuten pitääkin, ja lettutaikinan ohjetta seuraamalla saa letut paistettua.

Puhuttu kieli on kuitenkin tavallisesti aivan liian ylimalkainen ohjelmointikieleksi. Sen sijaan ohjelmointi tapahtuu tavallisesti kielellä, jolla voidaan ilmaista asioita yksikäsitteisemmin, kuten C#, Java tai Python. Ohjelmakoodi ei voi sisältää tulkinnanvaraa, sillä toisin kuin ihminen, tietokone ei ymmärrä huumoria tai osaa lukea rivien välistä, vaan suorittaa sille annetun ohjelman juuri niin kuin se on kirjoitettu. Tällaista täsmällistä suoritusohjetta kutsutaan algoritmiksi, jonka J.G. Brookshear on määritellyt seuraavasti.

Algoritmi on äärellinen joukko täsmällisiä, suoritettavissa olevia ohjeita, jotka ohjaavat päättyvää tehtävän suoritusta.

Alla esimerkki C#-kielisestä tietokoneohjelmasta (siis algoritmista), joka tutkii onko muuttujaan sana sijoitettu merkkijono, "saippuakauppias", palindromi. Tutkittuaan asian ohjelma tulostaa tuloksen tässä tapauksessa TIM-järjestelmälle, jonka jälkeen viesti välitetään käyttäjän nettiselaimelle. Mikäli ohjelma käynnistettäisiin omalla tietokoneellasi, viesti tulostettaisiin käyttöjärjestelmän niin sanottuun konsoli-ikkunaan.

# pali1

Kokeile, toimiiko ohjelma kuten sen pitää, ali paina Aja-painiketta! Voit myös vapaasti muokata koodia, ja katsoa voiko sen vielä ajaa. Esimerkiksi voit vaihtaa palindromi-sanan tilalla jonkin muun sanan. Ei haittaa, vaikka koodi menee "rikki", sillä voit aina palauttaa alkuperäisen koodin klikkaamalla Alusta-linkkiä.

Ohjelmointikielestä koneelle suoritettavaksi

Tietokone ei kuitenkaan voi edellä esitettyä koodia suorittaa sellaisenaan, koska esimerkiksi sanat bool tai Console eivät kuulu prosessorin sanavarastoon, konekieleen. Ennen kuin prosessori voi suorittaa antamasi tarkat ohjeet, on ohjelma muokattava siten että se sisältää vain näitä peruskomentoja. Näitä koneen ymmärtämiä peruskomentoja on laskentatavasta riippuen joitain satoja. Alla on lyhyt katkelma edellisestä Palindromi-ohjelmasta käyttäen (symbolista) konekieltä.

rep stos    dword ptr es:[edi]  
mov         ecx,esi  
mov         dword ptr [ebp-3Ch],ecx  
cmp         dword ptr ds:[5B24C14h],0  
je          0690D1F2  
call        5BE46150  
xor         edx,edx  
mov         dword ptr [ebp-44h],edx  
mov         dword ptr [ebp-4Ch],0 

Kokonaisten ohjelmien kirjoittaminen tällaisella konekielellä ei ole nykyään mielekästä, koska sen kirjoittaminen on hidasta ja virhealtista. Konekielellä voidaan joissain erityistilanteissa kuitenkin tehdä ohjelmasta tehokkaampi tai nopeammin toimiva, ja toisaalta konekielen ymmärtäminen auttaa hahmottamaan tietokonelaitteiston toimintaperiaatteita syvällisemmin. Tämän opiskelun jätämme kuitenkin myöhempien kurssien asiaksi ja keskitymme tällä kurssilla niin sanottuihin korkean tason kieliin.

Ohjelmointi on ajattelua

Prosessiksi ohjelmointia voi kutsua erityisesti siksi, että tosielämän ongelmat, kuten myös niiden ratkaisut ovat usein varsin monimutkaisia, ja vain harvoin etenevät alusta loppuun asti täysin suoraviivaisesti. On tavallista, että ohjelmointiprojektin edetessä huomataan, että aiemmin tehty koodi ei olekaan käyttökelpoista tai se ei enää vastaa niitä vaatimuksia, joita projektin aikana on ilmaantunut. Käytännössä ohjelmiin liittyviä ideoita alkaa todella tulemaan vasta kun ohjelman ensimmäinen versio on käytössä. Lisäksi usein ohjelmissa lähdetään mallintamaan vanhaa paperipohjaista menettelytapaa/prosessia kun tietokoneella voitaisiin monia asioita tehostaa. Näitä tehostustapoja huomataan usein vasta jälkikäteen.

Voi olla myös tilanteita, joissa oletukset ohjelmien käyttötavasta tai eliniästä arvoidaan väärin. Tunnetuin tällaisesta arviointivirheestä on Y2K (ks. Wikipedia), joka tarkoittaa vuoden tallentamista sisäisesti kahdella numerolla. Vuosi 2000 saattoi tuntua kaukaiselta ajatukselta 1970-luvulla ohjelmia kirjoitettaessa, eikä silloin nähty todellista tarvetta vuoden tallentamiseksi useammalla numerolla.

Toinen esimerkki on YouTube, jonka tekijät eivät vuonna 2005 voineet kuvitellakaan, että jotakin videota voitaisiin katsoa yli kaksi miljardia kertaa. Niinpä he päätyivät valitsemaan katselumääriä mittaavaan laskurin tietotyypiksi 32-bittisen kokonaislukumuuttujan, jonka suurin mahdollinen arvo on 2,147,483,647. Kuinka ollakaan, vuonna 2014 Psy-artistin hitti Gangnam Style rikkoi tuon maagisen rajan, mikä pakotti palvelun ohjelmoijat muuttamaan laskurin koodia. Uuden laskurin kokonaislukumuuttuja on 64-bittinen, joten teoriassa Gangnam Style -klippiä voitaisiin nyt katsoa yli yhdeksän kvintiljoonaa kertaa ennen kuin yläraja tulisi vastaan. Toisaalta peliohjelmoinnissa ohjelmakoodia saatetaan joutua muokkaamaan, jotta saavutetaan haluttu grafiikan ruudunpäivitysnopeus (FPS, frames per second).

Toisaalta ohjelmointi on vaativaa ajatustyötä, jossa tarvitaan ympäristön havainnointia. Jos liikennevaloja ohjelmoitaessa ei käydä tutustumassa paikalliseen maisemaan ja perehdytä miten risteys saadaan tehtyä kaikille kulkijoille turvalliseksi, menee homma luultavasti pieleen. Vaikka ohjelmointia käytännössä tehdään suurelta osin tietokoneella, on silti kynä ja paperia (tai fläppitaulu, post-it-tarroja, ja niin edelleen) syytä aina olla esillä. Yksi ohjelmoinnin suurimpia vaikeuksia on siinä, että ei malteta istua kynän ja paperin kanssa ja pohdita sitä, mitä ollaan tekemässä. Jos esimerkiksi pitäisi tehdä laivanupotuspeli, on varsin tärkeää ensin pelata useita kertoja peliä, jotta hahmottuu, mitä kaikkia asioita pelissä tulee aikanaan vastaan.

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.