TDDE44 Programmering, grundkurs¶

Föreläsning 1.1¶

Johan Falkenjack, johan.falkenjack@liu.se¶

Föreläsningsöversikt Fö 1.1 - 1.3¶

  • Introduktion
  • Kursadmin
  • Linux och datorer
  • Python interaktivt och som skript
  • Rättningsskriptet
  • Programmeringskoncept
    • Literaler
    • Operatorer
    • Variabler
    • Datatyper
    • Funktioner
    • Villkor

Föreläsningsöversikt Fö 1.1 - 1.3¶

  • Introduktion
  • Kursadmin
    • Betygsmoment
    • Kurshemsidan
  • Datorer och historia
  • Linux
  • Programmering
    • Vad är ett program?
    • SICP-citat
    • Syntax och semantik

Vem är jag och vad gör jag här?¶

vem.jpg


Kontaktuppgifter och kommande kontorstider
  • Johan Falkenjack, oftast han men hen går också bra.
  • Teknologie Licentiat i Datavetenskap och Universitetsadjunkt på Institutionen för Datavetenskap.
    • Slipper forska men brukade forska om maskininlärning och tillämpad statistik inom naturliga språk.
  • Data Scientist, lite datavetare/programmerare, lite statistiker, på BRP Systems.
  • Tog ungefär 3 år på mig att "fatta" programmering.
  • Ny på kursen, examinator, kursledare, ambulerande labbassistent och allmänt bollplank i mån av tid.

Kursadministration¶


  • 13 Föreläsningar, 7 lektioner, 7 labbar, 1 terminologiövning
  • 3 Examinationsmoment, LAB1, LAB2 och DAT1
  • LAB1, U/G, 3 hp
    • Introduktion till laborationsmiljön
    • Grundläggande Python-uppgifter
    • 4 Mindre laborationer
  • LAB2, U/G, 3 hp
    • 3 Större laborationer
  • DAT1, U/3/4/5, 2 hp
    • Datortenta (2026-06-03) OBS! Preliminärt
  • Kurshemsidan har denna och all annan information ni kan önska.
    • https://www.ida.liu.se/~TDDE44

Digitala kontaktytor¶

  • Kurshemsida
    • https://www.ida.liu.se/~TDDE44/
    • All kursinformation hittar ni här, inkl. föreläsningsbilder och kontaktuppgifter till personal på kursen.
  • Webreg
    • https://www.ida.liu.se/webreg3/TDDE44-2025-1
    • (alternativt https://www.ida.liu.se/webreg-beta/TDDE44-2025-1)
    • Anmälan till pargrupp.
    • Resultatrapportering
  • Sendlab för inlämningar - ev. feedback kommer via mail från Sendlabsystemet.
  • (Lisam används inte i denna kurs annat än för en uppsättning automaträttade uppgifter.)

Skicka kursrelaterad e-post¶

  • Skicka endast från er LiU-adress
    • (mail från externa adresser fastnar ofta i LiUs spamfilter)
  • Ha med kurskoden i ämnesraden
  • Om ni läst en annan kursomgång - inkludera i mailet vilken kursomgång ni först läste kursen

Får man använda ChatGPT (eller Copilot eller Claude, etc.)?¶

  • Enkla svaret: Nej.
    • All kod du lämnar in skall vara skriven av dig och din labbpartner.
    • Allt annat klassas som akademiskt fusk.
    • Akademiskt fusk → Disciplinnämnden → Avstängning från studierna.
  • Men om man bara använder ChatGPT som en extra labbassistent?
    • Tillåtet, men:
    • ChatGPT är ofta en dålig pedagog och blir väldigt lätt en krycka.
    • Du upptäcker kanske först på tentan att förståelse saknas.
  • Läs mer på kurshemsidan: https://www.ida.liu.se/~TDDE44/tips-och-resurser/genai/
  • ChatGPT är en synnerligen dålig pedagog och blir väldigt lätt en krycka som kan maskera när man saknar grundförståelse.
  • Ger dig svaret eller hela förklaringen och hjälper dig inte att själv utveckla nödvändig förståelse.
  • Vi har sett en tydlig trend att genomsläppet på tentan blir allt sämre ju fler som lutar sig mot ChatGPT under labbarna.

"Men i verkligheten kommer jag ju kunna använda generativ AI"¶

  • Wolfram Alpha, Mathematica, eller MATLAB klarar allt som tas upp i alla grundläggande mattekurser.
  • Betyder det att du inte behöver kunna Linjär Algebra, Envariabelanalys, Flervariabelanalys, etc.?
  • Tänk på den här kursen och grundläggande programmeringsfärdighet på samma sätt.
  • (Dessutom är grundantagandet fel, på många arbetsplatser, där sekretess gäller i någon omfattning, kommer man troligtvis inte kunna använda ChatGPT eller liknande system än på väldigt många år.)

Laborationer¶

  • Inte som labbar i naturvetenskapliga kurser.
  • Fokus på problemlösning snarare än demonstration.
  • Mer likt räknestugor/inlämningsuppgifter i mattekurser.

Lektioner och labbar under VT1¶

  • Görs i par som man anmäler i Webreg:
    • https://www.ida.liu.se/webreg3/TDDE44-2026-1/LAB1
    • Hitta partner först, anmäl sen.
    • Prata med er assistent om ni inte hittar en partner.
  • Genomförs i PUL (Linux-datorsal).
  • Ej obligatorisk närvaro, men labb 2-4 måste redovisas innan de kan lämnas in.
    • Det finns specifika redovisningstillfällen schemalagda i TimeEdit
  • Lektioner: Övningsuppgifter som ni bör göra
  • Laborationer: Uppgifter som ni måste göra

Inlämning¶

  • Inlämning i systemet Sendlab.
  • Pythonuppgifterna rättas med automaträttningsskript.
    • Rättningskriptet genererar en hash-kod när ni är godkända, denna sparar ni i en txt-fil som ni skickar in i Sendlab här
    • https://www.ida.liu.se/sendlab/student/sendprevalidated?code=tdde44_pyuppg_vt26
  • Laborationerna redovisas för er assistent som sedan låser upp Sendlab åt er.
    • QR-kod för upplåsning hämtar ni här: https://www.ida.liu.se/sendlab/student/request_validation?code=tdde44_labbar_vt26
    • Assistenten scannar den och låser upp er inlämning.
    • Ni skickar sedan in kod i Sendlab här: https://www.ida.liu.se/sendlab/student/sendprevalidated?code=tdde44_labbar_vt26

Förändringar sedan förra kursomgången¶

  • Delvis omarbetade föreläsningar.
  • Linux-introduktion flyttad till separat moment.
  • Pythonuppgifter och rättningsskript rejält omarbetade.
  • Labb 6 kommer att revideras ned till något mindre omfattning.

Hur kommer föreläsningarna se ut och vad är deras syfte?¶

  • Föreläsningarna är delvis nya för i år.
  • Hinner inte täcka allt, söka information viktigt.
  • Förhoppningsvis mycket live-programmering.
  • Introduktion och övergripande förklaringar.
  • Extra fokus på sånt som är svårt att läsa sig till.
  • Ni kommer inte klara er enbart på föreläsningarna, men föreläsningarna kommer att göra labbarna enklare.
  • Bortsett från "tänk om, jag tror inte att jag är riktigt så dålig pedagog" så är mitt viktigaste råd "våga testa".

Introduktion till Unix och GNU/Linux på LiU


eller

Vad i hela fridens namn, jag har ju knappt använt en dator med tangentbord förut?!

Operativsystem (OS)

operating-system-logos1.jpg
  • Ett program som styr över (opererar) själva datorn och dess maskinvara.
  • Alla övriga systemprogram (program som används av andra program) och applikationer (program som används av datorns mänskliga användare) arbetar på nåder av operativsystemet.
  • Operativsystemet startar andra program, ger dem tillgång till hårdvaruresurser som minne, nätverk eller kringutrustning och ser till att andra program inte hindrar varandra eller skadar datorn.

Snabb undersökning om datorvana¶

mentimeter_qr_code.png

Alternativt menti.com och använd koden 7942 1177.

PUL - Programutvecklingslaboratorium (Linux-datorsal)

su1516.jpg
SU15/16 på IDA
  • PULen finns i B-huset innanför ingångarna B 25 och B 27
    • Schemat i TimeEdit har kartlänk till MazeMap
  • Användning utan för schemalagd tid
    • Fritt fram 24/7/365 om det är olåst och inte står något annat på dörren.
    • Om det är bokat av annan kurs kan ni dock bli ombedda att vara tysta vid genomgång eller gå om det är platsbrist.
    • Obs! Salar kan vara schemalagda fram till 21.00 på vardagar (och ibland på helger under tenta-p).

Att interagera med en dator


It's a Unix system! I know this!
"It's a Unix system! I know this!"
  • Lex Murphy tittar på 3D-animerad filnavigering och hackar en hel nöjesparks säkerhetssystem på under 30 sekunder.
  • Tekniskt sett helt korrekt. Det här systemet fanns faktiskt. IRIX från Silicon Graphics med fsn, File System Navigator, uttalat "fusion".
  • Inte på något sätt typiskt för hur UNIX eller en UNIX-liknande miljö brukar se ut, varken då eller nu.

Hur brukar det se ut?

  • Demonstrera inloggning via ThinLinc. Thunar. Terminalemulatorn. Kommandon och flaggor (pwd, ls, cd). Ingen output för lyckade kommandon. Prompten är viktig (visa skillnad mellan bash-prompt och python-prompt).

LiUs Linuxmiljö

  • Operativsystem: GNU/Linux (Ubuntu 22.04)
  • Inloggning med LiU-ID
  • Möjlighet att logga in från egen dator via Remote-SSH i VS Code
  • Se LiUs studentsidor samt kurshemsidan för mer info
    • https://liuonline.sharepoint.com/sites/student-under-studietiden/SitePages/Fjarrinloggning.aspx
    • https://www.ida.liu.se/~TDDE44/distans/thinlinc/
    • https://www.ida.liu.se/~TDDE44/distans/rdp/

Terminalen som gränssnitt

Vadå gränssnitt?

  • Engelska: interface
  • Gränssnitt - platsen där två olika system möts och kommunicerar med varandra - något som ligger mellan två olika system och genom vilket systemen kommunicerar med varandra.
  • Gränssnitt
    • Hårdvarugränssnitt, fysiska anslutningar mellan apparater, t.ex. USB, SATA, XLR, etc.
    • Nätverksgränssnitt, mellan apparat och nätverk, t.ex. Ethernet, WiFi, Fiber, etc.
    • Mjukvarugränssnitt, mellan olika program och/eller hårdvaror, t.ex. operativsystem, drivrutiner, API:er.
  • Ofta pratar vi om användargränssnitt, där det ena systemet är en människa och det andra är ett tekniskt system som hen använder, t.ex. en mjukvara.

Kommandoradsgränssnitt (CLI - Command Line Interface)¶

bash_shell.png

  • Syfte: miljö för att utveckla och köra egna program
  • Enklare (färre rörliga delar) än ett grafiskt gränssnitt:
    • Output: text (en rad/tecken i taget)
    • Input: textkommandon
  • Kraftfullt, nästan ett programmeringsspråk i sig.
  • Jämfört med grafiskt gränssnitt:
    • Output: fönster med olika interaktiva grafiska komponenter
    • Input: musposition, musklick, tangenttryckningar, objekt som dras och släpps m.m

För er andra autister i salen (ni är sedda ❤️)¶

  • Terminalemulatorn/terminalen
    • Tillhandahåller funktionalitet för skalprogram att visa text och ta emot tangentbordstryck från användaren. Själva "fönstret".
  • Skalet/skalprogrammet (eng. shell)
    • Tillhandahåller ett interaktivt gränssnitt för att köra kommandon i operativsystemet.
    • Startas automatiskt när vi öppnar terminalprogrammet.
    • En typ av interpretator, som tolkar text och utför instruktioner.
  • Prompt
    • Sekvens av tecken som visar att skalet är redo att ta emot ett kommando.
    • Tecknet $ används ofta för att representera en godtycklig prompt i dokumentation och exempel.
  • Konsol
    • En specialterminal som tillhandahålls direkt av ett program för att kommunicera specifikt med det programmet, t.ex. av operativsystemets kärna (eng. kernel).
  • Alla är delar av ett Kommandoradsgränssnitt
  • Skalet/skalprogrammet (eng. shell)
    • Exempel, Unix/Linux: sh (Thompson, senare Bourne, Shell), bash (Bourne Again), csh (C), ksh (Korn), tcsh (TENEX C), zsh, scsh (Scheme), dash (Debian Almquist), fish (kolla in https://fishshell.com/)
    • Exempel, Windows: COMMAND.COM, CMD.EXE, PowerShell

För er andra (ni är också sedda ❤️)¶

  • Använd terminal, konsol, skal, kommandoraden, osv. som synonymer.
  • Det är ok.

För tydlighet¶

  • Jag vet att jag ser uråldrig ut, men textbaserade gränssnitt var faktiskt nytt för mig när jag började på universitetet också.
  • Jag är inte så gammal.
  • Kursassistenterna, Charlie och Andreas, å andra sidan. De är så gamla.

Varför CLI år 2026?¶

  • Är det inte sjukt förlegat och gammalmodigt?
  • Är det inte krångligt att använda?
  • Måste man verkligen lära sig alla kommandon utantill?

Varför CLI: Unix-filosofin¶

  • Varje skalkommando och program ska göra en sak, och göra det väl.
  • Mer komplexa problem löses genom att koppla ihop dessa enklare kommandon och program.
  • Klassiskt ingenjörsmässigt tänkande.

Varför CLI: Flexibilitet¶

  • Textgränssnitt är mycket enklare att bygga än grafiska gränssnitt, och kan därför utökas och anpassas snabbt.
  • En applikation behöver bara kunna kommunicera med text för att kunna integreras med alla andra skalprogram och -kommandon.
  • Arbete i textgränssnitt är mycket enkelt att automatisera.

Varför CLI: Resurshushållning¶

  • Textgränssnitt kräver väldigt små resurser, både av datorn där de körs, datorn där användaren sitter, och nätverkskopplingen mellan dem.
    • Ja, remote-arbete via textgränssnitt existerade nästintill från start.

Varför CLI: Gilla läget¶

  • Nästan alla produktionsmiljöer för modern mjukvara och mjukvaruutveckling är primärt textbaserade.
    • Alltså: Även om inga andra argument vinner över dig, så är detta den verklighet vi måste förhålla oss till.

Varför CLI: Viktigast för vår del¶

  • Textgränssnitt kräver i någon utsträckning samma typ av tänkande som programmering.
    • Blir vi bra på det ena blir vi troligtvis bra på det andra.

Fine, men om jag hatar bash specifikt?¶

  • Kommandona som finns i skalet är i princip desamma oavsett vilket skal du använder.
  • Det som skiljer olika skal är sådant du främst märker av när du redan är van terminalanvändare.
  • Med det sagt, på LiUs system finns också tcsh förinstallerat.
  • Skal är också oftast så små att du kan installera dem i din egen hemkatalog (men hur man gör det är definitivt överkurs).
    • Själv använder jag fish till vardags (eftersom jag är för gammal och bekväm för att konfa upp zsh ordentligt).
    • Xonsh blandar Python med mer traditionella skalkommandon, men jag har inte testat själv så glhf.

Tangentbordet och du — en kärlekshistoria?¶

Image by freepik

Det första tangentbordets betydelse¶

By ArnoldReinhold - Own work, CC BY-SA 3.0, Link
  • Både första tangentbordet och den första datorn som kunde mata ut text. På samma maskin.
  • En teletype-maskin (som normalt användes för telegram) modifierades för att skicka information mellan människa och dator på samma sätt som telegrafister skickade meddelanden till varandra. Förkortningen TTY.
  • Samma interaktion i terminalen. Inget papper och processen är mycket tystare, men varför kommandon i UNIX och Linux bara skriver ut vid fel eller uttrycklig fråga.

Tangentbordet vi alla ser oftast?¶

Vad är skillnaden?¶


No description has been provided for this image
No description has been provided for this image

"Riktiga tangentbord"¶

  • Inte bara för inmatning av tecken.
  • Kanske självklart, men ni kommer att hata programmering och att använda terminalen så länge ni måste sträcka er efter musen för operationer som ni gör hundratals gånger om dagen eller skriva samma långa kommando 17 gånger.
  • Börja tänka i termer av "finns det ett kortkommando för det här?" när du redigerar i VS Code.
  • Använd piltangenterna och tab-tangenten i terminalen, annars blir du galen.
    • Du kan också söka bland dina tidigare körda kommandon i bash genom att trycka Ctrl+R.

Måste man ha ett jätteavancerat specialtangentbord för att bli en bra programmerare?¶

Space-cadet keyboard for the MIT CADR Lisp Machine aka the reason Emacs works the way it does. By Retro-Computing Society of Rhode Island - Own work, CC BY-SA 3.0, Link

Nej, bara jättejobbiga hipsters och supernördar har sånt trams¶

(Här är mitt, jag har byggt det själv... Funkar jättebra med fish.)

Om vi får tid: Lite mer om kurshemsidan¶