Fra kildekode til maskinkode
Datamaskiner kjører ved hjelp binære instruksjoner. Hver enkelt instruksjon er en enkel operasjon prosessoren skal gjøre, som for eksempel å sammenligne to tall, gjøre en utregning eller flytte data mellom registre.
En enkelt instruksjon ikke så nyttig alene, men når vi setter dem sammen i sekvenser av flere instruksjoner som gjøres etter hverandre, er det meste mulig. Dette er den store styrken til moderne datamaskiner. En sekvens av instruksjoner kaller vi for maskinkode (computer executable).
Maskinkode må være tilpasset prosessorens instruksjonssett (for eksempel x86, ARM64 og RISC-V), slik at alle instruksjonene kan utføres slik koden krever.
Det er mulig å programmere direkte i maskinkode, men dette er uvanlig siden programmering av binære instruksjoner er tidkrevende og vanskelig for de fleste. Maskinkoden vil dessuten bare fungere på det ene instruksjonssettet den er skrevet for, noe som er upraktisk i en verden med mange instruksjonssett i bruk. Det meste av programmering gjøres derfor i et programmeringsspråk.
Det finnes hundrevis av forskjellige programmeringsspråk. Noen av de vanlige høynivåspråkene vi har, er Python, JavaScript, Java, C#, C++, C og GO.
Hvert programmeringsspråk har strengt definerte regler for hvordan koden skal utformes (syntaks). Dette kan sammenlignes med grammatikk i språk, bare mye strengere.
Det meste av programmering gjøres i det vi kaller høynivå-programmeringsspråk. Disse språkene skal være brukervennlige og har syntaks som er logisk for mennesker å forstå.
Ei linje med kode skrevet i et høynivåspråk vil ofte tilsvare mange instruksjoner med kjørekode når den er omgjort.
Kompilering
Høynivå-programmeringsspråk bruker en kompilator for å omgjøre den skrevne kildekoden til kjørekode. Kompilatoren tar den skrevne koden og de bibliotekene som er inkludert, inn i koden og lager kjørekode av dem.
Kompilatorene er lagd for å kunne lage kjørekode til forskjellige typer prosessorer (som bruker forskjellig instruksjonssett). Dette gjør at kode som er skrevet i et høynivåspråk, kan kompileres for å fungere både på x86 og ARM64 uten for mye ekstraarbeid.
De fleste feil vi gjør i programmering, er enten logiske feil eller syntaksfeil.
Logisk feil
En logisk feil oppstår når logikken i programmeringen ikke blir riktig. For eksempel kan dette være at vi ønsker å legge sammen to tall, men ved feil ganger sammen tallene.
Syntaksfeil
Syntaksfeil oppstår når vi ikke følger grammatikken i programmeringsspråket riktig, for eksempel ved å skrive ;
i stedet for :
, eller ved at vi blander store og små bokstaver i språk som er sensitive for dette.