Aihearkisto: Tietotekniikka

Ohjelmiston tarvehierarkia

Olen toisinaan miettinyt erilaisten projektieni lopputuloksia elämäni aikana. Usein sitä pohtii, että olisinko nyt tehnyt jotain erilailla ja onko visioni muuttunut. Yleisesti varmasti voi sanoa, että ohjelmissa toimivuus on se tärkein mittari. Itse pelejäni tehdessä jo huomasin, että rima kannattaa pistää mahdollisimman alas. Ohjelman ymmärrys voi tulla isoksi ongelmaksi ohjelmoijalle itselleenkin. Aivan alkeellisenkin ohjelman tekeminen voi paisua valtasti.

Ohjelmaa suunnitellessa kannattaa heti aluksi lähteä siitä lähtökohdasta, että kaikki pitää yksinkertaistaa ja minimoida. Hienoja visioita ja suunnitelmia monikin voi keksiä, mutta niiden toteuttaminen on äärimmäisen vaikeaa. Yleensä ohjelmia pyritään generisöimään kaikenlaisilla keinoilla, jolloin samoja osia ohjelmasta käytetään uudestaan ja uudestaan erilaissa tilanteissa. Yksi syy siihen on se, että ihmisen fyysinen kyky kehittää ohjelmaa on suurin pullonkaula.

On olemassa tiettyjä ohjelmia, jotka ovat yleiskäyttöisyydessään saavuttaneet oman ekologisen lokeronsa. Tällaisia ovat Windowsissa mm. Paint ja Notepad. Sellaiset ohjelmat ovat itsessään ikuisen vanhoja ja ykisinkertaisia, eivätkä ole koskaan menettäneet omaa asemaansa. Yleensä tästä yksinkertaisesta mallista on lähdettävä pois, jos halutaan jotain erikoisempaa. Uusi ja erilainen ohjelma on hieman kuin tukikohta, jonka ympärille ohjelmistokehittäjä lähtee tekemään omaa rakennelmaansa.

Ohjelman toiminnallisuus voidaan jakaa tiettyihin jalousasteisiin. Alkimmalla tasolla on kovakoodaus, jossa kaikki teksti tulostetaan juuri sellaisena kuin ne ovat siinä tilanteessa. Se on kaiken toiminnallisuuden perusta. Kyky näyttää tietoa ja syötettä on erittäin tärkeä ominaisuus, käyttäjän tarpeiden kannalta sen merkitys on äärimmäisen suuri.

Kun ohjelman lisätään erilaista toiminnallisuutta, niin päästään imperatiiviseen ohjelmaan, jota edityneempi tapa on tehdä ohjelmasta proseduaalinen,  jotka ei ole ollenkaan huonoja tapoja tehdä ohjelmaa. Se kehittyneimmissä muodoissaan on tietyllä tavalla monen ohjelmointikielen anti, joka sisältää mm. funktioita eli aliohjelmia. [wiki/imperatiivinen_ohjelmointi]

Ohjelmien toiminnan hahmottamisen takia on tullut mm. olio-ohjelmointia, joka ei sinällään tuo mitään uutta ohjelman kykyyn tehdä asioita, vaan kyse on enemmän suurten ohjelmien ohjelmostikehittäjien tarpeesta ymmärtää, että mitä on tekemässä. Jos vertailukuvana proseduaalinen ohjelmointi on trikonometriaa matematiikassa, niin olio-ohjelmointi on matriisilaskentaa. Yleenä tämä tarve tulee vasta kun ohjelma on paisunut liiaksi, aloittelevalle ohjelmoijalle olio-ohjelmointi on vain täysin turha lisähaaste. C-kieli on yksi esimerkki ohjelmointikielestä, joka ei tue itsessään olio-ohjelmointia, vaan C++ sisältää laajennetut struktit, jotka tietueen lisäksi kykenevät suorittamaan luokan funtioita eli metodeita eli wanhahtavasti ja luokkien yhteydessä epäakateemisesti aliohjelmia.

Ohjelmalla on aina tietyt toistensa kanssa ristiriidassa olevat tarpeensa. Tällaisia ovat yleiskäyttöisyys eli geneerisyys, jonka lisäksi ovat myös toiminnallisuus että yksinkertaisuus. Yleiskäyttöisenä ja toiminnallisena ohjelmana voidaan pitää UNIX-käyttöjärjestelmää. Aiemmin mainittu Paint on yleiskäyttöinen ja ykinkertainen. Näiden lisäksi joukkoon kuuluu Passeli Myyntireskontra, joka edustaa omaa katekoriaansa [youtube/Passeli]. Valitut ohjelmat ovat kärjistettyjä esimerkkejä, olisin voinut valita enemmän toisiaan lähellä olleita ohjelmia, jolloin olisi päässyt siihen pisteeseen, jossa nämä kaikki leikkaavat.

Kuva 1, Venn Diagrammi ohjelman tarpeista. Akateemisesti koulutettuna minunkin piti piirtää elämäni ensimmäinen oma kuvaaja, joten siinä se sitten.

On olemassa paljon yleiskäyttöisiä ohjelmia, kuten myös on toiminnallisia ohjelmia ja yksinkertaisia ohjelmia. Niissä ei sinällään ole mitään vikaa, mutta kehittäessä ihmiset usein ajattelevat liian paljon yhtä asiaa. On täysin mahdotonta saavuttaa ohjelmilla vielä nykyään kaikkia näitä, mutta yritys on kova. Etenkin miljardien budjetilla pyörivät yritykset ovat jo päässet hyvin lähelle sitä, mutta eivät vielä ole kuitenkaan saavuttaneet lakipistettä. Ehkä se piste saavutetaan sitten, kuten tietotekniikka saavuttaa sigulariteetin. [ScienceAlert]