Aihearkisto: Tietotekniikka

Kvanttiohjelmointi tulee

Pitkän aikaa ohjelmien suorituskyky esikännetyllä ohjelmointikielellä on jäänyt miljardeihin riveihin sekunnissa, vaikkakin rinnakkaisuus on lisännyt suorituskykyä. Yksinkertaisesti nykyisiä ohjelmia ei voi helposti optimoida suoritusta lisää, vaan tarvitaan uutta tekniikkaa. Microsoft on tuonut ohjelmoinnista kiinnostuneille kvantti-api:n Q#kielellä.

Itse opiskeluaikanani tykkäsin paljon alkorytmi-kurssista, TTY:lla se oli minun lempikurssini. Lähimmän reitin haku ja järjestysfunktiot voivat hyötyä kvanttilaskennasta valtavasti. [TTY]

TTY:lla opiskellessani en kelvannut oman alani työpaikkoihin, niin ei siltä ajalta oikein mitään hyvää jäänyt oppimisen osalta. Sinällään hyvä koulu, yleinen ilmapiiri oli surkea ja töitä ei ollut, kun Nokia romahti.

Minimalistisuus

Wiki: Minimalism

Wiki: Simplicity

Wiki: Unix philosophy

Wiki: Divide and rule

Mikä yhdistää Rooman suurvallan armeijaa, McDonaldisia, Henry Fordia, Microsoftia ja Toyodaa? Tietenkin monia asia, mutta etenkin minimalistisuus. Minimalistisuus tietenkin filosofisesti, mutta ei tuloksissa.

Kuva 1. Tieteen perustutkimusta.

Moni usein kuvittelee, ette suurten asioiden takana on monimutkainen ja vaikea asia. Tämä ei käsittääkseni pidä ollenkaan paikkaansa, vaan totuus on aivan muuta. Oikeasti isoon valtaan nousseiden organisaatioiden ja muiden vastaavien asioiden takana on perimmiltään erittäin yksinkertainen konsepti. Tuon kuitenkin oman puoleni esille.

Vielä 1700-luvulle asti Rooman suurvallan lopulla elänyt Vegetius on ollut kaikkien aikojen merkittävinin sotilastieteen kirjoittaja. Enemmän on ollut epäselvää, että miltä osin hänen kirjoituksensa ovat olleet faktaa ja miltä osin pehemeitä höpötysiä. Hänen kirjoitustensa perusteella meidän nykyinen käsityksemme Rooman armeijasta on suurelta osin peräisin. Ehkä joku pitää yhtä tärkeänä Tuppu-blogia seuraavan keskiajan jälkeen, kuten seuraavia Vegetiuksen raaputusta? Jotkut oikeasti nykyään pohtivat, että olivatko ennen ristiretkeä kalastajat feministisiä ja homoilevat punaiseet pukeutuneet miehet maskuliinisiä. Jotkut ovat myös sitä mieltä nykyään, että Vegetiuksella oli jotain lyiljyylä terästetystä viinistä johtuvaa omaa subjektiivista näkemystä sillintuoksuisiin miehiin. Kuitenkin erittäin tärkeää on esim. hänen ilmoittamansa miesvahvuus yhdessä Rooman legionsassa ja muiden armeijoiden yksiköiden vahvuudet.

”They thoroughly understood the importance of hardening them by continual practice, and of training them to every maneuver that might happen in the line and in action. Nor were they less strict in punishing idleness and sloth.

They gave their recruits round bucklers woven with willows, twice as heavy as those used on real service, and wooden swords double the weight of the common ones.

For experience assures us that there are in men, as well as in horses and dogs, certain signs by which their virtues may be discovered.

Fishermen, fowlers, confectioners, weavers, and in general all whose professions more properly belong to women should, in my opinion, by no means be admitted into the service.” Vegetius, Länsi-Rooma, 390 jaa

Henry Ford sai aikoinaan potkut, koska hän oli liian järjestelmällinen. Hän mittasi jopa mutterit ja kirjasi niiden mitat ylös, mutta lopulta pinna paloin, kun hän ryhtyi mittaamaan työntekijöiden työntekoa sekunttikellolla. Miten asiaan nykyään pohtiikin, niin on helppo ymmärtää, että moni on tätä filosofiaa vastaan, mutta myös sen olevan hyvä juttu. Seuraavien videoiden kaltainen systeemin on luultavasti hyvin testattuna luotettavampi kuin ihminen ohjaamassa Olkiluoto 3 -ydinvoimalaa.

Oman alanikin työssä on usein sellaisia tilanteita, että on jokin systeemi enemmän tai vähemmän korvessa, josta ei kukaan tiedä mitään. Täten ei varmasti ole yhtään vaikea minunkaan ymmärtää, että Rooman valtakunnassa kaikki standardisoitiin äärimmäisen yksiselitteisesti. Kun tiedon pingaaminen – kuten IT-alalla sanotaan, kestää 12 kuukautta, niin on erittäin vaikea tehdä yhtään mitään järkevää Just in Time. Kaistaa on se yksi paperikääre ja vasteaika 12 kuukautta, niin systeemin pitää oikeasti silloin toimia. Silloin ei ole aikaa millenkään ylimääräiselle. Täten yksinkertaisuus ja yksiselitteisyys tulevat kunniaan.

Ohjelmien käytettävyys

10 Usability Heuristics for User Interface Design

Ohjelmien käytettävyys on asia, joka puhuttaa. Kyseessä ei ole mitenkään uusia aihe, vaan tästä on keskusteltu erittäin paljon. Jostain käsittämättömästä syystä ohjelmistoalalla käytettävyys ei kuitenkaan aina saa niin suurta painoarvoa, kuin mitä käyttäjän näkökulmasta tulisi. Itsekin olen naureskellut ohjelmien huonolle käytettävyydelle lapsesta asti, mutta myönnän käytettävyyden huomioimisen olevan iso ongelma nykyisissä suunnitelumalleissa.  [HS]

Ohjelmistoala on sen takia vaikea, että siinä pitää olla kaikkien alojen asiantuntija hieman. Käytettävyyssuunnittelu on hyvin vahvasti psykologiaan liittyvä asia, jota kaikki teknillisen koulutuksen käyneet eivät osaa, edes halua tai jopa kieltäytyy tekemästä työssään. Itsellenikin opetettiin jo AMK:n aikaan, että länsimaiseen kirjoitustyyliin tottunut ihminen aloittaa etsimään näytöltä tietoa vasemmasta yläkulmasta, josta katse kaartaa kohti oikeaa alakulmaa. Tämän parin-kolmen sekunnin aikana ihminen luo käsityksensä ohjelman toimminasta pohjautuen olettamuksiinsa. Asiat eivät ole sikäli mitenkään vieraita koulutetuille työntekijöille, mutta jotenkin seuraavan videon kaltaisia humanistijuttuja ei tule tehty koodailun ohessa. Kuka on valmis, jos pahimmillaan joutuu keskustelemaan ihmisten kanssa. Nykyään ohjelmistoalallakin pitäisi olla sosiaalinen ja dynaaminen, ainakin työhaastattelijoiden mukaan. Usein joutuu kommunikoimaan asiakkaiden kanssa rangaistuksena, jos ei muuhun kelpaa, ja halutaan hiillostaa työpaikalta ulos.

Usein myös olen saanut tiedon, että ihmisen lähimuistiin sopii 5 -7 asiaa. Minun lähimuistini on varsin heikko, mutta sitäkin tehokkaampi. Tosiaalta apinalla on hyvä lähimuisti, mutta sen käsittely on heikompaa. Täten itselleni yksinkertaisen ulkoasun ymmärtäminen on helppoa ja luonnollista, enkä halua änkeä liikaa elementtejä elementtien sisälle.  Näitä oppeja enemmän opin jo sitten TTY:lla.

Uskoakseni yksi iso ongelma on, että ihmiset yleensä ajattelevat, että monimutkaisuuden lisääminen on hyvä asia. Näin sanottuna on helppo todeta väitteeni vääräksi, mutta silti käytännössä asia ei ole niin yksinkertainen työelämässä ja suunnittelussa. Esimerkiksi Seinäjoen ammattikorkeakoulussa Saksasta vieraileva henkilö ylpeili sillä, että uudessa BMW 5-autossa on monta kilometriä sähköjohtoa, kun 50 luvun autossa oli vain muutaman metriä. Enemmän kiinostavaa oli heidän työnsä autonomisten autojen parissa.

Usein monesti ihmisten ajatus urautuu. Tästä hyvänä esimerkkinä mielestäni on nimenomaan TTY:n toiminta, joka hyvin vahvasti ajoi Nokian kehitystyötä. Siellä varmasti oivallettiin, että miten väärässä he olivat. Taustalla oli 2007 vuonna happopään julkaisema älypuhelin, jossa ei oikeastaan ollut mitään muuta kuin kosketusnäyttö. Toisaalta syynä oli myös se, että Nokialla oli valtavasti patentteja, joten 20 vuotta vanhalla tekniikalla oli vaikea tehdä paljon enempää.

Kuva 1. Apple iPhone on näppärä kuin piikivi.

Miten sitten asia menikin, niin koko Nokian tilanne eteni hyvin omana opiskeluaikanani. Aloitin omat opiskeluni vuonna 2010, jolloin vielä usko Nokiaan oli erittäin vahvaa. Pari vuotta aiemmin oli tapahtunut yksi joukkomurhakin koulussa, mutta se nyt oli silloin ihan normimenoa [wiki/KauhajoenKoulusurmat].

Oma koulutukseni pohjautui Microsoftin tuotteisiin, enkä itse edes halua niitä liiaksi haukkua, mitä olen myöhemmin Notepadilla Open Source -pohjaisilla kehitystyökaluilla koodaillut [notepad++]. Aikoinaan ammattikorkeakoulussa esiteltiin, että Windowsissa Eclipsellä MySQL-kirjasto, joka oli kuukauden vanha ja vakaaksi ilmoitettu, mutta tietokantayhteys yhdistää onnistuneesti joka neljäs kerta, joka oli kuulemma normaalia [YLE]. Onneksi Visual Studio Code helpottaa koodin kirjoittamisen osalta valtavasti [VisualStudioCode]. Kuka maksaa, kuka tekee, miksi. Itselläni ei ole mitään elämää isompaa asenteellisuutta, vaikka Linux onkin kansallisylpeys suomalaisessa ohjelmistoalassa.

”Husissa kaikki energia laitettiin siihen, että akuutisti sairaiden, leikattujen ja tehohoitopotilaiden potilasturvallisuus pystyttiin varmistamaan.” –Karjalainen

Microsoft ei ole suoranaisesti tehnyt mitään erityisen pahaa, hyvää vain olen korkeintaan saanut heiltä. Oikeastaan väittäisin, että Nokian tuhon syynä oli heidän asenteensa Microsoftia kohtaan. Kuulemma tarjosivat Nokian harjoittelijoille ilmaisia ryyppymatkoja, jossa maksoivat kaikki jopa huviksi pöydänkulmiin rikotut olutkolpako, kun Microsoft maksoi mitä vain. Eivätkö Nokialaiset edes tablettia osanneet valmistaa, mutta eivät myöskään suostuneet käyttämään omia Windowsilla varustettuja Nokian puhelimia. Siten mielestäni ihan perusteltavaa, että koko tuotekehitys lopettiin Suomesta. Suomalaiset saivat Microsoftilta tilaisuuden näyttää kykynsä, saivat tulosten arvoisen lopun. Eikä eFloppikaan tehnyt mielestäni mitään väärää, hän vain ajoi Microsoftin ja Yhdysvaltojen etua toimitusjohtajana. Eniten vian ihmetyttää, että osakkeenomistajat halusivat palkata kilpailijan työntekijän johtamaan Nokiaa.

Eniten itseäni ihmetyttää Nokian lopussa se, että miksi sijoittajat tekivät niin tyhmän päätöksen. Ehkä Suomessa ei vain tajuttu, että MeeGo eli UNIX-pohjainen miljardiprojekti oli hyvällä tiellä. Itsekin Qt:n avulla tein käyttöliittymäsuunnitelua kyseiselle alustalle. Tein alkoholilaskurin, jolla sai laskettua veren alkoholipitoisuuden, jossa  pudotusvalikosta haki alkoholijuomia ja simuloi niiden juomista. Sijoittajta oikeastaan ajoivat mielestäni Nokian tuhoon: eLopin ottaminen Nokialle oli puhdas Troijalainen, jonka ymmärsi jo Sienäjoen AMK:ssa ollut opiskelija. MeeGolla olisi voinut olla mahdollisuuksia paremmin. Tyhmistä sijoittajista kärsii koko Suomi! [wiki/MeeGo]

Usein tietokonepelejä monet ihmiset kritisoivat. Kuitenkin tietokonepeleissä käytettävyys on tärkein asia suunnitelussa. Tämän taustalla on todennäköisesti se, että oikeasti loppukäyttäjän tulee osata käyttää ohjelmaa, koska asiakas maksaa siitä. Kyse on siis paljolti siitä, että maksaako loppukäyttäjä tuotteesta vai joku muu. Jos joku muu kuin loppukäyttäjä on maksajana, niin käytettävyys ei välttämättä saa oikein mitään painoarvoa tuotesuunnitelussa.

Käytettäyyttä ei yleensä huomaa, vasta kun se on huonoa. Parasta useimmiten olisi, jos käyttäjän tarvitsee painaa vain yhtä nappia asian tekemiseksi. Vielä parempaa, jos asiat tapahtuvat täysin ilman käyttäjän syötettä. Käytettävyys toimii, silloin kun se ei vaadi käyttäjän huomiota. Ehkä juuri tämän takia esimerkiksi tietokonepelejä väheksytään, kun ei ymmärretä, että miten paljon hyvä käytettävyys vaatii työn tekemistä uudelleen, oikeaa suunnittelua ja tuskaa. Tilanteet kuitenkin muuttuvat. Enää ei asiakkaalle voida syöttää mitä vain.

”Työskentelen IT-alalla ylläpitäen näitä järjestelmiä. Aikaisemmin minulla oli unelmia, ystäviä ja suunnitelmia tulevaisuudesta. Nyt olen hermoraunio jolla on kroonisia niska- ja selkäkipuja sekä orastava alkoholismi.” -Mies, 30  [HS]

Ei kuitenkaan kaikki IT-alalla töissä olevat ole alkoholisoituneita. Hervannassa tietotekniikan tohtoriksi opiskeleva tuttu kerran kertoi, että pikkujouluissa olisi ollut alkoholia. Hän sitten totesi, että narkkaa opiaatteja, joten ei voi juoda alkoholia [päihdelinkki]. Ei sitä pidetty mitenkään yllättävänä, vaan perustelu hyväksyttiin ja hän sai olla mukana juomatta alkoholia. Turha siis liiaksi yleistää!

Kuva 2. Erilaisten päihteiden haitat tieteellisesti tutkittuna, jonka mukaan \ met-ˌam-ˈfet-ə-ˌmēn \ eli meta’a-,a’a, kun mata-whata-amine ei taivu suomeksi, niin ei ole kovin haitallista ulkopuolisille. [businessinsider, psychedinsanfrancisco]
VAROITUS: Siinä missä piristeet aiheuttavat psykoottisuutta pidemmällä käyttöjaksolla, niin vastakkaisesti lamaannuttavat aineet aiheuttavat tupakan tavoin voimakasta fyysistä riippuvuutta! [Youtube/ChilliMeno]

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ä.

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

Suurin uhka tietotekniikalle on sähkökemiallinen 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]