Aihearkisto: Tietotekniikka

Tietoteknistyvä maailma

Maailma menee kohti tietoteknistä maailmaa. Omana aikanani tietotekniikka on ollut yleistä ja yleistyvää, tuleville sukupolville se on entistäkin normaalimpaa. Koodaajat unelmoivat ihmisen älykkyyden ylittävästä tekoälystä kuin aikoinaan alkemistit viisasten kivestä. Tietotekniikassa ja logiikassa on jotain mystistä, mutta silti ei sisällä mitään ihmisillisiä tunteita. Tunteet ovat kemikaalien vuorovaikutusta, jota nykyiset tietokoneet eivät osa. Ehkä joskus kaupasta saa tunteellisen sähkö-kemiallisen tietokoneen?

Kuva 1. Tyypillinen osa ohjelmistoalaa.

Maailma on muuttunut siltä osin, että nykyään ohjelmistoala ei ole enää mitenkään erityisen uusi juttu. Yrityksessä kuin yrityksessä on pitkä historia lukuisista vanhoista ohjelmista. Tämä ongelma on koskettanut pankkimaailmaa jo vuosikymmeniä, mutta ilmiö leviää kaikkialle, kun aikaa kuluu. Toisaalta kiinnostava ilmiö, jossa joskus tulee olemaan valtavasti pohjaa tietotekniselle historiantutkimukselle.

Joskus ihmetellään tämän ajan toimintaa, jossa ihmiset käsityönä ovat tuottaneet ohjelmia, kun tekninen kehitystaso ei ole riittänyt riittävän älykkään tekoälyn kehittämiseen. Ihmiset ovat rakentaneet valtavan Internetin verkoston, jossa laitteen kommunikoivat keskenään, kehittyen jatkuvasti bitti bitiltä älykkäämmäksi.

Tietotekniikka työllistää jatkuvasti enemmän ja enemmän ihmisiä. Tämä trendi ei ole katkennut, vaikka Nokia romahti Suomessa. Nousua kestää todennäköisesti vielä tulevaisuudessakin, samoin kuin kirjapainon keksimisen myötä tekstin tuotanto on jatkanut kiihtyvää tahtia, jonka jatkeena nykyinen informaation digitaalinen muoto voidaan nähdä.

https://www.youtube.com/watch?v=HdQhomkzWSo

Kuva 2. Tämä on tyypillinen vaikutus kun vuorokauden debuggaa putkeen.

Suurin uhka tietotekniikalle on sähkömagneettinen impulssi, joka häiritsee nykyisiä sähkövarauksia, joihin tallennettu tieto perustuu. Tällainen aalto voi tulla avaruudesta, eikä uhka ole ollenkaan mitätön. Ukkonen voi hajottaa sähkölaitteita yksittäisen ihmisen kannalta, mutta suuri ulkoinen sähköpurkaus avaruudesta voi lamaannuttaa koko yhteiskunnan, jos asiaa miettii todennäköisyyden ja riskin toteutumisen näkökulmasta.

Toinen uhka on tiedon rakenteen ja tietämyksen menetys. Kuka tulee hallitsemaan meidän järjestelmiämme sadan vuoden päästä? Millä dokumentaatiolla ja tiedolla he sitä tekevät? Jääkö digitaalinen ohjelmistotuotanto sukupolvien päästä unohduksiin, koska tietämys tekniikasta on kadonnut kuin pyramidien rakentajien tai seppien tietämys?

The_C_Programming_Language_KandR

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]