Ohjelmointi

Wikipedia
Loikkaa: valikkoon, hakuun

Ohjelmointi tarkoittaa tietokoneelle tai vastaavalle laitteelle jollakin tavalla annettavia toimintaohjeita.

Tietokoneen suoritin ymmärtää suoraan vain ohjelmia, jotka on kirjoitettu konekielellä. Konekieli koostuu yksinkertaisista operaatioista, esimerkiksi "vähennä rekisterin 3 arvosta rekisterin 5 arvo". Ohjelmointi suoraan konekielellä on mahdollista, mutta hyvin hidasta ja virhealtista. Konekielellä ohjelmia kirjoitetaan vain poikkeustapauksissa.

Tavallisesti tietokonetta ohjelmoidaan käyttämällä jotakin ohjelmointikieltä. Ohjelmointikielissä käytetään luettavia symboleja ja sovittuja koodeja. Esimerkiksi Pascal-kielisen ohjelman rivi "palkka := palkka-vero;" voisi kääntyä edellä mainituksi konekielen operaatioksi. Ohjelmointikielellä kirjoitettu lähdekoodi joko käännetään konekielelle tai tulkataan kieltä suorittavalla ohjelmalla. Käännettäessä koko ohjelma muutetaan kerralla konekieleksi, minkä jälkeen siihen liitetään tarvittavat kirjastoaliohjelmat. Tämän tuloksena saatu ohjelma voidaan suorittaa ilman kääntäjää. Tulkattaessa käännetään pieni osa kerrallaan (eikä yleensä edes konekielelle asti), suoritetaan se ja käännetään seuraava osa ja niin edelleen. Ohjelman suoritus vaatii siis joka kerta tulkin.

Ohjelmoinnin kehittyminen[muokkaa | muokkaa wikitekstiä]

1950-luvulla[muokkaa | muokkaa wikitekstiä]

Ensimmäinen moderni ohjelmointikieli oli FORTRAN (formula translator), joka nimensä mukaisesti keskittyi matemaattisten lausekkeiden kääntämiseen konekielelle. Myöhemmin kuitenkin yleistyivät kaupallis-hallinnolliset sovellukset (esimerkiksi tietokannat ja COBOL-ohjelmointikieli).

1960-luvulta 1980-luvun puoliväliin[muokkaa | muokkaa wikitekstiä]

Historiallisesti yleisin tulkattava ohjelmointikieli on ensimmäisen kerran vuonna 1964 esitelty BASIC-ohjelmointikieli ja sen monet versiot. BASIC-kielessä ei ole kehittyneitä rakenteita, mutta vaivattoman käyttönsä ja helposti tehtävän tulkkinsa vuoksi se saavutti suosiota alkuperäisen opetustarkoituksensa ulkopuoleltakin.

Ohjelmointi kehittyi vähitellen kypsäksi tieteenalaksi ja 1960-luvun alkupuolella esitelty Algol-ohjelmointikieli jäi hallitsevaksi ohjelmointikielityypiksi ongelmien ratkaisuun pyrkivään algoritmiseen eli proseduraaliseen ohjelmointiin. Algol-perinnettä ylläpitivät siitä kehitetyt kielet kuten Pascal ja C. Tämäntyyppistä ohjelmointia leimaavat hyppyjen korvaaminen toistorakenteilla, nimetyt ja parametrisoidut ohjelmanosat eli aliohjelmat muuttujien vaikutusalueen rajoittaminen ja peittäminen sekä muuttujien staattinen tyypitys (käännöksessä esimerkiksi tarkastetaan, ettei tuotetulla ohjelmalla voi sijoittaa kokonaisluvuksi määriteltyyn muuttujaan merkkijonoa). Tärkeää on myös kielen kääntämisen yksinkertaistaminen tekemällä kieli soveltuvaksi erilliseen selaus- ja jäsentämisvaiheeseen.

Myöhemmissä 1980-luvun proseduraalisissa kielissä kehitettiin keinoja modularisoida ohjelmia lisää, abstrakteja tietotyyppejä ja moduulien välisiä sopimuksia (ohjelmointikielet Modula-2, Modula-3, Oberon, Clu ja Eiffel).

Algol-tyyppisissä ohjelmointikielissä on hyvin tärkeää, että ohjelma kääntyy erittäin tehokkaasti konekieleksi. Nämä ohjelmointikielet soveltuvat suuren ohjelmoijajoukon yhteistyössä tekemien ohjelmointiprojektien tekemiseen. Tämä traditio huipentui jossain määrin Yhdysvaltain puolustusministeriön vuonna 1980 määrittelemässä Ada-ohjelmointikielessä eikä sen jälkeen ole vakavasti määritelty tai otettu käyttöön puhtaasti proseduraalisia Algol-tyyppisiä ohjelmointikieliä (eikä tällainen ole myöskään Adan myöhempi versio, Ada 95).

1980-luvun puolivälissä[muokkaa | muokkaa wikitekstiä]

1980-luvulla tekoälyjärjestelmien oletettiin korvaavan ohjelmoinnin. Puhuttiin viidennen sukupolven tietokoneista ja sovelluskehittimistä, joiden avulla varsinaisesta ohjelmoinnista piti päästä eroon. Tähän ajatteluun liittyviä ohjelmointikieliä ovat funktionaaliset ohjelmointikielet (LISP), logiikkaohjelmointikielet (Prolog) ja erilaiset asiantuntijajärjestelmät. LISP-ohjelmointikielen ajateltiin olevan erityisen sovelias tekoälyohjelmointiin, koska LISP-ohjelma ja sen käsittelemä data kuvattiin samalla tavalla sisäkkäisinä listoina. Tekoäly ei kuitenkaan johtanut toivottuun läpimurtoon.

1990-luvulla[muokkaa | muokkaa wikitekstiä]

Proseduraalisen ohjelmoinnin seuraaja 1980-luvun loppupuolelta asti on ollut olio-ohjelmointi. Ensimmäinen olio-ohjelmointikieli on vuodelta 1968 oleva Simula. Varsinaisen olio-ohjelmointi-ilmiön aloittanut ohjelmointikieli oli kuitenkin Smalltalk ja valta-asemaan olio-ohjelmoinnin nosti C++-ohjelmointikieli. Olio-ohjelmoinnissa maailma mallitetaan itsenäisiksi olioiksi, jotka voivat periä ominaisuuksilta muilta olioluokilta. Oliot voivat kommunikoida vain viesteillä, metodeilla, niiden tilaa ei voi muuten kysellä. Olio-ohjelmoinnissa tärkeää on koodin uudelleenkäytettävyys eri tarkoituksiin, ei enää ohjelman kääntyminen tehokkaaksi konekieleksi.

1990-luvulla myös käyttöliittymien tekeminen yksinkertaistui ja standardoitui niin, ettei käyttöliittymän osuus ollut enää suurin osa tyypillisen sovelluksen tekemiseen kuluvasta työpanoksesta.

2000-luvun ensimmäisellä vuosikymmenellä[muokkaa | muokkaa wikitekstiä]

Henkilökohtaisten tietokoneiden myötä henkilökohtaisten hyötyohjelmien käyttö lisääntyi. Näissä käyttäjät pääsevät itse ohjelmoimaan esimerkiksi komentosarjakielten avulla. Komentosarjakielet ovat usein tulkattavia tai "esikäännettyjä" (missä yhdistyy tulkkauksen vaivattomuus ja kääntämisen tehokkuus), eikä tärkeintä ole enää ehdottoman nopea suoritus. Uusimmissa komentosarjakielissä käytetään myös abstraktioita, joiden toteuttaminen kääntämällä ei olisi mielekästä tai edes mahdollista (esimerkiksi koodin dynaaminen evaluointi). Merkittävimmät edistysaskeleet ohjelmointikielissä 1995-2004 ovat tapahtuneet komentosarjakielten alueella. Merkittäviä uusia tulkattavia kieliä ovat Perl, Java, Python, Ruby ja Gambas.

Mahdollisia tulevaisuuden ohjelmointimenetelmiä[muokkaa | muokkaa wikitekstiä]

Ohjelmointikielet voivat perustua myös nykyisestä täysin poikkeaviin malleihin ohjelmoinnista. Esimerkiksi ohjelmointi voi perustua rinnakkaiseen käsittelyyn (CSP, Occam, LOTOS), logiikkaan (Prolog), relaatiomalliin (vrt. relaatiotietokanta), kaksisuuntaisiin rajoitteisiin (TeX Metafont), tiedon monenkertaiseen uudelleenkirjoittamiseen tai tiedon luokitteluun. Tietotekniikassa on odotettavissa rinnakkaisen käsittelyn huima yleistyminen, jolloin todennäköisesti ohjelmointikielten seuraavat edistysaskeleet liittyvät rinnakkaisuuden käyttöön.

Tulevaisuudessa myös ohjelman ja laitteiston raja hämärtyy ohjelmointikielien ja laitteistokuvauskielten lähestyessä toisiaan, jolloin on mahdollista, että osa tuotetusta ohjelmasta kääntyy konekielelle, osa suorittimen mikrokoodiksi, osa porttilogiikaksi ja osa mikropiireiksi (esimerkiksi ASIC tai FPGA). Esimerkiksi VHDL ja SystemC ovat kieliä, joilla kirjoitettu koodi on muunnettavissa laitteistoksi ja jälkimmäinen vastaa ominaisuuksiltaan C++-ohjelmointikieltä.

Kirjallisuutta[muokkaa | muokkaa wikitekstiä]

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]

Suomalaisia ohjelmointisivustoja:

Englanninkielisiä ohjelmointisivustoja: