Introduktion till
Utformad för dem som vet och skall veta mest om datorer och programmering
Hur hittar man den: från svårast till lättast
0. Navigera i Chalmers studieportal
http://www.student.chalmers.se/
1. Anteckna URL (Uniform Resource Locator)
http://www.cs.chalmers.se/~aarne/datorintro/
2. Googla med
datorintroduktion D-linjen Chalmers
3. Googla med
Aarne Ranta
tryck på "Datorintroduktion"
Vi går snabbt genom kurswebbsidan, för att förklara
Datavetenskap (Computer Science) har sina rötter på två håll:
Datavetenskap kan därför se rätt så olika ut beroende på datavetare.
hårdvara = maskinvara, mjukvara = programvara
mjukvara användarprogram -- Firefox, emacs, GHC operativsystemet -- Windows, Unix, Symbian ------------------------------------------------------------- hårdvara datorn -- PC, Mac, iPhone, PSP
datavetenskap (men inte alla företag...) strävar efter att hålla isär nivåerna.
Första versionen i 1970
Känns numera under namnen Linux, Mac OS X, SunOS, BSD...
Fungerar på alla sorters maskiner
Populärt bland professionella programmerare och datavetare
Kärnan (Eng. kernel): närmast hårdvaran
Filsystemet: kataloger och filer
Kommandotolken (Eng. shell): närmast användaren
Därtill:
När man matat in användar-ID och lösenord, kommer man oftast in i ett fönstersystem.
Man kan då öppna ett "shell", som kan heta "terminal", "konsole", "xterm", "cygwin", etc.
I shellet har man tillgång till (nästan) alla program.
De enklaste programmen är shellkommandon.
kommando | förklaring | engelska | |
---|---|---|---|
pwd |
ange arbetskatalogen | print working directory | |
ls |
ge listan av filer | list | |
cd |
navigera till en annan katalog | change directory | |
whatis |
beskriv ett kommando med en rad | what is | |
man |
ge full beskrivning av kommandot | manual |
Arbetskatalogen = den katalog "där jag befinner mig just nu"
Kommandon tar argument. Vi betecknar typer av argument med STORA bokstäver.
ls DIR -- ge listan av filer i katalogen DIR ("directory") ls FILE -- ge listan av filen FILE (om den finns) ls -- ge listan av filer i arbetskatalogen
Argument kan innehålla jokrar ("wildcards"), *
. En joker betyder
"vilka tecken som helst (eller inga)". Exempel:
ls *.jpg -- ge listan av alla filer vars namn slutar .jpg
Man kan tro att det är bekvämast att se listor av filer i ett grafiskt program.
Men försök att få listan av enbart jpg-filer:
ls *.jpg
Eller listan av alla jpg-filer som börjar med img
i alla underkataloger av
arbetskatalogen:
ls */img*.jpg
Filhantering: FILE kan oftast vara DIR
kommando | argument | förklaring | engelska | |
---|---|---|---|---|
cp | FILE FILE | kopiera filen | copy | |
mv | FILE FILE | flytta eller döpa om filen | move | |
rm | FILE | ta bort filen | remove | |
mkdir | DIR | skapa en katalog | make directory |
Analys av strängar och tecken
kommando | argument | förklaring | engelska | |
---|---|---|---|---|
cat | FILES | visa innehållet i FILES | catenate | |
grep | STRING FILE | ange rader med STRING | grep | |
wc | FILE | räkna rader, ord och tecken | word count |
Skriv och använda enkla program, som gör en sak i taget.
Pipe: kombinera program i sekvens. Symbol: |
(läs: "pajp")
Exempel: visa hur många filer som finns i arbetskatalogen
ls | wc
Exempel: visa på hur många rader ordet "funktion" förekommer i alla
.txt
-filer i katalogen lectures
:
grep "funktion" lectures/*.txt | wc
Använd Unix-program och andra tillgängliga program så länge de räcker.
Skriv egna program när det inte finns färdiga - för precis de bitar som saknas.
Lär dig att lösa vilket som helst programmeringsproblem.
Lär dig att känna igen när problemet inte bara är programmering.
Alla datavetare sysslar med programmering. Vad är detta?
Algoritm: en metod att göra något i välbestämda steg, t.ex. division
6 6 6 ----------- 3 | 1 9 9 8 1 8 --- 1 9 1 8 --- 1 8 1 8 ===
Algoritmer måste uttryckas i ett precist språk för att en dator ska kunna utföra dem.
------------------------------ människan högnivåspråk matematisk text Haskell Java C Assembler Maskinspråk lågnivåspråk ------------------------------ maskinen
summan av alla heltal från 1 till och med 100 -- matematisk text sum [1 .. 100] -- Haskell int result = 0 ; -- Java, C for (int i = 1 ; i != 100 ; ++i) result += i ; iconst_1 ; dup ; istore_1 ; istore_2 ; -- Assembler (Jasmin) TEST: bipush 100 ; iload_1 ; ifeq END iload_1 ; iload_2 ; iadd ; istore_2 ; iinc 1 1 ; goto TEST END 0000 0011 0101 1001 0011 1011 0011 1100 ... -- Maskin (JVM)
Högnivåspråk:
Maskinspråk:
Obs: på förra sliden är Java/C och Assembler-exemplen fel!
Vi lär ut Haskell först
Senare lär vi Java, C, assembler
Och ännu lägre: datorarkitektur, kretselektronik...
Och ännu högre: matematiska modeller av beräkning
Och bryggan mellan nivåer: kompilatorer
Kompilatorn är ett program som automatiskt översätter högnivåspråk till maskinspråk.
Det är därför programmerarna (oftast) kan hålla sig till högnivåspråk.
Det är därför samma program kan köras på olika sorters datorer.
GHC = Glasgow Haskell Compiler
GHCi = GHC Interactive
Vi kommer att
GHC(i) finns för Linux, Mac, Windows... gratis från
Starta ett GHCi-shell i Unix-shellet och skriva program till prompten
ubuntu$ ghci Prelude> 2+2 4 Prelude> sum [1 .. 100] 5050
Snabbt och effektivt för mycket korta program.
Även för att testa längre program.
Skriv program i en fil, t.ex. MyProgram.hs
, läs in i GHCi, och kör i GHCi
Prelude> :l MyProgram.hs MyProgram> factorial 12 479001600
Snabbt för program stora som små, men inte effektivast.
Det vi mest använder resten av kursen. Filen MyProgram.hs
kan se ut så här:
factorial n = product [1 .. n]
Skriv program i en fil, t.ex. factorial.hs
,
kompilera med GHC, och kör i Unix-shell
ubuntu$ ghc factorial.hs ubuntu$ factorial 12 479001600
Det är så här man skapar program för användare: de behöver inte veta om GHC eller att programmet var skrivet i Haskell.
Programmen kan användas i Unix-pipes.
Frivilligt på den här kursen.
En texteditor som är många programmerares favorit.
Speciellt lämpligt för att skriva programkod i.
Kan öppnas från shellet med kommandot emacs
, eller eventuellt från
en meny i "applications" eller motsvarande.
Redovisning: visa kommandona, kör dem, och visa resultatet.
1. Testa vad som händer med kommandon ls
, cp
, cd
och wc
om de
används utan argument.
2. Uppvisa vilka kataloger på din dator som är de närmaste underkatalogerna till
rooten (/
).
3. Hur många filer finns i /usr/bin/
? Denna katalog innehåller de
användarprogram som följer med operativsystemet. Uppvisa shellkommandot som
utför räkningen.
4. Skapa en katalog pictures
, och kopiera dit 25 jpg-bilder från webben
eller någon annan källa. Vi ska använda denna katalog senare för att skapa
ett fotoalbum likt detta.
5. Hitta den fullständiga texten till August Strindbergs roman "Röda rummet" på webben. Kopiera över den till din dator, och räkna hur många rader som innehåller ordet "cigarr". Obs. Även om texten är uppdelad i flera filer, kan du ändå göra detta utan större möda.
6. Skapa i emacs en fil jack.txt
som består av 32768 rader med texten "All work and no play makes Jack a dull boy".
Bonus. Hur många tangenttryck behövde du?
7. Starta ghci
och skriv en formel som anger antalet dagar sedan du föddes.