Centralt innehåll
- Programmeringens möjligheter och begränsningar utifrån datorns funktionssätt.
Fakta
Grace Hopper jobbade med datorer för USA:s flotta under andra världskriget. Hon tyckte de var krångliga att programmera maskinkod, och konstruerade därför ett program som kunde översätta text till maskinkod. Uppfinningen var världens första kompilator, Flow-matic, och den färdigställdes 1952.
1. Vad är ett datorprogram?
När man talar om datorer tänker man kanske i första hand på en "vanlig" persondator (PC/MAC) eller på en bärbara dator (laptop), men mobiler och surfplattor är ju också datorer. Dessutom används datorer som delar i mer eller mindre komplicerade tekniska apparater, t.ex. mikrovågsugnar, tvättmaskiner, leksaker, bilar, trafikljus, hissar, robotgräsklippare osv.
![]() |
Till exempel en robotgräsklippare åker runt och klipper av sig själv, men den har ingen egen intelligens. Den innehåller en liten dator som skickar ut signaler till gräsklipparens olika motorer. Datorn styrs av ett program, som består av en följd av instruktioner, som steg för steg talar om för gräsklipparen vad den ska göra. Programmet kan t.ex. tala om vad som ska göras när robotgräsklipparen stöter på ett träd eller när den kommer till kanten på gräsmattan. Programmet har skrivits av en programmerare som i förväg räknat ut vilka olika situationer som kan uppstå och vad som ska göras då. |
När ett program utförs (körs) i en dator säger man att programmet exekveras.
2. Hur fungerar en dator?
Enkelt uttryckt är datorn en ”maskin” som bara följer tydliga instruktioner och har till uppgift att:
Ta in information (indata).
Behandla och lagra informationen.
Presentera den behandlade informationen (utdata).
En dator kan förenklat ses som att den är uppbyggd av följande delar:
Indata
Att ge information till en dator kan ske med t.ex. tangentbord, mus eller mikrofon. En dator i en robotgräsklippare kan få information från olika sensorer som t.ex. känner av om något är i vägen.
Processor (CPU = Central Processing Unit)
En dators "hjärna". Det är i processorn alla instruktioner utförs, dvs där programmet körs (exekveras). Den kan hantera ett visst antal instruktioner. Olika datorer kan ha olika typer av processorer.
Minne
Programmet som ska köras läggs i datorns minne. Det härifrån processorn hämtar instruktioner. Processorn kan även använda minnet för att lagra information medans programmet körs.
Utdata
Att visa information från en dator kan ske till t.ex. en skärm, högtalare eller skrivare. En dator i en robotgräsklippare kan ha t.ex. en lite skärm (display) eller blinkade lysdioder.
En dator bygger på digitalteknik och kan egentligen bara en sak, nämligen skilja på två tillstånd, ström på och av. Dessa tillstånd brukar kallas för ettor och nollor. All information i en dator lagras som ettor och nollor.
3. Program
Ett program består av en följd av instruktioner. Varje instruktion representeras i sin tur av ett antal ettor och nollor. En instruktion skulle t.ex. kunna se ut på följande sätt: 0100100010010011 Datorns stora fördel är att den är oerhört snabb på att skilja på ettor och nollor, vilket vi kan utnyttja till att skapa olika typer av program. Program kallas ibland för mjukvara från engelskans software.
När ett program är skriven som en serie av ettor och nollor kallas det för maskinkod. Ett program måste vara i maskinkod för att datorns hårdvara (t.ex. processor, minne) ska kunna förstå programmet och köra det. Maskinkoden ser olika ut beroende på vilken typ av processor datorn har och därför kan inte maskinkod flyttas till en dator med en annan processortyp. Ordet hårdvara (från engelskans hardware) är ett samlingsnamn för datorns fysiska delar, dvs alla de saker man kan ta på.
Datorn förstår ju bara maskinkod (ettor och nollor), men det är ett språk som är svårt för oss människor. Därför har programmeringsspråk skapats som är enklare för oss människor att skriva och läsa, och som sedan kan översättas till maskinkod. Program som skrivs med hjälp av ett programmeringsspråk kallas för källkod. Ofta används det förkortade kod, när man menar källkod.
Datorn är ju egentligen en väldigt "dum" maskin som bara gör exakt det som den blir tillsagd att göra. Därför måste man vara väldigt tydlig när man programmerar. Koden måste beskriva exakt steg för steg vad som ska göras.
4. Kompilering & Interpretering
När man skriver källkod finns det flera olika programmeringsspråk att välja bland. Det är viktigt att källkoden skrivs korrekt, att alla språkregler följs, vilket kallas syntax. Varje programmeringsspråk (brukar ofta bara benämnas som språk), har sin egen syntax. Minsta avvikelse i syntaxen gör programmet okörbart.
Nästan alla programmeringsspråk är skrivna på engelska, dvs de använder engelsk syntax.
För att en dator ska kunna köra källkoden måste den översättas till maskinkod.
Det finns två olika angreppssätt när källkod översätts till maskinkod. Det är kompilering och interpretering.
Antingen översätts källkoden till maskinkod i före programmet körs (kompilering) eller så tolkas
källkoden medans man kör programmet (interpretering).
Olika programmeringsspråk använder olika angreppssätt.
4.1 Kompilerade språk
Kompilerade språk översätter programmen (källkoden) i förväg till datorns maskinkod, alltså innan man kör dem. Exempel på kompilerade språk är t.ex. C#, Java, C, C++ och Objective-C. En kompilator, som är ett program, översätter källkoden till masinkod.
Fördelarna med kompilerade språk är att
+ de kan bli mycket snabba, eftersom all översättning gjorts i förväg.
+ många syntaxfel upptäcks tidigt, vid kompileringen, innan man försöker köra programmen.
Nackdelarna är att
- man måste utföra det extra steget med kompilering.
- ett körbart program fungerar bara den processortyp den översatts till.
Kompilerade programspråk är viktiga eftersom de används när det ställs stora krav på effektivitet och felsäkerhet.
4.2 Interpreterade språk
Interpreterande språk är översätter eller tolkar programmen (källkoden) till datorns maskinkod en instruktion i taget, samtidigt som programmet körs. Exempel på interpreterande språk är t.ex. Python, JavaScript, PHP och Ruby. En interpretator läser och tolkar källkoden och ser till att de instruktioner som finns i den utförs.
Fördelarna med interpreterande språk är att
+ de är mer portabla, dvs kan köras alla dator som har en interpretator, eftersom de tolkas medans de körs.
+ man slipper det extra steget med kompilering.
Nackdelarna är att
- de är långsammare eftersom tolkningen sker medans programmet körs och inte i förväg som för kompilerade språk.
- programmen inte är syntax-kontrollerade innan man försöker köra dem, vilket ökar risken för att det kan bli fel när programmen körs.
När man programmerar skriver man källkod med hjälp av ett programmeringsspråk. Men datorn kan inte förstå källkod utan den måste översättas till maskinkod, dvs kompileras eller interpreteras, så att datorn kan köra (exekvera) programmet.
5. Låg- och Högnivåspråk
Som vi sett finns det flera olika programmeringsspråk, t.ex. Python, C#, C++, Java, Javascript, C osv. Alla språk har sina fördelar och är bra på olika saker. En del passar bättre för att koda och styra maskiner och apparater, somliga mer för att skapa avancerade eller större datorprogram eller andra för att koda exempelvis spel eller webbsidor på nätet.
5.1 Lågnivåspråk
Historiskt när man programmerade datorer skrevs väldigt detaljerad kod som ligger väldigt nära det språk som datorn pratar (maskinkod). Sådana språk kallas lågnivåspråk för de ligger nära maskinkoden. Programmeraren måste beskriva exakt hur alla instruktioner ska utöras. Det är omständigt att skriva sådan kod, men fördelen är att programmeraren har full kontroll på vad som händer och att program skapade med lågnivåspråk blir väldigt resurssnåla och effektiva. Exempel på lågnivåspråk är assembler. Idag används lågnivåspråk mest för små inbyggda system, som t.ex. mikrovågsugnar.
5.2 Högnivåspråk
Nästa steg i utvecklingen var att man konstruerade mer avancerade programspråk, s.k. högnivåpråk. I ett högnivåspråk skriver man programmet i en form som är lättare att förstå för människor, dvs anpassat till det mänskliga sättet att uttrycka sig och inte till datorns maskinkod. När man använder ett högnivåspråk så beskriver man mer vad som ska göras och inte exakt hur det ska göra. Man koncentrerar sig på det problem som ska lösas och behöver inte bry sig om och känna till exakt hur datorn utför instruktionerna. Högnivåspråk måste konverteras till maskinkod med hjälp av en interpretator eller kompilator, beroende på vilket programmeringsspråk som används. Det är kompilatorn eller interpretatorn som styr hur koden utförs på detaljnivå.
Faktum är att de vanligaste språken har fler likheter än olikheter. Alla språk innehåller instruktioner för:
Sekvens – instruktioner som sker i tur och ordning.
Villkor – olika val för vilka instruktioner ska utföras.
Repetition – upprepning av instruktioner.
Detta betyder att om man behärskar ett programmeringsspråk kan man relativt enkelt och snabbt lära sig ett nytt programmeringsspråk. När vi lär oss programmeringsspråket Python kommer vi att lära oss vad sekvens, villkor och repetition innebär.
Python är ett interpreterande högnivåspråk.
Begrepp
Program: Instruktioner en dator kan tolka och utföra.
Programmera: Att skriva instruktioner (kod) till datorer, dvs skriva program.
Programmeringsspråk: Ett speciellt språk för att skriva instruktioner till en dator.
Kod: Instruktioner till en dator.
Exekvera: När ett program utförs (körs) i en dator.
Programmerare: En person som skriver program, dvs. instruktioner till datorer.
Indata: Information som ges till datorn med t.ex. tangentbord, mus eller mikrofon.
Utdata: Information som visas från datorn t.ex. till en skärm, högtalare eller skrivare.
Processor (CPU = Central Processing Unit): Datorns "hjärna", där programmet exekveras.
Minne: Används för att lagra information medans programmet körs.
Källkod: Instruktioner till en dator skrivet med ett programmeringsspråk.
Mjukvara: Ett datorprogram.
Maskinkod: Instruktioner till en dator skrivet som en serie av ettor och nollor.
Hårdvara: Ett samlingsnamn för datorns fysiska delar, dvs alla de saker man kan ta på.
Syntax: Språkregler för hur koden ska skrivas i ett programmeringsspråk.
Kompilering: Källkoden översätts till maskinkod innan programmet exekveras.
Interpretering: Källkoden översätts till maskinkod medans programmet exekveras.
Lågnivåspråk: Detaljerad kod som ligger nära maskinkod.
Högnivåspråk: Kod som är anpassad till och lättare förstås av människor.
Länkar
Film
Bygren: Vad är programmering? (13:49)
Fördjupning
Övningar
Du kan inte att lära dig att programmera genom att läsa en bok eller titta på videos. Du måste öva på att skriva kod själv och ju mer du övar desto bättre blir du.- Vad är ett datorprogram?
- Vilka 4 delar är en dator, lite förenklat sett, uppbyggd av och vilken funktionalitet har delarna?
- Vad är skillnaden på källkod och maskinkod?
- Vilka 2 sätt finns när källkod översätts till maskinkod?
- Vilka fördelar och nackdelar finns det med kompilerade programmeringsspråk?
- Vilka fördelar och nackdelar finns det med interpreterande programmeringsspråk?
- Vilka 3 typer av instruktioner finns i (nästan) alla programmeringsspråk?
- För att programmera spel används ofta spelmotorer, t.ex. Unity och Unreal. Vilken typ av språk tror du de är skrivna med: lågnivå- eller högnivåspråk, interpreterande eller kompilerande språk?