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.
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
Algol=algorithmic language
Cobol=common business oriented language
Basic=beginner´s all-purpose symbolic instruction code