KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73...

62
Kommentarer 2016 Drog över lite både första och andra timmen. Spenderade för mycket tid på introduktionen tror jag. Kom till Datalogiskt tänkande första timmen. Behöver ha en genomtänkt plan för bilden med olika typer av studenter. Bilderna om laborationer och seminarier borde komma direkt efter diskussionen om kursupplägg. Kan repeteras sist om önskas. Scope tas inte upp. Mer fokus på begrepp i delen om Python? Bilden om uttryck borde ha exempel.

Transcript of KommentarerTDDD73/info/2016/fo1-ht2016.pdf · Mål med föreläsningen Fredrik Heintz, Fö1 #TDDD73...

Kommentarer• 2016

– Drog över lite både första och andra timmen.

– Spenderade för mycket tid på introduktionen tror jag. Kom till Datalogiskttänkande första timmen.

– Behöver ha en genomtänkt plan för bilden med olika typer av studenter.

– Bilderna om laborationer och seminarier borde komma direkt efter diskussionenom kursupplägg. Kan repeteras sist om önskas.

– Scope tas inte upp.

– Mer fokus på begrepp i delen om Python?

– Bilden om uttryck borde ha exempel.

Imperativ och FunktionellProgrammering i Python#TDDD73Fredrik Heintz, [email protected]@FredrikHeintz

Vem är jag?

Utbildning Programmeringstävlingar

ForskningBakgrund

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Mål med föreläsningen

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• Du ska bli grymt inspirerad att lära dig programmera!

• Du ska känna till och förstå målen och upplägget med kursen.

• Du ska känna till och förstå kopplingen mellan TDDC66, TDDD73,TDDD63 och TATA65.

• Du ska ha sett ett Python-program och känna till den grundläggandeterminologin.

• Du ska vara medveten om att det krävs mycket arbete att bli braprogrammerare!

2016-08-29Fredrik Heintz, Fö1 #TDDD73

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Autonoma farkoster på IDA

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• 245kLOC header filer,• 875kLOC C++,• 600kLOC C,• 300kLOC java,• 150kLOC python• Totalt mer än 2 millioner rader kod

Världen är beroende av mjukvara!

2016-08-29Fredrik Heintz, Fö1 #TDDD73

De som verkligen förstår ochkan utnyttja mjukvaruteknik

äger framtiden

Vem riktar sig kursen till?

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Hur mycket kan jag om programmering redan?

Hjälp!Jag fattar noll!

Rädda mig!Ska man tryckapå Enter nu?!

Hur svårtkan det vara?

Det är mig Google ringernär de har problem.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Hur långt kommer vi i den här kursen?

Kursmål enligt kursplanen• Efter avslutad kurs ska du kunna:

– redogöra för grundläggande datavetenskapliga begrepp relaterade tillprogrammering och programspråk

– konstruera program i Python

– metodiskt lösa programmeringsrelaterade problem med hjälp av ettinteraktivt arbetssätt med implementering, testning och felsökning

– formulera och implementera rekursiva och iterativa algoritmer

– konstruera abstraktioner med varierande grad av stöd i detunderliggande språket

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Några roliga saker vi inte hinner med• Hur man designar grafiska gränssnitt

• Hur datorer kommunicerar med varandra över nätverk

• Hur man lagrar information i databaser

• Hur man startar processer för att få saker att hända samtidigt

• Hur man hanterar större programmeringsprojekt

• Hur man gör appar

Vi kommer att fokusera på grunderna i programmering ochhur man etablerar goda vanor för att bli en bra programmerare.Allt det andra – och mycket mer – kommer längre fram.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Vad är ett program och vad är programmering?

Programmering i ett nötskalprogram en uppsättning regler eller instruktioner med uppgift att styraen dators beräkningar (Nationalencyklopedin NE)programmering skrivande av instruktioner för en dators arbete (NE)

komponenternaprogramspråket ochdess konstruktioner

processenprinciper för hur man

utformar program

resultatethur program körs ochhur de påverkar folk

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Vad är ett program?En detaljerad instruktion som om man följer den ger ett visst resultat.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Vad är ett program?En detaljerad instruktion som om man följer den ger ett visst resultat.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

def find_root():

print(“Find the square root.")

x = int(input("Enter a number: "))

guess = x/2

for i in range(5):

guess = (guess + x/guess)/2

print(guess)

find_root()

Programflöde2016-08-29Fredrik Heintz, Fö1 #TDDD73

Abstraktion

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Programutvecklingsprocessen

Implementation Översätt designen till ett datorprogram!

Testning Prova programmet och rätta eventuella fel!

Underhåll Fortsätt utveckla programmet vid behov!

Analys Förstå vilket problem som ska lösas!

Specifikation Beskriv vad programmet ska göra!

Design Beskriv hur programmet ska lösa problemet!

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Datalogiskt tänkande

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• Computational Thinking

• Data + logik + tänkande

• En problemlösningprocess för att beskriva,analysera och lösa problem på ett sätt så attdatorer kan hjälpa till

– Ge detaljerade steg-för-steg instruktioner

– Bryta ner problem i delar

– Hitta mönster

– Skapa abstraktioner

– Designa algoritmer

Datalogiskt tänkande>

Programmering>

Kodning

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Hur lär man sig att programmera?

Enligt Peter Norvig, forskningschef på Google• Bli intresserad av programmering, så att du orkar lägga ner

10000 timmar på träning.• Skriv många olika program.• Prata med andra programmerare och läs deras kod.• Om du vill, läs på universitet.• Arbeta i projekt tillsammans med andra programmerare.• Ta över projekt efter andra programmerare.• Lär dig åtminstone ett halvt dussin olika programmeringsspråk.

Peter Norvig (2001) Teach Yourself Programming in Ten Years. http://norvig.com/21-days.html

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Varför har vi valt programspråket Python?

Pythons historik• Skapades i slutet av 1980-talet av holländaren Guido van Rossum, som

fortfarande spelar en stor roll för språkets utveckling.

• Det femte mest populära programspråket i världen. [1]

• Åtta av tio toppuniversitet i USA använder Python som förstaspråk. [2]

• Version 3.0, som vi kommer använda, kom i december 2008. Det var enganska stor förändring som inte är bakåtkompatibel.

• Fri programvara.[1] TIOBE Programming Community Index, augusti 2016http://www.tiobe.com/tiobe-index/[2] IT World, 8 juli 2014http://www.itworld.com/software/426242/python-bumps-java-top-learning-language

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Fördelar med Python• Lätt att komma igång med. Enklare syntax än t.ex. Java och C++.

• Har en stabil användarbas både på universitet och i industrin.

• Funkar bra både för systemprogram och för tillämpningar.

• Neutralt i förhållande till olika programmeringsparadigm.

• Kan användas för att illustrera koncept inom programmering.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Kursupplägg

Traditionell programmeringskurs

2016-08-29Fredrik Heintz, Fö1 #TDDD73

print("Hello")

1

Föreläsare

Student Labbass

Student

Lärare

Yadayada

?

Labbass

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Upplägg för Python

Aktivitet Tid i HT1 InnehållFöreläsningar 6 h Introduktion och översiktSeminarier 14 h Torrövningar samt diskussioner utifrån övningarnaLaborationer 28 h Arbete i datorsal med övningar och uppgifter, diskussionerEget arbete 64 h Läsa, öva, experiementera, arbeta med övningar och uppgifter

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Inlärning kräver aktivitet. Föreläsningar är huvudsakligen passiva.Därför är föreläsningarna ersatta med studiematerial samt seminarier.

Detta kräver att DU förbereder dig genom att studeramaterialet på egen hand INNAN seminarierna.

TDDD73Funktionell ochimperativprogrammeringi Python

TDDC66Datorsystem ochprogrammering

ExaminationWebbaserad datorintroduktionSlutuppgiftProva på-laborationer

Laborationsomgång 1-3

Laborationsomgång 4-7

Datortentamen

UPG1

LAB1

LAB1

DAT1

Förstaläsperioden

Första och andraläsperioden

Python

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Tillåtet och otillåtet samarbete• Allt arbete med examinerande uppgifter i kursen TDDC66 Datorsystem

och programmering ska ske enskilt (förutom prova på-laborationernadär arbetet sker i par).

• I kursen TDDD73 Funktionell och imperativ programmering i Python(d.v.s. i praktiken från labbomgång 4) kommer ni att arbeta i par som viväljer tillsammans med er.

• Vad är enskilt arbete? Var går gränsen för fusk?

• Universitetets disciplinnämnd kan vid fusk stänga av studenter upp tillsex månader, vilket innebär att man ej får delta i undervisning och intefår några studiemedel.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Kurslitteratur• John M. Zelle (2010) Python Programming:

An Introduction to Computer Science. SecondEdition. ISBN 978-1-59028-241-0

• Boken har ett bra pedagogiskt upplägg somansluter väl till det vi vill göra i kursen.

• Den täcker dock inte allt som vi vill gåigenom, så läs studiematerialet!

• Om man skaffar en annan Python-bok, se tillatt den täcker Python 3!

• På tentan får ni ha med en publicerad bok.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Personal• Examinator: Fredrik Heintz

• Studierektor: Peter Dalenius

• Kursadministratör: Anna Grabska Eklund

• Lektions- och laborationsassistenter:– D1a: Andreas Norrstig, Raymond Leow

– D1b: Erik Hansson, Emil Segerbäck

– D1c: Henning Nåbo, Anders Märak Leffler

– U1: Fredrik Heintz, Frans Skarman, Anton Gefvert

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Information och kommunikation• På kurswebben finns all information om kursen du behöver:

http://www.ida.liu.se/~TDDD73

– Studiematerial– Laborationsmaterial– Länk till schema– Planering och deadlines– Regler för redovisning och komplettering– m.m.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Förhållande mellan övriga kurser under termin 1

2016-08-29Fredrik Heintz, Fö1 #TDDD73

TDDC66 Datorsystem ochprogrammering TDDD73 Imperativ och funktionell programmering i Python

TDDD63 Perspektiv på datateknik/datavetenskap

TATA65 Diskret matematik TDDD72 Logik (bara U)

Introduktion till Python ochprogrammeringsterminologi

Hur man startar Python-interpretatorn

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Hur man använder Python-interpretatorn>>> 2+3

5

>>> 2+4*5-6

16

>>> print("Hello world!")

Hello world!

>>> def greeting():

... print(”Nobody expects the Spanish Inquisition.")

... print(”Our chief weapon is surprise... and fear.")

...

>>> greeting()

Nobody expects the Spanish Inquisition.

Our chief weapon is surprise... and fear.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Hur man använder Python-interpretatorn>>> def skryt(namn):

... print("Det är bra att kunna Python.")

... print(namn, "är jättebra på Python.")

...

>>> skryt("Peter")

Det är bra att kunna Python.

Peter är jättebra på Python.

>>> skryt("Jenny")

Det är bra att kunna Python.

Jenny är jättebra på Python.

>>>>>> skryt

<function skryt at 0x218390>

>>> print

<built-in function print>

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Vårt första Python-program

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Vad gör programmet?

def find_root():

print("This program tries to find the square root of a number.")

x = int(input("Enter a number: "))

guess = x/2

for i in range(5):

guess = (guess + x/guess)/2

print(guess)

find_root()

1. Skriv ut liteinformativ text

2. Läs in en rad frånanvändaren, försöktolka vad som matadesin och spara detta ivariabeln x

3. Börja gissa attroten ur x är x/2 ochspara gissningen ivariabeln guess

4. Upprepa deföljande raderna5 gånger

5. Räkna uten ny bättregissning ochskriv ut den

Newton-Raphsons metod för atträkna ut kvadratroten av ett tal x.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Varför så mycket mellanrum?

def find_root():

print("This program tries to find the square root of a number.")

x = int(input("Enter a number: "))

guess = x/2

for i in range(5):

guess = (guess + x/guess)/2

print(guess)

find_root()

Newton-Raphsons metod för atträkna ut kvadratroten av ett tal x.

Underordnaderader måste skjutasin en bit på raden,indenteras.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Olika sätt att köra vårt programzaza4 <23>zaza4 <23> python3 newton.pyzaza4 <23> python3 newton.py

This program tries to find the square root of a number.

Enter a number:

zaza4 <23> python3 newton.py

This program tries to find the square root of a number.

Enter a number: 2

zaza4 <23> python3 newton.py

This program tries to find the square root of a number.

Enter a number: 2

1.5

1.4166666666666665

1.4142156862745097

1.4142135623746899

1.414213562373095

zaza4 <24>

zaza4 <23> python3 newton.py

This program tries to find the square root of a number.

Enter a number: 2

1.5

1.4166666666666665

1.4142156862745097

1.4142135623746899

1.414213562373095

zaza4 <24> python3

zaza4 <23> python3 newton.py

This program tries to find the square root of a number.

Enter a number: 2

1.5

1.4166666666666665

1.4142156862745097

1.4142135623746899

1.414213562373095

zaza4 <24> python3

Python 3.2.2 (default, Mar 7 2012, 13:44:00)

[GCC 3.4.6] on sunos5

Type "help", "copyright", "credits" or "license" for more

information.

>>>

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Hur man använder Python-interpretatorn>>> import newton

This program tries to find the square root of a number.

Enter a number: 2

1.5

1.4166666666666665

1.4142156862745097

1.4142135623746899

1.414213562373095

>>> newton.find_root()

This program tries to find the square root of a number.

Enter a number: 10

3.5

3.178571428571429

3.162319422150883

3.1622776604441363

3.162277660168379

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Hur man använder Python-interpretatorn>>>>>> from newton import *>>> from newton import *

This program tries to find the square root of a number.

Enter a number:

>>> from newton import *

This program tries to find the square root of a number.

Enter a number: 3

>>> from newton import *

This program tries to find the square root of a number.

Enter a number: 3

1.75

1.7321428571428572

1.7320508100147274

1.7320508075688772

1.7320508075688772

>>>

>>> from newton import *

This program tries to find the square root of a number.

Enter a number: 3

1.75

1.7321428571428572

1.7320508100147274

1.7320508075688772

1.7320508075688772

>>> find_root()

>>> from newton import *

This program tries to find the square root of a number.

Enter a number: 3

1.75

1.7321428571428572

1.7320508100147274

1.7320508075688772

1.7320508075688772

>>> find_root()

This program tries to find the square root of a number.

Enter a number:

>>> from newton import *

This program tries to find the square root of a number.

Enter a number: 3

1.75

1.7321428571428572

1.7320508100147274

1.7320508075688772

1.7320508075688772

>>> find_root()

This program tries to find the square root of a number.

Enter a number: 5

>>> from newton import *

This program tries to find the square root of a number.

Enter a number: 3

1.75

1.7321428571428572

1.7320508100147274

1.7320508075688772

1.7320508075688772

>>> find_root()

This program tries to find the square root of a number.

Enter a number: 5

2.25

2.236111111111111

2.2360679779158037

2.23606797749979

2.23606797749979

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Två viktiga byggstenar

print("Hello")

x = x + 3

a + b/2

square(y + 7)

Satser gör något.

Uttryck har ett värde.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Imperativ och funktionell programmering• Imperativ programmering

– Ett program är en följd av satser som manipulerar globaladatastrukturer så att deras tillstånd förändras över tid.

• Funktionell programmering

– Ett program är en uppsättning funktioner vars utdata enbart berorav indata, d.v.s. de har inga sidoeffekter och manipulerar integlobala datastrukturer.

• Objektorienterad programmering

– Ett program är en uppsättning objekt som har vissa egenskaper ochkan utföra vissa metoder. Programkörning innebär attmeddelanden skickas mellan dessa objekt.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Uttryck – det enda som är värt något

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• Uttryck (eng. expressions) är delar av satser som kan beräknas till ettvärde, t.ex. ett tal eller en bit text.

• Funktionella program består endast av uttryck.

• Enkla uttryck

– Identifierare (namn)– Literaler (konstanter)

• Sammansatta uttryck

– Funktionsanrop• Uttryck kan kombineras till sammansatta uttryck med hjälp av olika

operatorer.

Satser – ryggraden i ett program

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• Ett Python-program består av ett antal satser (eng. statements) somutförs i tur och ordning. De är huvudsakligen imperativa.Vi ska titta på de fem viktigaste, där vi redan sett de fyra första:

• Enkla satser

– Tilldelning (eng. assignment) x = x + 2

– Funktionsanrop print("Hello")

• Sammansatta satser

– Iteration med for for i in range(5): ...

– Funktionsdefinition def find_root(): ...

– Selektion med if if a > 0: ...a

Olika typer av satser: Tilldelning

def find_root():

print("This program tries to find the square root of a number.")

x = int(input("Enter a number: "))

guess = x/2

for i in range(5):

guess = (guess + x/guess)/2

print(guess)

find_root()

Hur ser det ut? namn = uttryckVad händer? Uttrycket beräknas och resultatet sparas i den namngivna variabeln.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Olika typer av satser: Funktionsanrop

def find_root():

print("This program tries to find the square root of a number.")

x = int(input("Enter a number: "))

guess = x/2

for i in range(5):

guess = (guess + x/guess)/2

print(guess)

find_root()

Hur ser det ut? funktionsnamn(frivilliga argument)Vad händer? Argumenten skickas till funktionen, underprogrammet, för behandling.

Funktionsanrop som inte är självständiga satser

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Olika typer av satser: Iteration med for

def find_root():

print("This program tries to find the square root of a number.")

x = int(input("Enter a number: "))

guess = x/2

for i in range(5):

guess = (guess + x/guess)/2

print(guess)

find_root()

Hur ser det ut? for namn in område: undersatserVad händer? Undersatserna körs så många gånger som området specificerar.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Olika typer av satser: Funktionsdefinitioner

def find_root():

print("This program tries to find the square root of a number.")

x = int(input("Enter a number: "))

guess = x/2

for i in range(5):

guess = (guess + x/guess)/2

print(guess)

find_root()

Hur ser det ut? def funktionsamn(frivilliga argument): undersatserVad händer? Undersatserna sparas för att kunna anropas senare.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Olika typer av satser: Selektion

if a > 0:

print(“positivt")

Enkelt val

if a > 0:

print(“positivt")

else:

print(“negativt")

Två alternativ

if 0 <= a < 10:

print("ental")

elif a < 0:

print("negativt")

else:

print("tio eller mer")

Tre eller fler alternativ

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Ordning och reda på programkodenProgramkod organiseras i moduler, och om man inte gör något specielltkommer varje fil att bli en modul.

import newton

Ladda in modulen (filen) newton som finns i filen newton.py.Funktioner i modulen går att anropa med newton.funktionsnamn

from newton import *

Ladda in modulen (filen) newton så att allt som finns i den går attanropa direkt. Detta är bra för våra små program, men blir rörigt närvi kommer lite längre fram.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Inför första laborationstillfället• Ta reda på vilken labbgrupp du är med i (se kurswebben).

• Ta reda på när den labbgruppen har sitt första labbtillfälle(se schemat).

• Dyk upp på rätt plats i rätt tid. Våra laborationer börjar kvart över. Allahar sin första laboration imorgon.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Inför första seminarietillfället• Bestäm dig för vilken grupp du vill vara med i:

– En sak i taget (D1c) – För er som vill ta det steg för steg och känna attni förstår en sak innan ni går vidare till nästa.

– Experimentering (D1a och D1b) – För er som vill lära er genom atttesta er fram. Prövar gärna olika lösningar på medhavd dator.

– Diskussion och analys (U) – För er som vill diskutera och analyserautifrån det ni redan kan och det ni kommer att lära er. Ni är interädda för okända begrepp eller att gå utanför kursens ramar.

• Dyk upp på rätt plats i rätt tid. Våra seminarier börjar kvart över.

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Mål med föreläsningen

2016-08-29Fredrik Heintz, Fö1 #TDDD73

• Du ska bli grymt inspirerad att lära dig programmera!

• Du ska känna till och förstå målen och upplägget med kursen.

• Du ska känna till och förstå kopplingen mellan TDDC66, TDDD73,TDDD63 och TATA65.

• Du ska ha sett ett Python-program och känna till den grundläggandeterminologin.

• Du ska vara medveten om att det krävs mycket arbete för att bli braprogrammerare!

2016-08-29Fredrik Heintz, Fö1 #TDDD73

Glöm aldrig!

Imperativ och FunktionellProgrammering i Python#TDDD73Fredrik Heintz, [email protected]@FredrikHeintz