modulaarista järjestelmäkehitystä

Ennen graafitietokantoihin syventymistä ajattelin kirjoittaa hieman ajatuksia modulaarisuudesta. Kun ryhtyy rakentamaan prototyyppijärjestelmää, varsinkin jos sitä tekee yksin, ei kannata tuhlata aikaa epäolennaiseen vaan keskittyä tärkeimpiin uusiin ideoihin. Toisaalta järjestelmät ovat lähtökohtaisesti laajoja ja sisältävät monia osasia, joten niiden rakentaminen on työlästä.

Erityisen työlästä järjestelmien rakentamisesta tulee, jos haluaa rakentaa kaiken itse. Myyttinen ohjelmistokehityksen sankaritarina on sellainen, jossa kokeilujen ja oppimisen myötä kaikki valmiit ratkaisut todetaan jollakin lailla vajavaisiksi ja päädytään lopulta tekemään kaikki alusta saakka uusiksi itse. Nämä ajat alkavat vähitellen olla ohitse. Suuntaus on nykyään sellainen, että vain ’se oleellinen’ oma juttu tehdään itse, ja loput kootaan valmiista palasista. Syynä muuttuneeseen tilanteeseen on toisaalta se, että modulaarisuus on parantunut ja kirjastot ovat kehittyneet, toisaalta laitteistosta on tullut riittävän tehokasta jotta kaikesta ei tarvitse puristaa aivan viimeisiä tehoja irti. Ajattelutavatkin ovat muuttuneet: siedetään paremmin sitä, että aivan kaikki yksityiskohdat eivät ole oman mielen mukaisia.

Omat verkkosivuni ovat hyvä esimerkki modulaarisesta kehittämisestä. En halunnut käyttää kovin paljon aikaa itse alustan rakentamiseen, koska se ei ole liiketoimintani ytimessä. Verkkosivujen tarkoitus on lähinnä toimia välineenä markkinoinnissa, välittää tietoa ja tarjota alusta blogille, joten oleellista on sisällöntuotanto. Tarvitsen palvelimia eri tarkoituksiin, joten pelkkä verkkosivun ylläpitopalvelu ei riittänyt, mutta en missään tapauksessa halunnut myöskään käyttää paljon aikaa laitteiston kanssa.

Kuten sarjan edellisessä osassa kerroin, hankin yritykselleni Nebulalta pilvipalvelimet. Ne ovat konesalissa olevia virtuaalipalvelimia, joita voi ottaa käyttöön ja poistaa käytöstä tarpeen mukaan. OpenStack tarjoaa helppokäyttöisen rajapinnan, jonka kautta palvelimia voi pystyttää ja hallita verkkoselaimessa. SSH-salausavaimilla hallinnasta saa turvallista, ja virtuaalipalvelimet ovat valmiiksi konfiguroituja, eristettyjä yksiköitä jotka tekevät vain niille määriteltyä tehtävää. Ympäristö voidaan rajata tarkasti, jolloin se on hallittavissa myös tietoturvan kannalta, ja resursseja ei kulu ylimääräiseen.

Suuria data- ja käyttäjämääriä ei voi hallita yksittäisillä koneilla. Virtuaalikoneista saa helposti rakennettua myös useamman palvelimen klustereita, ja kuorman jakamiseen klusteriin kuuluvien palvelimien välillä on valmiita ratkaisuja. Esimerkiksi Apachen Sparkilla pystyy tekemään hakuja suuresta datajoukosta siten, että useampi kone työstää hakutuloksia tahoillaan ja lopuksi tulokset yhdistetään. Neo4j-graafitietokantakin tukee tietokannan hajauttamista usealle palvelimelle. Neo4j:n ja Sparkin yhdistämiseen on valmiita ratkaisuja.

Pilvipalvelimet tekevät laitteistosta modulaarista, laajennettavaa ja hallittavaa. Docker tekee saman ohjelmistoille. Docker-säiliöt, joita voi ajatella ikään kuin ’rahtikontteina’, ovat periaatteessa hyvin kevyitä virtuaalikoneita, joissa kussakin on tarkoitus pyörittää yhtä rajattua palvelua. Samalla palvelimella, esimerkiksi laskentakeskuksen uumenissa sijaitsevalla virtuaalipalvelimella, voi olla useampi Docker-säiliö pyörimässä yhtä aikaa, kussakin niistä jokin erillinen järjestelmän osa, ja nämä osat voivat kommunikoida keskenään. Kunkin säiliön tehtävät ja rajapinnat on tarkkaan määritelty.

Esimerkiksi omalla verkkopalvelimellani on yhdessä Dockerissa MySQL-tietokanta ja toisessa WordPress-julkaisualusta. Docker Compose -työkalun avulla voin määritellä tämän kokonaisuuden yhdessä tiedostossa ja käynnistää sen yhdellä komennolla. Tietokannan data ja julkaisujärjestelmän käyttämät tiedostot voivat olla erillisessä tallennusyksikössä, jonka voi irrottaa pilvipalvelimesta ja yhdistää toiseen. Pystyn muutamassa minuutissa pystyttämään toiselle virtuaalipalvelimelle identtisen ympäristön OpenStackin ja Dockerin avulla, yhdistämään tallennusyksikön tai siitä tehdyn varmuuskopion, ja liittämään verkko-osoitteen uuteen palvelimeen. Käyttämällä API-rajapintoja pystyisin periaatteessa automatisoimaan nämä toimenpiteet komentojonoksi, jonka voin suorittaa omalla läppärilläni. Samoin voisin tehdä komentojonoja, joilla saan kasvatettua palvelimen resursseja kuorman kasvaessa ja pienennettyä niitä kysynnän laantuessa.

Modulaarisuusajattelu ulottuu lopulta myös yksittäisiin ohjelmistoihin. WordPress oli helppo valinta julkaisualustaksi sen takia, että se on hyvin modulaarinen ja siihen löytyy paljon valmiita lisäosia. Tämän takia itse perusjärjestelmä voidaan pitää yksinkertaisena ja tarjota ilmaiseksi. Maksullisilla lisäosilla saa käyttöön edistyneitä ominaisuuksia. Yrityskäyttäjälle oli hyvin helppo ja nopea ratkaisu ottaa käyttöön WordPressin peruspaketti virtuaalipalvelimen Docker-säiliön sisällä, asentaa maksullinen ja helposti muokattava ulkoasuteema, sekä ottaa käyttöön automaattinen roskapostin torjunta, hakukoneoptimointi ja varmuuskopiointi ostamalla sopivat lisäosat. Ulkoasuohjeet ja grafiikat tilasin asiantuntevalta graafikolta. Sivuston pystytykseen ja säätämiseen meni vain hyvin vähän aikaa, ja pystyin keskittymään varsinaiseen sisällön tuottamiseen, kuten halusinkin. Sivuston kaatuessa saan automaattisen hälytyksen, ja pääsen ssh-yhteyden kautta heti tutkimaan ja korjaamaan tilanteen.

Oman järjestelmäni kehittämisessä haluan noudattaa kuvatun kaltaista modulaarista ajattelua. Toisaalta haluan tehdä järjestelmästäni modulaarisen, jotta sen voi helposti ottaa käyttöön ja yhdistää muihin järjestelmiin. Toisaalta haluan käyttää sen kehittämisessä valmiita palasia, jotta pystyn omistamaan mahdollisimman suuren osan ajasta varsinaisten ydinosasten kehittämiseen.

Seuraavaksi lopulta graafitietokantoja ja varsinaista ydinasiaa.

projektin aloitus

Aloitan nyt uuden blogikirjoitusten sarjan, jossa esittelen omaa sisäistä kehitysprojektiani. Tarkoituksena on toisaalta esitellä työskentelytapojani sekä asioita, joita osaan tehdä, mutta myös esitellä uudenlaisia ideoita liittyen digitaalisten järjestelmien kehittämiseen.

Tavoitteena on rakentaa oppiva datan analysointijärjestelmä, jota voisi käyttää erilaisilla laitteilla ja myös verkkoselaimessa. Lyhyellä tähtäimellä sen on tarkoitus olla pienimuotoinen referenssiprojekti, jolla voisi esitellä ja kokeilla erilaisia ideoita, mutta keskipitkällä aikavälillä toivoisin voivani kehittää sen pohjalta suoraan asiakkaille markkinoitavan tuotteen. Tämä tietysti edellyttäisi yrityksen laajentamista tai sopivien yhteistyökumppanien löytämistä. Tekniikka on kuitenkin kehittynyt niin pitkälle, että prototyypin pystyy rakentamaan yksinäänkin.

Käynnistän projektin yleensä jonkinlaisella selvitysvaiheella, jossa tutkin millaisia tekniikoita ja työkaluja tarvitaan halutun lopputuloksen saavuttamiseksi. Tässä vaiheessa yleensä myös teen kokeiluja ja rakentelen nopeita prototyyppejä saadakseni käytännön tuntumaa ideoihini. En takerru sellaisiin työkaluihin ja tekniikoihin, jotka tunnen jo valmiiksi, vaan yritän selvittää sopivimmat vaihtoehdot, koska en pelkää uusien asioiden opettelua. Joitakin rajoitteita täytyy kuitenkin asettaa, jotta päästään liikkeelle ripeästi. Kaikkea ei kannata tehdä täysin uusilla työkaluilla.

Tärkeimmät rajoitteet tässä projektissa tulevat siitä, että haluan käyttää funktio-ohjelmointia ja graafitietokantoja dataa käsittelevissä ydinmoduuleissa. Kirjoitan näistä aiheista lisää myöhemmin, mutta näihin päätöksiin vaikuttavat omat kokemukseni siitä, että funktio-ohjelmoinnilla saa tehtyä vaativia algoritmillisia asioita hallittavammin ja nopeammin kuin perinteisemmillä ohjelmointikielillä. Käyttämäni menetelmät puolestaan ovat graafipohjaisia, ja käsiteltävä data on hyvin monimuotoista, joten graafitietokannat tekevät datan käsittelystä luontevampaa ja helpompaa.

Projektiin täytyy ilmiselvästi kuulua palvelinkomponentteja, jotta samaa dataa voidaan käyttää useilla laitteilla ja verkkoselaimilla. En halua käyttää aikaa laitteiden kanssa tappelemiseen, joten vuokrattavat pilvipalvelimet ovat helppo ratkaisu. Haluan myös käyttää Suomessa sijaitsevia palvelimia, ja palvelun täytyy olla skaalautuva jotta laajentuminen on mahdollista tulevaisuudessa. Koska työskentelen yksin, haluan käyttää mahdollisimman paljon valmiita, toimiviksi todettuja moduuleita. Tämän vuoksi pilvialustan täytyy tukea Dockeria, joka mahdollistaa tällaisten valmiiksi paketoitujen modulaaristen palikoiden helpon käyttöönoton.

Näillä perusteilla alustava projektiympäristö on hahmottunut seuraavasti: pilvipalvelinten tarjoajaksi valikoitui kotimainen Nebula. Heiltä saan skaalautuvat OpenStack-palvelimet valmiilla Docker-tuella. Graafitietokannaksi on valikoitunut neo4j, koska siinä on hyvä skaalautuvuus tulevaisuutta ajatellen, valmiita rajapintoja useisiin työkaluihin sekä valmis Docker-paketti. Vakuutuin myös siitä, millä tavalla itse graafitietokanta on rakennettu, mutta tästä lisää myöhemmin. Palvelinpuolen ohjelmointia teen alkuun Haskellilla ja Yesodilla, koska ne ovat minulle tuttuja ja niillä pääsen nopeasti liikkeelle. Tuotantokäyttöön tulevia sovelluksia varten on kuitenkin löydettävä kypsemmät työkalut, ja alustavasti olen aikonut tutkia Scala-ohjelmointikieltä ja Apache Sparkia, mutta selvitän muitakin vaihtoehtoja. Selaimen puolella haluan pitäytyä mahdollisimman kevyissä ratkaisuissa, ja minulle tutuista työkaluista Bootstrap ja jQuery ovat tällä hetkellä vahvimpia. Työpöytä- ja mobiilisovellusten kanssa en halua käyttää liikaa aikaa, joten Qt ja Android ovat tuttuina ja yleisinä ympäristöinä luonteva valinta.

Seuraava vaihe on se, että pystytän palvelimelle neo4j-tietokannan ja teen kevyen prototyyppisovelluksen, jolla pystyn selaamaan tietokantaa ja tekemään siihen pieniä muutoksia. Raportoin edistymisestä ensi viikolla, ja samalla käyn läpi mietteitäni graafitietokannoista yleisesti.

ohjelmistojen pientuottajan bisnesmallista

Viime viikon aikana tapasin lukuisia ihmisiä ja keskustelin liikeideastani sekä tarjoamistani palveluista. Tämä oli hyvin hyödyllistä, sillä jouduin terävöittämään viestiäni ja ottamaan huomioon monenlaisia ohjelmistobisneksen realiteetteja. Ensimmäisen toimintakuukauteni lopuksi päätin kirjoitella hieman ajatuksiani bisnesmallistani.

Toimintaani voisi kutsua konsultoinniksi tai alihankinnaksi. Näillä sanoilla on hieman negatiivinen kaiku, ja ne liitetään yleensä suurempiin organisaatioihin, joten yksittäisen tekijän organisaationa haluaisin mieluiten puhua ohjelmistojen ja ohjelmistotyön tuottamisesta. Keskeisimpiä kilpailijoita minulle ovat yritysten omat työntekijät, kun taas alihankintaa tekevät yritykset ovat potentiaalisia yhteistyökumppaneita, joiden kanssa voidaan toteuttaa suurempia tuotantoja. Liiketoimintani on ohjelmistojen ja niiden komponenttien tuottamiseen osallistumista.

Keskeinen realiteetti ohjelmistoalalla on se, että osaaville tekijöille on kova tarve ja heitä on hidasta rekrytoida. Siinä mielessä alihankinnalla voitaisiin saavuttaa joustavuutta. Yritykset kuitenkin haluaisivat ensisijaisesti vahvistaa omaa tiimiään ja palkata vakituisia työntekijöitä. Kasvaville yrityksille henkilöstön määrä on tärkeä mittari, toisaalta osaaminen halutaan pitää omassa hallinnassa ja työvoiman on oltava käytettävissä ennakoitavasti.

Ohjelmistotyön ostaminen on monella tapaa ongelmallista. Tekijöiden kyvyt vaihtelevat suuresti, ja tiettyyn tehtävään kuluvaa aikaa olisi vaikea arvioida vaikka tekijät olisivatkin samanlaisia. Työn edistymistä ja valmiusastetta on vaikea arvioida ja seurata. Varsinkin aivan uudenlaisten asioiden kehittäminen on riskialtista. Ryhtyessään alihankintaprojektiin ostajan on selvitettävä itselleen, millaista rahallista riskiä on valmis sietämään, ja seurattava työn edistymistä sekä onnistumismahdollisuuksia tiiviisti. Toimittajan on tietysti omalta osaltaan sitouduttava toimimaan eettisesti ja vastuullisesti. Työn edistymisestä ja käytetystä ajasta on annettava tietoa mahdollisimman läpinäkyvästi.

Ohjelmistoalan pitäisi vielä kypsyä; pitäisi toisaalta oppia ostamaan palveluita ja hallitsemaan useiden toimittajien projekteja. Toisaalta ohjelmistoja pitäisi oppia tekemään hallitusti, ennustettavasti ja seurattavasti, yhteistyössä useiden toimijoiden kesken. Uuden sovelluksen kehitystyötä kannattaisi tehdä ketterästi, ylläpitäen jatkuvasti toimivaa prototyyppiä ja lisäämällä siihen toiminnallisuuksia looginen pala kerrallaan. Toteutettuja osia pitää luonnollisesti testata jatkuvasti, sekä yhdessä että erikseen. Yhteiset toimintatavat auttavat, ja yhtenäisillä sopimuskäytännöillä voidaan edistää näiden määrittämistä. Olen itse ottanut käyttöön IT2015-sopimusehdot, joista saa hyvän pohjan myös käytännön toimintatapojen organisoinnille.

Ohjelmistotyön ostaminen on helpompaa, jos ostaja tietää tarkasti mitä pitää tehdä ja miten vaativaa se on. Tämä auttaa ostajaa määrittämään työn arvon. Itse haluaisin pyrkiä arvoperusteiseen hinnoitteluun, jossa hinta määräytyisi sen mukaan mikä on lopputuloksen arvo ostajalle. Vaikka arvo olisi helppo määritellä, on edelleen haasteena valita sopiva toimittaja työlle, sillä pitäisi tuntea toimittajan kyvyt. Tämän vuoksi tarvitaan verkosto toimittajia, joiden kyvyistä saadaan käsitys useiden lyhyiden toimeksiantojen perusteella. Tämä vaatii tietysti paljon vaivannäköä ja perehtymistä. Vakituisen oman henkilöstön palkkaaminen tuntuu turvallisemmalta vaihtoehdolta. Kuinka moni työnantaja kuitenkaan tietää omienkaan työntekijöidensä kyvyt riittävällä tarkkuudella? Olisiko hyvä tietää?

Jatkan edelleen bisnesmallini pohdintaa, ja erityisesti toimintatavoista ja sopimuskäytännöistä minulla on vielä paljon sanomista.

Arvostelu: The Master Algorithm (P. Domingos)

Sain äskettäin luettua loppuun professori Pedro Domingosin kirjoittaman kirjan The Master Algorithm (Amazon), joka on yleistajuinen johdatus koneoppimisen nykytilaan ja lähitulevaisuuteen. Sitä voi suositella lämpimästi kaikille koneoppimisen ja tekoälyn kehityksestä kiinnostuneille. Erityisiä pohjatietoja ei vaadita, mutta jonkinlainen käsitys ohjelmoinnista, optimoinnista ja tekoälymenetelmien perusteista ei ole haitaksi.

Kirjoittaja Domingos toimii professorina Washingtonin yliopistossa Seattlessa, ja on hyvin arvostettu asiantuntija koneoppimisen alalla. Omassa tulevassa väitöskirjassani viittaan useisiin hänen julkaisemiinsa tieteellisiin artikkeleihin. Verrattuna moniin muihin tämän alan asiantuntijoihin hänen kirjoituksensa ovat hyvin selkeitä ja ymmärrettäviä. Reilu vuosi sitten ilmestynyt kirja The Master Algorithm on sekin hyvin selkeästi kirjoitettu, ja se on suunnattu alaa tuntemattomille. Tekstistä saa paljon irti ilman pohjatietojakin, kunhan innostusta asioiden pohtimiseen löytyy. Kirjaa ovat ansaitusti kehuneet monet merkittävät asiantuntijat, kuten Judea Pearl ja Sebastian Thrun. Yleistajuisuuden myötä tekstissä on yksinkertaistettu monia asioita muuten sangen monimutkaisella aihealueella, mutta siinä luetellaan erittäin ansiokas kokoelma lähdekirjallisuutta yksityiskohdista kiinnostuneille.

Kirjassa kuvaillaan koneoppimisen viisi ’heimoa’ eli koulukuntaa, jotka ovat loogiseen päättelyyn, neuroverkkoihin, Bayesilaiseen tilastotieteeseen, geneettisiin algoritmeihin ja analogioihin tukeutuvat oppivien järjestelmien tutkijat ja kehittäjät. Eri koulukuntien ja heidän algoritmiensa edut ja haitat kuvaillaan intuitiivisesti, ja lopuksi pohditaan mahdollisuutta kehittää ’yleisalgoritmi’ (jota kirjan nimen ’master algorithm’ tarkoittaa) yhdistäen eri koulukuntien parhaat ideat. Tällainen ’yleisoppija’ voisi ottaa vastaan mitä tahansa dataa, oppia siitä mitä opittavissa on, ja soveltaa oppimaansa ennakoidakseen vastaavia tilanteita tulevaisuudessa. Esitetyt ideat ja tavoitteet ovat suhteellisen realistisia, joskin hieman yksinkertaistettuja ja turhan optimistisia.

Aihe on tietysti nykypäivänä hyvin ajankohtainen ja tärkeä, ja herättää kaikissa ajatuksia, koska ensimmäiset todella älykkäät järjestelmät alkavat tulla yleiseen tietoisuuteen. Joitakin esimerkkejä ovat IBM:n Watson, Googlen AlphaGo, itseohjaavat autot kuten Teslan Suomessakin myytävät mallit, ja digitaaliset avustajat kuten Applen Siri, Google Now, Amazonin Alexa ja Microsoftin Cortana. Toiset varmaankin pohtivat, millaisia uusia hyötyjä ja uudenlaista liiketoimintaa nämä mahdollistavat, toiset seuraavat varovaisemmin ja miettivät mahdollisia uhkia ja haittavaikutuksia.

Myös Domingos pohtii kirjansa päätteeksi mielestäni hyvin tyhjentävästi tekoälyn kehittymisen yhteiskunnallisia vaikutuksia. Hän päätyy samankaltaiseen optimistiseen lopputulokseen kuin minä itse: tekoälystä tulee ihmisen jatke siinä missä kaikesta muustakin teknologiasta, kuten älypuhelimista ja hakukoneista, on jo tullut. Ihminen tulee toimimaan yhteistyössä älykkäiden järjestelmien ja laitteiden kanssa. Ne helpottavat elämäämme monin tavoin. Tietysti on väistämätöntä, että taloudellisesti tuottavaa työtä jää ihmisille yhä vähemmän. Siksi meidän on yhteiskuntana siirryttävä kohti pehmeämpiä arvoja ja oltava valmiita jakamaan enemmän ja maksamaan ihmisen suorittamista palveluista ylimääräistä. Domingosin tavoin myös minä kannatan perustuloa, jolla taataan kaikille tietty kohtuullinen elintaso.

Omasta mielestäni teknologia pitäisi nähdä koko ihmiskunnan yhteisenä saavutuksena. Vaikka jotkut rikastuvat oman työnsä tai yritystoimintansa kautta, kukaan ei voi enää väittää saavuttavansa kaiken yksin. Menestyksen takana on sukupolvien työ ja globaalin talouden panostukset. Ahkeruus ja riskinotto pitää tietysti palkita, mutta rikkaidenkin pitää olla valmiita jakamaan myös toisille. Ihmisarvoa ei voida mitata taloudellisilla mittareilla.

Domingos on opiskelijoidensa kanssa kehittänyt relationaalisen oppijan nimeltä Alchemy. Oma väitöstutkimukseni liippaa aihetta läheltä, ja toivon voivani esitellä tässä blogissa myöhemmin tarkemman esittelyn ja jonkinlaisen käytännön demonstraation tästä menetelmästä ja tietysti omastani myös.

Tämä on ensimmäinen kirjoittamani arvostelu, ja se aloittaa uuden blogikirjoitusten sarjan. Toivon pystyväni jatkamaan sitä kuukausittain.

(Muutoksia 18.10.2016 klo 18:12 – lähinnä pieniä lausemuotojen tarkennuksia ja korjauksia)

seuraavia askeleita

Kuluneen viikon olen lähinnä hoidellut monenlaisia käytännön asioita, joita yrityksen käynnistäminen vaatii, ja hahmotellut mielessäni kokonaiskuvaa toimintatavoista. Nyt ajattelin istahtaa alas hetkeksi ja hahmotella millaisia asioita aion käsitellä tässä blogissa lähiaikoina. Tarkoituksena on paitsi kommentoida erilaisia ajankohtaisia ja muuten tärkeitä tai mielenkiintoisia aiheita, myös esitellä omaa toimintaani ja osaamistani erilaisten projektien muodossa. Tässä kirjoituksessa piirtelen hieman karttaa maastosta, jossa lähiaikoina tulen liikkumaan, ja toivoakseni onnistun herättelemään mahdollisten tukijoideni ja asiakkaideni mielenkiintoa.

kirjoja ja kirjoituksia

Koska liiketoimintani tulee pitkällä tähtäimellä rakentumaan erikoisosaamisen varaan, olen varannut itselleni aikaa lukemiselle ja pohtimiselle. Osaamista täytyy ylläpitää ja kehittää edelleen. Tietysti myös väitöskirjani loppuunsaattaminen vaatii aikaa ja energiaa, mutta tästä aiheesta kirjoitan myöhemmin. Lähiviikkoina tulen kirjoittamaan jonkinlaisia arvosteluja ja kommentaareja tärkeistä kirjoista, joita olen lukenut ja joita voin suositella muillekin. Jotkin näistä ovat yleistajuisempia, toiset teknisempiä tai matemaattisempia.
Luetellakseni muutamia esimerkkejä, tulen esittelemään sellaisia kirjoittajia kuin Pedro Domingos, David Vernon, David Mumford, Jeff Hawkins, Ray Kurzweil ja Marcus Hutter. Keskeisiä aiheita ovat erilaiset tekoälyyn ja älykkäisiin järjestelmiin liittyvät ideat ja tekniikat. Tulen kirjoittamaan myös ajankohtaisista aiheista, uutisista ja läpimurroista ja kommentoimaan niitä.

projekteja ja kokeiluja

Edellisessä kirjoituksessani väitin hiukan provosoivasti ja itsetietoisestikin olevani henkilö, joka kykenisi periaatteessa yksinään toteuttamaan kokonaisen järjestelmän palvelimilta useisiin päätelaitesovelluksiin saakka. Tällaisesta henkilöstä käytetään usein nimitystä full-stack -kehittäjä, vaikka termin tyypillinen merkitys on kylläkin hiukan suppeampi, ja tarkoittaa henkilöä joka on minua huomattavasti rutinoituneempi työtehtävissään. En markkinoi itseäni full-stack -kehittäjänä, mutta en halua jättää tätä väitettä pelkäksi kehuskelevaksi heitoksi, vaan todistaa sen. Tarkoitukseni on toteuttaa kuvatunlainen kokonaisuus vaiheittain, dokumentoiden prosessi tässä blogissa.
Tavoitteena tässä kirjoitussarjassa on toisaalta tehdä alaa vähemmän tuntemattomille selkeämmäksi, millaisia asioita modernien tietojärjestelmien toteuttaminen vaatii, ja millaisia osasia niissä on. Toisaalta haluan kuvailla nopeaa tekniikan kehitystä viimeisen 20 vuoden aikana; olen kuitenkin nähnyt läheltä ne ajat, jolloin nykyisen kaltaisia työkaluja ja apujärjestelmiä ei vielä ollut, ja suuri osa järjestelmien koodista ja konfiguroinneista piti vaivalloisesti kirjoittaa itse. Nykyään olemme tilanteessa, jossa yhden henkilön on mahdollista kohtuullisessa ajassa suoriutua kaikista työvaiheista.
Kirjoituksissa tullaan käsittelemään sellaisia asioita kuin virtuaalikoneet, Docker, REST ja JSON sekä Android. Valtavirrasta tulen poikkeamaan sillä tavoin, että tulen käyttämään funktionaalista ohjelmointia, joten tulen käsittelemään myös sellaisia asioita kuin Haskell ja Yesod. Kaikki tämä on kuitenkin vasta runkoa varsinaiselle ydinasialle, joka on tietysti oppivat ja älykkäät järjestelmät. Tulen siis kirjoittamaan myös sellaisista asioista kuin relationaalinen oppiminen, neuroverkkojen ja Bayesin verkkojen lisäksi. Tällaisten tekniikoiden käyttö bisneksessä vaatii kuitenkin tietynlaisen pohjatyön ja runkotekniikan, ja haluan osoittaa ymmärtäväni riittävästi myös tästä puolesta. Tietysti tarvitsen myös omiin tarkoituksiini, esimerkiksi esittelyjä varten, jonkinlaisen perusjärjestelmän käyttööni. Tämän järjestelmän rakentamista tulen kuvailemaan tässä blogissa.

mikä argomens on?

Matti Eskelinen

Nimeni on Matti Eskelinen, ja olen juuri perustanut tämän yrityksen työskenneltyäni vuosia yliopistolla tutkimus- ja opetustyön parissa. Tämän lyhyen kirjoituksen tarkoituksena on kertoa kaikille kiinnostuneille, mikä oikein on yritykseni olemassaolon tarkoitus, ja käynnistää tämän yritysblogin julkaiseminen.

Olen lapsesta saakka ollut kiinnostunut tekniikasta ja sen tuomista mahdollisuuksista, ja ottanut innokkaasti käyttöön kaikkea uutta. Olen oppinut ohjelmoimaan Commodore 64:n Basicillä ja käyttämään internetiä siihen aikaan kun yhteys otettiin modeemilla erillisen Winsock-työkalun avulla ja suosituin selain oli nimeltään Mosaic. Harjaannuin etsimään tietoa teknisistä asioista siihen aikaan kun kätevin tapa oli kaivella sinnikkäästi usenet-uutisryhmien arkistoja ja seurata linkkejä sivuilta, joita alkeellinen hakukone Lycos onnistui kaivamaan esiin. Olen käyttänyt mobiilia internetiä Psion 5 -laitteella, joka oli yhdistetty GSM-puhelimeen modeemijohdon avulla, ja kehittänyt dotcom-buumin aikaan ensimmäisessä ohjelmistoalan työpaikassani palvelinsovellusta, joka muunsi web-sivut wap-sivuiksi luettavaksi esimerkiksi Nokian 7110-puhelimella.

Olen kehitellyt omaa blogialustaa silloin kun blogi-sanaa ei vielä ollut, ja tehnyt älypuhelinsovelluksia silloin kun viimeistä huutoa oli Symbian ja Nokia 6600. Olen ostanut tavaraa verkosta jo ennen vuosituhannen vaihdetta. Pebble-älykello on ollut minulla päivittäisessä käytössä siitä saakka kun sain sen käsiini Kickstarter-kampanjan jälkeen, ja olen tukenut Oculus Riftiä ensimmäisestä päivästä alkaen. Olen seuraillut Internet of Things -buumia jo vuosien ajan ja kehitellyt pieniä Arduino-pohjaisia sulautettuja laitteita. Raspberry Pi:tä olen käyttänyt ensimmäisestä A-versiosta saakka. Olen hyvin kiinnostunut puettavasta tekniikasta, todellisen ja virtuaalisen maailman yhdistämisestä, laajennetusta todellisuudesta, tekoälystä ja oppivista järjestelmistä.

Olen henkilö, joka periaatteessa pystyy yksinään toteuttamaan integroidun järjestelmän, joka toimii työpöytäkoneilla, älypuhelimessa ja verkkoselaimessa, lukee tietoa virtuaalikoneella pyörivältä, docker-pakettina toteutetulta palvelinohjelmalta, johon taas tietoa syötetään sulautetuista sensoreista. Osaan kirjoittaa ohjelman, joka lukee sisään raakaa dataa tiedostosta, kameralta tai sulautetulta laitteelta, käsittelee sen, analysoi sen ja tunnistaa siitä asioita, ja tekee päätöksiä tämän pohjalta. Osaan toteuttaa loogisia päättelijöitä, neuroverkkoja, SVM-luokittelijoita, Bayes-verkkoja, geneettisiä algoritmeja ja tilastollisia kielioppeja. Olen kahlannut läpi kymmeniä tuhansia sivuja tieteellisiä artikkeleita ja kirjoja tekoälyn ja koneoppimisen menetelmistä sekä niihin liittyvästä filosofiasta.

Olen haaveilija, ideoija, intoilija ja toteuttaja. Kykenen työskentelemään itsenäisesti ja sinnikkäästi, kunnes saan ratkaistua selvittelemäni ongelman tai korjattua koodiani vaivaavan bugin. Minulla on tietoa ja kokemusta hyvin monenlaisista asioista, ja tutkijakoulutukseni myötä kykenen systemaattiseen ja rationaaliseen työskentelyyn. En vain ole koskaan ollut tilanteessa, jossa voisin keskittyä täysipainoisesti yhteen haasteelliseen asiaan kerrallaan ja tekemään sen valmiiksi. Minulla ei myöskään ole ollut luontevaa kanavaa tuoda esiin ideoitani, ja olen luonteeltani vaitelias ja syrjäänvetäytyvä.

Yritykseni argomens on perustettu tarjoamaan minulle sellainen työpaikka, jossa olen parhaimmillani: ideoijana ja haastavien ongelmien ratkaisijana. Ajan myötä toivon sen kehittyvän yritykseksi, joka auttaa toisia yrityksiä kehittämään älykkäitä ja ihmisten elämää helpottavia teknologiatuotteita sekä mahdollisesti työllistää myös muita. Tähän tavoitteeseen pyrin luomalla verkostoa alalla toimivista henkilöistä ja yrityksistä.

Autan yrityksiä rajaamaan ja pilkkomaan ongelmia ja ratkaisemaan ne ketterästi pala kerrallaan. Olen valmis keskustelemaan avoimesti ja luottamuksellisesti teknisistä aiheista ja kehittelemään ideoita toteuttamiskelpoisiksi. Laskutan vain etukäteen sovitun, kiinteän hinnan perustuen käyttämääni aikaan. Haluan tuoda Jyväskylän seudulle ja Suomeen kokoaikaisena yrittäjänä tarjottavaa, freelancer-tyyppistä ohjelmistokehityspalvelua.

Tässä blogissa tulen kirjoittamaan viikoittain minua kiinnostavista teknisistä aiheista.