Aihearkisto: Tietotekniikka

Kotipalvelin – iteraatio 2

JOHDANTO

En sittenkään ole vielä lopettanut oman palvelimeni kehittämistä.

TYÖNKUVAUS

Jatkan tämän verkkojärjestelmäni kehittämistä, vaikka en ole investoinut mihinkään kalliiseen reitittimeen. Nyt toimii onneksi jo sillatun modeemin kautta sekä oma verkkoliikenne että palvelimen liikenne. En ole mikään verkkoguru, niin ollut hieman ylimääräistä ongelmaa ymmärtää, että mistä postista minnekin ne paketit liikkuvat. Olen jo esinuorena oppinut koodaamaan niin, että yksinkertaisesti yrityksen ja erehdyksen kautta brute forcella paukuttelin C-kääntäjään erilaisia yhdistelmiä. Se on minun tapani oppia; selvittää ja poissulkea ei-toimivat tavat tehdä jotain.

Lopusta tarkoitin Photoshop 3. eli ensimmäinen versio, jossa on layerit eli eriytetyt kerroksittaiset piirtopinnat yhden bitmapin sijaan.

TULOKSET

Kun en tiennyt asioista vielä, niin suhtauduin kriittisesti tähän kaapelimodeemiin, joka nyt nolottaa itsetunnon takia. Mutta nyt kun tietää signaalin tulevan samaa johdinta kuin television signaali, sekä miten kauniissa synkronissa valot vilkuttaa pöydällä, niin nyt sitä osaa arvostaa erittäin paljon. Livenä tuike on paljon näyttävämpää kuin videolla, jossa on luultavasti joitain optimointeja vähentämään kuvassa esiintyvää vilkuntaa. Ilmeisesti ledipiiri on jostain joulutuikusta, koska vilkkuminen on ihan samanlaista jopa tietokone ollessa sammuksissa, kunhan vain tietokoneen virtajohto on kiinni.

Jostain syystä isäntäkoneella pitää olla Apache aktiivisena käynnistäessä, jotta virtuaalikoneiden DHCP-toimii oikein. Toisaalta Apache pitää sammuttaa ennen kuin liikenne toimii virtuaalikoneille. Ilmeisesti myös kaapelimodeemi virtakytkimen kliksuttelu on oleellinen osa tätä rituaalia.

musiikkispoileri
[collapse]

Virtuaalipalvelimille määrää voisi kasvattaa todella helposti, kun on valmiit imaget, joista voisi vain ottaa niitä käyttöön. Siinä kymmenen neitseellisen virtuaalikoneen jälkeen tämä 6 watin lämpötehoinen halpa kahdella ytimellä varustetun prosessorin resurssit ovat hyvin käytössä.

Olen hieman miettinyt, että miten tämä kaikki liikenne menee tässä omassa palvelinkeskuksessani. Tuntuu hieman siltä, että tämä kaapelimodeeemin kaapelista tuleva signaali tulee varsin dumppina siltauksena ulos tästä pöntöstä. Osoite on kuitenkin varsin staattinen, ehkä palvelin pyytää uutta osoitetta vasta edellisen muuttuessa ei-toimivaksi.

Kuvan 1. mukaisesti taas yrittää porukka kräkkeröidä palvelintani Kiinan kautta. Osoite on jo monta kertaa merkitty tunnetuksi kräkkeriksi [1]. Toivottavasti käyttämäni öökkeset-salasanassa edes hieman suojaa. root-käyttäjää Otin myös uutena asiana Debianin UFW-palomuurin käyttöön, joka blokkasi tosi hyvin suurimman osan porttien koputtelijoista.

Kuva 1. Hieman palomuuriin conffausta, ettei palvelin kaadu levytilan loppuessa kesken.

Vähemmän näitä verkkojuttuja on tullut tehtyä, niin voisi olla mielenkiintoista kokeilla, että voisiko sitä IP-osoittetta asettaa staattisesti haluamakseen. Ehkä tämä Arris vain muuntaa kaapelin signaalin signaalin taajuuksien kaista-alueet suoraan IP-osoitteeksi, en tiedä. Ihan sama.


Onko tämä kaapeli sitten jotenkin huoneistokohtainen, vai spämmiikö tämä nyt sitten sillatussa tilassa näitä paketteja kummallekin fyysiselle verkkoadapterille. Pitäisi ehkä hieman kokeilla staattiseksi puukotetuilla IP-soitteilla, että mitä tuo Arris oikein lähettää ja minne. Ihan kiva tietysti myös, jos voi aina vaihtaa staattisesti oman IP.-osoitteen toiseksi osoiteavaruudesta, luo tietoturvaa itselleni verkko selatessa. Hyvä lisä salatun VPN:n ja Tor-selaimen lisäksi, että jopa lähtöosoitteen liikenteelle voi vaihtaa itse manuaalisesti.

Kuva 2. pientä domainien konffailua palvelimelleni.


Voisi olla hyvä minun jatkossa hieman sivistää itseäni, ehkäpä suurin heikkous itselläni on tämä verkkoliikenne. C-kielellä ohjelmakoodin pyörittely sujuu ja muuta vastaavaa. Samoin Front-End -ohjelmoinnisssa olen jo oppinut hieman kaikenlaista, ettei ainakaan selaimeen voi luottaa yhtäään, että mitä se sattuu lä’hettämään palvelimelle. PHP-kieltä nyt osaa kaikki, itse jopa aika hyvä siinä mm. tietoturvan ymmärryksen osalta.


Hyvä kaverini Def on jo saanut tehtyä itse oman DNS-palvelimen, joka lähettää halutunlaisia asioita. Ilmeisesti C-kielellä koodattu vastaamaan normaalia DNS-palvelinta. Hän myös löydysi Linuxin HTTPS-sertifikaatin tarkistuksesta puutteita. Välivaiheet tallennettiin 8 tavun charreina välivaiheissa prosessorin rekisteriin. josta niiden lukeminen oli mahdollista ja salaus pystyttiin purkamaan konekielellä. Korjaus hyväksyttiin hiljattain Linuxiin otettavaksi käyttöön.

FURTHERIA

Minulla on jo pidemmän aikaa ollut tavoitteena päästä muuttamaan ulkomaille töihin. Tämän johdosta olen visioinut uuden sivuston taikka blogin kirjoittamista englanniksi, jolloin kehittyisin siinä valtavasti. Aivan samoin kuin on tämä kotipalvelimen toteutus, niin samoin englannin kieli ei ole minun kaikista vahvin osaamisalueeni, vaan kirjoitettu englanti vaatii harjoitusta. [1]

En odota mitään parempaa elämää ulkomailta, mutta ehkä hieman erilaista ja vaihtelua. Kaikilta puolin en ole ollut tai ole tyytyväinen siihen kohtaloon, joka Suomella on minulle tarjota. En myöskään ihan usko, että kaikki kykyni tulisi ihan täysin 100% käyttöasteella yhteiskunnan hyödyksi. Prioriteetissa kyse ei siis edes ole yksinomaan tai ensisijaisesti rahasta tai materiaalisesta elintasosta, vaikka silläkin on aina oma merkittävä painoarvonsa. [1]

Olen myös harkinnut Suomea ja tämän maan päätöksiä kritisoivaa sivustoa. En kuitenkaan tällä hetkellä halua sellaista kirjoittaa, kun asun tässä maassa. Ei Suomi ole aivan Kiina, mutta kuitenkin ns. sivistysmaista ehkä kaikista lähinnä sitä. Enempää en ota nyt kantaa tämän maan päätöksentekoon. [1]

REFERENSSIT

[1] AbuseIPDB: 193.201.224.218
[2] Wikionary: -leptic
[3] Pastebin: Visionaring
[4] Pastebin: Pohdinta

Oman palvelimeni implementointi

Nyt olen päässyt tilanteeseen, jossa olen saanut toteutettua ja testattua ensimmäisen iteraation kotipalvelimeni toteuttamisesta. Paljon ilmeni uutta, mutta paljon myös onnistui vähintään tavoitteiden mukaisesti. Jopa osa asioista ylitti odotukset. Kokonaisuutena omalle kotipalvelimelleni ei ole järkiperusteita.

Johdanto

Olen siirtämässä omia palvelimia kohti uusia systeemeitä. Tässä osaltaan on oman osaamisen kehittymisen kohti alemman tason vahvempaa ymmärrystä. Toisaalta kyse on myös tietoturvasta, kohti paremmin suojattuun verkkoliikenteeseen verkkopalveluiden käyttäjien ja ehkä myös minun itsenikin suojaamiseksi.

musiikkispoileri
[collapse]

Oman sähköpostini siirsin jo luotettavalta vaikuttavalle hostaajalle, jossa toimitusjohtaja on jopa laittanut oman kuvansa osaksi vakuuttelua. En edes harkinnut hieman pidemmän suunnittelun ja asiaan perehtymisen jälkeen oman sähköpostipalvelimen ylläpitoa toistaiseksi. Ehkä sekin aika tulee, mutta nyt maksan 60 dollaria vuodessa hyvästä tilini ylläpidosta. Toivottavasti nyt ei sähköpostiviestini katoa, kuten kävi edellisen hostaajan aikana. [1]

Tulokset

Olen saanut nyt kaksi erillistä virtuaalikonetta toimimaan omassa kodissani. Kummassakin toimii oma erillinen sivustonsa. Sivujen tekeminen ei itselleni ole ongelma, verkkoliikenteen saaminen toimintaa sen sijaan oli. Eikä se vieläkään ihan täydellisesti toimi, vaan joitain isompia tai pienempiä muutoksia voinee tulla.

reititys

C:\WINDOWS\system32>tracert neurolepti.fi

Tracing route to neurolepti.fi [104.31.80.112]
over a maximum of 30 hops:

1 124 ms 81 ms 78 ms ams-a63.ipvanish.com [81.171.98.202]
2 64 ms 70 ms 68 ms 151.139.80.20
3 61 ms 67 ms 58 ms 151.139.80.3
4 98 ms 98 ms 98 ms be5435.rcr21.b038092-0.ams03.atlas.cogentco.com [149.29.2.81]
5 63 ms 63 ms 72 ms be2413.ccr42.ams03.atlas.cogentco.com [154.54.37.241]
6 69 ms 74 ms 62 ms be2447.rcr21.b021535-1.ams03.atlas.cogentco.com [130.117.50.250]
7 70 ms 69 ms 68 ms 149.14.83.58
8 141 ms 64 ms 137 ms 104.31.80.112

Trace complete.

C:\WINDOWS\system32>tracert neuroleptit.info

Tracing route to neuroleptit.info [104.24.112.105]
over a maximum of 30 hops:

1 407 ms 587 ms 319 ms ams-a63.ipvanish.com [81.171.98.202]
2 330 ms 459 ms 502 ms 151.139.80.20
3 77 ms 55 ms 58 ms 151.139.80.3
4 96 ms 80 ms 72 ms be5435.rcr21.b038092-0.ams03.atlas.cogentco.com [149.29.2.81]
5 61 ms 80 ms 67 ms be2412.ccr41.ams03.atlas.cogentco.com [154.54.37.97]
6 65 ms 69 ms 83 ms be2322.rcr21.b021535-1.ams03.atlas.cogentco.com [130.117.50.82]
7 68 ms 83 ms 82 ms 149.14.83.58
8 290 ms 328 ms 358 ms 104.24.112.105

Trace complete.

[collapse]

Kuvan 1. mukaisesti verkkosivut näyttävät tulevan erillisestä kanavasta ulkomailta eli Alankomaiden Amsterdamista VPN-yhteydellä täysin oikein ja turvallisesti, joskin suojaamattomana paljaana http-viestintänä näiden kahden verkko-osoitteen välillä.

Suojattu eli https-yhteys vaatii salaussertifikaatin lisäämistä palvelimelleni, jolloin palvelimeni salaisella avaimella ja julkisen sertifikaatin avaimella voisi varmistaa, että salattu verkkosivu on todellakin oikeasta palvelimestani.

Salauksella ei sinällään ole juurikaan käyttäjille merkitystä, kun he eivät syötä omia salasanojaan tai henkilötietojaan sivustolle. Blogini kirjoituksissa ei ole mitään salattavaa, kerran ovat muutenkin julkisesti kaikkien luettavissa. Salaus ei suojaa liikennettä vaan viestin sisällön, hieman vastaava suoja kuin kirjesalaisuus Suomen perustuslaissa. Jos haluaa salata viestiliikenteen, niin käytännössä ainut tunnettu tekniikka siihen on Tor-selain vuonna 2019 [4].

Torspoileri

[collapse]

Tämä toivottavasti todistaa, että palvelimeni ja domainit näkyvät Internetissä, eikä vain minun omassa sisäverkossani. Itselleni se riittää, täten ei ole tarvetta pitää palvelimia verkossa. Vasta kun saan järkevää sisältöä, niin jätän ne ylös Internetiin.

Kuva 1. näkymä selaimessa.

Kuvassa 2. Verkkosivut esitettynä sellaisessa muodossa kuin ne ovat palvelimessa näkyvissä. Omien taustojeni takia käytän rautatason palvelimessani graafista käyttöliittymää, kun olen itse tottunut siihen. Tietysti virtuaalisissa palvelimissa olen jättänyt graafisen käyttöliittymän asentamatta.

Kuva 2. Näkymä palvelimen graafisessa tilassa.

Sammutin palvelimeni, niin näemmä bootatessa ei ihan suoraan sivut lähteneet toimimaan virtuaalikoneiden käynnistymisen jälkeen. Isäntäkoneen HTTP- ja SSH-yhteys piti sammuttaa, jotta porttien verkkoliikenne siltautuu oikein. Asiat korjautuivat Kuvan 2 näköisessä näkymässä kyseisen säädön jälkeen.

Kuva 3. Rebootin jälkinen konffaus palvelimien saamiseksi toimimaan manuaalisesti.

Vahingossa siis olin saanut virtuaalikoneet toimimaan siltä osin, minulle sattui hyvä tuuri. Vastaisuudessa pitää tehdä tämä konffi johonkin bash-scriptiin virtuaalikoneiden käynnistämisen automatisoinnin oheen, jotta virtakatkojen yhteydessä sivut nousisivat automaagisesti ylös. Nykyisellään palvelin on enemmänkin alhaalla kuin ylhäällä, kun siellä ei ole tärkeää sisältöä.

Yhteenveto

Pidän tätä saavutuksena, koska verkkoliikenne on asia, joka on omassa osaamisessani ollut erittäin suuri heikkous. Nyt en ole kuitenkaan niin heikko, vaan olen oppinut. Tekemällä oppii, se tuli taas itselleen osoitettua.

Ehkä oma ymmärrykseni on vielä heikolla tasolla, mutta olen saavuttanut jonkinlaista ymmärrystä. Mitä enemmän oppii, niin sitä enemmän Internetistä ymmärtää, että miten vähän Internetin toiminnasta tietää.

Visoin palvelimeni saamista 3G-verkkoon, koska minulla on edullinen multi-SIM. Laitoin pyynnön julkisesta IP-osoitteesta Elisalle, mutta kuulemma se ei ole mahdollista multi-SIM -liittymässä.

Jotain pitäisi tehdä, että saisin myös oman henkilökohtaisen kotikoneeni verkkoliikenteen toimimaan tämän rakentamani systeemin läpi, koska en saanut NUC:n hot spotia toimimaan. Ehkä vielä ajurit on jotenkin korjattavissa. Ehkä jollain palikalla saan reititettyä kotikoneeni liikenteen samaan verkkoon. Ehkä tietoturvan kannalta näin ei edes kannata tehdä, ärsyttää vain maksaa törkeän kovaa hintaa erillisestä kiinteästä verkkoyhteydestä.

Loppujen lopuksi tämä nykyinen virtuaalipalvelimeni on järkevin vaihtoehto jatkossa. Oma nykyinen virtuaalipalvelimeni maksaa 4,95 euroa kuukaudessa, mutta resurssit ovat hyvin rajalliset, joskin blogien ja yksinkertaisten sivujen ylläpitoon riittävä. 10 gigan SSD riittää oikein hyvin, blogini koko on pian lähes yksi gigatavua. [5]

Kuva 5. Poikkeuksellisen korkea yhden prosessoriytimen kuormitustilanne virtuaalipalvelimellani.

2 gigan keskusmuisti riittää myös hyvin, suurin osa siitä on vain prosessoriaikaa ja verkkoliikenteen kuormitusta vähentävää, sekä vasteaikaa lyhentävää välimuistia, joka sisältää mm. tämän sivuston blogiartikkeleita. Keskusmuistin loppuessa käyttöjärjestelmä käyttää sivutusta eli virtuaalimuistia, jolloin käyttöjärjestelmä tallentaa keskusmuistista ajoittamattomia eli ei-scheduloituina olevien prosessien sisältöä SSD:lle eli massamuistille vasteajan kustannuksella. Siutus on monelle tuttu ilmiö, kun esimerkiksi
20 välilehtinen selainta on ollut alapalkissa pitkän aikaa, samalla kun on käyttänyt Wordiä keskeytyksettä monta tuntia.

retrospoileri
[collapse]

Jotta oma palvelin olisi edes suorilta kuluiltaan edullisempi vaihtoehto kuin kilpailijat, niin se vaatisi oman arvioni mukaan kymmenen tai vähintään monen hengen yhteisesti jakamaa palvelinta. Samoin, jos itsellä olisi tarvetta koko palvelimen resursseille, niin tällöin harrastusmielessä oma palvelin olisi mahdollisesti joillain kriteereillä arvioiden järkevä päätös.

REFRENSSIT

[1] StartMail: privacy
[2] IP WHOIS Lookup
[3] IP Vanish
[4] Tor Browser
[5] OVH: VPS
[6] Kukko Pärssinen: C-kieli

Oman palvelimeni suunnittelu

Olen saapunut tilanteeseen, jossa suunnittelen oman fyysisen palvelimen ottamista käyttöön. Paljon on jo rautaa hankittuna valmiiksi, mutta paljon on myös opeteltavaa ja tehtävää. Oman palvelimen ylläpitäminen on ehkä hieman haastavaa, mutta samalla myös opettavaista ja mukavaa. Se on kiinnostavuudeltaan hieman verrattavissa chilien tai muiden vastaavien kasvien sisäkasvatukseen.

CloudFlare

Sivustot elävät ja ovat jatkuvassa muutoksessa. Omakin blogini elää ja vaihtelee osoitteita, joissa se toimii. Tämän ei kannata antaa häiritä. Toisinaan sivusto on alhaalla, eikä itselläni ole tavoitteenakaan päästä 99.95 % saavutettavuuteen. Pyrin kuitenkin pitämään blogini pystyssä, koska kuvan 2 mukaisesti päivittäin blogissani on kävijöitä usein ainakin 300 eri IP-osoitteesta, joista n. 10 – 20 % on Suomesta.

Kuva 2. kävjämäärät CloudFlaren tilastojen mukaan 23.2.2019.

Ihan harrastusmielessä sivustoa ylläpidän, oman osaamisen kartuttamiseksi. Työkseni teen tällä hetkellä Front End -ohjelmointia. Kuitenkin yleisen alan tuntemuksen takia on tärkeää, että hallitsee myös palvelinten ylläpidon edes välttävällä tasolla. Kaikki ohjelmistokehityksen ”tasoja” työstävää ohjelmoijaa kutsutaan Full Stack -ohjelmoijaksi, etenkin kun kyse on vähintään keskisuuresta ohjelmistosta.

Joskus on käynyt niin, että ei ole saanut omaan palvelimeeni yhteyttä moneen tuntiin. Lopulta onkin paljastunut, että virtuaalipalvelin on itsessään ollut jostain syystä pimeänä. Jos kotiin omat palvelimet saan, niin saavutettavuuden ei voi ainakaan odottaa parantuvan nykyisestä, vaikka OVH-hostingin toimintavarmuus ei oikein vakuuta itseäni. Lupaus 99.95 % saavutettavuudesta meni kerralla, kun palvelin yksinkertaisesti pimeni moneksi tunniksi SSH-avaimen käyttöönoton jälkeen ilman omaa syytä. Oli varsin pelottavaa siinä tilassa, asiakaspalvelu ei tietysti tiennyt mitään, eikä mukamas mitään tietoa ollut palvelinten toimintaongelmista heidän tiedossaan. Se herätti entistä enemmän epäilyksi OVH-hostingin laadusta, kun eivät itsekään olleet tietoisia, että palvelin oli kaatuneena/pimeänä monta tuntia ilman, että firma itse olisi mitenkään tietoinen asiakkaalle aivan selvästi ilmenneestä todella pitkästä blackoutista, jossa suora yhteys palvelimen IP-osoitteeseen ei vastannut mitään ja PuTTY aikakatkaisee yhteyspyynnöt. OVH-hostingilla oli vieläpä pokkaa väittää; ettei niin olisi käynyt, vaan vika olisi ollut asiakkaan osaamattomuudessa.

Riskienhallinta

Todennäköisesti tulevassa palvelimessani ei ole minkäänlaista varavirtaa, ja saattaa johtoja tökkii robotti-imuri viikoittain. Itse joskus saatan repiä jatkoroikkia omiin tarkoituksiini, kaataa olutlasin (kerran melkein kävi jo näin -Admin) taikka oksennan raudan päälle tai kusen sen päälle baarista tullessani, todennäköisesti imuroin täyhdellä kaistalla pornoa levyn täyteen, saatan heitellä palvelinlaitteistoa PCP-meta -kombopsykoosissa, kännissä tai muussa vastaavassa tilassa konffaan tai rekursiivisesti deletoin jotain vääriä tiedostoja kunnes pääsen ulos hullujenhuoneelta, poliisit takavarikoivat palvelimen kuulusteluita varten pariksi viikoksi minun ollessa samalla pidätettynä sellissä epäiltynä, jonka jälkeen tulen muuttamaan eri asuntoon odottamaan verkkoliittymää. 3G verkko ruuhkautuu niin pahoin, että yhteys käytännössä katkeaa etenkin Supon ja muiden minua vihaavien tahojen palvelunestohyökkäyksen aikana. Positiivisena puolena todennäköisesti ainakin osa palvelimen sähköistä voi olla jopa vikavirtasuojatun jakorasian päässä, ellei sitä satu tarvitsemaan johonkin muuhun käyttöön, jolloin palvelin voi olla ilman sähköjä, jos esim. pitää kolvata piirilevyä. Olen siis akateemisesti koulutettuna tietotekniikan DI;nä miettinyt riskienhallintaa ja riskien ehkäisyä hyvin tarkasti, etenkin todennäköisesti toteutuvat riskit palvelimen saavutettavuuden menettämiseen kirjasin ylös, osittain myös arvioin riskin toteutumista seuraavan keston palvelimen saavutettavuuden menetykselle.

Verkon osoitekin vaihtelee dynaamisesti, joiden muuttuessa reititin lähettelee DNS:n muutospyynnön CloudFlarelle, josta se sitten korjaantuu luultavasti tunnin sisällä eri DNS-palveluihin. Sertit on jo nyt sekaisin, kun ei kiinnosta maksaa viittä euroa kuukaudessa päivitettävistä serteistä. Kiintolevyille, virranlähteille ja millekään muullekaan komponentille ei ole minkäänlaista varmennusta, korkeintaan varmuuskopioin sivustoa kerran vuorokaudessa, parhaimmillaan kuukausittain tulisi virtuaalikoneista varmuuskopiot, mahdollisesti kovan kryptauksen jälkeen siirrän varmuuskopiot muutaman kertaa vuodessa pilvipalveluun suojaa erilliseen tilaan, jos vaikka joku pesäpallomailla riehuva rosvo murtautuu ja hakkaa/varastaa palvelimeni ja kaikki varmuuskopiot, niin kyseisen hirveän katastrofin ja sairaalan teho-osastolta poistumisen jälkeen saan vielä palautettua järjestelmät viimeisenä oljenkortena äärimmäisen hyvin suojatun ja paperiin kirjatun salausavaimen avulla, samalla kun muu omaisuus ja elämä on muuten täydellisesti tuhottu materiaalisesti ja henkisesti. Jos esim. levyasema hajoaa tai muuta pientä, niin aivan hyvin voi tulla viikon käyttökatko palvelun palaamiseksi uudestaan linjalle, jos nopeasti korjaan laitteiston kuntoon eli tilaan heti Suomesta uutta rautaa rikkinäisen tilalle, jonka jälkeen kaikki onnistuu täydellisesti ja asiat menee kerralla nappiin kuin elokuvissa, kunhan harjoittelen sitä muutaman kertaa valmiiksi.

Viikon käyttökatko tarkoittaa vuodessa 98 % saavutettavuutta, jos ei huomioi muita katkoksia. 99 % pidetään yleensä tyydyttävänä tasona, 95 % eli puolen kuukauden off-line vuoden aikana on välttävä minimitaso, jonka alittamista pidetään rajana surkealle palvelinten toimintavarmuudelle. 99.9 % eli 8 tuntia 45 minuuttia on hyvä, 99.99 % eli 52 minuuttia 35 sekunttia erittäin hyvä, 99.999 % eli 5 minuuttia 15 sekuntia on erinomainen ja 99.9999 eli 31 sekuntia on jatkuva on-line. Jotkin pilvipalvelut lupaavat jopa 99.99995 % saavuttavuutta eli palvelin voi olla saavuttamattomissa vuoden aikana korkeintaan 15 sekuntia, Joskus Facebookin palvelimet olivat 5 -15 minuuttiin alhaalla eli kerran kymmenessä vuodessa poikkeuksellisesti 99.99 % – 99.999 % matalassa saavutettavuudessa, josta tuli jopa heti juttua moniin lehtiin [3, 4]. Kyse oli luultavasti kriittisestä (epäonnistuneesta?) päivityksestä sivuston palvelimiin, joiden jatkuvan yhtäjaksoisen toiminnan aikana työntekijämäärä oli kasvanut 10 000 kertaiseksi ja käyttäjämäärä 1 000 000 kertaiseksi edellisen huoltokatkon jälkeen.

Rautaa

Itse olen oman kuvan 1 mukaisen mini-itx -kokoisen NUC-koneen ostanut. Aiemmin ollut toinen Intel Atomilla varustettu mini-itx, mutta päätin sittenkin ostaa ihan uuden reilun 100 puntaa maksavan eli halvimman Celeronilla varustetun tietokoneen palvelinharjoitteluun [2]. Aiemman koneen kotelo oli varsin heikosti hengittävä.

Kuva 1. Itse ostin tällaista rautaa palvelinkäyttöön, harjoitusmielessä. [2]

On yllättävää huomata, että energispihejä mini-itx -koneita on jopa palvelinkäytössä nykyään [1]. Kuitenkin esim. blogit kuormittavat todella vähän palvelinta, selaimen päässä tapahtuva kuormitus on valtavasti suurempaa. Täten nykyajan palvelimissa usein riittää aivan hyvin kännykän prosessorin tasoinen suorituskyky vähintäänkin riittävästi. Useimmiten suuri osa palvelimista on lähes tyhjällä kuormalla, jos niitä käytetään vain pelkkien blogien tai yksinkertaisten verkkosivujen näyttämiseen jopa suurella kävijämäärällä.

Kuva 2.Räkki-mallin mini-ITX-palvelin. [5]

Haluan antaa erityisen kunniamaininnan tekstini oikolukemisesta Oikofix-sivustolle. Kyseinen sivusto on ehkäpä para suomen kielen oikolukija. Itse todennäköisesti oikoluen vastaisuudella sillä blogiartikkelini. [6]

REFERENSSIT

[1] Mini-itx.com: Servers
[2] Mini-itx.com: Intel NUC5CPYH
[3] YLE: Facebook ei toimi – vikaa selvitetään
[4] IL: Facebook ja Instagram kaatuivat ympäri maailmaa – alhaalla myös Suomessa: ”Jokin meni vikaan”
[5] Mini-itx.com: R1U200 – 20W Short Depth 1U Rackmount Servers with Low Power Consumption Celeron N2930 and 1 or 5 Intel LAN
[6] Oikofix – oikoluen tekstisi

Rakkaudesta koodiin ketterästi

Miten ohjelmoijan tulisi suhtautua omaan koodiinsa ja ohjelmointiin? Miten ohjelmointiin ja ohjelmoijiin tulisi suhtautua? Miten Tuppu suhtautuu ammattimaisen ohjelmistokehittäjän rooliin työelämässä? Onko asiakkaan tarpeet tärkeämpää kuin laadukas ja hyvä koodi? mitä on hyvä koodi? Kuinka monta ihmistä tarvitaan koodaamaan yhtä ohjelmaa? Miten tämä kaikki hallitaan?

Vesiputous

Itselleni on hyvin jäänyt mieleeni yksi kuvaaja, jonka suomalainen Visual Basic -kirja avasi erinomaisesti muiden asioiden ohella. En itse ole sitä löytänyt uudestaan, mutta erittäin hyvin mieleeni jäi kyseinen projektin eri vaiheisiin käytettävä aika piirakkadiagrammina. Kyseisessä kuvaajassa ohjelmoinnin osuus oli hyvin pieni eli vain n. 15 %:n siivu, jollaiseksi aikajakauma on käytännössä osoittautunut isoissa projekteissa. Seuraava humoristinen Suomen jääkiekon 1995 vuoden MM-voiton Ihanaa leijonat ihanaa karikatyyri muistuttaa nykyään perinteisestä ohjelmistoalan projektimallista eli vesiputousmallista [17].

Minkälainen nykyaikana olisi piirakkadiagrammi, jos ohjelmistokehittäjän työaika kuvattaisiin sillä? onko huuhata väittää, että ohjelmistokehittäjän työstä ohjelmoinnin osuus on vain pieni osa työtä. Mielestäni tämä vanha perinteisen projektimallin viisaus on unohtunut vanhojen oppien demonisoinnin myötä.

”Kuinka monta blondia vaaditaan vaihtamaan lamppu?
– Kaksi. Toinen pitää lampusta kiinni ja toinen pyörittää tuolia.”

Kukaan ei tietääkseni ole koskaan väittänyt, että ketterässä ohjelmistokehityksessä ei tarvitsisi suunnitella, määritellä ja testata ohjelmaa [3]. Kyse on vain siitä, että ketterässä ohjelmistokehityksessä sitä tulisi tehdä jatkuvasti, eikä vain painottaen projektin alkupäätä. Samoin kukaan ei tietääkseni ole väittänyt, että perinteisessä projektimallissa ei saa palata bumerangina vaiheissa taaksepäin.

”In the 1980s and early 1990s, there was a widespread view that the best way to achieve better software was through careful project planning, formalized quality assurance, the use of analysis and design methods supported by CASE tools, and controlled and rigorous software development processes. This view came from the software engineering community that was responsible for developing large, longlived software systems such as aerospace and government systems.

This software was developed by large teams working for different companies. Teams were often geographically dispersed and worked on the software for long periods of time. An example of this type of software is the control systems for a modern aircraft, which might take up to 10 years from initial specification to deployment. These plandriven approaches involve a significant overhead in planning, designing, and documenting the system. This overhead is justified when the work of multiple development teams has to be coordinated, when the system is a critical system, and when many different people will be involved in maintaining the software over its lifetime.” [12]

Hyvin suunniteltu on puoliksi tehtynä

Iso osa ohjelmoinnista on vain perinteistä iffittelyä eli suomeksi jossittelua, johon moni ohjelmoija kompastuu nokkeluuttaan, kun tekevät liian moni-mutkaisia kikkareita. Ehtolauseiden ongelma on siinä, että se edellyttää valtavaa haara- taikka polkukattavaa testausta joko manuaalisesti debuggerin kanssa tai sitten automatisoiduilla yksikkötesteillä.

Näitä asioita voidaan mallintaa perinteisellä vuokaaviolla, joka on ajalta ennen ohjelmistoalaa. Jos jotain ei vuokaaviolta löydy testauksessa, niin ohjelmaa ei oteta tuotantoon. Näin hieman pelkistäen, ohjelmien testaus on oma laaja kokonaisuutensa.

Kuva 2. Vuokaavio eli Flow Chart UML-tyyliin. [1]
Miksi näin ei sitten aina tehdä koko ohjelmalle? Kyse on hyvin suurelta osin siitä, että kattavan vuokaavion piirtäminen ja automaatiotestien tekeminen vievät valtavasti aikaa. Kyse ei ole siitä, ettäkö ei olisi olemassa menetelmiä niiden tekemiseen. Vielä kun tähän lisätään kattava määrittelytiedosto, niin ajankäytöllisesti ei enää ehditä kehittämään ohjelmaa. [12]

Yksi iso ongelma perinteisessä projektimallissa on jatkuvasti päivitettävät suunnitelmat. Puhumattakaan odotettavista muutoksista asiakkaan tarpeeseen, jota asiakas itsekään ei yleensä tiedä, vaan olettaa ohjelmistokehittäjien tietävän. Kuvassa 1. hahmoteltuna ongelma visuaaliseen muotoon.

Kuva 1. tyypillinen vesiputous Ganttin kaaviolla.

Projektimallin speksaus rajoittaa ohjelmointia, ketterässä kehityksessä on perimmiltään ihan eri filosofia. Projektimalli sopii hyvin esim. Olkiluoto 3 – ydinvoimalahankkeeseen tai muihin rakennusprojekteihin, joissa halutaan minimoida rakennusaika eri toimijoiden kesken. Ohjelmointi ei ole mitään pikakirjoittamiskilpailua, vaan muistuttaa enemmänkin blogikirjoittamista.

Kuva 2. Loppu tällaiselle 1000-luvun ohjelmistokehitykselle. [5]
Asia ymmärrettiin kunnolla vasta vuosituhannen vaihteen IT-kuplan aikaan, kun sijoittajien rahat olivat loppu ja ei tullut mitään tulosta. Oli pakko keksiä jokin muu parempi tapa tehdä ohjelmia, kehittää kokonaan uusi ajatusmalli tyhjästä. Yhteiskuntia, ohjelmia ja muita vastaavia monimutkaisia järjestelmiä ei vain osata kehittää ylhäältä alaspäin johdetulla viisivuotissuunnitelmalla. Moni on varmasti sitä mieltä, että teoriassa asiat voivat toimia optimaalisesti, mutta käytännössä asiat ovat niin kaaottisia, ettei kukaan osaa niitä kaikkia käsitellä helposti.

Työajanseuranta

Työajanseuranta on alasta riippumatta hyvin ärsyttävää. Jokaisella alalla varmasti hyvin ymmärretään, että ihminen ei paljoa ehdi tai pysy tekemään työpäivän aikana. Tätä varten ennen teollistumista haalittiin viholliskansoista orjia, jotka tekivät raskaita töitä. Nykyään jopa kaupan kassat korvataan automatisoiduilla järjestelmillä. Myös tietojärjestelmissä ihminen on suurin pullonkaula, eikä ohjelmointi ole tähän mitenkään poikkeus.

”You should plan on working 60 hours per week. The first 40 are for your employer. The remaining 20 are for you. During this remaining 20 hours you should be reading, practicing, learning, and otherwise enhancing your career.” [7]

Ohjelmoijan odotettava työajankesto on kaikista vaihtoehdoista mahdollisimman pessimistinen arvio. Sen jälkeen kyseisen arvion saa kertoa piillä. Tämä on odotettavissa oleva työaika. Tämän voisi myös sanoa niin, että työajasta vain 15 % kuluu ohjelmointiin. Ajankäytön ymmärtäminen on monelle todella vaikeaa, että miten paljon kaikenlaista on ja miten vähän saa aikaan.

Asiaa voidaan lähteä myös LoC-käsitteestä eli koodiriveistä. Jos ohjelmoija kehittää ohjelmaa tasaisen hyvällä 100 rivin päivävauhdilla ja vuodessa on 200 työpäivää. Kun ohjelman koko on 100K riviä koodia, niin työaikaa ohjelman kehittämiseen kuluu 5 vuotta. Vastaava ohjelma 40K koodirivisenä 50 rivin päivävauhdilla valmistuisi vuoden etuajassa. Näin yhtenä perinteisenä tapana arvioida työaikaa. Vertailuksi Lidlin SAP-pohjainen ERP maksoi 500 M€, työstettiin 7 vuotta ja tulos oli 0 riviä koodia valmiina [4]. Tämä jos mikä vakuuttaa itseni suunnitelmatalouden toimattomuudesta nykymenetelmin.

”I remember feeling so good about myself for the long hours I was working. I remember feeling dedicated. I remember thinking that working at 3 am is what serious professionals do. How wrong I was!” [7]

Koodirivien laskenta on monien mielestä erittäin huono tapa tehdä työajan seurantaan, mutta oikein käytettynä kuitenkin paras tunnettu menetelmä. Esimerkiksi ammattikorkeakoulun opinnäytetyöni oli alle 10K riviä C#-koodia, jota myöhemmin laajensin mm. maanjäristyslaskemilla. Koodirivien arviointi vaatii vahvaa ymmärrystä ohjelmoinnista, joten ehkä sen takia turvaudutaan mm. tuntikirjanpitoon.

Tunteja seurataan myös laskutuksen takia, usein ohjelmia myydään joko kiinteähintaisina projekteina taikka sitten tunteina. Kyse on tästä markkinataloudesta, jonka opit eivät erityisen hyvin sovellu immateriaalisten ohjelmien myymiseen. Tämä herkästi johtaa samanlaisiin ongelmiin kuin suunnitelmatalouden tuotesuunnitelussa.

Hyvä koodi

Itse aikoinaan kun ohjelmointia aloitin, niin olin hyvin huolissani omasta osaamisestani. Jotenkin kuvittelin, että ohjelmoinnissa olisi jokin ns. viisasten kivi, jolla kaikki asiat ratkeaa. Kuitenkin asioita ja tapoja on oppinut enemmän ja enemmän, eikä vielä sitä kaiken kullaksi muuttavaa juttua ole tullut vastaan. Ei niin kaavioista, speksauksesta, työkaluista, olio-ohjelmoinnista, opeista, sertifikaateista kuin muistakaan alaan liittyvistä asioita saanut kaiken tekevää. Olen kuitenkin saanut huomata, että olen oppinut aiempaan nähden. Yleensä vaihtoehtojen hyvät ja huonot puolet oppii tiedostamaan, jolloin osaa valikoida tilanteeseen paremman vaihtoehdon.

”We are uncovering better ways of developing
software by doing it and helping others do it.” [3]

Olen ymmärtänyt, että ykkösien ja nollien oikein järjestelyä voi tehdä monella tavalla. Mikään niistä tavoista ei välttämättä ole täysin oikea tai väärä. Jos on rajapinta ulkopuoliselle taholle, portti tai toisen ohjelmoijan tekemä kirjasto, niin se pakottaa tekemään asiat samoin. Tällöin on hyvä, jos asiasta on dokumentaatiota, koska itse ei voi asiaa ratkaista haluamallaan tavalla.

Hyvä koodi on kuitenkin arvokasta, jota en itsekään aina ole ymmärtänyt [9]. En ole aina tiennyt mitä on ERP eli tuotannonohjausjärjestelmä, mutta olen niitä ohjelmoinut. Usein tulee vähäteltyä oman koodinsa arvoa, ei ymmärrä sen olevan valtavien rahasummien arvoista. Yksi Like-nappi voi olla Facebookille miljardien dollarien arvoinen, se tuo käyttäjille valtavasti hyötyä. Samoin Googlen hakukoneen etusivulle ei ole paljon muuta sisältöä kuin vain yksi tekstikenttä, mutta todennäköisesti silti se on paljon parempi kuin mikään muu monimutkaisempi ratkaisu. Koodin arvo on laskennallisesti tulo käyttöasteesta ja loppukäyttäjän siitä saamasta lisähyödystä. Käyttämätön ja asiakasta hyödyttämätön koodi on arvotonta.

Aivan samoin kuin koodirivien määrän laskeminen on ongelmallista työajan seurantana, niin ihan samoin koodin arvon laskeminen työtunteina on typerää. Usein yksinkertaisempi voi olla jopa arvokkaampi, siinä on vähemmän hukkaa ja turhaa roskaa. Etenkin käytettävyyden kannalta yksinkertainen ja selkeä on usein parempi, myös ohjelmakoodin ylläpidettävyyden kannalta yksinkertainen ja selkeä on yleensä parempi. Perinteisen mallin mukaisesti loppuvaiheessa huomatun asian korjaaminen voi olla työmääränä 50 – 200 kertaa isompi kuin projektin alkuvaiheessa [2]. Siis alkuperäisen yhden työpäivän työstä tulee loppuvaiheessa jopa yhden työvuoden lisätyö. Ratkaisuna tähän yritettiin siirtää suunnittelua mahdollisimman etupainotteiseksi. Oikeampi ratkaisu oli lisätä iteraatiota, eikä yrittää saavuttaa ”hole-in-one”.

Testaus

Ohjelmointi itsessään ei ole paljoa muuttunut 50 vuoden aikana. Ohjelmat perustuvat samalle strukturaaliselle paradigmalle, jossa konekieliset hyppylauseet on korvattu ennakolta sovituilla ehtolauseilla ja silmukoilla. Jos hypätää taaksepäin, niin  on silmukka. Vastaavasti koodissa hypätään eteenpäin, kun ehtolause ei ole loogisesti totta. Muuten koodia mennä riveittäin eteenpäin Yksinkertainen perusidea, joka ei ole muuttunut paljoakaan, ohjelmointi on ihan samanlaista nykyään perusperiaatteiltaan kuin ennemminkin.

Strukturaalinen/proseduraalinen ohjelmointiparadigma on jopa uusin lajissaan, olio-ohjelmointi ja funktionaalinen ohjelmointi ovat sitä vanhenmpia paradigmoja. Olio-ohjelmointi kuitenkin saavutti valtavaa suosiota 1990-luvulla C++:n myötä. Samoin Lispin seuraaja Clojure on hyvin vahvasti esillä etekin rinnakkaisuuden merkityksen lisääntymisestä, joskaan ei tähän asti koskaan ole ollut erityisen suosittu tapa tehdä ohjelmia. Ajatusmallina funktionaalinen ohjelmointi on kaikista vanhin eli ensimmäinen paradigmoista. Myös Microsofti on kehittänyt F#-ohjelmointikielen, joka on funktionaalinen ohjelmointikieli. Myös ihana C-kieli eli ”rakenteellinen konekieli” käyttää hyvin vahvasta strukturaalisesta periaatteesta huolimatta funktioita osana koodin structurointia/encapsulointia [14], joten melkein kaikki ohjelmointikielet käyttävät kaikkia paradigmoja mahdollisimman paljon hyödyksi.

”If I took a computer programmer from 1966 forward in time to 2016 and put her in front of my MacBook running IntelliJ and showed her Java, she might need 24 hours to recover from the shock. But then she would be able to write the code. Java just isn’t that different from C, or even from Fortran.” [8]

Miten mordernin kannettavan esittelisi ohjelmoijalle, joka on tehnyt ohjelmia aikana ennen mikropiirejä: ”Tässä kannettavassa on triljoonan tavun SSD-asema massatiedolle, 16 miljardin tavun keskusmuisti muuttujille ja ohjelmakoodille, välimuistia miljoonia tavuja ja sitten rekistereitä 16 kappaletta 64 bittisiin eli 18 446 744 073 709 551 616 kokonaislukuun asti. Lisäksi suorittaa useampaa säiettä kerralla, kun ei ole muuta käyttöä miljerdeille transistoreille keksitty.”

Moni asia on kuitenkin muuttunut valtavasti, nykyinen ohjelmistokehitys ei kuitenkaan ole samanlaista kuin aiemmin. Työkalut ja menetelmät ovat muuttuneet valtavasti. Tämä on kuitenkin yksi ketterän kehityksen periaatteista, usko tekniikoihin ja menetelmiin ei ole syy tai ratkaisu paremmalle ohjelmistokehitykselle. Ohjelmointi ei edes ole muuttunut juurikaan, ohjelmat vain ovat suurempia kuin koskaan aiemmin.

”And if I transported you back to 1966 and showed you how to write and edit PDP-8 code by punching paper tape on a 10 character per second teletype, you might need 24 hours to recover from the disappointment. But then you would be able to write the code. The code just hasn’t changed that much.” [8]

Tämä tuo erittäin paljon haastetta testaukselle. Aiemmin testauksen rajoitteena oli ohjelmien ja laitteiden suorituskyky. Nyt potentiaalia ja mahdollisuuksia on paljon enemmän kuin koskaan aiemmin. Ollaan tultu siihen pisteeseen, että edes laitteiden kehityksen jatkuva pienentyminen kohtaa fyysiset rajat. Seuraavassa videossa olevan raketin ohjausyksikössä ei ollut yhtäkään transistoria, mutta silti se voitiin toteuttaa.

Testaus on todella vaikeaa tehdä kattavasti, ohjelman haarautuminen johtaa ääretöntä lähentelevään määrään testejä koodin täydellisesesti kattavassa testauksessa. Rivikattavan testauksen voi saavuttaa, sitä yleensä pidetään miniminä, jonka saavuttaminen ei pitäisi olla mitenkään mahdotonta. Jokainen ohjelmaan kuuluva koodirivi tulisi testata.

Ongelma testauksessa myös on se, että milloin testi on ok. Ohjelmakoodi voi olla validia, ilman sitä se ei edes käänny [14]. Ajon aikana ohjelma kaatuu, niin silloin se ei toimi. Nämä asiat voidaan helposti testata. Näitä feilauksia tulee jatkuvasti, se on ihan normaali osa ohjelmakehitystä. Ohjelman todistaminen toimivaksi on jopa mahdollista, mutta ohjelman toimimattomuuden todistaminen on vaikeampaa.

Kuitenkin kun urallaan tähtää Britanniaan, niin voi osua Kuuhun. Iteäni Wernher von Braun on toiminut tietynlaisena idolinani omassa elämässäni. En ole koskaan kokenut suomalaista yhteiskuntaa omakseni, vaan olen halunnut muuttaa mieluummin Alankomaihin tai Belgiaan – eettisesti kolme-neljä sukupolvea suomalaista yhteiskuntaa edellä olevaan yhteiskuntaan [16]. Suomessa parasta on koulutusjärjestelmä, jota nykyiset hallituspuolueet romuttavat. Kokoomusta itse luulin sivistyspuolueeksi, mutta se on ehkä kaikista pahin junttipuolue.

Wernher Magnus Maximilian Freiherr von Braun (March 23, 1912 – June 16, 1977) was a German (and, later, American) aerospace engineer and space architect. He was the leading figure in the development of rocket technology in Germany and the father of rocket technology and space science in the United States.” [13]

Mielestäni Warner von Braun toimii hyvänä motivaattorina omalle uralle, hän on aloittanut koko uransa tyhjästä pienestä rakettiharrastelusta. Vaikka Suomessa ei ole itselleni mitään syytä olla, tai ei ole mitään syytä tukea tätä yhteiskuntajärjestelmää, niin silti kannattaa tähdätä korkealle ja yrittää eteenpäin, kun ei muuta voi. Humanismi, aatteet ja yhteiskuntajärjestelmät muuttuvat, mannertevälisen ohjeksen tekniikka säilyy. Eikö ole valtavaa ammattillista ylpeyttä pointtaava referenssi, että omana pomona on ollut seuraavanlainen kotoa kadulle heitetty tuleva poliitikko,  jonka opiskelupaikka evättiin tuntemattoman(?) juutalaisen toimesta, jonka kohtalo oli todistaa miljoonien juutalaisten näännytettiin hengiltä rangaistuksena virheestä. Kuitenkin on silti tullut hyvin toimeen hänen kanssaan ketterillä menetelmillä, vaikka oli pitkävihainen persoona? ”Sinähän halusit huippuälykkään pomon? [17]” [15, 21]

Hitler oli paljon edellä aikaansa. Hän käytti älykkyyttään ja lahjojaan politiikan popularisointiin. Ehkä hänellä olisi ollut parempaa annettavaa taiteessa, ehkä ei. Ehkä hän oli vain monta sukupolvea muita edellä.

Edellisten videoiden tapahtumat jakavat hyvin vahvasti ihmisten mielipiteitä, eikä niistä useinkaan osata keskustella asiallisesti, vaikka koulutettuna ihmisisenä ainakin minun pitäisi kyetä siihen [24]. Ei kannata tehdä niin kuin minä; että menee sönköttämään syntyperäisellä – joskin belgiassa asuneelle – huonolla englannilla sitä, että miksi Suomi oli sodassa Venäjään vastaan. Sama kuin menisi arabeille puhumaan olutharrastuksistaan.

Seuraavassa videossa on ranskalaisten näkemys lastenohjelmassa vajaan sadan vuoden eli 3 – 4 sukupolven takaisiin tapahtumiin. Kuka lukee kirjoja, Hitlerin Taisteluani? Amerikkalaisen selostajan juttua äänestä päätellen leikattu ydinpommin kohdalta, muutenkin tätä sarjaa vähä sensuroitu. Viimeistä jaksoa en muista nähneeni lapsena Suomessa, hebreankielisessä oli sensuroitu pois ristiä näyttävä kohta. Protip: Seuraavan jakson lopun katsomisen jälkeen on hyvä katsoa koko jakso läpi uudestaan kokonaan.

Käytettävyys on myös yksi iso osa testausta. Tämä osio on ehkäpä vaikeinta, kun ohjelmistokehittäjät itse hallitsevat oman ohjelman toiminnan ja tulevat sokeiksi käytettävyydelle. Tyypillinen sanonta ohjelmistoalalla on: ”Se ei ole bugi, se on ominaisuus.” Toisen henkilön näkymys on todella tärkeää, jotta tietää milloin ohjelma ei toimi oikein.

Principles behind the Agile Manifesto

We follow these principles:Our highest priority is to satisfy the customer
through early and continuous delivery
of valuable software.
Welcome changing requirements, even late in
development. Agile processes harness change for
the customer’s competitive advantage.

Deliver working software frequently, from a
couple of weeks to a couple of months, with a
preference to the shorter timescale.

Business people and developers must work
together daily throughout the project.

Build projects around motivated individuals.
Give them the environment and support they need,
and trust them to get the job done.

The most efficient and effective method of
conveying information to and within a development
team is face-to-face conversation.

Working software is the primary measure of progress.

Agile processes promote sustainable development.
The sponsors, developers, and users should be able
to maintain a constant pace indefinitely.

Continuous attention to technical excellence
and good design enhances agility.

Simplicity–the art of maximizing the amount
of work not done–is essential.

The best architectures, requirements, and designs
emerge from self-organizing teams.

At regular intervals, the team reflects on how
to become more effective, then tunes and adjusts
its behavior accordingly. [5]

Seuraavat kaksi 1930-luvun opetusvideota antavat mielestäni hyvän kuvan, että minkälaista ketterän kehityksen tulisi olla. On myös tullut selväksi, että ohjelmistoprojektien hallinnan  tulee sopeutua tosimaailmaan, kun sitä ei voi muuttaa. Sen lisäksi että videot muistuttavat tyypillistä onnistunutta ohjelmistokehitystä; ketteryyden nimenomaan kuuluu olla tällaista.

Olisi hyvä, jos nykyaikana tehtäisiin vastaava ketterän ohjelmistokehityksen opettamiseksi. Jousituksen kehittäminen tyhjästä on niin monimutkainen asia, että se on hyvin verrannollinen tyypilliseen ohjelmistokehityksen haastavuuteen. Tyypillisesti ohjelmoitavat ohjelmat ovat aivan eri alaa kuin oma koulutus, joten myös sikäli kuvastaa täydellisesti ohjelmistokehitystä.

Jos seuraavia videoita katsoo, niin varmasti herää ajatuksia. Itse pidän seuraavan videon yksinkertaisesta ja hauskasta tavasta kertoa rungon suunnittelusta. Toisessa videossa korisuunnitteluun osallistunut sotilaskapteeni laittaa itsensä testiin. Aiheeseen liittyen mm. CAD eli tietokoneavusteinen suunnittelu on tehnyt jotain hyvääkin korisuunntteluun liittyen. Pakko myös sanoa, että kolmannen videon 1950-luvun auto on paljon tyylikkäämpi kuin uudempi. Nykyään kori ja runko ovat sama asia, kun suunnittelutavat ovat kehittyneet.

Ohjelmistokehityksen tulisi edetä samoin kuin auto iteroi omia reittejään. Jousitusjärjestelmä on kuin projektinhallinta.  Kukaan ei voi etukäteen tietää, että minkälainen matka tulee olemaan, eikä näin saisi ajatellekaan. Ohjelmistoa kehittvätä ihmiset, ohjelmistokehityksen tulee mukautua vallitseviin olosuhteisiin. Ei kukaan syntyessäänkään tiedä oman elämänsä polkuja, samoin ei vuosia kestävän ohjelmistokehityksen alkuvaiheessa voida  tietää tulevaa via dolo rosoa.

Ohjelmistoa voi olla kehittämässä harjoittelija, joskus sitä voi olla kehittämässä iso lauma ohjelmistokehittäjiä. Esimerkiksi Facebookin alku oli opiskelijoiden sivustossa, jossa haluttiin stalkata opiskelijanaisia. Samaa järjestelmää tiedustelupalvelut stasista alkaen ovat yrittäneet kehittää projektina, mutta ei ole onnistunut. Nyt Facebookia kehittää valtava miljardien dollarien kehitysorganisaatio. Järjestelmä on uskomattoman yksinkertainen, kavereiden lisääminen on monimutkaisin asia kyseisessä palvelussa. Moni olisi voinut kuvitella, että tietokantojen ja järjestelmien suorituskyky ei koskaan voisi riittää miljardien ihmisten kattavaan tietojärjestelmään, mutta niin se vain toteutui PHP-kielellä opiskelijoiden tekemänä.

Ohjelmistoarkkitehtuuri

Ehkäpä yksi vähemmän hyvin tiedossa oleva asia aloitteleville ohjelmoijille on ohjelmiston arkkitehtuuri. Tämä on asia, johon itse kohtasin ensimmäistä isompaa ohjelmaani eli Siilomitoitusohjelmaa tehdessäni.

Minä sain hyvän neuvon Ohjelmointiputkan irkkikanavalta, kun asian kysyin omin sanoin. Neuvo oli: encapsuloi koodia, jolloin sen rakennetta voi myöhemmin itse tai joku muu muokata eli refactoroida. Mielestäni tämä neuvo oli hyvin tärkeä, itsestäänselvyys kokeneemmille.

Ohjelma siis pitää jakaa jotenkin pienempiin osiin: funktioihin, luokkiin ja muihin osiin. Näillä osilla ei ole nykyisen käsitykseni mukaan niinkään merkitystä, kunhan vain ohjelman pilkkoo luettavaksi.

Itse ihmettelin sitä, mutta nykyään se on yhtä itsestään selvää kuin artikkelin jakaminen lukuihin, kappaleisiin, virkkeisiin ja lauseisiin. Sitä vain pitää tehdä, rutiiniksi se tulee kokemuksesta.

Arkkitehtuurin kasvaessa tulee vain lisäkerroksia. Kun pohja ja pienet palat ovat helpommin pureksittavia, niin voi muokata arkkitehtuuria. Seuraavassa videossa oikea kaupunkisunnittelija konsultoi peliä SimCity 2000.

Moni ohjelmistoprojekti epäonnistuu kuin edellisessä pelissä moni pelaaja. Jos aluksi ei nimeä muuttujia kuvaavasti ja muutenkin tee pieniä perusteita koodissa hyvin, niin siitä seuraavat ongelmat voivat tulla vastaan vuosien päästä liian isona muurina – projektin kaatavina.

Siisti koodari

Erittäin stereotypisena clean coderina pidän Absentilla työskennellyttä Esko Jokista, joks on minua eniten ystävällisesti alaan avustanut työkaverini. Jotenkin ikimuistoiseksi käsitteeksi jäi Hubba Bubba ja seuraava kappale vahvistaa sitä, vaikken tiedä mistä se johtuu.

Näkemys alasta ei välttämättä ole lopullinen, vaan on muuttunut ja odotettavasti muuttuu vastaisuudessa. Itse vahvalla teknillisellä koulutus- ja työtaustallani voin yhtyä siihen näkemykseen, että ohjelmointia tulisi opettaa mieluummin taidekoulussa kuin teknillisessä yliopistossa. Muutos olisi niin monimutkainen, iso ja haastava jo kulttuurillisesti, että se tulisi tehdä ketterästi projekti-mallin sijaan, jotta muutos voitaisiin toteuttaa onnistuneesti.

Naisia pidettiin hyvinä ohjelmoijina, heillä nähtiin olevan paljon oikeita ominaisuuksia alaan liittyen. Ehkä se näkemys oli oikea, miehet ovat pilanneet ohjelmistokehityksen. Kuvan 4. mukaisesti on olemassa hyviä naisia ohjelmoijina, mutta liian vähän.

Kuva 4. Ei tarvitse olla ruma, jotta voi olla hyvä ohjelmoimaan: Eivät ole toisiaan poissulkevia ominaisuuksia.

Ohjelmointi ei ole niin teknistä kuin itse luulin nuorempana, kun unelmoin saavani työnimikkeekseni: ”ohjelmoija”. Unelmani toteutui, nykyään en pidä omaa unelmaani mitenkään yliampuvana. Lapsena monilla vain on heikko itsetunto, pelkäsin osoittaa omaa osaamistaan ja turhaan salaili kiinnostuksiaan. Toivottavasti viimeistä ei moni muu ohjelmoinnista kiinnostunut tekisi peruskoulussa.

Aivan samoin kuin ihmiskielien opettelussa luulin, että en ymmärtänyt jotain oikein kielen logiikasta, niin sama ilmiö toistuu itselläni ohjelmoinnissa jatkuvasti ilmeisempänä. Mielestäni pidän sitä merkkinä siitä, että ymmärtää käytetyn asian rajoitteet. Aina ei ole niin väliä, että mitä tekee, vaan että miten tekee/sanoo/kirjoittaa/koodaa.

Tulevaisuus kautta historian

Tässä blogiartikkelissani käsittelin hyvin monipuolisesti projektin ohjelmistokehityksen hallintaa. Minä kirjoitan blogiani ketterästi, olen niin jo tehnyt kaksi vuotta. Alkujaan työttömänä tätä blogiani aloittaessani mietin, että mihin tämä kaikki johtaa. En vain kyennyt hahmottamaan sitä, joten päätin suosiolla mennä ketterällä menetelmällä, aloittaen kertomaan Rooman valtakunnan Leipää ja Sirkuhupeja -filosofiasta [10]. Mielestäni se oli hyvä alku blogilleni, sisältäen todella paljon sitä, jota itse ajattelin blogini sisältävän.

Miten siis mielestäni ohjelmistokehitystä tulisi opettaa? Koska mussutan ja kritisoin, niin minä koen velvollisuudeksi selittää paremman mallin myös siihen. Perinteinen projektimalli on todella hyvä tapa opettaa teoriassa, joskin se on käytännössä virheellinen. Tämä on todella pelottavaa, kun ajattelee, että on aikoinaan opetettu väärää tapaa vain sen takia, että ei osattu tai haluttu kertoa muuta.

Kuva 5. Aluksi ohjelmointi voi vaikuttaa hyvinkin selkeältä, mutta jossain vaiheessa se muuttuu säätämiseksi.

Mielestäni oikea tapa olisi se, että ohjelmistoalan opiskelijat laitettaisiin tekemään projektia eri alan opiskelijoiden kanssa, kuten vaikkapa helpompina vaihtoehtoina rakennus- tai konealan insinööriopiskelijoiden kanssa. Nämä projektit voisivat kestää vuosia, jolloin tulisi todellista kuvaa ohjelmistoalan projekteista/prosesseista. Voisivat tutkijoiden kammioissa loikoilevat professoritkin hahmottaa, että mitä todellinen miljoonan koodirivin ohjelmistoprojekti on kampusalueen ulkopuolella. Näin opetuksen taso nousisi ketterän kehityksen myötä oppilaitoksissa. Kuvassa 7. ohjelmistokehitys esiteltynä ei-projekti -mallilla.

Kuva 7. Ohjelmistokehityksen ketterä menetelmä kuvattuna Ganttin kaaviolla, yhden ohjelmistokehittäjän näkökulmasta.

On myös hyvä ymmärtää, että ohjelmakoodi ei yksinkertaisesti ole suoraan kierrätettävää eri projektien välillä, ellei sitä ole tehty sellaiseksi. Tälläinen koodi on geneeristä koodia, joka voi olla kirjasto. Tällöin se soveltuu tiettyyn moneen yleiseen tarkoitukseen hyvin, mutta ei tiettyyn haluttuun tarkoitukseen. Olen kuvaillut sitä seuraavalla itse keksimälläni Kuvalla 7. Yksinkertaisuus on tapa tehdä asia helpoksi ja nopeaksi. Geneerisyys on tapa tehdä asia moneen tilanteeseen sopivaksi. Toiminallisuus on tapa tehdä ohjelma kattavasti. Näitä kaikkia ei voi helposti saavuttaa, joskaan en väitä sen olevan mahdotonta esim. neuroverkoilla. Unix, Paint ja Passeli ovat kaikki lähellä keskusta ja täydellisesti(?) onnistuneita, mutta silti täysin erillään toisistaan omissa optimaalisissa kategorioissaan.

Kuva 7. Venn Diagrammi ohjelman tarpeista.

Mitä sitten on tulevaisuus, niin en osaa vastata. Itse olen hyvin tuore tapaus ohjelmistoalalla, joka itsessään on hyvin tuore ala. Mahdollisesti itselläni on paljon annettavaa, jotain aiemmin huomaamatonta. Ehkä minusta voi vielä tulla tekniikan tohtori, ehkä ei. Itse luotan jatkuvaan kehitykseen, samaan vahvuuteen kuin 390 jkr. Vegetius totesi Rooman valtakunnan vahvuudeksi.

”We find that the Romans owed the conquest of the world to no other cause than continual military training, exact observance of discipline in their camps and unwearied cultivation of the other arts of war.” – Vegetius, Länsi-Rooma, 390 jkr. [11]

Syyllisten etsintä

Projekteilla on tyypillistä ajautua tilanteeseen, jossa ollaan napit vastakkain. Perinteisellä vesiputousmallilla tilanne on katastrofaalinen, etenkin kun myyjänä on ollut liian vuolas puhuja.

Olen henkilökohtaisesti kuullut yhden Suomen isoimman ohjelmistotalon harjoittelijoilla teetetyn tuotteen perimmäiset ongelmat, kun ihmettelin sen käsittämättömän naurettavia puutteita mm. sisäänkirjautumis-näkymässä. Ketterässä menetelmässä ei ole mitään salattavaa asiakkaalta, vaan työt ovat sovitusti aina valmiita ja käytössä. Epäonnistumisen pelkoa ei pitäisi olla, tilanne on juridisesti huomattavati helpompi pelastaa. Tämä jos minkä pitäisi olla sekä asiakkaan, että kaikkien etu. ”kaikkea sanomaasi <määrittelemääsi> voidaan käyttää oikeudessa sinua vastaan.”

Mielestäni aikalaisen dokumentaation sana painaa niin paljon, että jopa jälkeläisten analyysit historiasta jäävät jälkeen. Itse vertaisin ohjelmistokehittäjän työtä Rooman valtakunnan legionalaiseen, molemmat arvostettuja henkilöitä, kykeneviä toimimaan tilanteen mukaan parhaimmalla mahdollisella tavalla. Parhaansa tekee, niin se riittää: luotto siihen on täydellistä. Sodat ovat hyvin ja kattavasti dokumentoituja, kuten seuraavasta videosta voi huomata.

Rooma oli vahva suurvalta, joka perustui moniin yksinkertaisiin vahvuuksiin. Kristityt kritisoivat kyseistä järjestelmää, mutta silti eivät koskaan kyenneet selittämään sen hajoamista, saati sitten Rooman valtakunnan vahvuuksia. Valtakunta perustui yleisesti hyviksi todetuille yksinkertaisille periaatteille, ei projektimalliin. Ketterä ohjelmisokehitys on kuin Vegetiuksen oppien lukemista; virheistä ja onnistumisista oppimista ilman parempaa tietoa. Ketteryys on siis mielestäni hieman sama kuin yritys & erehdys -menetelmä. [11]

”We cannot now expect to find a man to teach what he never learned himself. The only method, therefore, that remains of recovering the ancient customs is by books, and by consulting the old historians. But they are of little service to us in this respect, as they only relate the exploits and events of wars, and take no notice of the objects of our present enquiries, which they considered as universally known.” – Vegetius, Länsi-Rooma, 390 jkr. [11]

FURTHERIA

Suomen paras räp-artisti Pyhimys on omien sanojensa mukaan osoittanut huipputason älykkyyttä Mensan testissä eli fluidia älykkyyttä mittaavassa kuviopäättelytestissä. [18] Sinällään se ei ole mitenkään hätkähdyttävää [20]. Kieltolakeja eli päihteiden muuttamista rikolliseksi ei uskoakseni voi moni muu kannattaa kuin tavalla tai toisella tyhmät ja rikolliset, joskaan en itse kannata mm. kannabiksen suoranaista laillistamista.

”Mensan toiminnan tarkoituksena on älykkyyden tunnistaminen ja kehittäminen ihmisyyden hyväksi, älykkyystutkimuksen tukeminen sekä älyllisen ja sosiaalisen ympäristön tarjoaminen jäsenilleen.” [19]

Ollut taas puhetta Suomen rikkomasta vapaan liikkuvuuden -sopimuksesta. Eikö YLE voisi vain myöntää, että Suomi selvästi rikkoo EU:n kanssa tehtyä sopimusta. Kyse on rahasta ja protectionalismista, jossa ylläpidetään myyttiä suomalaisten huonoudesta muihin kansoihin nähden alkoholinkulutuksen suhteen. Vaihteeksi Belgian Brysselissä osataan paremmin tehdä päätöksiä kuin Suomessa, yksi syy miksi itseäni ärsyttää olla Suomessa.  [22, 23]

Eikö poliittiset päättäjät pysty antamaan yhtään parempaa kuvaa Suomesta ulkomaille, tai edes omaan maahan? ”Suomalaiset eivät ole alkoholikansaa ollenkaan. Näytetään niille siellä Brysselissä, pysytään lujana!” Että morjes vaan taas. Älkääkö tehkö niin kuin minä, että tilaan pahvilaatikollisen jotain kirsikkaolutta Belgiasta, se kirsikka-colalle maistuva olut on sentään yksi parhaimpia siitä hedelmäsarjasta [25].

Kuva 8. Tällaista sitä joutuu kokeilemaan Untappediin harrastuneisuuden nimissä, sain taas badgen viidennestä hedelmäoluesta.

Eiköhän kohta tämä artikkelin Definiton of Done täyty, kun on jo yli 200 versiota versiohallinnassa? Ei tämä yhtään paremmaksi muutu isommaksi kasvattamalla, päinvastoin.

REFERENSSIT

[1] IT Mayer: UML Activity Diagram

[2] Wiki: Vesiputousmalli

[3] Agile Manifesto

[4] Kauppalehti: Lidl panee jäihin 7 vuotta valmistellun hankkeen – maksanut jo 500 miljoonaa

[5] Robert C. Martin & Micah Martin: Agile Principles Patterns and Practices in C# (PDF)

[6] Robert C. Martin: Clean Code (PDF)

[7] Robert C. Martin: Clean Coder (PDF)

[8] Robert C. Martin: Clean Architecture (PDF)

[9] Portfolioni: autopelin C/C++-lähdekoodit

[10] Tuppu.fi: Panem et circenses

[11] Vegetius: De Re Militari

[12] Software Engineering Somerville (PDF)

[13] Wiki: Werner von Braun

[14] Tuppu.fi: C-kielen ihanuus

[15] IL: Natsit olivat huippuälykkäitä

[16] Sudio55: Tältä Suomi voi näyttää 2050-luvulla

[17] Tuppu.fi: Ohjelmistoala ei hyväksy perinteistä projektimallia

[18] Ruutu: Pyhimys Mensan testissä

[19] Suomen Mensa: Mikä on Mensa?

[20] Psychology Guide Online: 7 Habits of People with High IQ

[21] Tekniikka & Talous: Hitlerin Kolmas valtakunta pyöri ”natsipillerien” voimalla – romahti kun Pervitin-tehtaat pommitettiin maan tasalle

[22] YLE: Analisointia Suomen alkoholisekoilusta

[23] Tuppu.fi: Viinaralli

[24] Tuppu.fi: Argumentointivirhe

[25] Beer of Belgium: Kutsulinkki

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]