CS101 udforsker de væsentlige egenskaber ved computere, hvordan de fungerer, hvad de kan og ikke kan, og kræver ingen computerbaggrund overhovedet.Vi begynder med at se på de grundlæggende funktioner ved computere og kommer i gang med at lege med computerkode.
Akkommendelser: Tak til Nick Parlante for hans materialer. Fra Nick: “Tak til Google for at støtte min tidlige forskning, som har været med til at skabe denne klasse. Tak til Mark Guzdial, der populariserede ideen om at bruge digitale medier til at introducere computere.”
Fundamental Equation of Computers
Den fundamentale ligning for computere er:
Computer = Kraftig + Dum
- Kraftig nok til at gennemse masser af en data
-Billioner af “operationer” pr. sekund - Dum, fordi hver operation er simpel og mekanisk.
-Ingen “indsigt” eller “tænkning” (HAL 9000-video) - Kraftig + dum … vil komme til udtryk i vores øvelser
- Hvorfor er computere nyttige på trods af deres begrænsning?
- Det er det, CS101 handler om
-Visit this funny world of the computer, see how it works
-Understand what they can do and how humans leverage them
-Not be intimidated - Hidden agenda: open eyes for some, more computer science courses
Computers are very powerful at looking through large amounts of data quickly. Computere kan bogstaveligt talt udføre milliarder af operationer i sekundet. De enkelte “operationer”, som computere kan udføre, er imidlertid ekstremt enkle og mekaniske og ligner på ingen måde en menneskelig tanke eller indsigt. Typiske “operationer” er f.eks. at sammenligne to tal eller lægge to tal sammen.
Så selv om computerne er hurtige til det, de laver, er de operationer, de kan udføre, ekstremt stive, enkle og mekaniske. Eller sagt på en anden måde: Computere er ikke som HAL 9000 fra filmen 2001: A Space Odyssey: HAL 9000-videoen.
En vigtig pointe er, at en computer ikke opfører sig som en menneskehjerne. Computeren er et mekanisk værktøj, som kan gøre fantastiske ting, men den kræver, at et menneske fortæller den, hvad den skal gøre.
Højt niveau – Hvordan fungerer en computer?
- Computeren følger en række “kode”-instruktioner
- Hver instruktion er enkel (f.eks. adder 2 tal)
- Computeren “kører” en lang række instruktioner
- Pur mekanisk
Computere er meget nyttige
- Tænk på alle de nyttige computerfunktioner (telefon, kamera)
-Messaging, e-mail
-MP3 audio
-Red-eye-reduktion - Hvis computere er så dumme…. hvordan kan de så være så nyttige?
- Hvad forbinder de to sider?
Programmører
- Programmører udnytter computerens kraft!
- Programmøren finder på en nyttig funktion
-Kræver kreativitet, indsigt i menneskelige behov og viden om computere - Programmører nedbryder trinene og skriver kode til computeren
– Dumper det ned for computeren! - Bedste egenskaber fra begge sider: billig/hurtig behandling af computeren + kreativ indsigt hos programmøren
- CS101-undersøgelser: algoritmer og kode
Da computere er totalt mekaniske og dumme, hvorfor er de så allestedsnærværende? Det er i kløften mellem computeren og det at gøre noget nyttigt, at den menneskelige programmør skaber løsninger. Programmering kræver, at et menneske er kreativt og har indsigt i et problem samt evnen til at nedbryde løsningen til instruktioner, som en computer kan følge.
Kode henviser til det sprog, som computeren kan forstå. I disse forelæsninger vil vi skrive og køre korte kodestumper for at forstå, hvilke væsentlige kvaliteter computere har, og især deres styrker og begrænsninger.
Ved at eksperimentere med kode vil computernes natur fremgå meget tydeligt … kraftfulde på deres egen måde, men med en begrænset, mekanisk kvalitet. IMHO er denne blandede karakter af computere noget, som alle bør forstå for at kunne bruge dem godt og ikke blive skræmt af dem.
Hvor man koder – tålmodighed
- Vi starter med noget simpel kodning nedenfor
- Kode er som legoklodser …
- -Disse enkelte brikker er super simple
- -Så småt bygger man store kombinationer op
- Men vi er nødt til at starte småt
Foreshadowing
I løbet af et par timers forelæsning vil vi lave special effects med billeder som f.eks. følgende:
Men indtil videre har vi bare print()!
Tålmodighed Vi vil starte med at lære nogle få programmeringselementer samt de forskellige dele af en computer, og senere vil vi kombinere disse få elementer igen for at løse mange problemer. Disse første elementer er enkle, så de er ikke meget at se på i sig selv. Vær tålmodig, snart vil vi sætte disse elementer sammen — som legoklodser — for at lave ret pæne projekter.
Javascript Computer Langauge
- Javascript-kode plus nogle udvidelser kun til CS101
- Vores kodefraser er små …
- -Nøjagtig store nok til at eksperimentere med centrale idéer
- -ikke fulde, professionelle programmer
- -Men store nok til at vise de virkelige udfordringer ved kodning
I dette kursus bruger vi en variant af sproget Javascript, med nogle ekstra funktioner til dette kursus. Javascript-sproget fungerer i webbrowseren, så alle vores eksperimenter kan leve direkte i browseren, uden at der kræves andet. Vi vil kun bruge de dele af Javascript, der er nødvendige for vores eksperimenter, og ikke det fulde sprog, som man ville se ved professionel brug af Javascript. Når det er sagt, er Javascript et rigtigt sprog, og vores kode er rigtig kode. Vores små programmer viser de vigtige funktioner i kode, samtidig med at vi holder tingene hurtige og små.
Første kodeeksempel – Print
Her er kode, der kalder funktionen “print”. Klik på knappen Kør nedenfor, og din computer vil køre denne kode, og kodens output vises til højre.
- Kør udfører hver linje én gang og kører fra top til bund
- print er en funktion, et verbum, der repræsenterer en handling, som computeren vil udføre.
- Data inden for parentesen sendes ind til print-funktionen (navneord)
-disse data er objektet for “verbet”
-data kaldes argumenterne for funktionen - Flere værdier er adskilt af kommaer
- Eksperimenter ændrer koden og kør efter hver ændring se det nye output:
-ændre et tal
-føje flere tal adskilt af kommaer inden for print(…)
-Kopier den første linje, og indsæt den to gange efter den sidste linje
-Jeg lover, at outputtet bliver mere interessant! - Smal syntaks ikke fri form
-Den tilladte syntaks er super streng og smal
– f.eks. kan man ikke udelade den højre parentes )
-En refleksion af computerens indre, mekaniske natur
-Lad dig ikke afskrække – “Når man er i Rom…”
-Vi besøger computerens verden - Bemærk, at dette “print” ikke er en normal del af Javascript, jeg tilføjede det til CS101
Print And Strings
- En kommentar begynder med // og strækker sig til og med slutningen af linjen. En måde at skrive noter om koden på, som computeren ignorerer.
Hvorfor bruger programmører måske kommentarer? - En streng er en sekvens af tegn skrevet inden for anførselstegn, der skal bruges som data i koden
– f.eks. “hello” eller “123”
-Strings fungerer med print-funktionen, ud over tal
-Strings i computeren gemmer tekst, f.eks. url’er eller teksten i afsnit osv. - Eksperimenter:
-Rediger teksten inden for en string
-Tilføj flere strings adskilt af kommaer
-Tilføj strengen “print” – tricky!
-Inden for citationstegn er det bare data - Kode = instruktioner, der køres
- Data = tal eller strenge; håndteres af koden
Bemærk, at print genkendes som en funktion i koden i modsætning til strengen “hello”, der bare er passive data (ligesom verber og navneord) Computeren ignorerer kommentarerne, så de er bare en måde, hvorpå du kan skrive noter til dig selv om, hvad koden gør. Kommentarer kan bruges til midlertidigt at fjerne en kodelinje — “kommentere koden ud” ved at placere et “//” til venstre for den.
Tænk på syntaks og fejl (dagens nøglebudskab!)
- Syntaks — kode er struktureret til computeren
- Meget almindelig fejl — indtastning af kode med et lille syntaksproblem
- Professionelle programmører laver den slags “fejl” hele tiden
- Glædeligt nok meget let at rette … du skal ikke bekymre dig om det
- Det er ikke et udtryk for en fejl hos programmøren
- Det ligger i sagens natur at skrive idéer ind i det mekaniske computersprog
- Anbegyndere kan blive afsporet af syntaks-trinnet og tro, at de laver en stor fejl
- Prøv at lave en masse typiske syntaksfejl og rette dem
- Rettelse af disse små fejl er et lille, normalt skridt
- Notat: Firefox giver dig de bedste fejlmeddelelser
Syntaks Den syntaks, der er vist ovenfor, skal følges nøje, ellers virker koden ikke: funktionsnavn, parenteser, hver streng har åbne og lukkende anførselstegn, kommaer, der adskiller værdierne for et funktionskald.
Den stive syntaks er en afspejling af computernes begrænsninger, da deres naturlige sprog er fastlåst og mekanisk. Dette er vigtigt at absorbere, når man arbejder med computere, og jeg tror, at det er her, mange mennesker bliver afsporet, når de kommer i gang med at arbejde med computere. Man skriver noget, som ethvert menneske kan forstå, men computeren kan kun forstå koden, hvor den passer til computerens mekaniske syntaks.
Trivielle, overfladiske syntaksfejl er meget almindelige, når man skriver kode. De mest erfarne programmører på jorden laver den slags fejl hele tiden og tænker ikke over det. Syntaksfejlene afspejler ikke en eller anden mangelfuld strategi fra forfatterens side. Det er blot et naturligt skridt i oversættelsen af vores tanker til computerens mere mekaniske sprog. Som vi vil se nedenfor, er det meget hurtigt at rette disse fejl.
Det er vigtigt ikke at lade sig afspore af disse små overfladiske-fejltilfælde. For at hjælpe dig med at lære dig mønstrene, har vi nedenfor mange eksempler, der viser typiske fejl, så du kan se, hvordan fejlmeddelelserne ser ud, og se, hvordan du kan rette dem. For hvert kodeudsnit nedenfor, hvad er fejlen? Nogle gange peger den fejlmeddelelse, som computeren genererer, præcist på problemet, men nogle gange afslører fejlmeddelelsen blot, at fejlen har forvirret computeren så dybt, at den ikke kan oprette en præcis fejlmeddelelse. Firefox producerer i øjeblikket de mest hjælpsomme fejlmeddelelser og vil ofte fortælle dig den specifikke linje med problemer.
Syntaksfejl Eksempler
Disse syntaksfejl er hurtige at løse.