Ohjelmointikieli
Historia

Ohjelmien kaltaisia ratkaisuja on käytetty muun muassa kutomakoneille ja automaattipianoille ennen digitaalisen tietokoneen kehittämistä.
Ada Lovelace kirjoitti 1800-luvulla Charles Babbagen analyyttiselle koneelle algoritmin Bernoullin lukujen laskemiseen, jonka johdosta Lovelacea pidetään ensimmäisenä ohjelmoijana. Tärkeimpänä havaintona pidetään sitä, että Lovelace hahmotti ohjelman ja algoritmin abstraktin ilmaisun, jolloin kone voi tehdä lähes mitä vain.
Ensimmäisenä ylemmän tason ohjelmointikielenä pidetään Konrad Zusen 1940-luvulla kehittämää Plankalkülia. Kielen kuvaus julkaistiin kuitenkin vasta 1972 ja ensimmäinen kääntäjä kielelle toteutettiin vasta 1998. Kieli oli korkean tason imperatiivinen kieli.
Small-Scale Experimental Machine (SSEM) oli ensimmäinen tietokone, jossa ohjelma voitiin tallettaa tietokoneen muistiin ja ohjelmaa voitiin vaihtaa ilman fyysisiä muutoksia tietokoneeseen (tallennetun ohjelman tietokone).
Ennen vuotta 1954 lähes kaikki ohjelmointi tehtiin matalan tason ohjelmointikielillä kuten konekielellä tai assemblyllä. 1950-luvun lopulla syntyneitä ohjelmointikieliä olivat ALGOL, COBOL ja Fortran.
Suuri osa ohjelmoijien työstä liittyi tuon ajan tietokoneiden rajoitteisiin. Varhaiset automaattisen ohjelmoinnin menetelmät olivat kalliita käyttää koska ne hidastivat tietokonetta 5-10-kertaisesti. FORTRANin kehitykseen vaikutti myös, että myös ohjelmoijien kustannukset olivat suuret ja merkittävä osa ajasta kului debuggaukseen. Taloudelliset syyt olivat merkittävä tekijä FORTRAN-projektin rahoittamiseen.
Yleisesti tunnustetaan että ohjelmointikielet ovat kehittyneet kolmen selkeästi tunnistettavan sukupolven kautta: konekieli, assembly ja ylemmän tason proseduraaliset kielet kuten COBOL ja FORTRAN. Kielten sukupolvia ovat määrittäneet kasvava siirrettävyys, riippumattomuus laitteistoarkkitehtuurista ja käytön helppous.
Ohjelmointikielet voidaan jakaa sukupolviin seuraavasti:
| 0 | 1 | 2 | 3 |
| --- | --- | --- | --- |
| 1 | Ensimmäinen sukupolvi | konekieli |  |
| 2 | Toinen sukupolvi | assembly | isomorfinen muunnos, symbolinen konekieli |
| 3 | Kolmas sukupolvi | algoritminen ja proseduraalinen | ei-isomorfinen muunnos, käännettävät ja tulkittavat kielet |
| 4 | Neljäs sukupolvi |  | neljännen sukupolven kielen käsitettä käytetään väljästi ja käytännöllisesti |
Neljännen sukupolven kielistä on keskusteltu 1970-luvulta alkaen. Niin kutsuttujen "ei-proseduraalisten" kielten on sanottu olevan neljännen sukupolven kieliä, mutta myös assemblya voi sanoa "ei-proseduraaliseksi". Neljännen sukupolven kielien ilmestyminen on hyvin dokumentoitu, mutta ohjelmien monimuotoisuus on tehnyt vaikeaksi tarkan määrittelyn. Neljännen sukupolven kielet on kehitetty pragmaattisemmin kuin akateemiseen työhön perustuen.
1960- ja 1970-luvuilla Simula oli merkittävä kieli, jonka ajatuksia Smalltalkissa kehitettiin edelleen. Tämä vaikutti olio-ohjelmointikielien kehitykseen.
Viidennen sukupolven kieliä on toisinaan mainostettu, mutta laitteistoabstraktion kannalta neljäs sukupolvi on jo korkeimmalla tasolla. Eräät tahot esittävät että viides sukupolvi perustuu enemmän ohjelmalle annetun rajoitteiden määrittelyyn kuin ongelmanratkaisualgoritmin kehittämiseen: käyttökohteena pääasiassa tekoälytutkimus.