Tietokone on rakennettu "osaamaan" yksinkertaisia operaatioita, jotka käsittelevät tietokoneen komponenteissa olevia bittien jonoja. Tuollaista operaatiojoukkoa kutsutaan konekieleksi. Operaatiot itsekin esitetään tietokoneen muistissa bittijonoina.
Konekielinen ohjelmointi (yleensä ns. "assemblerilla") on hyvin kömpelöä ja virhealtista. Käytännössä nykyään lähes aina ohjelmoidaan ns. lausekielillä. Niitä käyttäen ohjelmoija välttyy koneen sisäisen rakenteen ajattelemiselta. Ohjelmista saadaan lausekielellä ohjelmoiden myös siirrettäviä: ne ovat käytettävissä kaikissa tietokoneissa, joille ko. lausekieli on toteutettu.
Lausekielten ajattelutapa on konekieltä paljon ihmisläheisempi: jo ensimmäiset lausekielet mahdollistivat matematiikasta tuttujen laskutoimitusten kirjoittamisen; voitiin kirjoittaa vaikkapa A+B*C sen sijaan, että olisi itse kerrottu, mistä koneen osasta minne bittijonoja siirrellään ja minkä bittijonojen välillä käynnistetään peruslaskutoimituksia. Sittemmin lausekieliin on kehitelty monenlaisia ajatusten järjestämisen välineitä: nimettyjä aliohjelmia ja aliohjelmakirjastoja, lohkorakennetta, olioita ja luokkia, ...
Jotta tietokone saataisiin suorittamaan lausekielellä laadittuja ohjelmia, lausekieliset ohjelmat on tavalla tai toisella kuitenkin muokattava konekielisiksi - tietokonehan ei muuta "osaa" kuin vain konemaisesti suorittaa muistissaan olevaa konekielisten operaatioiden jonoa. Tuollaista muokkaamista kieleltä toiselle kutsutaan kääntämiseksi.
Lausekielisen ohjelman kääntäminen konekielelle on aika työlästä ja mekaanistakin puuhaa, joten se sopii mainiosti tietokoneelle: ohjelmaa, jonka syöttötietoina on algoritmi lausekielisenä ja tulostietoina vastaava algoritmi vaikkapa konekielisenä, kutsutaan kääntäjäksi (compiler).
syöttötiedot omalle algoritmille | V oma algoritmi KÄÄNTÄJÄ OMA ALGORITMI lausekielellä --> KONEKIELELLÄ --> KONEKIELELLÄ | V oman algoritmin tulostiedot
Kääntäjä usein ohjelmoidaan itsekin lausekielellä. Miten se itse saadaan käännettyä konekieliseksi? Tietokonehan ei muunlaisia algoritmeja osaa suorittaa!
Ohjelmointikieli voidaan toteuttaa myös tulkin (interpreter) avulla. Tällöin konekielinen tulkkiohjelma suorittaa lausekielistä algoritmia "enemmän tai vähemmän sellaisenaan":
syöttötiedot omalle algoritmille | V oma algoritmi TULKKI lausekielellä --> KONEKIELELLÄ | V oman algoritmin tulostiedot
Lausekielisen ohjelman tulkkaaminen "enemmän tai vähemmän sellaisenaan" on joustavaa, mutta se saattaa olla hidasta monestakin syystä. Yksi mahdollisuus tehostaa tulkintaa on ns. välikielen käyttäminen. Välikieli voi olla käsitetasoltaan konekielen kaltaista, mutta todellisia konekieliä yksinkertaisempaa. Jos välikielen operaatiot esitetetään tietokoneen muistin tavuina (yleensä 8 bittiä), kieltä kutsutaan tavukoodiksi. Java on toteutettu juuri näin. Javan tavukoodin nimi on Bytecode.
syöttötiedot omalle algoritmille | V oma algoritmi VÄLIKIELIKÄÄNTÄJÄ OMA ALGORITMI VÄLIKIELITULKKI lausekielellä --> KONEKIELELLÄ TAI --> VÄLIKIELELLÄ --> KONEKIELELLÄ VÄLIKIELELLÄ | V oman algoritmin tulostiedot
Lausekieltä välikielelle kääntävä ohjelma voi tietenkin olla konekielinen, mutta se voi olla myös välikielellä ilmaistu! Miten kääntäjä tässä tapauksessa saadaan suoritettua tietokoneessa, joka tietenkin osaa vain omaa konekieltään?