Det grunnleggende konseptet med å lagre programmer i datamaskinens minne sammen med data de opererer på er crux av von Neumann, eller lagret program, arkitektur. I noen tilfeller kan en datamaskin lagrer noen av eller hele sitt program i minnet som holdes atskilt fra data den opererer på. Dette kalles Harvard arkitektur etter Harvard Mark I datamaskinen.
Moderne von Neumann-maskiner vise noen trekk av Harvard Mens det er mulig å skrive dataprogrammer som lange lister med tall (maskinspråk), og mens denne teknikken ble brukt sammen med mange tidlige datamaskiner, [37] er det svært kjedelig og potensielt utsatt for feil for å gjøre det i praksis, særlig for kompliserte programmer. I stedet kan hver enkel instruksjon gis et kort navn som indikerer dens funksjon og lett å huske-en mnemonic som ADD, SUB, MULT eller hoppe. Disse huskeregler er kollektivt kjent som en datamaskins assembly.
Konvertering programmer skrevet i assembly til noe datamaskinen kan faktisk forstå (maskinspråk) er vanligvis gjort av et dataprogram kalt en assembler. Maskin språk og monterings språk som representerer dem (samlet betegnet lavnivå programmeringsspråk) har en tendens til å være unik for en bestemt type datamaskin. For eksempel kan en ARM arkitektur datamaskin (som kan finnes i en PDA eller en håndholdt videospill) ikke forstår maskinen språk i en Intel Pentium eller AMD Athlon 64 datamaskin som kan være i en PC.
[38] høyere- nivå språk og program design Selv betydelig lettere enn i maskinspråk, skrive lange programmer i assembly er ofte vanskelig, og er også feil utsatt. Derfor er de fleste praktiske programmer skrevet i mer abstrakte høyt nivå programmeringsspråk som er i stand til å uttrykke behovene til programmereren mer praktisk (og dermed bidra til å redusere programmerer feil). Høynivå-språk er som regel "kompilert" til maskinspråk (eller noen ganger i assembly og deretter til maskinspråk) ved hjelp av en annen datamaskin program kalt en kompilator.
[39] høynivå-språk er mindre knyttet til driften av målmask