C-kielen ihanuus

Main is usually a function. So then when is it not?

Kuva 1. Ohjelmointikielten kehittyminen, 1950-luvun Fortran ja 1970-luvun C kuuluisivat ajallisesti vastakkaisiin paikkoihin.

Ohjelmointikielille on käynyt hieman samoin kuin oluille. Keskiaikana oluista tehtiin mahdollisimman täyteläisiä, kun taas myöhemmin teollisella ajalla pyrittii kohti mahdollisimman kirkasta lageria. Samoin ohjelmointikielet ovat käyneet lähellä pseudokoodia, josta on pyritty rajoittamaan ohjelmointikielen turhia ja bugialttiita ominaisuuksia. [wiki/pseudokoodi]

const int main[] = {
    -443987883, 440, 113408, -1922629632,
    4149, 899584, 84869120, 15544,
    266023168, 1818576901, 1461743468, 1684828783,
    -1017312735
};
$ gcc -Wall final_array.c -o sixth
final_array.c:1:11: warning: ‘main’ is usually a function [-Wmain]
 const int main[] = {
           ^
$ ./sixth 
Hello World!

Ei kannata yllättyä, jos jossain vaiheessa vähän Tuppu-blogi on off-line, kun säädän uutta palvelintani. Jo oma portfolioni on pelastettu mahdolliselta bittiavaruuteen katoamiselta ulkopuolisen toimesta. Lisäsin sen kunniaksi uuden Youtube-upotuksen staattiselle portfoliolleni. [portfolioni/TTY, tamppiteekkarius145]

Why Vasa sank

Tulevaisuuden ihminen

Minkälainen on tulevaisuuden ihminen? Onko tulevaisuudessa edes ihmisellä roolia, onko Homo Sapiens edes olemassa tuhannen vuoden kuluttua. Kysymykseen ei varmasti kukaan tiedä vastausta, ainakaan meistä ihmisistä. Jos tietää, niin sitten on jotain sellaista tietoa, jota minulla ei ole.

Itse uskon erittäin vahvasti, että ihmisen tietoinen ajattelu ei välttämättä poikkea erityisen paljoa tietotekniikan sähkömagneettisesta toiminnasta. Ihmiselle tietysti moinen ajattelu on vaikeaa, itsetietoisuus ei ole perinteisesti ollut tarpeellinen ominaisuus eläinkunnassa.

Boolean algebra on sikäli mielenkiintoinen konsepti, että sillä voidaan selittää kaikki tunnetut loogiset asiat, niin numerinen tieto kuin merkkijonotkin. Tätä minä teen työkseni joka päivä. Ehkä kaikki eivät ajattele samoin kuin minä.

Referenssiä:

Science Alert: Kaljurotta on immuuni syövälle, eikä vanhene.

Wiki: Totaalinen sodankäynti

T&T: ”Olemme viimeisiä homo sapiensin sukupolvia” – hittikirjan kirjoittanut historioitsija synkkänä, varoittaa digitaalisesta algoritmien diktatuurista

YLE: Suomeen perustetaan koneälypuolue

T&T: Sofia tuli Suomeen

Koodauksen esoteerisyys

Mitä itse ohjelmointia olen tehnyt, niin aina tulee vastaan tiettyjä ajatuksia, jotka eivät ole mitenkään uusia, vaikka itse luulee jotain ymmärtäneensä. Monet vähänkään enemmän ohjelmoineet ymmärtävät, että ohjelmointi on oikeasti jotain aika erikoista. Koodi itsessään ei ole mitenkään kummallista, vaan sen kategorisoiminen tiettyyn ryhmään on hämmentävän vaikeaa. Ohjelmakoodi itsessään on täysin loogista ja rutiininomaista suorittamista, joka ehkä onkin isoin ongelma.

Kuva 1. Oli työkaverini kanssa puhetta minun happamasta orginaalista gallialaisesta belgialaisille nuorille kehitetystä itse panemastani oluesta, jota hän epäili jonkinasteiseksi villihiivaolueksi [wiki/lambic, Zamnesia/galliaOlut]. Suoritteli tätä ”keskiaikaista” luostariolutta ostamaan.[belgianBeerFactory]
Jotenkin aina itse tehdystä oluesta tulee mieleen seuraavan videon ale eli pintahiivaolut, joka ei siis ole tätä nykyistä ruokakaupoista saatavaa kliinisen kirkasta lageria. Ehkä pitäisi tuntea huonoa omaatuntoa, kun Rome Total War peliä pelatessa pitäisi oluen ja sianlihan sijaan nauttia italialaista punaviiniä ja pizzaa [beachHouseKitchen].

Ehkä kuitenkin on oikein samaistua pohjoisiin barbaarisiin kansoihin, joihin itse vähintäänkin kuulun, jos kerran 2k vuoden takaiset belgialaiset/hollantilaiset (Gallia) ja saksalaisetkin (Germaanit). Kiva peli kuitenkin, kun pääsee hyppäämään antiikin aikaisen johtajan saappaisiin.

Nykyajan menestyneeltä johtajalta ehkä odetaan jotain muuta kuin ei-meidän-kaverihin kuuluvien mahdollisimman suurta hävitystä ja psykopatiutta? Melkoisen sairasta se isojen poikien toiminta Raamatun kirjoitusaikana oli. Ikävän usein moni tekee itsemurhan tässä maailmassa, eivät koe vahvimman vallalla hallitsevien vallanpitäjien puolustavan heitä.

TTY:n laitosjohtaja Tommi Mikkosen näkemys siitä, että onko ohjelmointi tiedettä, taidetta vai kansanperinnettä, niin on yhä hyvä kysymys. Itseäni kovasti myös mietityttää, että miten ohjelmointia tulisi opettaa. Olen tässä blogissani väittänyt tai ainakin esittänyt näkemykseni, jonka mukaan ohjelmointia tulisi opettaa ammattikoulussa. Tietysti taustalla on omat tekijänsä, mutta nykyinen opetusmalli on ilmeisen heikko ohjelmoinnin opettamiselle. Ei varmasti ole vieras tai uusi ajatus, että yliopistossa on isoja ongelmlmia sen suhteen, että miten ohjelmistoalaa tulisi opettaa. Osaamista varmasti on nykyisistä ohjelmistomenetelmistä, ongelma ei siis ole siinä, vaan sen vähäisenkin tiedon siirtämisessä opiskelijoille.

Ohjelmistoalaa usein teknillisestä taustastaan johtuen nähdään hyvin insinöörimäisenä. Tämä ajatustapa korostuu etenkin Suomessa, Yhdysvalloissa ohjelmistoala nähdään enemmänkin käsitteenä CS eli Computer Science eli omana tieteenalana.  En osaa sitten sanoa, että onko suomalainen vai yhdysvaltainen käsite enemmän pielessä, vaan taustalla on paljon syvällisempi ongelma.

Itse olen känyt Seinäjoen ammattikorkeakoulun, jossa oikeasti yritettiin olla erittäin käytännönläheisiä. Mielestäni ajatus oli erittäin hyvä, etenkin sulautetuissa järjestelmissä rento ilmapiiri auttoi paljon, oppimista tapahtui. Toisaalta valitettava fakta ohjelmoinnin opetuksen takana oli se, että minulla taustalla omaa täysin vaatimatonta harrastuneisuutta, joka antoi aivan uskomattoman etulyöntiaseman moniin lukion käyneisiin opiskelijakavereihin. Jo ennen opiskeluaikaani pidin tätä panosta naurettavan vähäisenä, nykyäänkin hämmästelen, että miten en osannut nuorempana tajuta, että miten kriittistä ja merkittävää se pienikin näpräys oli.

Ehkä vieläkään opetuksessa ei täysin ymmärretä, että ohjelmointi on erittäin latteaa vaatimustastoltaan. Ohjelmointi ei vaadi mitään syvällistä ymmärrystä yhtään mistään, vaan hirveästi ymmärrystä monesta pienestä tekijästä yhtä asiaa kohti.

Ohjelman koodaus on kuin valehtelua. Sinun pitää tuottaa jokin toimiva vale, joka kestää kaikki kriittisimmätkin tarkastelut, eikä koskaan voi olla täysin varma oman valheensa paikkansapitävyydestä. Valettasi voidaan käsitellä oikeudessa, tuhansien vuosien päästä, kenen tahansa tai minkä tahansa kulttuurin ja aikakauden aikana.

Itse vertaisin erinomaista ohjelmaa raamattuun. Erittäin hyvä ohjelma kestää kaikkien niiden sukupolvien ja erilaisten ajatusmallien mukaiset käsittelyt. Se on ympäripyöreä kokonaisuus, jossa ei voi tarrata mihinkään terävään kulmaan. Mistään sitä ei saa kräkkeröityä auki, mutta silti se aina on absoluuttisesti ei-väärässä. Se ei sorru sellaisiin kulttuurisidonnaisuuksin mielikuville, kuten että esimerkiksi punainen väri on maskuliinen tai että sukupuolia on 60 kappaletta. Silti se esittää jotain sellaista asiaa, jota sen tavoitteisiin kuuluu. Silti se ei ole tiedettä, vaan ajaa omaa asiaansa.

Hyvän koodarin piirre on se, että ymmärtää hyvin erilaisia ajatusmalleja ja osaa ajatella ”out of the box”. Konservatiivista kulttureista on harvemmin tullut hyviä ohjelmitokeskuksia. Uskon näillä kahdella tekijällä olevan korrelaatiota. Hyvä koodari on älykäs ja vähintäänkin osaa ajatella liberaalisti eli vapaasti. Kutsuisin tätä liberaaliutta tietynlaiseksi luovuuden käänteisyykseksi, jolloin ymmärtää luovuuden haasteet reaalimaailmassa, jotta osaa luoda rajat ja määritellä ohejelman toimintaa. Ohjelmoinnissa jää todella helposti kiinni omasta tyhmyydestään ja tietämättömyydestään. Koska omaa tietämättömyyttään ei tiedä, niin olisi hyvä, että ohjelman testaajana toimisi toinen ohjelmasta täysin tietämätön ohjelmoija tai vähintäänkin ennakkoluuloton lapsi.

/**********************************************/
/* first editions                             */
/*   2017-12-29 Tuomas Liikala Seinäjoki      */
/* Sen lauluja laulan, jonka leipää syön Oy   */
/**********************************************/
/* Itselläni on hyviäkin muistoja Tampereelta */
/* vuosilta 2013 - 2016,                      */
/* synnyin Tampereella vuonna 1988.           */
/* Silti minulle *se kaupunki etenkin         */
/* kaupunkina oli jotekin liian               */
/* vasemmistolainen.                          */
/* Pidin TTY:sta ja monesta                   */
/* muustakin asiasta, ei sillä                */
/**********************************************/
/* Protip: vuonna 2037 pyörähtää              */
/* 32 bittinen ajanlasku ympäri               */
/**********************************************/

Referenssejä:

Manifest for software craftsmanship (#24074)

Aikajärjestelmän määritelmä on suoraa sanottuna kivikaudelta: PHP Document: Date()

Wiki: Juliaanien kalenteri (Saturnalia)

klo 23:59:60 Wiki: Karkaussekuntti

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. Lyhimmä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, mutta ettei töihinhaussa tärpänny opintoaikoina. Erityisesti pidin 24/7-kulttuurista eli koulu ja tietoteekkarikilta oli melkein aina auki. Elämä oli hieman kuin jossain Japanissa [tiede.fi]. TTY:n tiloissa tuli kerran oltua algoritmikurssin viimeisen tehtävän takia 30 tuntia putkeen.

Kuva 1. Minun kuusikulmiollinen vappulakkini (sis. satojen grammojen silkkitupsu) puuvillasivuisen dippatyöni päällä [TEK]
TM: Kielioppivirheistä huomauttelevista ihmisistä paljastui yhteinen piirre: he ovat mänttejä

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 vain oman näkemykseni 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 pehmeitä 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ö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]