perjantai 16. syyskuuta 2016

Ohjelmointi - suurenmoista ja raivostuttavaa

Kone vapautti ihmiskunnan työn orjuudesta - tai muutti orjuuden uudenlaiseksi. Joka tapauksessa, kone on teollisen vallankumouksen ikoni ja samalla sen keskeinen vaikuttaja. Mutta kuka keksi koneen? Emme tiedä, sillä ihmiskunta on rakentanut koneita jo ainakin pari tuhatta vuotta.

Ehkä olennaista onkin käyttövoima. Ihmiskunta on vaeltanut käyttövoiman vallankumouksesta toiseen. Eläinten voima - vesi- ja tuulivoima - höyryvoima - polttomoottori - sähkövoima. 

Koneet ovat suurenmoisia. Mutta kun tarpeemme muuttuvat, joudumme rakentamaan uudenlaisia koneita. Siihen tarvitaan paljon työtä. Mutta insinöörit ovat keksineet ratkaisuja, kuten modulaarisuuden. Koneet voidaan rakentaa samankaltaisista osista, ne vain kootaan uudella tavalla. Ja nuo osat voivat olla vakioituja, niin että niitä voidaan tuottaa edullisesti ja käyttää yhä uusiin sovelluksiin. Pyörät, laakerit, akselit, ruuvit, rattaat, ketjut, letkut, putket pumput, ja lukemattomat sähkökojeet taipuvat uusien koneiden rakenneosiksi, usein vain vähäisin muutoksin. 
 
Sitten keksittiin tietokoneet. Robotiikassa ja konetekniikassa tietokoneiden käyttöönotto merkitsi isoa muutosta. Uuteen sovellukseen ei tarvitsekaan välttämättä rakentaa uudenlaista konetta, vaan riittää, että muutetaan sen ohjelmaa. Lisäksi syntyi kokonaan uusi ala: informaatiotekniikan monet sovellukset yhteiskunnassa ja organisaatioissa. Kaikesta tästä seurasi, että ohjelmoinnista tuli nopeasti kasvava teknisen taidon alue. Uusien ohjelmien tarve kasvoi nopeasti. 
 
Ohjelmoinnin tehostamiseksi syntyi ohjelmiin perustuvia ratkaisuja. Se oli itseään vahvistava kierre. Keksittiin symboliset konekielet eli assemblerit, ja sitten niin sanotut korkean tason ohjelmointikielet, jotka olivat keinotekoisia ongelmanläheisiä kuvauskieliä. Kuuluisia varhaisia kieliä olivat Fortran, Algol, Cobol ja Basic*. Ohjelmien tarve kasvoi nopeasti, ja ohjelmat tulivat yhä laajemmiksi ja monimutkaisemmiksi. Niiden tekemiseen tarvittiin alati ja nopeasti lisääntyvä määrä ihmistyötä, ja lisäksi laajoissa ohjelmissa piileskeli paljon vaikeasti löytyviä virheitä, ammattikielellä "bugeja", ötököitä. Alettiin puhua ohjelmistokriisistä.

Ohjelmointikieliä on kehitetty ällistyttävä määrä. On kehitetty tehokkaampia tapoja ohjelmoida, ja myös ohjelmoinnin sovellusalueet laajenevat jatkuvasti. Itse opettelin ensimmäisenä ohjelmointikielenä Algolin vuonna 1968. Sen jälkeen olen "joutunut" perehtymään 30 - 50 ohjelmointikieleen (riippuen siitä, mitkä saman kielen versiot lasketaan erikseen, ja luetaanko erilaisille keskusyksiköille ja prosessoreilla laaditut assemblerit omiksi kielikseen). Tämä on vain pieni raapaisu, ohjelmointikieliä on kehitetty useampi tuhat. Yleisessä käytössä on nykyisin ehkä parikymmentä kieltä.

Totesin aiemmin, että konetekniikka on keksinyt ratkaisun koneiden suunnittelun tarpeisiin: vakioidut ja yleiskäyttöiset osat. Vastaavaa alettiin kehittää ohjelmointia varten. Alettiin laatia yleiskäyttöisiä ohjelmia usein tarvittaville samankaltaisille tehtäville. Niitä sanottiin proseduureiksi, ja vastaavaa ohjelmointitekniikkaa proseduraaliseksi ohjelmoinniksi. Mutta ohjelmat joutuvat ottamaan kantaa myös dataan: sen tyyppeihin, rakenteeseen ja niille ominaisiin käsittelytapoihin. Syntyi niin sanottu olio-ohjelmoinnin käsite (object oriented programming) ja sitä tukevia kieliä. Tunnetaan myös täysin toisenlaiseen ajatteluun perustuvat funktionaaliset kielet ja logiikkakielet, mutta niiden käyttö on jäänyt vähäiseksi. 

Ohjelmoinnista ei siten tullut yhtä selkeää modulaarista suunnittelua kuin konesuunnittelusta. Pikemminkin ohjelmointi on säilyttänyt individualistisen käsityöleiman. Se on enemmän tai vähemmän yksilöllistä puurtamista, missä henkilökohtaisilla kyvyillä on suuri vaikutus tehokkuuteen. 

Ohjelmoinnin nykytila merkitsee muun muassa sitä, että kynnys aloittaa ohjelmointi on pysynyt matalana, ohjelmoijista suuri osa on suorastaan itseoppineita. Niin sanottu ketterä ohjelmointi (agile programming) koettaa ratkaista ohjelmoinnin ongelmia ryhmätyötekniikalla. Se saattaa olla tehokasta, mutta ohjelmien läpinäkyvyys pysyy heikkona. Toisin sanoen, alkuperäisen tiimin ulkopuolisen on vaikea ymmärtää ohjelman toimintaa tai korjata sitä.

Nykyisin ei enää puhuta ohjelmistokriisistä, mutta se on edelleen tosiasia. Ohjelmointityön tehottomuus ja laajojen ohjelmistojen laatu- ja ylläpito-ongelmat ovat informaatiotekniikan hyödyntämistä vakavasti haittaavia asioita. Odotan mielenkiinnolla teknologista innovaatiota, joka tulee ratkaisemaan tämän ongelman. Luulen, että se tulee aivan eri suunnasta, mistä sitä odotamme. Muutenhan se olisi jo keksitty.

*) Fortran=formula translator
    Algol=algorithmic language
    Cobol=common business oriented language
    Basic=beginner´s all-purpose symbolic instruction code

keskiviikko 14. syyskuuta 2016

Koodausta kaikille

Uutinen ohjelmoinnin eli koodauksen opetuksesta peruskoulussa ärsytti minua kovasti. Mutta ei niinkään itse asian vuoksi, vaan sen takia, millaiset tahot tätä hehkuttivat, ja miten uutinen tarjoiltiin. Mutta unohdetaan nyt tämä huono konteksti. Itse ideahan on erinomainen.

Koetan perustella näkökantaani, ja se on oikeastaan aika helppoa. Ohjelmointi on tietysti vain teknistä suunnittelua, mutta se perustuu aivan erityiseen ajattelutapaan. Eräs koodauksen määrittely on, että siinä laaditaan algoritmeja (toisiaan seuraavista vaiheista koostuvia toimintakuvauksia). Se ei kuitenkaan ole koko totuus. Kaikki ohjelmoinnilla tuotetut ratkaisut eivät nimittäin ole kovin "algoritmisia". Koodaus on selvästi sukus matematiikalle, mutta nykyinen matematiikan opetus ei perehdytä siihen ajatteluun, jota koodauksessa tarvitaan. Koodaus ei nimittäin ole itsenäinen matematiikan haara. Matematiikka tarjoaa kyllä melkoisen joukon kiinnostavia formalismeja: ne ovat kalkyylejä, joita voidaan hyödyntää ohjelmointikielissä ja tietokonalaitteissa. Mutta se on jo kokonaan "toinen juttu".

Koodaus poikkeaa matematiikasta muun muassa siksi, että siinä pitää kiinnittää huomio kahteen asiaan: pitää keskittyä siihen ongelmaan, joka koodauksella yritetään ratkaista, ja samalla pitää ohjata sen järjestelmän (tietokoneen ja sen ohjelmien) toimintaa, jonka avulla laadittu ohjelma sitten suoritetaan. Yksinkertainen esimerkki on laskea matemaattisen lausekkeen arvo, jossa on erilaisia laskutoimituksia, vaikkapa yhteen- ja vähennyslaskua, kerto- ja jakolaskua ja potensseja. Jos koodaajalla on käytössään kehittynyt ohjelmointikieli, riittää, että hän vain kirjoittaa laskettavan kaavan. Koko ohjelma on vain muutama rivi koodia. 

Mutta jos käytössä olisi vain symbolinen konekieli eli assembler, koodaajan pitäisi huolehtia lukujen ja laskennan välitulosten talletuksista muistiin, laskutoimituksien kokoamisesta yksinkertaisista konekäskyistä, ja koko laskentaprosessin vaiheittaisesta kontrolloimisesta. Koko ohjelma on varovaisestikin arvioiden useita satoja koodirivejä, paperille painettuna kymmeniä sivuja ohjelmalistausta. Kun kehittyneellä ohjelmointikielellä tehtävän ratkaisu on koodattu alle minuutissa, assembler- kielellä koodaukseen voi kulua useita päiviä. Siis, toisin kun abstraktissa matematiikassa, koodauksessa käytössä oleva tietokone ja sen ohjelmointikielet vaikuttavat voimakkaasti tehtävän suoritukseen.

Toistan vielä, että koodaamisen opettaminen pikku koululaisille on ehdottomasti hyvä idea. Tietenkään koulussa saatu koodausopetus ei ole välittömästi hyödyllistä työelämässä, ehtiihän tekniikka muuttua aika paljon ennen kuin oppilaat menevät töihin, eikä koulussa päästä alkeita pidemmälle. Mutta kysymys onkin muusta: yleissivistyksestä ja hyödyllisen ajattelutavan omaksumisesta. Kaikkien on syytä ymmärtää, millaista ohjelmointi on.

Asiantuntijat osannevat valita opetuksessa käytettävät välineet: ohjelmointikielen ja laskentaympäristön. Kielen tulee olla riittävän yleinen, ja ympäristön tulee olla sellainen, että koodaamalla voidaan saada aikaan konkreettisia tuloksia. Tehtävät voivat olla mitä vain: pelejä, robotin ohjaamista, musiikkia, grafiikkaa, animaatiota. Tämä houkuttelee varmaan oppilaita. Koodaaminen kehittää oppilaiden keskittymiskykyä ja lisää motivaatiota. Ja mikä parasta, sen voi oppia, se ei ole ylivoimaista. Sekin on tärkeä oppi: "minä pystyn tähän!".

Mustaa ja valkeaa magiaa

Syistä, jotka ehkä kerron myöhemmin, olen joutunut perehtymään Prometheuksen legendaan, tohtori Faustin kyseenalaiseen vaihtokauppaan, tohtori Frankensteinin surulliseen tapaukseen ja tohtori Jekyllin häpeälliseen kaksoiselämään herra Hyden hahmossa. Eräät lukijat kuitenkin arvaavat, mistä on kysymys. Tässähän tietysti pohditaan tieteen olemusta ja jopa sen etiikkaa. Kaikkia näitä tapauksia on käytetty osoittamaan, kuinka vaarallista on tiede, tai tiedon tavoittelu ylipäätään. Onpa jopa kunnianarvoisa akateemikko Georg Henrik von Wright kaivettu ylös haudastaan sormeaan heristämään.

Mutta tarkoitukseni ei nyt ole puolestani heristellä sormeani tiedon ja edistyksen vihollisille - niin houkuttelevaa ja helppoa kun se olisikin. Sen sijaan aion minäkin puolestani setviä tieteen pimeää puolta. Mutta en lainkaan aio yhtyä niin sanottujen humanistien umpitylsään "susi tulee" pelotteluun, vaan otan kokonaan toisen, ja varsin huonosti tunnetun näkökulman. Tieteellinen ajattelu ei nimittäin ole niin puhdasta ja rationaalista, kuin sen vastustajat uskottelevat. Päin vastoin, se on sekoittunut perin pohjin magiaan, perustelemattomiin uskomuksiin ja kehnoihin motiiveihin. Sillä tiede ei ole suinkaan syntynyt tyhjästä, vaan se kantaa mukanaan koko inhimillisen kulttuurin hyveiden ja paheiden painolastia.

Mieleeni välähtää visuaalinen kuva Luis Buñuelin Andalusialaisesta koirasta. Nuori mies tavoittelee jotain, hän ojentaa kättään kohti naista, mutta ei pääse etenemään, sillä hän joutuu raahaamaan perässään flyygeliä jonka päällä on mätänevä aasin raato ja raamatun laintaulut, ja perässä raahautuu ja kaksi katolista pappia. Siinäpä todella kulttuurimme kuva!

Meille on koulussa ja mediassa annettu kuva tieteestä, joka syntyi luonnontieteiden keksimisestä 1600- luvulla, joka löi itsensä lopullisesti läpi valistusaikana, ja joka johti seuraavien vuosisatojen aikana valtavaan teknologiseen vallankumoukseen. Tuon kuvan mukaan tiede perustuu rationaaliseen ajatteluun ja erityisten tieteellisten metodien soveltamiseen. Mutta tuo kuva on aivan liian siloinen ja puhdas. Puhumattakaan siitä, että se on aivan liian yksinkertainen.

Tässä viittaan lähinnä luonnontieteisiin, joista anglosaksinen maailma käyttää nimeä "sciences". On kyllä totta, että ihmistieteet, "humanities", on omaksunut luonnontieteen esimerkin mukaisia käytäntöjä ja metodeja, ja lisäksi on olemassa omaleimaiset filosofia ja matematiikka. Mutta mitenkään näitä väheksymättä (ja minä arvostan todella suuresti myös ihmistieteitä, filosofiaa ja matematiikkaa), unohdamme ne nyt. Mutta vain selkeyden vuoksi, itse asia jota koetan kuvata ei muutu.

Ongelma on nimittäin seuraava: tieteessä niin keskeinen metodi on sinänsä oudolla tavalla tehoton. Metodeja käytetään vain väitteiden ja hypoteesien tutkimiseen. Ne eivät tuota tieteeseen mitään uusia ideoita. Joten mistä nuo uudet ideat sitten tulevat? Vastaus kaikessa lyhyydessään kuuluu: emme todellakaan tiedä. Tiedämme vain sen, että jollain tavalla uusien ideoiden syntyminen liittyy ihmisen persoonalliseen läsnäoloon ja toimintaan. Tiedon systemaattista käsittelyä ja varmentamista edeltää jonkinlainen esitieteellinen prosessi - ja se näyttää varsin sotkuiselta.

Tieteen varhaisia edeltäjiä olivat alkemia, okkultismi ja astrologia. Alkemistit olivat kehittäneet kemian tietämystä ja käytännön toimintatapoja. Sen kova ydin ja pitkään jatkuneen suosion selittäjä on kuitenkin kullan valmistaminen. Se on myös esimerkki tieteen kehnoista motiiveista: rikkauden tavoittelu tai maine oppineena joka uskottelee osaavansa valmistaa kultaa. Alkemia nivoutui saumattomasti myös okkultismiin, salatieteisiin. Siis taikuuteen ja noituuteen.

Kirkko suhtautui salatieteisiin ja alkemiaan osin torjuvasti, koska oletettavasti noituuden harjoittajat pyrkivät edistämään tarkoituksiaan liittoutumalla paholaisen ja muiden pimeyden voimien kanssa - siitä nimi "musta magia". Tästä tuli myös uskonpuhdistuksen eräs motiivi. Reformaattorit nimittäin katsoivat, että kirkko harjoittaa valkoista magiaa, ja he pitivät sitä lähes yhtä epäilyttävänä kuin mustaa magiaa. Tunnetusti valkoinen magia kuuluu edelleen katolisen kirkon uskonnollisiin käytäntöihin mm ehtoollisen ja ihmeiden muodossa. Magian vieroksuminen saattaa selittää, miksi tiede on edistynyt erityisesti protestanttisissa maissa.

Valistusaikana tiede pääsi vauhtiin, sen harjoittamisesta tuli lähes kansalaisvelvollisuus. Tieteellinen edistys kasvoi alkemian ja okkultismin kyllästämässä ilmapiirissä, ja tieteellinen keskustelu oli hyvinkin sekavaa. Jopa kaikkein etevimmät tiedemiehet harrastivat myös salatieteitä, magiaa ja alkemiaa, parhaana esimerkkinä suuri Isaac Newton. Tästä enemmän kirjoituksessani "Paljastuksia sielusta". Seuraavina vuosisatoina tieteellinen ajattelu toki vahvistui ja taikausko jäi taustalle - mutta ei kadonnut.

Omana aikanamme sosiaalinen media on jopa vahvistanut esoteerisen ajattelun asemia. Esimerkkejä on helppo löytää. Ihmedieetit, homeopatia ja muut vaihtoehtohoidot, erilaiset terapiasuunnat, sähköallergia ja muut vaikeasti todennettavat yliherkkyydet - ja tieteentekijöiden salaliitot. Esiin kaivataan jopa ammoin unohtuneita tieteen harhapolkuja, kuten vitalismi, spiritismi, animaalinen magnetismi, suolihuuhtelut ja elimistön neutralisointi. Samaan aikaan julkisuus tuntuu odottavan tieteeltä sellaisia ihmetemppuja, joita aikoinaan esittivät mainetta ja asiakkaita tavoittelevat kiertelevät lääkäri-alkemistit. Toki on niin, että 1900- luvun tiede ja erityisesti tiedettä hyödyntävä teknologia ovat tuottaneet lähes ihmeen omaisia saavutuksia suorastaan liukuhihnalta. Mutta tässä suhteessa kaupallinen julkisuus on kyltymätön.

Kysymys on loppujen lopuksi siitä, mistä tieto tulee, miten siihen voi luottaa, ja miten tietoa varmennetaan. Myös suuri yleisö on omaksunut, joskus liiankin hyvin, sen terveellisen käsityksen, että tieteelliset totuudet eivät ole lopullisia, tiede kehittyy. Tieteellinen järjestelmä toimii kuitenkin sinänsä hyvin, lukuun ottamatta yrityksiä johtaa ja ohjata tiedettä julkaisu- ja siteeraustilastojen kautta. Se kun on jo johtanut tarpeettomaan julkaisemiseen ja itseplagiointiin. Pahin ongelma on kuitenkin, että tällainen politiikka on taustapeiliin katsomista. Uuden tiedon etsimistä se ei rohkaise.

Mistä sitten syntyvät uudet ideat? Taikauskon ja okkultismin rooli lienee nykyisin varsin vähäinen, mutta jonkinlainen maaginen ajattelu on meillä kaikilla tavallista  Toisaalta perusteettomatkin oletukset ja periaatteet saattavat tuottaa ideoita, jotka sitten joko varmistuvat - tai niin kuin ideoille usein käy, ne huomataan viallisiksi. Itse olen vakuuttunut siitä, että tärkeää on tieteestä keskustelu, kaikilla tasoilla. Se saisi kaikin mokomin saisi olla tutkijoiden välistä, tai poikkitieteellistä, mutta myös yleistajuistavaa, maallikoiden ja harrastajien harjoittamaa ja filosofista.

Olen aiemmin kirjoittanut siitä, kuinka filosofia on ehkä menettänyt statustaan ja rooliaan uuden tiedon tuottajana, mutta tieteen stimuloijana ja ihmiskunnan henkisten pyrkimysten ilmaisijana filosofia jatkaa monituhatvuotista vaellustaan.