[Powered by Google Translate] [ROCK MUSIC]
[MUSIC - "lykkelige sammen" skildpadder]
DAVID Malan: I dag begynder vi vores udforskning af den
grundlæggende elementer i datalogi og vores introduktion,
nu til kunsten programmering, hvoraf det er
blot ét eksempel.
Men i samme ånd af problemløsning, ved, at
CS50 traditionelle Puzzle Day er i morgen.
Hvis du endnu ikke har RSVPed til denne begivenhed, kan du gå til
cs50.net/rsvp.
Du kan bringe hold af to eller tre eller fire.
Du vil blive udfordret med problemer som den, du har set
deroppe i begyndelsen.
Alle nye problemer i år, hvis du spiste sidste år, og du
vil have en chance derefter at vinde nogle fantastiske præmier.
Blandt dem, en Wii og nogle gavekort og lignende
alt mens du hænger ud med CS50 elever og klassekammerater
og pizza og Facebook.
Så mere om det i morgen, hvis du ønsker.
>> Dette så er CS50, for dem af jer vil deltage i
første gang.
Og vid, at dette kursus er specielt fast besluttet på at få
dig gennem dette kursus til sin endelige ende, på hvilket tidspunkt du
har ikke blot en forståelse af disse
grundlæggende elementer i datalogi, men du vil have
dette meget praktisk færdighed sæt, som du derefter kan tage tilbage til
din egen afdeling, uanset om det er ingeniørvidenskab,
anvendt matematik, naturvidenskab, naturlige
videnskab eller lignende.
Faktisk, hvad er så spændende om datalogi disse
dage er, at det er lige så gældende for
alle mulige felter.
Og selvom i dag, vil vi kun skrabe overfladen af ​​en
meget traditionelle programmeringssprog kaldet C, vil vi
i stedet se på noget, der hedder Scratch, noget med
som denne cookie kærlighedshistorie blev gennemført ved en af ​​dine
forgængere i de forløbne år, at fortælle historier, skabe spil,
at skabe interaktiv kunst, og faktisk begynde at pakke vores
sind omkring nogle af de fundamentale konstruktioner,
ligge til grund for programmering, men i en sammenhæng, som du vil se, det er
langt mindre skræmmende, det er langt mindre mystiske, end du vil se
inden længe.
Og indse, også for dem af jer bare slutter sig til os dette
semester, de sætninger, som vi sluttede onsdag foredrag,
det er ikke så vigtigt, hvor du ender i forhold til din
klassekammerater i denne klasse, men hvor man, ved semesters afslutning
i uge 11, ender i forhold til dig selv ret den dag i dag.
>> Så uden videre, er det også værd at bemærke, at
de mindre behagelige, dem midt imellem, er
også ved udformningen af ​​dette kursus, ikke på noget ringere
vis-a-vis de mere komfortabel
kommer i denne klasse.
Som du kan se i løbet af de kommende uger, vi har forskellige
spor for uensartede ryg baggrund, sektioner for dem
mindre behagelig, mere komfortabel, der et eller andet sted
i mellem.
Som du kan se i denne weekend og i næste uge, to versioner af
De fleste problemer sæt i både standard-og hacker-udgave, så
at I alle kan selv vælge ned ad stien, som du
er mest bekvemt.
>> Så i dag, dykke vi ind i denne programmering
sprog kaldet Scratch.
Det er en grafisk programmeringssprog, og alligevel har den
samme træk ved nogle af de højere niveau sprog Vi vil
udforske senere i semestret, blandt dem C og
JavaScript og PHP.
Men det vil give os mulighed for at undgå nogle af de distraktioner
tidligt af syntaks, ting som semikolon, parenteser,
og andre mystiske detaljer at der ved første øjekast, er bare ikke
overhovedet intellektuelt interessant og har tendens til at komme i
vejen fra nogle grundlæggende forståelse.
Med hensyn til nu støttestrukturen forude, indså dette
værktøj, CS50 Diskuter, som vil blive sammenkoblet på kursets
website senere i dag, er det online diskussionsforum i
som du vil være i stand til at stille spørgsmål til hinanden og
personale, og det er også et værktøj, som vi vil se i næste uge,
at vi vil bruge ganske integratedly i
kontortid samt.
Faktisk kontortid begynde på mandag, og helt ærligt, det første
uge kontortid er temmelig lav nøgle.
>> Jeg tror ikke du vil finde Scratch alt det utilgængelige.
Det er temmelig selvforklarende, som vi vil se, og hvad så
vi vil bruge det til i dag er at udvinde nogle af de
grundlæggende idéer, der vil altså fortsat findes i hele
resten af ​​semestret.
Men fra mandag, 8:00 PM gennem 23:00 vil blive
kontortid i Annenberg end hjernen pause.
Sektionering to vil begynde denne aften, så engang i denne
weekend, gå til cs50.net/section, og du vil
blive stillet en række spørgsmål.
Blandt dem, hvordan ville du beskrive din
komfort niveau som i dag?
Der er ingen hårde, fast regel om, hvem der er i hvilken spand.
Det er bare den slags ting, som du sikkert vide, hvis du
er blandt dem de mindre behagelig eller på anden måde.
>> Og nu, walkthroughs.
Problemet set specifikation for denne uge, både standard
og hacker udgave ens, er online på cs50.net allerede nu.
Og du vil se, at den første af disse udgaver, den
standard udgave hver uge, er ledsaget af noget, vi
call en kode gennemgang, en session ledet af en af
kursets pædagogiske stipendiater til at guide dig igennem, giver
tips om, og få dig ned et bestemt sti, når det kommer
at starte disse problemområder sæt.
Så med hver af disse problem indstiller, hvis du nogensinde ønsker
for dig selv hvor skal jeg begynde, begynder du med disse
walkthroughs.
Og i virkeligheden, tillad mig at introducere Zamyla Chan, dette
års undervisning fyr, som vil være førende hver eneste
en af ​​disse walkthroughs.
Zamyla?
>> [Bifald]
ZAMYLA CHAN: Oh, hej, alle.
Mit navn er Zamyla.
Jeg er en junior ingeniørstudiet i Winthrop House.
Men jeg forsøge at passe på så mange datalogiske kurser som jeg
kan, hvilket er grunden til jeg er virkelig spændt på at stå i spidsen for dette
års walkthroughs.
Walkthroughs, for mig, var en væsentlig del af min CS50
erfaringer.
Under gennemgang, der for hvert p-set vil vi gå igennem
det problem, der er sammen, kigge over de problemer, slags
del dem op i overskuelige bidder.
Jeg vil give dig tips, teknikker, for at få
igennem og komme i gang.
Jeg håber at se jer alle på walkthroughs.
Hvis du ikke kan gøre det i person, så
du gøre tune i online.
>> DAVID Malan: Excellent.
Tak, Zamyla.
Således indse, at walkthroughs er faktisk, på en fredag
eftermiddag, men det er bevidst ved design, så
selv hvis du hellere vil ikke deltage i klassen på en fredag
eftermiddagen vil de videoer være op desto mere hurtigt over
weekenden.
Så indse, at cs50.net vil være alle Zamyla s
walkthroughs.
Og at der er dags dato og klokkeslæt, 3:00 PM,
Harberd Hall, 104.
Og nogle af de pædagogiske stipendiater har også forberedt
nogle bemærkninger for dig i absentia for at give dig en smule af
perspektiv om, hvad deres erfaringer kommer ind og
gå ud af CS50 var ligesom.
Så hvis vi kunne dæmpe lyset for bare et øjeblik, jeg giver dig
nogle af CS50 personale.
>> JACKSON Steinkamp: Jeg tog CS50 sidste år som en freshman i
falde, og det absolut blæste mit sind.
Jeg havde aldrig taget nogen programmering klasser før,
og aldrig kom ind med enhver computer science
erfaring overhovedet.
Og bare, jeg hørt rygter om klassen og
besluttede at tage det.
>> JULIA MITELMAN: Det var virkelig sjovt, virkelig engagerende.
Jeg stadig, den dag i dag -
Jeg har lige for nylig så jeg har den diskette, at David gav os
på vores første dag i foredrag.
Jeg havde hængt det på min væg.
Det er nok lidt nørdet, men jeg hang i på min
væg i klassen som en påmindelse om, hvor fedt det var.
>> TRAVIS DOWNS: Det er så pinligt.
>> JACKSON Steinkamp: Datalogi er noget, du
bør forsøge, selvom du ikke er en for
de traditionelle videnskaber.
Det er sin egen erfaring, og CS50 vil sørge for at du er
støttet godt igennem det med sin veritabel hær af TFS.
>> ALI Nahm: Jeg tog det som en freshman, så jeg lavede en masse
af nye venner.
Jeg fik også introduceret til hele denne koncentration og
Hele School of Engineering, og så jeg stærkt anbefale det
og byder dig velkommen til vores CS50 familie.
>> Yaniv YACOBY: CS50 bare lærer dig, hvordan du bruger værktøjerne
der er bredt tilgængelige.
Du skal bare have en bærbar computer, skal du bruge en webbrowser, og du
nødt til at lære at skrive noget kode, og du kan virkelig bygge
pæne ting.
>> KAREN XIAO: Det er bare så fedt at være i stand til at gøre noget
og har folk bruger det og har folk se det, og det er
hvad jeg virkelig elsker ved det.
>> TIM MCLAUGHLIN: - en følelse af fællesskab, tror jeg, i dette
selvfølgelig mere end nogen anden kursus jeg har taget hidtil.
Du er ikke bare at tage en anden -
du ikke udfylde et andet krav.
Du er ikke bare foredrag og gå til afsnittet.
Men du laver tonsvis af ting, der er alt om
programmering og alt om teknologi, men det gør ikke
virkelig føle sig som en klasse det meste af tiden.
>> TRAVIS DOWNS: Og på den første dag, udleveres de ud kage, og
Jeg blev straks solgt.
>> JACOB PRITT: Gratis slik og pizza.
>> ZAMYLA CHAN: - uanset din interesse niveau, tror jeg
at CS50, vil du have det sjovt, og du vil være intellektuelt
stimuleret.
>> MARK GROZEN-SMITH: Det er altid en fest i klassen, og det er en
part hver nat arbejder på din p-sæt.
>> JACKSON Steinkamp: Hver gang du er færdig med et problem sæt, du
vil føles som du er færdig med et projekt.
>> MELISSA NIU: Det var første år, og jeg var færdig med at handle.
Jeg havde mine fire klasser klar, og jeg var i Annenberg.
Og jeg støder ind i en ven, og han siger, hey, jeg shopping
denne klasse kaldet CS50, og du bør komme med mig.
Endte med at tage det, der falder, og efter denne klasse, jeg
tænkte måske jeg har tænkt mig at ringe i CS.
Men her er jeg, tre år senere, stadig studerer computer
videnskab og faktisk gør det som en stor, og jeg elskede hvert
øjeblik af det.
>> ROB BOWDEN: Jeg har ingen idé.
>> ALI Nahm: Lad os se.
>> MELISSA NIU: craziness.
>> SPEAKER 1: Jeg føler, at jeg ville være meget kliché.
Jeg ville bare sige, ligesom, awesome.
>> Yaniv YACOBY: Tilgængelighed.
>> JACOB PRITT: Gratis slik og pizza.
>> TRAVIS DOWNS: Kan ikke skrue ned en klasse, der uddeler kage.
>> TIM MCLAUGHLIN: Energetic.
>> Vipul Shekhawat: Essential.
>> ROB BOWDEN: Lad mig tænke på et svar.
Jeg tror, ​​jeg har fundet noget.
Åh, gud.
Ja, mit navn er Rob Bowden, og dette er CS50.
>> [Bifald]
DAVID Malan: Okay, så lad os begynde at male et billede
af, i hvilken retning vi kan gå, og lad os introducere
dette begreb her kaldes pseudokode.
Så pseudokode er ikke en programmering
sproget i sig selv.
Det er ikke noget teknisk i sig selv, men det er bare en slags
generel måde at udtrykke dig selv temmelig præcist,
temmelig algoritmisk, temmelig proceduremæssigt, men uden
at skulle bekymre sig om, hvad sprog, du udtrykker
dig i.
Det er nogle model af engelsk og programmeringssprog med
som du tilfældigvis være bekendt, så vi kan begynde
skriver den slags ting, som vi går.
Og i virkeligheden, Joseph, kunne jeg låne dig op på scenen for at være
skriver her?
Jeg har gået fremad her i forvejen, og glemt at sætte
på nogle sokker i dag, og det vil være blandt vores mere
latterlige eksempler.
>> Nu har jeg brug for dig herovre.
Jeg vil gøre det sokker del.
Så her har vi en lille notesblok.
Det er bogstavelig talt lige TextEdit i en Mac.
Vi faktisk ikke vil skrive et runnable program, men
vi bare vil begynde at skitsere pseudokode baseret
på nogle af de råd, du giver til mig her.
Så her er min bunke af sokker derhjemme.
Jeg har ingen sokker på, når jeg vågner om morgenen, og vi har nu
nødt til at skrive et program, en algoritme slags, som
at få disse sokker på mine fødder.
Og hen ad vejen, lad os se om vi snuble over den eller støde,
nogle af de idéer, som du er nødt til at starte
tænker meget mere alvorligt, når programmering
lest dine programmer ikke opfører sig helt som planlagt.
>> Så jeg sidder hernede.
Jeg har fået min bunke af sokker.
Hvad er den første ting en fornuftig menneske ville
gøre, når målet er at sætte på et par sokker?
Nogen give mig et skridt, og kun et trin.
Ja?
PUBLIKUM: Bøj ned.
DAVID Malan: Bøj ned, Okay.
Trin to.
PUBLIKUM: Saml din sok.
DAVID Malan: Saml din sok.
Okay, så lille tvetydighed her, og dette er en af ​​de første
anstødssten at vi skulle bevidst
støder her.
Det er lidt tvetydig, så afhente din sok.
Fint, jeg tager denne ene, men en computer, indser på bare et
bit, kommer ikke til at have den slags menneskeligt instinkt til bare
vælge den nærmeste.
Vi bliver nødt til at starte inden længe, ​​udtrykker
selv mere præcist.
>> Okay, så trin to er afhente din sok.
Vi tager det.
Trin tre.
I ryggen.
PUBLIKUM: Find et matchende par.
DAVID Malan: Find matchende par.
Okay, så det er godt.
Jeg var nødt til at vælge denne sok.
Så målet er at finde en matchende sok, nu, men hvad
betyder det?
En rimelig menneske, meget gerne på onsdag, når jeg bare
forstod at finde Mike Smith i en telefonbog, bare lidt
gik med deres instinkt.
Men her er det naturligvis denne sok her, men en computers
ikke vil være så instinktiv.
En computer vil have en samling af bits, som vi
diskuteres på onsdag, og dem er
organiseret eller anden måde i hukommelsen.
Men pointen er, at en computer har kun mulighed
at se på tingene én ad gangen, og i virkeligheden, selv vi
mennesker - selvom det føles som om jeg kiggede ned, og en split
sekund senere ved jeg, hvor sokken er, min hjerne og mine øjne
formentlig havde en hurtig skimme af disse sokker, og derefter låst
på det her omhandlede.
>> Så hvis vi være så meget mere bevidst nu som en computer,
hvordan finder jeg denne matchende par?
Nuvel, vi har for at skifte.
Vi er nødt til måske sløjfe over dette rod af sokker på
gulv, hvorved jeg sige noget lignende FOR HVER sok, samle den
op, og hvis den samme form og størrelse som den anden, SÅ
prik, prik, prik, vil vi fortsætte historien.
Så for hver sok, så jeg afhente denne ene.
Jeg tjekke er dette lig med denne ene.
Det er ikke, så puttede jeg disse side.
Så jeg gentage igen.
Er dette en lige?
Nej, det er ikke, så jeg lagde den til side.
Er dette en?
Nej.
Denne ene?
Nej, og så videre.
Og så endelig, forhåbentlig, vil jeg støder på denne sok her.
Så hvis det er den samme form, størrelse, tag den.
>> Og nu, hvad der ville være vores næste skridt her?
Ja?
PUBLIKUM: Identificer højre fra venstre.
DAVID Malan: Okay, identificere højre og venstre, så
heldigvis, den slags værker.
En lille symmetrisk, eller jeg har lige slidt dem på den måde.
Okay, så jeg har fundet det rette.
Og nu, før vi går videre, lad mig påpege, hvad Josephs
gjort her som en slags bevandret programmør.
Så igen, der er ingen måde at gøre dette, men ud over blot
nummerering af linjer, har Joseph allerede begyndt at gøre dette
slags fordybning.
Faktisk er det en meget almindelig konvention i programmeringen,
hvorved når du gør noget iterativ, looping stil, som
vi indebærer med det engelske udtryk "FOR HVER
sok, "konventionen i pseudokode, og som vi vil se,
normale programmeringssprog, er at bare led.
Hit the space bar et par gange, ramte tabulatortasten eller lignende,
så at indlejret under "FOR HVER sok" er bid af
ting, du behøver at gøre som følge af denne løkke.
Så det er alt der er at formidle semantisk.
Nu i mellemtiden, "Hvis det er den samme form og størrelse," den
kendsgerning, at "Take it" er indrykket yderligere betyder blot,
det er det eneste, du skal gøre, hvis denne betingelse,
hvis den gren, der skillevej, er faktisk sandt.
>> Så nu her, vi er på trin fire, identificere højre og venstre.
Jeg har identificeret ret.
Giv mig trin fem.
Og teknisk set kunne vi virkelig kalde
den for hver ting -
bør du nok nummerere alle linjer, hvis
vi vil gøre dette.
JOSEPH: [uhørligt]
DAVID Malan: [uhørligt]?
Okay, fint, okay, vil vi gøre det på din måde.
Okay, så trin fem, hvordan gør vi det rigtige sok?
Hvordan kommer vi videre næste, her?
Ja?
PUBLIKUM: Løft højre ben.
DAVID Malan: Løft højre ben, Okay.
Trin seks?
Hurtigt.
Yeah.
AUDIENCE: Find en åben ende af sokken.
DAVID Malan: God, find den åbne ende af sokken.
Så godt.
Så her, helt ærligt, ville en meget almindelig instinkt bare være
sat på højre sok, men det er også er temmelig tvetydig.
Medmindre computer eller menneske ved præcis, hvad det betyder,
det kommer ikke til at være at udføre den, så her, jeg har
fandt åbningen af ​​bestanden.
Trin syv?
PUBLIKUM: Tryk tæerne.
DAVID Malan: Touch tæer.
Okay, så nu går vi -
Okay, jeg kommer til at tage nogle friheder her.
Tak.
Trin otte?
Sæt sok.
Okay, så nu jeg tror vi er tæt nok til at sortere i at tage
denne ene hjemme.
Okay, så det går op.
Jeg tager nogle friheder med, hvad det betyder, faktisk.
Sæt sok på.
Okay, nu trin ni?
PUBLIKUM: Sæt foden ned.
DAVID Malan: Tak.
Trin ni, satte foden ned, og nu kan vi gentage.
Så formentlig kan vi nu gå ind i trin 10 og sige identificere
venstre sok, men det er formentlig allerede har gjort.
>> Og så så kan jeg sortere i gentage disse trin.
Men denne form for rejser spørgsmålet.
Før sidste gang vi ønskede at gentage noget, vi
gjorde det iterativt, igen og igen, en FOR
Hver sløjfe så at sige.
Ville det være fornuftigt at bruge en løkke til at håndtere både
venstre og højre sok?
Fordi det føles som disse operationer er temmelig meget
identiske bortset fra, at man starter her og en
starter her?
Har vi loop, eller skal vi bare holde skriftligt skridt
10 og 11 og 12?
PUBLIKUM: Loop.
>> DAVID Malan: Okay, så loop.
Jeg faktisk kunne have sagt bare holde ud.
Så hvorfor er dette tilfældet?
Nå, det er faktisk den første af vores ikke-indlysende
design beslutninger, og i virkeligheden, et af de målinger, som
vil vi begynde at vurdere, for os selv og for dig,
Kvaliteten af ​​et program er bare hvor godt designet det er.
Har du gjort den minimale mængde af arbejde, nødvendig for at
få arbejdet gjort mest hurtigt, enten i form af
din tid eller i forhold til computerens spilletid?
Hvor mange operationer gør det tager at gennemføre?
Så velsagtens, dette er en mulighed for en løkke, fordi
så snart jeg begynder at kopiere og indsætte, som Joseph effektivt
ville begynde at gøre i et øjeblik, du slags spilder din
tid, og du bliver dobbelt udtryksfuld.
>> Men på samme tid er disse virkelig bare to særlige
sager, venstre og højre.
Og mens før, kunne jeg have 10 eller 20 eller flere strømper i
en bunke, er det absolut giver mening ikke at have 50 linjer
kode siger tjek denne sok, så den næste,
derefter den næste.
Her, det er en lidt mindre indlysende, og jeg ville foreslået
at vi kunne gå begge veje.
Vi kunne enten have at sløjfe, selv om det kun sløjfer
to gange, eller vi kunne blot kopiere og indsætte bare en lille smule
her for at få arbejdet gjort.
Men dette program er buggy, så at sige.
Det kan have nogle fejl, fejl eller hjørne sager, så at
taler, at vi virkelig ikke regnet med.
Intet gik galt denne gang, men hvad der kunne være gået galt
under udførelse af dette program?
PUBLIKUM: Du har ikke nogen sokker.
>> DAVID Malan: Så der kan ikke være nogen sokker der overhovedet.
Så lad os antage, at hjørne sag.
Så hvis vi kunne rulle tilbage op til trin et, så trin et var
bøje sig ned, så der kontrollerer ud.
Trin to, afhente din sok, men derefter finde matchende sokker,
identificere højre.
Vi slags gjorde en hel masse forudsætninger, og det er,
helt ærligt, hvorfor programmet nogle gange ned.
Hvis du, programmøren har gjort visse antagelser, som
mon der kommer til at være sokker eller mon der sker
at være hukommelse tilbage i computeren, så mon der sker
at være diskplads tilbage på harddisken -
Tja, hvis du laver disse antagelser, og det er ikke,
i virkeligheden, virkeligheden, der kender til tider hvad computerens
tænkt sig at gøre?
Og nogle gange, når du får den roterende badebold eller
frosne Windows eller lignende, det er netop fordi nogle
programmør ikke foregribe de såkaldte hjørne sager.
Hvad andet kunne være gået galt i dette program?
Ja?
>> PUBLIKUM: Du har ikke en højre ben og venstre ben.
DAVID Malan: Okay, måske ikke har både en højre ben og en
venstre ben, og så dette program måske ikke være universelt
anvendelse.
Andre?
PUBLIKUM: Du har muligvis samlet op til sjældne sok.
DAVID Malan: Jeg kunne have hentet sjældne sok, så en
ikke-matchende sok, der bare ikke har nogen søskende, fordi jeg har
mistede det, er det revet, det er i vask stadig, eller lignende.
Så det også, har ikke rigtig blevet håndteret.
Ja?
PUBLIKUM: Du har måske allerede sokker på.
DAVID Malan: Jeg måske allerede har sokker på.
Jeg havde faktisk ikke kontrollere.
HVIS du ikke har sokker på, så skride til at udføre
line et og to.
Og det kan ske.
Du falder i søvn med dine sokker på og lignende, så
at også en meget rimelig hjørne sag.
Og måske en anden?
PUBLIKUM: Sokken er vrangen ud.
DAVID Malan: Så sokken er ud og ind, så vi gjorde ingen fejl
kontrol, kort sagt.
Vi ikke kontrollere, om verdens tilstand er, som vi forventer.
Vi kontrollere ikke, hvis vi faktisk fundet, hvad vi leder efter.
>> Og selvom dette er en slags latterlig eksempel
involverer sokker, i slutningen af ​​dag det er præcis den
slags tankegang skal du have, når man skriver programmer,
selv i Scratch såvel som i C, i JavaScript, i PHP,
for ellers vil dine programmer udviser den
svarende til at spinde badebold eller bare give
unøjagtige resultater.
Så mange tak her til vores skriver Joseph.
[Bifald]
>> DAVID Malan: Okay, så hvad er i
Faktisk et computerprogram?
Nå, lad os tage et hurtigt blik på en
repræsentant en her.
Så dette er et program skrevet i et sprog kaldet C. C er
temmelig gamle disse dage, men mange nyere sprog er bygget
oven på det.
Faktisk PHP, en af ​​de web-centreret sprog Vi vil
brug mod sigt udgang, selv har det, der hedder en
tolk, et program, der er skrevet i C, men mere om det
i mange uger fra nu.
Men dette program, og det er hvad det betyder at skrive en
programmet, om end meget enkelt.
Vi har nogle temmelig kryptisk syntaks her, men du kan
sikkert gætte, selvom du aldrig har programmeret før, hvad
dette program gør.
Faktisk ved jeg ikke, hvad printf er, men udskrive sikkert
fremmaner ideen om at udskrive noget ud.
Og så ja, er dette program i sidste ende kommer til at udskrive
ordene "Hej, verden."
>> Nu, om du har en Mac eller en PC eller en Linux-computer, odds
er, i hvert fald hvis du har hentet nogle frit
tilgængelig software, du kunne have været at skrive programmer på
din egen bærbare computer i temmelig lang tid nu.
På Mac OS, for eksempel er der dette program kaldet
Terminal der kommer med en Mac, det er normalt i dit
Mappen Hjælpeprogrammer, og det generelt åbner en sort og
hvid eller en hvid og sort vindue, hvor du har en
prompt, hvor du kan skrive kommandoer.
Så dette er faktisk minder om hvad computere
plejede at være før grafiske brugergrænseflade
grænseflader, GUI, kom.
Nu, i Windows, har du en lignende mekanisme i form
af kommandoprompten.
>> Men hvad jeg har tænkt mig at gøre her, er at åbne op, lad os sige,
TextEdit igen, så det samme program vi bruger til
pseudokode for et øjeblik siden, og jeg har tænkt mig at gå videre og
skrive min første program.
Medtag stdio.h, hvad det så end betyder, int main
tomrum, hvad det så end betyder, og derefter i midten her,
printf ("Hello, World."). Og så tæt citat,
lukke paren, semikolon.
Nu vil jeg gå videre og blot trykke på Kommando-S. Jeg har tænkt mig
at gå videre og gemme denne som hello.c, så konventionen i
verden af ​​C programmering er navngive filen dot c.
Jeg har tænkt mig at bare sætte i John Harvard hjemmemappe,
her, klik på Gem, og nu jeg har tænkt mig at gå over til denne
terminalvindue, som igen er denne sorte og hvide prompt
hvor jeg kan udføre kommandoer.
>> Jeg kan køre programmer ved at skrive deres navn, ikke ved
dobbelt-klikke ikoner i gængs forstand.
Men de ting er om C er, at et sprog som C først
kommer i denne form, noget kaldet kildekode.
Noget, der ser lidt ligesom engelsk, men er
absolut mindre som engelsk end Josephs pseudokode en
øjeblik siden.
Det er lidt mere mystisk.
Det synes at følge nogle mønstre eller regler.
Det faktum, at jeg har krøllede parenteser, semikoloner, citater,
vinkel seler, føles som en computer kom op med denne
slags sprog.
Men hvis jeg går nu, at denne terminal vindue, kan jeg køre en
kommando, der kommer til at konvertere denne kildekode er
noget, der hedder objekt kode.
Det kommer til at omdanne engelsk-lignende syntaks til nuller
og dem, de samme slags nuller og ettaller vi
talte om onsdag.
Nu vil jeg køre en kommando kaldet Dunk.
Mere om dette i de kommende uger, men det er et program med
som jeg kan konvertere hello.c til en hel bunke
af nuller og ettaller.
>> Nu har jeg kørt denne kommando.
Jeg har kørt Dunk, og så sagde jeg køre dig selv på denne fil
kaldet hello.c, som jeg oprettede for et øjeblik siden, og
intet synes at ske.
Men ja, hvis jeg stak omkring mit hjem bibliotek, ville jeg se
at dette dumt navngivet program a.out eksisterer nu.
Dette er blot den standard navn for et program, når du skriver i
C. Vi kan tilsidesætte dette i sidste ende, men a.out er det
navnet på det program jeg lige konverteres til nuller og ettaller.
Og nu, hvor det er nuller og ettaller, min Mac, i dette tilfælde, eller
din Windows-pc, kan forstå disse bit, de
nuller og ettaller.
Og så når jeg trykker på Enter, jeg ser "Hello, world!"
>> Men det er en smule buggy.
Jeg har ikke helt sige "hej, verden: luft: -! Jharvard." Luft er
navnet på min computer.
Jharvard er navnet på den konto, så hvad gjorde jeg tydeligt
udelade fra programmet?
En slags linjeskift.
Jeg ramte ikke svarer til Enter eller vognretur,
og det er igen vidnesbyrd om, at computere kan
kun gøre, hvad du fortæller dem at gøre.
Og det faktum, at jeg ikke fortælle computeren at flytte
markøren til næste linje -
godt, er det bestemt ikke vil bare gøre det
formasteligt for mig.
Så hvis jeg går tilbage til mit program, og jeg siger \ n -
Så \ n, som vi snart vil se, er vejen for
repræsenterer underlige ting som New Line figurer, ting
der ellers ville være resultatet af
rammer Enter-tasten.
Men for nu, ved blot at trykke på Enter-tasten vil
bare gøre vores kode ser mærkeligt, så verden besluttede, du kender
hvad, at holde tingene smukkere, for at holde det på én linje, lad os
bare sige \ n repræsenterer en ny linje.
Lad mig gem min fil, skal du gå tilbage til terminalvinduet, og
omvalg a.out, Enter.
Stadig buggy, men hvorfor?
>> PUBLIKUM: [uhørligt]
DAVID Malan: Ja, så jeg er nødt til at kompilere den.
Så for at udarbejde et program betyder blot konvertere det fra kilden
kode til objekt kode, kildekode til nuller og ettaller.
Nu er den omstændighed, at jeg ramte Gem i denne TextEdit har ingen
bærer på disse nuller og ettaller, fordi jeg først nødt til at
Sig Dunk hey, har jeg ændret disse linjer kode, det
kildekode.
Du er nødt til at regenerere a.out.
Intet ser ud til at være sket, men i en computer,
på en kommandolinje, så at sige, når der ikke sker noget,
Det betyder som regel alt er godt.
Når noget sker, betyder det
du rodet op, generelt.
>> Så lad os nu gå til a.out, og faktisk nu, jeg har "hej,
verden. "
Og nu, hvad disse nuller og ettaller?
Hvor, i virkeligheden er de?
Tja, jeg kan ikke rigtig bare lidt poke omkring meget
effektivt.
Lad mig åbne TextEdit.
Her er a.out.
Lad mig gå videre og åbne denne, og det er tilsyneladende, hvad min
program ser ud.
Så jeg har åbnet, ikke hello.c, men a.out.
Men det er faktisk ikke hvad mit program virkelig er.
Dette er tydeligvis en slags alfabetiske tegn.
Jeg ser ingen nuller og ettaller, men dette er
fordi a.out er et program.
Nuller og ettaller - men TextEdit, som navnet antyder, er det
ligesom Notepad på Windows, er blot en tekst editor, så det er
forvirrende alle disse nuller og ettaller som
selvom de var, hvad?
ASCII-tegn.
>> Så huske på onsdag, vi bare kom op med dette
vilkårlig kortlægning af tal, eller bits, at bogstaverne i
alfabet og tegnsætningssymboler og lignende.
Så TextEdit, at det er en tekst editor fejlfortolke
disse mønstre af nuller og ettaller, som formodes at være
udskrivning ord, som "Hello, World." Det er at vise dem
som ASCII, og det er derfor, det ser lidt rodet.
Nu er der nogle hints af korrekthed i her.
Varsel, hvis jeg fremhæve, at der er en antydning af faktisk "hallo,
verden ", så et eller andet sted i dette program er
den sætning jeg skrev.
Men lad os gå videre og ser nu med et andet program.
Dette er ikke en vi vil bruge det tit, men det kommer også med
en Mac og vil være inde i CS50 apparatet.
Lad mig gå videre og åbne med et program kaldet XXD.
>> Tilbage i dag, blev de fleste programmer navngivet temmelig kryptisk,
og så tendensen fortsætter.
Men-b betyder spytte dette program ud som binær.
Må ikke køre det.
Vise det til mig som nuller og ettaller, og det er C
programmere vi bare skrev.
Nu, jeg, som et menneske her, jeg ærligt har ingen idé om, hvad
disse forskellige mønstre af nuller og ettaller repræsenterer.
Tilbage i dag, jeg med mine hulkort eller lignende, ville
faktisk nødt til at kigge op, hvad disse forskellige mønstre af
01111000, faktisk repræsenterer.
Eller endnu værre, ville jeg nødt til at gøre stansning eller oprettelsen
af disse mønstre af nuller og ettaller.
Men for nu, tage på tro at en CPU, Intel indeni, så
at tale, indersiden af ​​alle vores computere i disse dage, kender
hvordan man skal fortolke disse nuller og ettaller.
Og nogle nuller og ettaller betyde print.
Nogle nuller og ettaller betyde afspille en lyd.
Nogle nuller og ettaller betyde tage brugerinput fra et tastatur.
Der er alle mulige forskellige mønstre, men vi heldigvis,
som mennesker generelt kun behøver at bekymre sig om programmering på
denne relativt højere niveau.
Og i andre CS klasser kan du dykke ned dybere og se
på ting som disse nuller og ettaller, endnu eller
andre ting stadig.
>> Så lad os nu konvertere dette.
Lad os bevæge sig meget hurtigt væk fra C og flytte til noget
lidt mere beroligende, lidt mere spændende, i det
vi kan komme tilbage vores animationer og lyde og lignende,
klart er undsluppet os i denne
temmelig primitive interface.
Så det samme program i C kan repræsenteres nu i denne
programmeringssprog kaldet Scratch som følger.
Dette svarer til dette hej verden program skrevet i
denne brik stil sprog kaldet Scratch.
Så lad mig gå videre og åbne netop denne program.
Det atter kaldet Scratch.
Det er frit tilgængelige, og det er det samme vi
i gang i dag på.
>> Så dette her er Scratch, og det er opdelt i et par
forskellige stykker.
På den øverste højre har vi den såkaldte fase, og
ja, det er, hvor de cookies
udføres kun lidt siden.
Og på dette tidspunkt er ting kaldes sprites, tegn eller
genstande eller enheder.
Det er faktisk ligegyldigt, hvordan du tænker på dem, men de
er programmerbare, bevægelige ting, og i dette tilfælde er dette
program, at vores studerende skrev har et par honningkager
cookies, et par af cirkulære cookies, en hel flok
hjerter, en hel flok af briller.
På grund af dette, er han eller hun i stand til at programmere hver af disse
enkelte tegn separat.
>> Nu, hvad betyder det at programmere disse tegn?
Nå, lad mig gå videre og klik på denne venstre hånd cookie
og rulle hen til det øverste venstre her.
I øverste venstre af min skærm nu er
såkaldte scripts området.
Dette er slags en blank tavle, i første omgang, hvorpå jeg kan
træk og slip puslespilsbrikker, der helt ærligt,
præcis, hvad de siger.
På selve toppen af ​​denne stak af puslespilsbrikker er ordet
Når Grønt Flag Klikkede, og hvis du ikke har opdaget før,
den måde, jeg startede denne cookie sang blev klikker, bogstaveligt talt,
et grønt flag.
Så det puslespilsbrik øverst til venstre der betyder, når den
menneskelige klik på den grønne flag, fortsatte med at gøre
følgende ting.
>> Nu vidste hvad de cookie skride til at udføre?
Jeg ved ikke rigtig, hvordan man skal fortolke dette endnu, men det
cookie åbenbart sat sit rille til nul, så det ventede
tre sekunder og derefter skiftede den gruppe til en, så det
ventede et sekund, så det ændrede
rille tilbage til én.
Og så det faktisk ligner lidt af en bug, bør ikke
nødt til at ændre sin rille igen og igen, medmindre det er
bliver ændret andetsteds, men denne serie af trin er hvad der er
dikterer opførsel af denne særlige cookie.
Så lad os faktisk rulle tilbage og ikke se på noget
helt så kompliceret endnu.
Lad mig gå videre og gå til Filer, Ny,
og få en ren tavle.
>> Så nu, jeg virkelig har et tomt script område, en tom scene,
med vores standard sprite Scratch, i og øverst til venstre
på min skærm har jeg pallen af ​​alle deres
tilgængelige puslespilsbrikker.
Og vi vil ikke gå igennem næsten, at mange af disse ting
dag, fordi, igen, de fleste er selvforklarende, men vi vil
forsøge at kategorisere dem og påpege lighederne
med disse fremtidige sprog, som vi vil dykke.
Og øverst til venstre her er den første Når Grønt Flag klikket,
så lad mig trække dette herovre, zoome ud en smule.
Og hvis jeg klikker på den grønne flag, intet virkelig sker, fordi
Jeg har ikke tilknyttet nogen logik, enhver erklæring så at sige, at
at grøn flag, så lad mig gå op til den
kategorier herovre.
Jeg er i øjeblikket i Control kategori.
Jeg stedet kommer til at gå ned til den ser ud kategori, og
der er en hel masse ting her, siger Sig,
Tænk, skifte farve, Switch Costume.
>> Så du kan gøre dumme ting med kostumer og
lyde og lignende.
Lad mig gå videre og bare sige Say, og nu mærke til, da jeg trækker
og slip denne brik, er det lyst til at hægte
til den tilsvarende form.
Så når jeg gå videre og slippe min mus, de låser
sammen, og nu, hvis jeg gå over her og klik på den grønne flag,
katten rent faktisk sige hej, fordi det er hvad der er indeni
af denne hvide boks.
Vi vil snart se, at denne hvide boks er, hvad der kaldes en
argument, eller en parameter.
Det er en metode til at ændre opførsel, i dette tilfælde en
puslespilsbrik, men hvis jeg ønsker at sige præcis, hvad jeg sagde
før, siger hej, verden, kan jeg nu gå tilbage herovre,
klik spille, og "hej, verden" er hvad har sagt.
>> Så vi er bogstaveligt talt programmering nu.
Det er ikke alle, der overbevisende af et program, men mindst
det er lidt mere overbevisende end noget, der ser på
første øjekast, som denne.
Og vi kan meget hurtigt få alle de mere ekspressive
fordi i Scratch, ligesom på andre sprog, er der hele
slags udsagn, ikke bare sige eller udskrivning noget, men
du kan gøre ting som at vente, da vi lige set med
cookien, nogle antal sekunder.
Du kan spille lyde i miljøet af Scratch bare
ligesom du kan i en normal computer program afspille lyd.
Du kan kontrollere det, der kaldes booleske udtryk.
Så nu, lad os begynde at føje til vores værktøjskasse nogle terminologi
der faktisk vedrører det eksempel, at Joseph og jeg gjorde
her med sokker.
Så udsagn er blot konstateringer.
Gør dette.
Et direktiv for Sprite, eller mig den menneskelige, til at gøre noget.
En boolesk udtryk er noget, der har en værdi, en
såkaldte sandhed værdi, det er enten et nul eller et, falsk eller
sandt, slukket eller på, ingen eller ja.
Er faktisk ligegyldigt, hvordan du tænker på dette, men det er en
binær tilstand.
Som Nate diskuteret i onsdagens video, to
forskellige ting.
>> Så i Scratch, sker boolske udtryk til at se
ligesom disse blå objekter her, og i dette tilfælde er spørgsmålet
mark betyder, at du stiller et spørgsmål.
Er katten, eller Sprite, røre musemarkøren?
Så dette er blot ét eksempel på en Scratch blok, der sker
at tillade os at kontrollere ja eller nej, er musen rører
sprite på skærmen?
Og det kan være nyttigt, hvis du rent faktisk ønsker at gøre ting
med din mus.
Ud over boolske udtryk, har vi ting
ligesom er musen ned, så du kan opdage den slags
spørgsmålstegn så godt.
Vi kan gøre matematik, hvis du rent faktisk ønsker, og der er
faktisk mere overbevisende anvendelsesmuligheder for denne end bare ren af
aritmetik, som vi vil se.
Pseudo tilfældighed og gøre dit program ser ud til at tænke
eller opfører sig anderledes på baggrund af nogle tilsyneladende tilfældige værdier,
og så har vi ting som boolske udtryk som AND.
Så hvis du rent faktisk ønsker at kontrollere to værdier, vil vi se på
Skrab, at vi faktisk kan teste, om dette er
sand og det er sandt.
For eksempel i tilfælde af mine sokker kunne jeg har på
allersidst stillede spørgsmålet, hvis venstre sok er tændt og højre sok
er på, holde op.
Du er færdig for dagen, så det ville være en
mulighed for.
>> Så lad os gå videre og forsøge at stykke nogle af disse sammen
og gå ind i et par eksempler mere
overbevisende end denne ene.
Så lad mig gå videre her og åbne nogle af eksemplerne
der vil altid være på kursets hjemmeside så godt, og
åbne hello2.
Så i hello2 her har vi et program, der laver et par
ting, men det er ikke gør det så effektivt, som vi kunne.
Så her står der "Hello, World" i et sekund og derefter venter
for en anden.
Og så gør det igen, og så gør det igen.
Så hvis jeg klikker på den grønne flag, Scratch siger "Hello, world.
Hej, verden.
Hello, world. "Og det er naturligvis kandidat nu
forbedring.
>> Hvad er den marginale forbedring, forhåbentlig, kan vi
nu gøre hvis Scratch støtter konceptet?
Nogle slags løkke.
En slags gentagelse, nu ville være rart, så lad mig
faktisk prøve det.
Lad mig faktisk gå hen og flytte denne.
Så varsel kan frigøre blokke så nemt som du kan føje til
vedhæfte dem.
Lad mig gå under kontrol, rulle ned her, og ja,
der er denne brik her, Gentag og Forever og
Forever If.
Så der er en række måder at udtrykke looping konstruktioner
i Scratch.
Den ene jeg sikkert gerne her er ikke for evigt, fordi jeg kun
ønsker, at dette skal ske tre gange, men sandsynligvis Gentag.
Så lad mig trække Gentag herovre, trække og slippe den, og
nu i stedet for at sige "Hello, World" tre særskilte gange,
lad mig trække denne brik i her.
Og selvom det ikke synes at passe, at programmet er smart
nok til at indse det vil vokse til at fylde, så det er det
figurer, der betyder noget, og ikke den absolutte størrelse.
Lad mig ændre gentagelse til tre, og nu lad mig gå
fremad og træk Vent et sekund i der.
Det kommer til at snappe i så godt, og så nu har jeg tænkt mig at trække
disse fyre herovre og bare smide dem væk, fordi jeg
har ikke brug for dem længere.
Lad mig zoome ud og klik den grønne flag nu, og vi har
det samme program, men som jeg forudsagde før, bedre
designet fordi du kan forestille dig, hvordan dårlig dette program
ville få, i hvert fald æstetisk, hvis du skulle
begynde at kopiere og indsætte, kopiere og indsætte, eller
trække og slippe de samme darn ting igen og igen.
>> Nu, blot at sige ting på skærmen, udskrive til
skærm, virkelig alt ikke så spændende, så lad os åbne en
3. varians her.
Og nu, som du vil se, vil dette hurtigt blive irriterende -
[MEOW]
DAVID Malan: - men det er også ret sød.
[MEOW]
DAVID Malan: Okay, så bedre, og vi kan helt sikkert bruge det
samme overgang chunking dette op i en løkke
struktur, men lad os gøre det mere interessant endnu.
>> Lad mig gå videre og åbne op kvart varians her, hvor jeg
tage tingene et skridt videre.
Så ifølge dette, dum om dette i første omgang
blik, hvad dette program vil gøre?
Det kommer til at mjave gang.
Hvorfor?
Tja, man er, så vidt jeg ved, altid er mindre end to.
Der er ingen forestilling om tilfældighed her.
Jeg har bogstavelig talt hard-coded et og to, men dette er en
eksempel nu på rent faktisk at bruge en boolesk udtryk.
Meget gerne som Josef gjorde i sin pseudokode, indrykningen IF
du finde matchende sokker derefter gøre følgende, her har vi
et udtryk, hvis man er mindre end to THEN -
og faktisk vi har endda en lille smule af indrykning,
hvor lilla er lidt indrykket til højre -
SÅ du vil afspille lyden mjave.
Nu, i dette tilfælde, er at man altid er mindre end to, så det
er lidt af et spild af en betingelse.
Men vi vil være i stand til, som vi vil se, at sætte andre ting i
disse pladsholdere hvor et og to nu er.
Så lad os nu gå videre til eksempel fem af disse flere
hej'er og se på, hvad dette program kommer til at gøre.
>> Så nu, i en engelsk sætning, hvordan dette
program opføre sig?
PUBLIKUM: Meows halvdelen af ​​tiden.
DAVID Malan: Meow banehalvdel tid, så dette er en måde at
formidle en meget enkel idé.
Selvom vi tilfældigvis bruger nogle uligheder her
i nogle numre, er det virkelig bare en programmatical
måde, en præcis måde, at sige hvis mønten kommer op hoveder, gå
fremad og miaver.
Eller omvendt, hvis mønten kommer op haler, ikke meow.
Og i dette tilfælde, hvordan kan vi udtrykke det?
Vi vil vælge et tilfældigt tal fra 1 til 10, og hvis det
nummer er mindre end 6, gå videre og mjave.
Og hvordan gik det herind?
Nå igen, bemærk blot at trække og slippe og
tingene klikker på plads.
>> Så lad os nu se om denne tilfældighed virker.
Lad mig gå videre og klik på den grønne flag.
[MEOW]
DAVID Malan: Okay.
[MEOW]
DAVID Malan: Okay.
Okay, godt, så vi fik hoveder, hoveder, haler effektivt.
Tails.
[MEOW]
DAVID Malan: Heads.
[MEOW]
DAVID Malan: Excellent.
Det er altid akavet, når bare statistisk du får en dårlig
køre, og det er alle hoveder, og programmet faktisk ikke
arbejde som du ville håbe.
Men denne gang, det fungerede, og vi synes at have, hvis vi gjorde
dette et uendeligt antal gange, 50% odds.
Nu igen, ikke alt, interessant, bare at gøre katte
mjave, så lad os se om vi ikke kan fremme denne lidt længere
her i version seks.
Så nu har vi virkelig irriterende version -
[MEOWS med få sekunders mellemrum]
DAVID Malan: - og det er hvad der er kendt, generelt, som en
uendelig løkke.
>> Så uendelig løkke i dette tilfælde føles skidt.
Det er helt sikkert kommer til at starte lyde dårligt, og alligevel uendelig
loops er ikke altid dårligt.
Kan du tænke på sammenhæng i edb-programmer, hvor du gerne
rent faktisk ønsker en uendelig løkke?
Ja?
PUBLIKUM: Når du vil kontrollere en betingelse.
DAVID Malan: Okay, når du ønsker at holde øje med en tilstand?
Som hvad?
PUBLIKUM: [uhørligt]
DAVID Malan: Okay, godt, så hvis du havde nogle program, nogle
slags home automation ting, hvor du ønsker at konstant
monitor er noget tilfældet.
Er lysene?
Er lyset tændt, fordi du måske har en timer, og
du vil have dem til at gå væk, kan du nødt til at gøre noget
igen og igen.
Og i virkeligheden taler om timere, der har nogen af ​​jer
ure på din computer eller digitale ure, det er en
uendelig løkke.
Den fortsætter med at opdatere klokkeslættet, fordi det er hele tiden
kontrol og kontrol og kontrol har tid ændret sig,
og hvis ja, åh, min Gud.
Uret er endelig ændret.
Det skal vise, at værdi for dig.
Så mens det meste af tiden uendelige løkker er en fejl,
eller i det mindste en dårlig design beslutning, nogle gange de gør
har deres værdi.
>> Nå, lad os gå videre her til hello7.
Så nu vil programmet få lidt mere interaktiv.
Lad mig zoome ind her, og igen, det er hvad der er rart
om Scratch.
Og vi vil bruge det til at være klar, Scratch, bare i dag og i
næste uges problem indstillet.
Men på mandag, dykke vi ind i C. I dette program her, det gør,
for evigt, det følgende.
HVIS røre musemarkøren - nu, hvem er den
sammenhæng her?
Nå, og bemærk, at der er markeret hernede på bunden
højre er den kat, Sprite en, så disse scripts, dette
program, gælder for ham specifikt.
Så hvis det kat rører musemarkøren, så det går
at spille denne ned og vente to sekunder, og
gentag derefter ad nauseum.
>> Så lad os gå videre og ramte play.
Der sker ikke noget, men hvis jeg ønsker at kæle med
kat nu, kan jeg simpelthen.
[MEOW]
DAVID Malan: Adorable.
[MEOW]
DAVID Malan: Okay, mindre irriterende, men også bliver kedelig,
så lad os gå videre og se, om vi ikke kan injicere
lidt mere logik.
Det var eksempel syv.
>> Her i eksempel otte, vi kommer til at
indføre en ELSE tilstand.
Så meget som en bogstavelig gaffel i vejen, hvor du kan gå
til venstre eller du kan gå til højre, en tilstand i et programmeringssprog
sprog som Scratch, eller som vi vil se C, kan tillade dig at
gå i den ene eller anden retning via en IF ELSE konstruere.
Så helt bogstaveligt, HVIS røre musemarkøren, dette
vil spille noget lyd, ellers kommer til at spille denne anden
lyd, mjave.
Nu, hvis du kan udlede af navnet på disse lyde, kan du
sikkert gætte, hvad dette program er beregnet til at fremmane
ideen om.
Denne kat er mjavende lykkeligt.
[MEOW]
DAVID Malan: Heldigvis, men ikke
helt lide at blive rørt.
[Brøl]
DAVID Malan: Så nu har vi en kat, der vil råbe på dig.
>> Okay, godt, en sidste eksempel med katte her, og
Lad os åbne udgave ni af dette her.
Så nu har vi den næste mest irriterende lyd, som jeg kunne
finde, så vi har en hvalros eller søløve her, der kommer til at
skal du gøre følgende.
[SEAL BARK]
DAVID Malan: Okay, så dette vil fortsætte, indtil du regne ud, hvordan
dette program virker.
Så denne gang, har dette dyr to scripts, og hvad er
interessante her er, at disse scripts vil udføre
parallelt.
Så fordi de begge starter med en grøn flag klikket,
det er ligesom at gå på denne måde, og begge programmer begynder at køre det
en gang, selv om de er looping evigt.
Så i den øverste script, har jeg en vis logik.
Hvilke funktioner betyder det giver deroppe?
[SEAL BARK]
PUBLIKUM: [uhørligt]
DAVID Malan: Hvis det er hvad?
[SEAL BARK]
PUBLIKUM: Hvis dæmpet til nul, det vil holde spille
lyde. [SEAL BARK]
DAVID Malan: Okay, godt.
Så hvis dæmpet, uanset dette er, denne orange ting er nul,
Så spiller havet løve lyd og tænke "Åh,
hej, "i to sekunder.
Nu ved jeg ikke, hvad dæmpet er, men nul fremmaner den
idéen om falsk eller slukket.
Så hvis dæmpet er falsk, så hvis ikke slået fra,
holde spille lyden.
Okay, godt, hvordan vi deaktivere denne ting?
>> Nå, lad os se på det andet script dernede.
Det andet skrift siger sat dæmpet til nul.
Bemærk det er også orange, så hvad Scratch gør, er det farver
blokke i den samme farve, hvis det er sortering
af logisk forbundne.
Så lige så dæmpet op øverst var orange, så er dæmpet ned her
nævnt i orange blok.
Men det er en variabel opgaver, så ligesom i
algebra, du har x og y og z, i programmering du har
variabler, men de er generelt -
lad os stoppe op et øjeblik og figur, hvordan
at stoppe denne gøen.
Hvordan gør jeg det?
[SEAL BARK]
DAVID Malan: Okay.
Det stoppede. Okay.
>> Så ligesom i algebra De har variable x, y og z, men i
programmering, der variabler som x, y og z er generelt
ildeset, fordi de ikke er på alle udtryksfuld.
De har ingen semantisk mening overhovedet, så i de fleste
programmeringssprog, kan variabler have fuld
flyvefærdige navne eller ord eller sætninger, gerne dæmpet, for at sige
hvad de gør.
Så dette andet script også lyttede evigt, og det sagde
hvis nøglen, tastatur nøgle Space, er
presset, spørgsmålstegn.
Så der er en tilstand med et boolesk udtryk, der er
kommer til at besvare et spørgsmål enten sandfærdigt eller falsk,
så har jeg inde i det, hvis mellemrums-tasten trykkes ned og
HVIS dæmpet er nul, skal du indstille dæmpet til én, ELSE indstille dæmpet til nul.
Så denne anden gaffel i vejen, og bemærk, hvordan jeg har
indlejret de to IF betingelser, er en måde at kontrollere den
Space Bar presset, fordi hvis det er tilfældet, jeg enten ønsker at gå denne
måde eller på den måde.
Og hvordan kan jeg vende værdien af ​​dæmpet?
Jeg er nødt til at kontrollere, er det nul?
Hvis det er tilfældet, gør det en, ellers gør det nul til derfor skifte
sine to stater.
>> Okay, så vi har så nogle af disse grundlæggende
konstruktioner.
Vi har boolske udtryk, og indse, også er der tale om
ikke alle, at ukendte.
Faktisk er her en hurtig skærmbillede af Harvard kursets CS50
shopping værktøj, og enhver hjemmeside derude, der har afkrydsningsfelter
og rullemenuer har virkelig, al denne tid, har brugt
Booleske udtryk.
I dette tilfælde her, hvis du klikker på afkrydsningsfeltet ved siden af
Selvfølgelig er større end eller lig med 4,5, eller den samme siden af
fakultet, du angiver en boolsk udtryk.
Vis mig kurser, dette udtryk er sandt.
Eller til højre, ikke er i konflikt med kurser Jeg er
tager, hvis det er markeret, så ja, du vil kontrollere
denne betingelse, ellers du ønsker at ignorere det.
Så boolske udtryk er en slags hele vejen rundt, men når
vi sætter dem i forhold, hvad enten IF betingelser, hvis
Elses, eller vi kan endda simulere dybere
niveauer, hvis ELSE IF ELSE -
så det er en slags ternær stat.
Du kan gå på denne måde eller denne måde eller denne måde.
Vi kan holde indlejrer ting at gå i forskellige retninger.
>> Så Scratch har disse sløjfer, ligesom Forever.
Det har disse funktioner som Repeat 10, nogle
begrænset antal gange.
Vi har evnen nu at sætte variabler, så i dette tilfælde
Jeg har erklæret, for eksempel en variabel kaldet sokker.
Jeg har initialiseret til 0, og det er endnu en anden retning
vi kunne have taget op her med Joseph, hvor jeg måske
bare holde styr på hvor mange sokker jeg har på og afslutte
programmet, når den pågældende variabel værdi er 2.
Det ville være en anden måde at slags generalisering, at
problem og gøre noget igen og igen.
Nå, lad os gå videre og nu introducere et par nye ting.
Så dem af jer med tidligere programmering erfaring vil
ved, at en masse sprog har arrays, eller vektorer eller
lister, og ja, Scratch har noget som dette, også.
Så lad os se om vi ikke kan tage tingene til det næste niveau her.
Hvis jeg har mulighed for, nu, med disse puslespilsbrikker til
tilføje noget, ligesom et ord eller tal, til en variabel, jeg kan
begynder at hobe ting.
Og det er faktisk temmelig apropos for ting som spil,
rollespil, hvor du slags gå rundt
nogle fantasy verden indsamler ting, plukke ting op,
tjene point, eller lignende.
Du vil måske holde styr på en slags opgørelse, og
ja, det er hvad en af ​​vores tidligere studerende her gjorde med
noget, der hedder Fruitcraft RPG.
>> Så lad mig gå videre og åbne denne ting her, og i
Fruitcraft, har vi denne verden op på toppen.
Så lad mig gå videre og klik på den grønne flag.
Meddelelse øverst til venstre er en slags opgørelse.
Det er implementeret i Scratch som hvad vi vil kalde en matrix eller
en liste, og nu har vi denne lille animation.
Så ligesom vi startede tidligere med denne cookie kærlighedshistorie,
og derefter vi avancerede til katte og søløver, nu kan vi få
ting, der er endnu mere interaktiv.
Og denne lille blå fyr, kan jeg begynde at bevæge sig rundt om hans
lille hjem her.
Så det ser ud som om han har en exit hernede, så jeg bruger
piletasterne, op, ned, venstre til højre.
Og nu er jeg udenfor, så lad er hvad jeg har her.
Ligner en appelsin, og ja, så snart jeg rører
appelsin, det bliver plopped ind i min beholdning.
Hvis jeg går over her til de kirsebær, nu har jeg noget
andet i min beholdning.
Og det er alle nice og sød, men tænke over, hvordan, nu, dette
er implementeret.
Nuvel, vi har denne opfattelse af en liste, og det er tilsyneladende en
puslespilsbrik, at du bare sige hvad du vil føje til det, tilføje
orange, tilsættes kirsebær.
Nu, hvad denne lille blå fyr gør?
Tja, han er en sprite.
Og formodentlig, den orange og kirsebær -
de selv var separate sprites.
Og ved hjælp af forholdene i boolske udtryk, de
studerende var sandsynligvis i stand til at udtrykke IF blå fyr er
rørende kirsebær derefter tilføje ordet kirsebær til hans
opgørelse, og derefter også skjule cherry sprite.
Så under kølerhjelmen, der formentlig stadig er en kirsebær
sprite der.
Vi har lige fortalt, at det bliver effektivt usynlig.
>> Nu, hvis jeg fortsætter med at gå herover, kan vi også gøre det
proksimale ting, hvor jeg kan gå og læse skiltet.
Så hvis blå fyr røre skilt, kan vi have denne Say blok
ligesom katten talte til os i ord, hallo, tidligere "Got
noget frugt?
Bring det til frugten sted. "All right, så nu, tilsyneladende,
Jeg har mine retninger.
Jeg kan gå over her til frugt sted, linje mig op
med døren.
Nu er jeg her.
Jeg kan gå op til manden på tælleren.
Han opdager, at jeg er tæt på ham, så det behøver ikke at være
helt identisk rørende, og jeg har vundet spillet.
Så der har vi Fruitcraft RPG.
>> Så vi kan gøre tingene endnu mere avancerede end dette.
Vi kan tilføje lyde.
Vi kan tilføje pseudo tilfældighed.
Vi kan tilføje kompleksitet.
Lad mig gå videre her, og i stedet gøre det selv,
Lad mig vise dig en af ​​de mere sofistikerede indlæg
vi fik sidste år fra en bestemt person ved navn Blake.
Kan vi få en volontør, der er behageligt opført på
kamera og er op for at spille et spil?
Hvad med lige der?
Kom nu op.
Okay, så det spil, du lige har ubevidst
meldte sig frivilligt til at spille -
[Bifald]
DAVID Malan: - er noget fra gårsdagens kaldet
"Frogger." Hvad er dit navn?
Renda: Renda.
DAVID Malan: Redna?
Renda: Det er ligesom Brenda med en b.
DAVID Malan: Okay, Renda.
David.
Hyggeligt at møde dig.
>> Så her i "Frogger", og hvis vi kunne hæve lydstyrken bare
en lille smule, du er denne lille
grøn frø på bunden.
Du kan bruge venstre, højre, op og ned, og dit mål er at
krydser gaden, krydse floden, og berør lilje puder
øverst.
Aw.
Et mere t -
redo, okay?
Lad os hit stop.
Ingen så det.
[Bifald]
DAVID Malan: Yeah.
Meget godt klaret.
Fremragende, tak.
>> Så at der var Frogger. Nu hvor du ved, hvad du har
fået jer ind i, en mere frivillig for en anden
spil indsendt af en anden elev.
Du ønsker at komme videre op?
Hvad er dit navn?
RICHARD: Richard.
DAVID Malan: Richard.
Okay, Richard, kom op.
[Bifald]
DAVID Malan: Du har noget, der vil lyde
velkendt snart, så her er dine instruktioner.
Så i et øjeblik, er nogle puslespilsbrikker kommer til at rulle op
fra skærmen, der ser enten efterladt
eller højre op eller ned.
Du er nødt til at ramme piletasterne på en sådan måde
at det svarer til disse puslespilsbrikker foring op med
pladsholderne øverst.
Så når du ser en venstre pil, og det flugter med venstre
pil, ramte venstre pil.
Du kan begynde.
[MUSIC - "stærkere" Kayne WEST]
DAVID Malan: Okay, store runde af bifald for Richard.
[Bifald]
DAVID Malan: Meget godt klaret.
Tak.
[Bifald]
>> DAVID Malan: Så sjovt og, tilsyneladende, en slags
skræmmende som det kan være at gennemføre noget så
tilsyneladende sofistikeret som dette, indser, at den studerende
ikke fastsat ud og bare skrive det hele på én gang.
I stedet kan du nedbryde et problem som tilsyneladende kompleks
da dette i meget mindre stykker, og også dette er
vil være et tema.
Det værste du kan gøre i at skrive et program i de fleste enhver
sprog er at sidde ned, få virkelig begejstret, skriver
hele den forbandede ting, og så bare håbe, at det virker som
gang du er færdig med at skrive.
Snarere processen med programmeringen skal generelt
være meget bevidst, meget iterative, hvor du bare
sat meget små skridt for jer selv, bide stykker på størrelse
vil du bide, og så du har disse sanity
checks, små milepæle du kan møde.
Og så skal du bygge oven på dem, for at skabe mere
sofistikerede ting stadig.
>> Så for eksempel, hvordan kunne vi gå om
gennemførelse af et spil som dette?
Nå, helt ærligt, ville jeg bestemt starte med bare
at støtte den ene tast ad gangen.
Lad os bare gennemføre støtte til den venstre pil.
Så den studerende skulle en eller anden måde skabe i Photoshop, eller i
Skrab selv ved hjælp af lille grafiske editor, en
piletast, der ligner den, der er øverst til venstre der, bare
den grå pladsholder.
Så den studerende skulle finde ud af, hvad x, y koordinere til
udtrykte det, hvor man kan sætte den i vinduet.
0, 0 er heroppe, så du er nødt til at regne ud hvor mange
pixels, eller punkter, for at udligne denne pil fra
Den øverste del af skærmen.
Og så en gang det er på plads, dit program faktisk ikke
gøre noget endnu, så du derefter brug for en anden sprite, for
eksempel en grøn pil, der er også peger mod venstre, og du
derefter nødt til at begynde at skrive nogle scripts for det.
>> Og du opdager måske, at disse ting begyndte at komme på
forskellige hastigheder, og farverne var i forskellige
steder, og det er fordi den studerende brugt lidt
pseudo tilfældighed.
Og ved pseudo tilfældighed, jeg bare betyde vælge et nummer
mellem noget og noget, fordi du kan
begynder at kort ting, som hvis antallet er mellem en og
fem, ja, lad os gøre noget grønt.
Hvis det er mellem 6 og 10, lad os gøre det puslespil brik
rød i stedet.
Så længe du har en måde at skabe en form for
tilfældighed, kan du derefter træffe beslutninger baseret på, at
tilfældighed.
Og jeg holder siger pseudo tilfældig, fordi der er en
lidt beskidt hemmelighed.
Computere kan ikke komme op med tilfældige tal.
De kan kun gøre, hvad man får besked fordi
de er menneskeskabte anordninger.
De kan ikke bare gætte et tal ligesom vi mennesker
føle, at vi kan.
En computer har at gøre noget matematisk at fremmane
illusion af matematiske antal, somme tider ved hjælp af
aktuelle dag af tid som et input til at regne ud, hvad
nummer til at vende tilbage, men mere om det en anden gang.
For nu, ved bare, at vi kan generere pseudo tilfældighed.
>> Så når jeg har mulighed for det venstre pil for at starte
optræder på forskellige tidspunkter og ved forskellige hastigheder, derefter
Jeg kan gå tilbage og tilføje nogle af disse IF betingelser.
HVIS dette sprite rører den anden, og den venstre pil
-tasten er blevet trykket -
så tre betingelser i denne sag.
Jeg kan bruge det og blokere måske i dette tilfælde -
SÅ jeg vil gerne gå videre og øg score.
Og øverst, vi har en score, vi har Awesome,
Cool, God, og Boo.
Så der er tilsyneladende fem variabler, at denne elev
anvendes til at holde styr på disse forskellige målinger.
Så kort sagt, er slutresultatet forbløffende.
Det er sjovt, det er sjovt at spille, det er spændende, men det er ikke
hvor eleven begyndte.
Han eller hun startede på et meget mindre sæt af trin.
>> Så hvad er nogle andre byggeklodser, som vi kan
vævning i disse programmer?
Tja, der er denne anden begreb i de fleste sprog,
Ridse blandt dem, kendt som tråde.
Så en computer kan faktisk ikke rigtig gøre flere ting på en
tid, i hvert fald ikke normalt.
Snarere en computer har i almindelighed kun en CPU, og selv
selvom computere er super hurtig og kan derfor
skabe en illusion af at gøre flere ting på én gang -
tjekker din mail, få en øjeblikkelig
besked, udskrivning af et dokument -
virkelig, er en computer bare hoppe fra print til IMing
at e-maile, tilbage og tilbage og frem og tilbage så hurtigt, at vi
langsomme opfattende mennesker bare ikke klar over, at det faktisk
kører disse programmer en lille smule ad gangen.
Nu, dette lidt af en hvid løgn disse dage, fordi, i dag,
mange vores computere er de såkaldte multi-core, så du
har én CPU, men flere kerner, hvilket er lidt ligesom
har flere CPU'er.
>> Og så nogle gange, kan computere virkelig gøre flere ting
på et tidspunkt, men generelt inden for et program, programmer
basere sig på disse ting kaldet tråde.
Så en tråd er lidt ligesom et miniature-program, der kan
eksistere side om side en anden miniature program og kan køre
parallelt eller i det mindste kan køre under den illusion, at
de kører samtidigt.
Så Scratch understøtter disse ting kaldet tråde.
Du kan have flere scripts fuldbyrdelsesstaten på én gang, ligesom vi
gjorde med søløver og dette giver os mulighed for at faktisk
derefter har samspillet mellem disse sprites.
Lad mig gå videre her og trække op, lad os sige, tråde, og
spille dette som følger.
Vi har to gigantiske lyn, hver af hvem vi vil se
har kun ét script.
Og du bemærker, at der synes at være nogle efterretninger i
kat i denne ene, fordi han nærmer sig -
[Brøl]
DAVID Malan: - og tættere på den lille fugl.
>> Så hvordan er den fugl driften?
Nå, lad os tage et kig på fuglen først.
Fuglen script sagde, da det grønne flag er klikket, skal du gå til x
lig negativ 115 og y lig 150.
Så jeg bare fundet ud af en tilfældig placering, hvor jeg ønskede
fugl til at starte, og jeg bare smed ham der som standard.
Så evigt, hvis ikke røre kat, så dette er en anden
slags looping konstruktion, men samme idé, gøre det igen og
igen og igen.
Så længe du ikke rører katten, flytte tre trin, og
hvis du er på kanten, bounce, hvor det er en slags
refleksion i billard forstand.
Så det er sådan fuglen bevæger sig rundt slags
tilsyneladende tilfældigt, men det er bare fordi det er preller
væggene i denne sag.
>> Nu katten, i mellemtiden, er lidt snyd.
Katten, når det grønne flag er klikket, ja, starter i
en placering, en vilkårlig placering -
i det mindste delvis som pr pick
tilfældig grønne blok der -
og derefter for evigt, hvis røre fuglen, spille løve lyd,
og derefter stoppe script.
Så da jeg sagde opsige, eller afslutte før, er der et puslespil
brik i Scratch, der vil bare dræbe programmet på det
punkt, fordi det er lidt logisk gjort.
Men ellers her, mærke til, hvad der kommer til at ske.
Peger mod fuglen og flytte et trin.
Så dette punkt mod fugl er sådan en fordel katten
har i, at det er homing ind på den bevægende fugl, og vi kan
nu gør dette program så meget desto mere interessant.
I stedet for at flytte et trin ad gangen pr CPU cyklus, pr
strejke vejafgift af klokken, så at sige, så lad mig gå videre og
flytte, lad os sige, fem trin ad gangen som katten.
Klik på Kør, og nu er han virkelig finder ham hurtigt.
Hvis vi fordoble dette yderligere til 10 trin, den slags går
højre for ham.
Nu kan vi give fuglen,
måske lidt af en fordel.
Lad os gå til fuglen og sige stedet for at flytte tre trin,
lad os komme ham 30 trin.
Men han stadig fik fanget i sidste ende.
>> Så her har vi to tråde.
Det er spærret inde i Scratch med to scripts og to
sprites, men tanken på andre sprog er, at du kan
skrive det væsentlige, for mange programmer som dette og har
dem løbe virkelig, eller imaginarily, parallelt.
>> Nu er der også dette begreb i programmering kendt som
begivenheder, og det er noget, vi vil ikke se i C,
sprog kendt som C. Vi vil se det hen semesters afslutning
i webprogrammering, vi når introducere JavaScript og
Begrebet bygge websider, der er dynamisk og interagere
med brugerne.
Så i dette tilfælde har vi et meget enkelt eksempel af to
sprites, dreng og pige, som hver især har deres respektive
tråde, men på en måde disse to er indbyrdes kommunikerer ved hjælp
af noget, der hedder begivenheder.
Så lad mig gå videre her og zoome ind på drengens script,
der ser sådan ud.
Når grønt flag klikket, for evigt gøre følgende.
Hvis nøglen Space, eller Space, er trykket, siger
Marco i to sekunder, det er rent æstetisk på
skærm, en lille taleboble, men derefter udsende.
>> Så udsendelse er en anden Scratch stykke, der er
repræsenterer en klasse af funktionalitet i programmeringen
der tillader forskellige programmer, forskellige tråde,
til inter-kommunikere, at en eller anden måde sende
beskeder, en til en anden.
Passing et stykke papir i klassen er en slags lav tech
ækvivalent.
Så udsendes begivenhed.
Jeg kan sende denne besked, og ordet begivenhed
er helt vilkårlig.
Scratch undertiden har disse rullemenuer, så jeg kom lige op
med en tilfældig ord som begivenhed, fordi nu, hvad drengen gør
når jeg trykker på tasten er han udsender denne begivenhed.
Og hvis jeg nu se på pigens script, hendes script er
super enkel, fordi alt, hvad hun skal gøre ikke handle, når
det grønne flag er klikket.
Hun er designet til handling, når hun modtager citat, citat slut,
"Begivenhed", og på det tidspunkt, hun lytter derfor til
den såkaldte begivenhed igen og igen.
Så snart hun modtager denne begivenhed, hun kommer til at skrige
Polo i to sekunder.
>> Og så kan du måske udlede dette præcis, hvad det
næste resultat bliver.
Lad mig klikke på det grønne flag.
Der sker ikke noget, fordi jeg er nødt til at gøre hvad?
PUBLIKUM: Space Bar.
DAVID Malan: Space Bar.
Boy siger Marco, pige siger Polo.
Men det er ikke svært kodet per se.
Det er inter-kommunikation mellem scripts, så nu har vi
har evnen til at gøre endnu mere komplekse programmer, hvor
disse to er en eller anden måde indbyrdes kommunikation.
>> Så i hvad retninger kan vi tage det?
Tja, i problem set 0, virkelig, er målet at
have det sjovt med Scratch.
For hacker udgave, vil du i stedet have det sjovt med en mere
sofistikeret udgave af Scratch kaldet BYOB, Byg
Dine egne blokke, men ideen er den samme.
Du vil være i stand til -
Ja, det var bevidst.
Det kom fra Berkeley.
BYOB er hacker udgave version af dette, men begge
demografi, standard udgave og hacker udgave ens, den
mål ved hånden til den kommende uge er egentlig bare at dykke i
dyb, få dine hænder beskidte med programmering, og gøre
noget interessant, gøre noget interaktivt, gøre
noget kunstnerisk, gøre noget sjovt til rent faktisk at
godtgøre, så vi ved ugens udgang, vil du have et projekt,
ikke kun for din første CS50 Pset, men du vil have en
lidt noget, som du kan vise i Annenberg til
venner eller endda familie ved at uploade det til MIT hjemmeside.
Og så jeg sagde onsdag, forventer vi 90% af klassen,
generelt, at gøre de almindelige udgaver.
Indse, at der er også denne afsætningsmulighed for dem af jer der
ellers kunne finde dig selv lidt kede med grundlæggende
og virkelig ønsker at dykke ned og udforme en vision, du allerede
har med forudgående baggrund i dette mere venlige
miljø.
>> Så lad mig trække op en anden eksempel, at en af ​​vores tidligere
studerende her gjorde og fortælle lidt noget gennem sang.
Det samme måde, som dette spiller, så tænk over, hvordan du går om
gennemførelsen af ​​dette program ved hjælp af netop disse samme
byggeklodser, en lille smule pseudo tilfældighed, og en
bit af velkendte sang.
Hvis vi kunne skrue op for volumen bare en lille smule?
[MUSIC - "Det regner MEN" The Weather Girls]
>> DAVID Malan: Det var det for CS50.
Vi vil se dig på mandag.
[Bifald]