Gå til indholdet

Programmeringssprog

Programmeringssprog er de formelle sprog, vi bruger til at beskrive præcist, hvad en computer skal gøre. De varierer meget i stil og niveau, men de løser grundlæggende den samme opgave: at omsætte menneskelige idéer til instruktioner, en maskine kan udføre.

Det er også værd at sige højt, at det næste store “programmeringssprog” måske slet ikke bliver et klassisk programmeringssprog. Meget tyder på, at naturligt sprog og AI bliver det næste store lag, hvor mennesker beskriver ønsker, krav og idéer i almindeligt sprog, og hvor AI hjælper med at omsætte det til fungerende software.

Det betyder dog ikke, at klassiske programmeringssprog forsvinder. Tværtimod kan de i praksis komme til at fremstå endnu mere som et præcist og relativt lavniveau lag under AI’en. Jo mere vi bruger naturligt sprog til at beskrive, hvad vi vil have bygget, desto vigtigere bliver det, at der nedenunder stadig findes præcise, entydige og kontrollerbare sprog, som computeren faktisk kan udføre.

Som begynder er det vigtigt at huske, at du ikke behøver vælge det “perfekte” første sprog. De grundlæggende idéer går igen: variabler, betingelser, løkker, funktioner og data. Når du først har lært ét sprog ordentligt, bliver det langt lettere at lære det næste. Derfor giver det mening først at forstå de vigtigste niveauer af programmeringssprog og derefter se på, hvilke sprog der passer bedst til forskellige typer opgaver.

Mit-Sprog

For at få en ide om hvad et programmeringssprog er, kan du prøve et meget simpelt sprog kaldet “Mit-Sprog”. Det har nogle få kommandoer og er designet til at være let at forstå. Du kan finde det på devcronberg/mit-sprog.

Niveauer af programmeringssprog

Programmeringssprog kategoriseres normalt i tre niveauer: maskinkode, assembly-sprog og højniveau-sprog. Jo højere oppe man kommer, desto lettere er sproget typisk for mennesker at læse og skrive. Jo længere ned man kommer, desto tættere er man på den måde, computeren faktisk arbejder på.

Maskinkode (Maskinsprog)

I bunden af pyramiden finder vi maskinkode, som er det sprog, computere forstår direkte. Det er binært og består af 0’er og 1’er. Selvom det ville være muligt at skrive et program helt i maskinkode nøjagtigt som computeren udfører det, gøres dette sjældent på grund af kompleksiteten og den tidskrævende natur af denne tilgang.

Alle programmer, uanset hvilket sprog de er skrevet i, oversættes i sidste ende til maskinkode, før de kan køres på en computer. Dette konverteringsprogram kaldes en compiler eller interpreter afhængigt af sproget.

Her er et eksempel på et simpelt “Hello World” program skrevet i maskinkode (husk det er bare binære tal):

01101000 01100101 01101100 01101100 01101111 
00100000 01110111 01101111 01110010 01101100 
01100100 00001010

Det er ikke let at læse, vel? Det er derfor, vi har højere niveau sprog.

Assembly-sprog (lavniveau-sprog)

Et skridt ovenfor maskinkode er assembly-sprog. Dette niveau bruger mnemonics, som er kortere, lettere at huske koder, der repræsenterer maskininstruktioner. Mens det stadig er et lavniveau-sprog, er det lettere at læse og skrive end rå binær kode. Assembly-sprog bruges stadig i dag, især til nogle indlejrede programmer, ting som BIOS og enhedsdrivere, og i performance-kritiske dele af spil og applikationer.

Tip

Hvis du vil lære mere om assembly-sprog, så prøv Ben Eater’s YouTube-videoer om emnet - eksempelvis denne der viser hvordan du kan bygge din egen computer baseret på en 6502 CPU chip (samme chip som blev brugt i Commodore 64). Ben Eater har mange gode videoer som viser helt fra bunden hvordan en computer fungerer.

Her er et eksempel på et simpelt “Hello World” program skrevet i 6502 assembly-sprog:

LDX #$00         
LDA message,X    
BEQ done         
JSR $FFD2        
INX              
BNE loop         
RTS             
message:
 .byte "Hello World", $0D, $00

Info

Jeg har skrevet en masse artikler om assembly på mcronberg.github.io/sap4faq/intro.html hvis du er interesseret i at lære mere.

Højniveau-sprog

Øverst er højniveau-sprog. Disse sprog er tættere på læsbar tekst og lettere at forstå, skrive og vedligeholde. De abstraherer de komplekse detaljer ved computerens hardware væk, så udviklere kan fokusere mere på problemet, de forsøger at løse, frem for at beskæftige sig med maskinens indre funktioner.

Højniveau programmeringssprog inkluderer populære sprog som Python, Java, C#, JavaScript og mange andre. Disse sprog har typisk en simpel syntaks og tilbyder kraftfulde funktioner som automatisk hukommelsesstyring, undtagelseshåndtering og et rigt standardbibliotek med indbyggede funktioner og datastrukturer.

Hvilket sprog bør du starte med?

Hvilket programmeringssprog du starter med afhænger af, hvad du gerne vil bygge. Men for de fleste begyndere er det bedre at vælge ét godt startsprog og komme i gang, end at bruge lang tid på at sammenligne alt.

En enkel tommelfingerregel kan være:

  • Python er et stærkt startvalg, hvis du vil lære grundlæggende programmering på en overskuelig måde.
  • JavaScript er et godt valg, hvis du især vil lave hjemmesider og webapplikationer.
  • C# er et godt valg, hvis du vil arbejde med .NET, Windows eller spiludvikling i Unity.
  • Java bruges meget i virksomheder og er stadig et vigtigt sprog mange steder.
  • C++ er relevant til systemudvikling, spil og præstationskritiske programmer, men er normalt ikke det letteste første sprog.
  • Kotlin og Swift er især relevante til mobiludvikling.

Hvis du er i tvivl

Start med Python. Hvis du primært vil lave web, så start med JavaScript. Det vigtigste er ikke at vælge det mest avancerede sprog, men at vælge et sprog, du faktisk får brugt.

Det er også værd at nævne, at SQL adskiller sig lidt fra de andre sprog på siden. SQL bruges til at arbejde med databaser og er derfor ikke normalt det første sprog, man lærer, men det er meget vigtigt senere, når man arbejder med data og applikationer.

Her er et eksempel på “Hello World” i nogle populære programmeringssprog:

print("Hello World")
console.log("Hello World");
Console.WriteLine("Hello World");
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
#include <iostream>
int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
fun main() {
    println("Hello World")
}
print("Hello World")
fn main() {
    println!("Hello, world!");
}

Selvom syntaksen ser forskellig ud, er idéen den samme i alle eksemplerne: programmet kalder en funktion, som skriver tekst på skærmen.

Typiske anvendelser

Programmeringssprog varierer i design, syntaks og formål. Når du arbejder med programmering i praksis, vil du opdage, at dette spiller en rolle i valget af sprog. Det er dog vigtigt at forstå, at et sprog er et værktøj - ikke en identitet. Man vælger sprog efter opgaven.

  • Python bruges til scripting, datavidenskab og maskinlæring.
  • JavaScript er essentielt for webudvikling.
  • C# er velegnet til Windows-applikationer, spiludvikling (Unity) og web med ASP.NET Core.
  • Java anvendes ofte i virksomhedsapplikationer.
  • C++ bruges til systemudvikling, spil og præstationskritiske applikationer.
  • Kotlin bruges til Android-udvikling.
  • Swift bruges til iOS-udvikling.
  • Rust bruges til systemudvikling og sikkerhedskritiske applikationer.
  • SQL bruges til at læse, skrive og søge i databaser.

Som et eksempel, hvis du vil skabe et 3D-spil, vil du sikkert bruge C# med Unity (game engine) eller C++ med Unreal (game engine). Hvis du vil skabe en webapplikation, vil du bruge JavaScript med en framework som React, Angular eller Vue (frontend) og måske C# med ASP.NET Core, Java med Spring Boot eller Python med Django (backend).

I mange rigtige projekter bruger man faktisk flere sprog samtidig. En webapplikation kan for eksempel bruge JavaScript i browseren, C# eller Python på serveren og SQL til databasen.

Når du skal i gang med at udvikle en specifik applikation, er det en god idé at undersøge, hvilket sprog der er bedst egnet til opgaven. Du kan finde mange ressourcer online, der kan hjælpe dig med at vælge det rigtige sprog og værktøjer.

Vigtige koncepter

Kompilering og fortolkning

Programmeringssprog kan opdeles i kompilerede og fortolkede sprog. Kompilerede sprog, som C, C++ og Rust, oversættes først til maskinkode af en compiler, før de kan køres. Fortolkede sprog, som Python og JavaScript, køres typisk i en runtime eller interpreter, der oversætter eller udfører koden under kørslen.

Nogle sprog, som Java og C#, bruger en hybrid tilgang, hvor koden først kompileres til en mellemliggende bytekode, som derefter fortolkes af en virtuel maskine (JVM for Java, CLR for C#). Dette giver en balance mellem ydeevne og portabilitet.

Statisk og dynamisk typning

En anden vigtig forskel mellem programmeringssprog er, om de er statisk eller dynamisk typede. I statisk typede sprog, som C# og Java, skal du angive typen af en variabel, når du erklærer den, og denne type kan ikke ændres senere. I dynamisk typede sprog, som Python og JavaScript, kan en variabel ændre type under kørslen.

Som begynder behøver du ikke bekymre dig for meget om, hvilken model der er “bedst”. Det vigtigste er at forstå, at forskellige sprog hjælper dig på forskellige måder: nogle giver mere frihed, andre giver flere sikkerhedsnet.

# Python (dynamisk typet)
x = 5       # x er et tal
x = "hej"   # nu er x en tekst
// C# (statisk typet)
int x = 5;       // x er et heltal
// x = "hej";    // FEJL - kan ikke ændre type

Paradigmer

Programmeringssprog kan også kategoriseres efter deres programmeringsparadigme - den overordnede tilgang til, hvordan programmer struktureres:

  • Imperativ programmering: Fokuserer på hvordan noget skal gøres, trin for trin
  • Objektorienteret programmering (OOP): Organiserer kode i objekter med data og metoder
  • Funktionel programmering: Bruger rene funktioner og undgår tilstandsændringer
  • Deklarativ programmering: Fokuserer på hvad der skal opnås, ikke hvordan

De fleste moderne sprog understøtter flere paradigmer. For eksempel kan Python og C# bruges til både imperativ, objektorienteret og funktionel programmering.

Næste skridt

Nu hvor du har set, hvad programmeringssprog er, og hvorfor man vælger forskellige sprog til forskellige formål, er det tid til at begynde på selve programmeringen. Gå videre til Grundlæggende programmering, hvor variabler, datatyper og simple datastrukturer bliver konkrete.