Digitaaliset tietokoneet eivät ymmärrä ihmisten puhumia kieliä. Sen sijaan ne käyttävät binäärikieltä, jota kutsutaan konekoodiksi tai konekieleksi.Konekoodi koostuu yksinkertaisten tietokonekäskyjen sarjasta, jossa kukin käsky ilmaistaan binääristen numeroiden tai bittien (eli ykkösten ja nollien) sarjana. Eri tietokoneet tyypillisesti ”puhuvat” tai ”ymmärtävät” eri konekieliä. Esimerkiksi yksi tietokone voi esittää ADD-operaation muodossa 10011111
, kun taas toinen saattaa esittää samat operaatiot muodossa 000110
. Sen lisäksi, että bittikuviot ovat tyypillisesti erilaisia tietokonetyypeittäin, jopa operaation esittämiseen käytettävien bittien määrä voi olla erilainen.
Kun ohjelma suoritetaan, käyttöjärjestelmä (esim. Windows, Linux, OS X jne.) toimii isäntäympäristönä, joka tarjoaa ohjelmalle palveluita.Näihin palveluihin kuuluu olennainen tuki, kuten pääsy näppäimistöön, näyttöön ja kiintolevyihin. Valitettavasti myös se, miten ohjelma käyttää näitä palveluja, eroaa käyttöjärjestelmästä toiseen. Konekielten ja käyttöjärjestelmän vaatimusten välisten erojen vuoksi konekielellä kirjoitetut ohjelmat keskittyvät enemmän ohjelmaa käyttävään järjestelmään kuin siihen, miten ohjelma ratkaisee ongelman. Lisäksi se tarkoittaa, että konekoodia ei ole mahdollista siirtää eri tietokoneiden välillä ilman jonkinlaista käännöspalvelua – yleensä virtuaalikoneen muodossa.
Konekielisten ohjelmien kirjoittaminen on hidasta, työlästä ja virhealtista. Ratkaisu oli kehittää korkeamman tason ohjelmointikieliä, joissa keskityttiin enemmän ongelmaan ja vähemmän järjestelmään (laitteistoon ja käyttöjärjestelmään), jossa ohjelma suoritetaan (ks. kuva 2). Tietokoneet eivät kuitenkaan yleensä suorita korkean tason ohjelmointikielillä kirjoitettuja ohjelmia, joten on oltava jokin tapa kääntää korkean tason kielellä kirjoitettu ohjelma konekielelle. Tarvittavan käännöksen suorittavat kahdenlaiset tietokoneohjelmat: kääntäjät ja tulkit.
Kääntäjä on ohjelma, joka kääntää korkeatasoisella ohjelmointikielellä, kuten C:llä tai C++:lla, kirjoitetut muut ohjelmat konekoodiksi tai konekieleksi.Muut kielet, kuten Java ja C#, kulkevat eri reittiä: Näillä kielillä kirjoitetut ohjelmat käännetään väliesitykseen (esitys, joka on jossain korkean tason kielen ja konekielen välissä), jota kutsutaan usein virtuaalikoneohjelmaksi. Virtuaalikonekoodista tulee sitten syötettä toiselle ohjelmalle, jota kutsutaan tulkiksi tai virtuaalikoneeksi (VM, ohjelma, joka simuloi laitteistosuorittimen). Jotkin kielet, kuten Javascript ja Perl, ovat täysin tulkattuja, eli niitä ei käännetä, vaan ne tulkitaan suoraan.
Kullakin lähestymistavalla korkean tason ohjelmointikielellä kirjoitetun ohjelman ajamiseen on etuja ja haittoja. Täysin käännetyillä kielillä (esim. C ja C++) kirjoitetut ohjelmat suoritetaan nopeammin kuin osittain käännetyillä kielillä (esim. Java ja C#) kirjoitetut ohjelmat ja ne suoritetaan paljon nopeammin kuin täysin tulkatuilla kielillä (esim. Javascript ja Perl) kirjoitetut ohjelmat. Jotta suorituskyvyn erosta saataisiin käsitys, oletetaan, että käännetty C++-ohjelma suoritetaan ajassa 1,0. Vastaava ohjelma, joka on kirjoitettu kielellä, joka on käännetty ja sitten tulkattu, suoritetaan yleensä ajassa 3-10. Sama ohjelma, joka suoritetaan puhtaasti tulkatulla kielellä, suoritetaan ajassa noin 100. Javan ja C#:n VM:ien nykytoteutuksissa käytetään JIT-tulkkia (just in time), joka kääntää osan virtuaalikoodista konekoodiksi sen käsittelyn aikana. JIT-prosessorit lyhentävät suoritusaikaa noin 1,5-kertaiseksi puhtaasti käännettyihin kielijärjestelmiin verrattuna. Python-ohjelmointikieli on hieman erilainen: Python-ohjelman pääosa on tulkattu, mutta se on suhteellisen pieni, joten sen vaikutus kokonaisajoaikaan on vähäinen. Suurin osa Python-kirjastoista, joissa ohjelma viettää suurimman osan ajastaan, on kirjoitettu C-kielellä, joten Python-ohjelmat toimivat lähes yhtä nopeasti kuin vastaava C-ohjelma.
Toisaalta puhtaasti kääntäjän tuottamia suoritettavia ohjelmia ei voi siirtää erilaisten alustojen välillä (esimerkiksi Windows-ohjelmaa ei voi ajaa Applen tietokoneella), kun taas tulkatuilla kielillä kirjoitetut ohjelmat ovat helpommin siirrettävissä eri tietokoneiden välillä. Tämä siirrettävyys saavutetaan tarjoamalla VM tai tulkki kullekin alustalle (laitteiston ja käyttöjärjestelmän yhdistelmä). Tulkit ja VM:t ovat puhtaasti käännetyillä kielillä kirjoitettuja ohjelmia, joten ne eivät ole siirrettävissä, mutta niiden käsittelemät ohjelmat ovat.