[Powered by Google Translate] [ROCK MUSIC]
[MUSIC - "Happy Together" THE TURTLES]
DAVID MALAN: I dag begynner vi vår utforskning av
Grunnlaget for informatikk og vår introduksjon,
nå, til kunsten programmering, hvorav det er
bare ett eksempel.
Men i samme ånd av problemløsning, vet at
CS50 tradisjonelle Puzzle Day er i morgen.
Hvis du ennå ikke har RSVPed for denne hendelsen, kan du gå til
cs50.net/rsvp.
Du kan ta med grupper på to eller tre eller fire.
Du vil bli utfordret med problemer som den du så
oppe i begynnelsen.
Alle nye problemer i år hvis du spiste i fjor, og du
vil ha en sjanse da å vinne noen flotte premier.
Blant dem, en Wii og noen gavekort og lignende,
alle henger ut med CS50 studenter og klassekamerater
og pizza og Facebook.
Så mer om det i morgen hvis du ønsker.
>> Dette er da CS50, for de av dere bli med oss ​​for
første gang.
Og vet at dette kurset er spesielt bestemt på å få
deg gjennom dette kurset til dens slutt, og da du
vil ha ikke bare en forståelse av disse
Grunnlaget for informatikk, men du vil ha
dette svært praktisk ferdighet sett som du deretter kan ta med tilbake til
din egen avdeling, enten det er tekniske fag,
anvendt matematikk, naturvitenskap, naturlige
vitenskap eller lignende.
Ja, hva er så spennende om informatikk disse
dager er at det er bare så gjelder
alle slags felt.
Og selv om i dag, vil vi bare skraper i overflaten av en
svært tradisjonelle programmeringsspråk kjent som C, vil vi
i stedet se på noe som kalles Scratch, noe med
som at cookie kjærlighetshistorie ble gjennomført av en av dine
forgjengere i tidligere år, å fortelle historier, å lage spill,
å skape interaktiv kunst, og å faktisk begynne å pakke våre
sinn rundt noen av de grunnleggende konstruksjoner som
ligger til grunn programmering, men i en sammenheng, som du vil se, er at
mye mindre skummelt, er at mye mindre uforståelige, enn du vil se
før lenge.
Og realisere, også, for de av dere bare med oss ​​denne
semester, setninger som vi endte onsdagens foredrag,
det er ikke så viktig hvor du ender opp i forhold til din
klassekamerater i denne klassen, men hvor du, etter semesters slutt
i uke 11, ender opp i forhold til deg selv rett i dag.
>> Så uten videre, dette er også verdt å merke seg at
de mindre komfortable, de et sted i mellom, er
også, ved utformingen av dette kurset, ikke på noen ulempe
vis-a-vis de mer komfortable
kommer inn i denne klassen.
Som du ser over ukene som kommer, har vi forskjellig
spor for vesensforskjellig tilbake bakgrunn, seksjoner for de
mindre komfortable, mer komfortabel, de sted
i mellom.
Som du vil se denne helgen og neste uke, to versjoner av
de fleste oppgavesett i både standard og hacker utgave så
som dere alle kan selv velge nedover stien som du
er mest komfortabel.
>> Så i dag, dykke vi inn i dette programmering
språk kalt Scratch.
Det er en grafisk programmeringsspråk, og ennå har den
samme funksjoner i noen av de høyere nivå språk vi vil
utforske senere i semesteret, blant dem C og
JavaScript og PHP.
Men det kommer til å tillate oss å unngå noen av distraksjoner
tidlig på syntaks, ting som semikolon, parenteser,
og andre uforståelige detaljene som, ved første øyekast, er bare ikke
i det hele tatt intellektuelt interessant og har en tendens til å komme i
vei fra noen fundamental forståelse.
I form av nå bærekonstruksjonen fremover, skjønte dette
verktøy, CS50 Diskuter, som vil bli knyttet til kursets
nettside senere i dag, er den elektroniske diskusjonsforum i
som du vil kunne stille spørsmål til hverandre og
ansatte, og det er også et verktøy, som vi skal se i neste uke,
at vi skal bruke ganske integratedly i
kontortid også.
Faktisk, kontortid begynner på mandag, og ærlig, den første
uke kontortid er ganske lav nøkkel.
>> Jeg tror ikke du finner Scratch alt som utilgjengelig.
Det er heller selvforklarende, som vi skal se, og så hva
vi vil bruke det for i dag er å hente ut noe av
grunnleggende ideer som vil da, vedvarer gjennom hele
Resten av semesteret.
Men starter mandag, kl 20:00 gjennom 23:00 vil være
kontortid i Annenberg over hjernen pause.
Seksjonering to vil begynne denne kvelden, så en gang dette
helg, gå til cs50.net/section, og du vil
bli spurt en rekke spørsmål.
Blant dem, hvordan vil du beskrive din
komfortnivå som i dag?
Det er ingen hard, rask regelen om hvem som er der bøtte.
Det er bare den slags ting som du sikkert vet om du
er blant de mindre komfortable eller ellers.
>> Og nå, gjennomgang.
Oppgavesettet spesifikasjonen for denne uken, både standard
og hacker utgave alike, er online på cs50.net som nå.
Og du vil se at den første av disse utgavene, den
standardutgave hver uke, er ledsaget av noe vi
kaller en kode gjennomgang, ledet en sesjon med en av
Kursets undervisning stipendiater til å veilede deg gjennom, gir
tips om, og få deg ned en bestemt bane når det gjelder
å starte disse oppgavesett.
Så med hver av disse problem sett, hvis du noen gang ønsker
selv hvor skal jeg begynne, begynner du med disse
walkthroughs.
Og faktisk, la meg introdusere Zamyla Chan, dette
Årets undervisning fyr som skal lede hver
en av disse walkthroughs.
Zamyla?
>> [Applaus]
ZAMYLA CHAN: Åh, hei, alle sammen.
Mitt navn er Zamyla.
Jeg er en junior ingeniørutdanningen i Winthrop House.
Men jeg prøve og passe på så mange informatikk kurs som jeg
kan, det er derfor jeg er veldig spent på å være ledende dette
Årets walkthroughs.
Walkthroughs, for meg, var en viktig del av CS50 min
erfaring.
Under gjennomgang, for hver p-set, vil vi gå gjennom
problemet satt sammen, se over problemene, type
dele dem opp i håndterbare biter.
Jeg skal gi deg tips, teknikker, for å få
gjennom og komme i gang.
Jeg håper å se dere alle på walkthroughs.
Hvis du ikke kan gjøre det selv, så
vennligst tune i nettet.
>> DAVID MALAN: Excellent.
Takk, Zamyla.
Så skjønner at walkthroughs er faktisk på en fredag
ettermiddag, men dette er hensikt ved design slik at
selv om du ikke ønsker å delta i klassen på en fredag
ettermiddag, vil videoene bli opp alle raskere enn
helgen.
Så innser at cs50.net vil være alle Zamyla er
walkthroughs.
Og at det er dagens dato og klokkeslett, 03:00,
Harberd Hall, 104.
Og noen av de pedagogiske stipendiatene har også utarbeidet
noen merknader for deg i absentia for å gi deg litt av
perspektiv på hva deres erfaring kommer inn og
går ut av CS50 var.
Så hvis vi kunne dempe lysene for bare et øyeblikk, gir jeg deg
noen av CS50 ansatte.
>> JACKSON Steinkamp: Jeg tok CS50 fjor som en førsteårsstudent i
falle, og det absolutt blåste hodet mitt.
Jeg hadde aldri tatt noen programmering klasser før,
og aldri kom med noen informatikk
oppleve det hele tatt.
Og rettferdig, hørte jeg buzz om klassen og
besluttet å ta den.
>> JULIA MITELMAN: Det var virkelig moro, virkelig engasjerende.
Jeg fortsatt til denne dag -
Jeg har nettopp så jeg har diskett som David ga oss
på vår første dag av forelesning.
Jeg hadde hengt det på veggen min.
Dette er trolig litt nerdete, men jeg hang på min
veggen i løpet av klassen som en påminnelse om hvor kult det var.
>> TRAVIS DOWNS: Det er så flaut.
>> JACKSON Steinkamp: Informatikk er noe du
bør prøve selv om du ikke er en for
de tradisjonelle vitenskaper.
Det er en egen opplevelse, og CS50 vil sørge for at du er
støttet godt gjennom det med sin veritabel hær av TFS.
>> ALI Nahm: Jeg tok det som en førsteårsstudent, og slik jeg har gjort mye
av nye venner.
Jeg fikk også introdusert til hele denne konsentrasjon og
Hele School of Engineering, og så jeg anbefaler det
og ønsker deg velkommen til vår CS50 familie.
>> Yaniv YACOBY: CS50 lærer bare deg hvordan du bruker verktøy
som er allment tilgjengelig.
Du trenger bare en laptop, trenger du en nettleser, og du
trenger å lære å skrive noen kode, og du kan virkelig bygge
fiks ting.
>> KAREN XIAO: Det er bare så kult å være i stand til å gjøre noe
og har folk bruke det og ha folk ser det, og det er
hva jeg virkelig elsker det.
>> TIM McLaughlin: - en følelse av fellesskap, tror jeg, i dette
Selvfølgelig mer enn noen annen kurs jeg har tatt så langt.
Du er ikke bare å ta en annen -
du ikke å fylle et annet krav.
Du er ikke bare kommer til forelesninger og kommer til delen.
Men du gjør tonnevis av ting som er alt om
programmering og alt om teknologi, men det gjør ikke
virkelig føler en klasse mesteparten av tiden.
>> Travis DOWNS: Og på den første dagen, ga de ut kake, og
Jeg ble umiddelbart solgt.
>> JACOB PRITT: Gratis godteri og pizza.
>> ZAMYLA CHAN: - uavhengig av rentenivå, tror jeg
at CS50, vil du ha det gøy, og du vil være intellektuelt
stimulert.
>> MARK GROZEN-SMITH: Det er alltid en fest i klassen, og det er en
fest hver kveld arbeider på p-set.
>> JACKSON Steinkamp: Hver gang du fullfører et problem sett, du
vil føle at du er ferdig med et prosjekt.
>> MELISSA NIU: Det var freshman år, og jeg var ferdig shopping.
Jeg hadde mine fire klasser klar, og jeg var i Annenberg.
Og jeg borti en venn, og han sier hei, jeg handler
denne klassen heter CS50, og du bør bli med meg.
Endte opp med å ta det som faller, og etter at klassen, jeg
tenkte kanskje jeg kommer til å mindre i CS.
Men her er jeg, tre år senere, fortsatt studerer datamaskin
vitenskap og faktisk gjør det som en stor, og jeg elsket hvert
øyeblikk av det.
>> Rob Bowden: Jeg har ingen anelse.
>> ALI Nahm: La oss se.
>> MELISSA NIU: Craziness.
>> SPEAKER 1: Jeg føler at jeg vil bli veldig klisjé.
Jeg vil bare si, liker, awesome.
>> Yaniv YACOBY: Tilgjengelighet.
>> JACOB PRITT: Gratis godteri og pizza.
>> TRAVIS DOWNS: Kan ikke slå ned en klasse som deler ut kake.
>> TIM McLaughlin: Energisk.
>> Vipul Shekhawat: Essential.
>> Rob Bowden: La meg tenke på et svar.
Jeg tror jeg har noe.
Herregud.
Ja, mitt navn er Rob Bowden, og dette CS50.
>> [Applaus]
DAVID MALAN: All right, så la oss begynne å male et bilde
av hvilken retning vi kan gå, og la oss introdusere
dette konseptet her kjent som pseudokode.
Så pseudokode er ikke et programmeringsspråk
språk for seg selv.
Det er ikke noe teknisk per se, men det er bare en slags
generell måte å uttrykke deg selv ganske presist,
ganske algoritmer, ganske prosedyregenerert, men uten
å måtte bekymre deg hvilket språk du uttrykker
deg i.
Det er noen modell av engelsk og programmeringsspråk med
som du tilfeldigvis være kjent, slik at vi kan starte
skrive denne typen ting som vi går.
Og faktisk, Joseph, kunne jeg låne deg opp på scenen for å være
skriftlærd her?
Jeg har gått foran her på forhånd og glemt å sette
på noen sokker i dag, og dette vil være blant våre mer
latterlige eksempler.
>> Nå, jeg trenger deg over her.
Jeg skal gjøre det sokker del.
Så her har vi en liten ripe pad.
Dette er bokstavelig talt bare TextEdit i en Mac.
Vi er ikke egentlig tenkt å skrive et kjørbart program, men
vi bare kommer til å begynne å skissere ut pseudokode basert
på noen av rådene du gir meg her.
Så her er min haug av sokker hjemme.
Jeg har ingen sokker på når jeg våkner om morgenen, og vi har nå
trenger å skrive et program, en algoritme av former, som
å få disse sokkene på føttene.
Og langs veien, la oss se om vi turen over, eller støter,
noen av de ideer som du nødt til å starte
tenker mye mer på alvor når du programmerer
lest programmene ikke oppfører seg helt som tiltenkt.
>> Så jeg sitter her nede.
Jeg har fått min haug av sokker.
Hva er det første en fornuftig menneske ville
gjøre når målet er å sette på et par sokker?
Noen gi meg ett skritt, og bare ett trinn.
Ja?
PUBLIKUM: Bøy ned.
DAVID MALAN: Bøy ned, Okay.
Trinn to.
PUBLIKUM: Plukk opp sokk.
DAVID MALAN: Plukk opp sokk.
Ok, er så liten tvetydighet her, og dette er en av de første
anstøtsstener at vi skal bevisst
møter her.
Det er litt tvetydig, så plukke opp sokk.
Greit, jeg tar denne, men en datamaskin, innser i bare en
bit, ikke kommer til å ha den slags menneskelig instinkt å bare
plukke den nærmeste.
Vi kommer til å ha for å starte, før lang, uttrykker
oss mer presist.
>> All right, så trinn to er å plukke opp din sokk.
Vi tar det.
Trinn tre.
I ryggen.
PUBLIKUM: Finn et passende par.
DAVID MALAN: finne matchende par.
Ok, så dette er bra.
Jeg måtte velge denne sokken.
Så målet er å finne en matchende sokk nå, men hva
betyr det?
En fornuftig menneske, mye som på onsdag når jeg bare
visste hvordan å finne Mike Smith i en telefonbok, bare slags
gikk med instinkt deres.
Men her er det tydeligvis denne sokken her, men en datamaskin
ikke kommer til å være så instinktiv.
En datamaskin er kommer til å ha en samling av biter, som vi
diskutert på onsdag, og de er
organisert måte i minnet.
Men poenget er at en datamaskin har bare evnen
å se på ting en om gangen, og faktisk, enda vi
mennesker - selv om det føles som om jeg kikket ned og delt
sekund senere jeg vet hvor sokken er, hjernen min og mine øyne
antagelig gjorde en rask skumme av disse sokkene, og deretter låst
på til en i spørsmålet.
>> Så hvis vi være enda mer bevisste nå som en datamaskin,
hvordan finner jeg denne matchende pair?
Vel, vi må iterate.
Vi må kanskje sløyfe over dette rotet av sokker på
etasje der jeg sier noe sånt som FOR HVER sokk, plukke den
opp, og hvis samme form og størrelse som den andre, SÅ
dot, dot, dot, vil vi fortsette historien.
Så for hver sokk, så jeg plukke opp dette.
Jeg sjekke er denne lik denne.
Det er ikke, så jeg legger til side side.
Så jeg iterate igjen.
Er dette en like?
Nei, det er ikke, så jeg satte den til side.
Er dette en?
Nei.
Denne?
Nei, og så videre.
Og så til slutt, forhåpentligvis vil jeg møte denne sokken her.
Så hvis det er samme form, størrelse, ta den.
>> Og nå, hva ville være vår neste skritt her?
Ja?
PUBLIKUM: Identifiser rett fra venstre.
DAVID MALAN: Ok, identifisere høyre og venstre, så
heldigvis, den slags fungerer.
En liten symmetrisk, eller jeg har bare slitt dem på den måten.
All right, så jeg har identifisert høyre.
Og nå, før vi går videre, la meg påpeke hva Josefs
gjort her som en slags bevandret programmerer.
Så igjen, det er ingen måte å gjøre dette, men utover bare
nummerering linjene, har Joseph allerede begynt å gjøre dette
slags innrykk.
Faktisk er dette en svært vanlig konvensjon i programmering,
slik at når du noe iterativ, looping stil, som
vi antyde med den engelske uttrykket "for hver
sokk, "konvensjonen i pseudokode, og som vi skal se,
normale programmeringsspråk, er å bare innrykk.
Hit mellomromstasten et par ganger, traff Tab-tasten eller lignende,
slik at nestet under "FOR HVER sokk" er del av
ting som du trenger å gjøre som et resultat av at loop.
Så det er alt som er å formidle semantisk.
Nå i mellomtiden, den "Hvis det er den samme form og størrelse," den
At "Take it" er innrykket videre bare betyr
det er det eneste du bør gjøre hvis den tilstanden,
hvis den grenen, som gaffel i veien, er faktisk sant.
>> Så nå her, vi er på trinn fire, identifisere høyre og venstre.
Jeg har identifisert riktig.
Gi meg trinn fem.
Og teknisk, kunne vi virkelig kalle
det for hver ting -
du bør nok telle alle linjene hvis
vi kommer til å gjøre dette.
JOSEPH: [uhørlig]
DAVID MALAN: [uhørlig]?
Ok, greit, greit, vi gjør det på din måte.
All right, så trinn fem, hvordan gjør vi det riktige sokken?
Hvordan går vi neste, her?
Ja?
PUBLIKUM: Løft opp høyre ben.
DAVID MALAN: Løft opp høyre ben, Okay.
Trinn seks?
Raskt.
Ja.
PUBLIKUM: Finn en åpen ende av sokken.
DAVID MALAN: Ok, finn den åpne enden av sokken.
Så bra.
Så her, ærlig, ville en svært vanlig instinkt bare være
satt på høyre sokk, men som også er ganske tvetydig.
Hvis ikke datamaskinen eller menneskelig vet nøyaktig hva det betyr,
det er ikke til å være å utføre det, så her har jeg
syntes åpningen av lager.
Trinn sju?
PUBLIKUM: Trykk tærne.
DAVID MALAN: Touch tær.
Ok, så nå går vi -
Greit, jeg kommer til å ta noen friheter her.
Takk.
Trinn åtte?
Sett på sokken.
Ok, så nå har jeg, tror vi nær nok til å sortere av ta
dette hjemme.
Greit, så dette går opp.
Jeg skal ta noen friheter med hva det betyr, faktisk.
Sett sokk på.
Greit, nå trinn ni?
PUBLIKUM: Sett foten ned.
DAVID MALAN: Takk.
Trinn ni, satte foten ned, og nå kan vi gjenta.
Så antagelig kan vi nå gå i takt 10 og si identifisere
venstre sokk, men det er antagelig allerede har gjort.
>> Og så da, kan jeg liksom gjenta disse trinnene.
Men denne typen ber spørsmålet.
Før, siste gang vi ønsket å gjenta noe, vi
gjorde det iterativt, igjen og igjen, en FOR
Hver loop så å si.
Vil det være fornuftig å bruke en løkke for å håndtere både
venstre og høyre sokk?
Fordi det føles som disse operasjonene er ganske mye
identiske med unntak av det faktum at en starter her og en
starter her?
Har vi loop, eller må vi bare holde skrive trinn
10 og 11 og 12?
PUBLIKUM: Loop.
>> DAVID MALAN: Ok, så loop.
Jeg har faktisk kunne ha sagt bare fortsette.
Så hvorfor er det slik?
Vel, dette er faktisk den første av våre ikke-åpenbare
design beslutninger, og faktisk en av de beregninger som
Vi vil begynne å vurdere, for oss selv og for deg som
Kvaliteten på et program er bare hvor godt utviklet den er.
Har du gjort minimalt med arbeid er nødvendig for å
få jobben gjort mest raskt, enten i form av
din tid eller i form av datamaskinens kjøretiden?
Hvor mange operasjoner det tar å utføre?
Så kanskje er dette en mulighet for en løkke fordi
så snart jeg begynner å kopiere og lime inn, slik Joseph effektivt
ville begynne å gjøre i et øyeblikk, er du snill for å kaste bort
tid, og du blir dobbelt uttrykksfulle.
>> Men på samme tid, dette er egentlig bare to spesielle
tilfeller, venstre og høyre.
Og mens før, kan jeg ha 10 eller 20 eller flere sokker i
en haug, er det definitivt fornuftig ikke å ha 50 linjer med
kode si sjekk denne sokken, så den neste,
deretter den neste.
Her er det litt mindre opplagt, og jeg ville foreslått
at vi kunne gå begge veier.
Vi kan enten ha som loop, selv om det bare looper
to ganger, eller vi kan ganske enkelt kopiere og lime bare litt
her for å få jobben gjort.
Men dette programmet er buggy, så å si.
Det kan ha noen feil, feil eller hjørne tilfeller, så å
si, at vi virkelig ikke forutse.
Ingenting gikk galt denne gangen, men hva kunne ha gått galt
mens utføring dette programmet?
PUBLIKUM: Du har ikke noen sokker.
>> DAVID MALAN: Så det kan ikke være noen sokker der overhodet.
Så la oss vurdere det hjørnet tilfelle.
Så hvis vi kunne bla tilbake til steg en, så gå en var
bøye seg ned, slik at sjekker ut.
Trinn to, plukke opp sokk, men deretter finne matchende sokk,
identifisere rett.
Vi slags gjort en hel haug med forutsetninger, og dette er,
ærlig, hvorfor programmet noen ganger krasjer.
Hvis du, programmerer, har gjort visse forutsetninger, som
sikkert det kommer til å bli sokker eller sikkert det kommer
å være minne i datamaskinen, sikkert det kommer
å være diskplass igjen på harddisken -
Vel, hvis du gjør disse forutsetningene, og det er ikke,
faktisk virkeligheten, hvem vet noen ganger hva datamaskinens
kommer til å gjøre?
Og noen ganger, når du får den spinnende badeball eller
frossen Windows eller lignende, som er nettopp fordi noen
programmerer forutså ikke de såkalte hjørne tilfeller.
Hva annet kunne ha gått galt i dette programmet?
Ja?
>> PUBLIKUM: Du har ikke en høyre ben og en venstre ben.
DAVID MALAN: Ok, kanskje ikke ha både en høyre ben og en
venstre ben, og så dette programmet ikke kan være universelt
aktuelt.
Andre?
PUBLIKUM: Du kan ha plukket opp en foreldreløs sokk.
DAVID MALAN: Jeg kan ha plukket opp en foreldreløs sokk, så en
ikke-samsvarende sokk som bare har noen søsken fordi jeg har
mistet det, er det revet, er det i vask fortsatt, eller lignende.
Slik at også ikke har virkelig blitt håndtert.
Ja?
PUBLIKUM: Du har kanskje allerede sokker på.
DAVID MALAN: Jeg kan allerede ha sokker på.
Jeg hadde faktisk ikke sjekke.
HVIS du ikke har sokker på, og deretter fortsette å gjøre
linje en og to.
Og det kan skje.
Du sovner med sokker på og lignende, så
det også, en svært rimelig hjørne tilfelle.
Og kanskje en annen?
PUBLIKUM: Sokken er innsiden ut.
DAVID MALAN: Så sokk er innsiden ut, så vi gjorde ingen feil
sjekker, kort sagt.
Vi gjorde ikke sjekke om tilstanden i verden er som vi forventer.
Vi gjorde ikke sjekk hvis vi faktisk funnet det vi leter etter.
>> Og selv om dette er liksom en latterlig eksempel
involverer sokker, på slutten av dagen, er dette nøyaktig det
slags tankesett må du ha når du skriver programmer,
selv i Scratch samt i C, i JavaScript, i PHP,
fordi ellers vil dine programmer fremvise den
tilsvarende at spinning badeball eller bare gi
unøyaktige resultater.
Så mange takk her til våre skriftlærde Joseph.
[Applaus]
>> DAVID MALAN: All right, så hva er, i
Faktisk et dataprogram?
Vel, la oss ta et raskt blikk på en
representant en her.
Så dette er et program skrevet i et språk som heter C. C er
ganske gamle i disse dager, men mange nyere språk er bygget
på toppen av det.
Faktisk, PHP, en av de web-sentriske språk vi vil
bruke mot begrepet slutt, har selv det som kalles en
tolk, et program som er skrevet i C, men mer om det
i mange uker fra nå.
Men dette programmet, og dette er hva det vil si å skrive en
program, om enn en svært enkel en.
Vi har noen ganske kryptisk syntaks her, men du kan
sikkert gjette, selv om du aldri har programmert før, hva
dette programmet gjør.
Faktisk, jeg vet ikke hva printf er, men ut sikkert
maner frem ideen om å skrive ut noe.
Og så ja, er dette programmet slutt kommer til å skrive ut
ordene "Hello, World."
>> Nå, om du har en Mac eller en PC eller en Linux-datamaskin, odds
er, i hvert fall hvis du lastet ned noen fritt
tilgjengelig programvare, kan du ha vært å skrive programmer på
din egen laptop for en stund nå.
På Mac OS, for eksempel, er det dette programmet som heter
Terminal som kommer med en Mac, det er vanligvis i
Verktøy-mappen, og det åpner som regel en svart og
hvitt eller hvitt og svart vindu der du har en
spør hvor du kan skrive kommandoer.
Så dette er faktisk minner om hva datamaskiner
pleide å være før grafisk brukergrensesnitt
grensesnitt, GUI, kom.
Nå, i Windows, har du en lignende mekanisme i form
av ledeteksten.
>> Men hva jeg skal gjøre her er å åpne opp, la oss si,
TextEdit igjen, så det samme programmet vi bruker for
pseudokode et øyeblikk siden, og jeg kommer til å gå videre og
skrive min første program.
Inkluder stdio.h, uansett hva det betyr, int main
ugyldig, uansett hva det betyr, og deretter i midten her,
printf ("Hei, verden."). Og så tett sitat,
lukk paren, semikolon.
Nå skal jeg gå videre og bare trykke Kommando-S. Jeg skal
å gå videre og lagre dette som hallo.c, så konvensjonen i
verden av C-programmering er navnet på filen dot c.
Jeg kommer til å bare sette i John Harvard hjemmekatalog,
her, klikker du Lagre, og nå er jeg kommer til å gå over til denne
terminal-vinduet, som igjen er svart og hvit spørsmål
hvor jeg kan kjøre kommandoer.
>> Jeg kan kjøre programmer ved å skrive navnet deres, ikke av
dobbeltklikke ikoner i vanlig forstand.
Men tingen er om C er at et språk som C første
kommer i denne formen, som heter noe kildekode.
Noe som ser litt ut som engelsk, men er
definitivt mindre som engelsk enn Josefs pseudokode en
øyeblikk siden.
Det er litt mer uforståelige.
Det synes å følge noen mønstre eller regler.
Det faktum at jeg har klammeparentes, semikolon, sitater,
vinkel bukseseler, føles som en datamaskin kom opp med dette
slags språk.
Men hvis jeg går nå, til denne terminalen vinduet, kan jeg kjøre en
kommando som kommer til å konvertere kildekoden er
noe som kalles objektkode.
Det kommer til å konvertere engelsk-lignende syntaks til nuller
og de, de samme slags nuller og enere vi
snakket om onsdag.
Nå kommer jeg til å kjøre en kommando som heter Clang.
Mer om dette i ukene som kommer, men det er et program med
som jeg kan konvertere hallo.c inn en hel haug
av nuller og enere.
>> Nå har jeg kjørt denne kommandoen.
Jeg har kjørt Clang, og så sa jeg kjøre selv på denne filen
kalt hallo.c, som jeg laget for et øyeblikk siden, og
ingenting synes å skje.
Men faktisk, hvis jeg stakk rundt mitt hjem katalog, ville jeg se
at dette stupidly navngitte programmet a.out eksisterer nå.
Dette er bare standardnavn for et program når du skriver i
C. Vi kan overstyre dette til slutt, men a.out er
Navnet på programmet jeg nettopp konvertert til nuller og enere.
Og nå som det er nuller og enere, min Mac, i dette tilfellet, eller
Windows-PC, kan forstå de bitene, de
nuller og enere.
Og så når jeg trykker på Enter, ser jeg "Hei, verden!"
>> Men det er litt buggy.
Jeg skjønte ikke helt si "Hei, verden: air: - jharvard." Air er
navnet på datamaskinen min.
Jharvard er navnet på kontoen, så hva gjorde jeg klart
utelate fra programmet?
En slags linjeskift.
Jeg slo ikke tilsvarende Enter eller linjeskift,
og dette er, igjen, testament til det faktum at datamaskiner kan
bare gjøre det du ber dem om å gjøre.
Og det faktum at jeg ikke fortelle datamaskinen flytte
markøren til neste linje -
vel, det er sikkert ikke kommer til å bare gjøre det
dristet for meg.
Så hvis jeg går tilbake til mitt program, og jeg sier \ n -
Så \ n, som vi vil snart se, er veien for
representerer rare ting som nye linje tegn, ting
som ellers ville være resultatet av
trykke Enter.
Men for nå, bare vet at å trykke Enter ville
bare gjøre vår kode ser merkelig, så verden besluttet, vet du
hva, å holde ting penere, for å holde det på en linje, la oss
bare si \ n representerer en ny linje.
La meg resave filen min, gå tilbake til terminalen vinduet, og
re-run a.out, Enter.
Fortsatt buggy, men hvorfor?
>> PUBLIKUM: [uhørlig]
DAVID MALAN: Ja, så jeg trenger å rekompilere det.
Så for å kompilere et program betyr bare konvertere den fra kilden
kode for å objekt kode, kildekode til nuller og enere.
Nå har det faktum at jeg traff Lagre i denne TextEdit no
peiling på disse nuller og enere fordi jeg må først
fortelle Clang hei, jeg har endret disse linjer med kode,
kildekode.
Du må regenerere a.out.
Ingenting ser ut til å ha skjedd, men i en datamaskin,
på en kommandolinje, så å si, når ingenting skjer,
som vanligvis betyr alt er vel.
Når noe skjer, betyr det
du søl opp, generelt.
>> Så la oss nå gå til a.out, og faktisk nå har jeg "Hei,
verden. "
Og nå, hva om disse nuller og enere?
Hvor, faktisk er de?
Vel, jeg kan egentlig ikke bare slags rote rundt svært
effektivt.
La meg åpne opp TextEdit.
Her er a.out.
La meg gå videre og åpne denne, og dette er tydeligvis hva min
Programmet ser ut.
Så jeg har åpnet, ikke hallo.c, men a.out.
Men dette er faktisk ikke hva mitt program egentlig er.
Åpenbart er dette en slags alfabetiske tegn.
Jeg ser ingen nuller og enere, men dette er
fordi a.out er et program.
Nuller og enere - men TextEdit, som navnet antyder, er det
akkurat som Notisblokk i Windows, er bare en tekst editor, så det er
forvirrende alle disse nuller og enere som
om de var, hva?
ASCII-tegn.
>> Så husker på onsdag, vi bare kom opp med denne
vilkårlig kartlegging av tall, eller biter, til bokstavene i
alfabet og tegnsetting symboler og lignende.
Så TextEdit, at det er en tekst editor er mistolking
disse mønstrene av nuller og enere som er ment å være
utskrift ord, som "Hei, verden." Det er å vise dem
som ASCII, og det er derfor det ser litt rotete.
Nå er det noen hint av riktigheten i her.
Legg merke til om jeg fremheve, det er et snev av faktisk "Hei,
verden ", så et sted i dette programmet er
setningen jeg skrev.
Men la oss gå videre og ser nå med et annet program.
Dette er ikke en vi vil bruke så ofte, men det kommer også med
en Mac og vil være inne i CS50 apparatet.
La meg gå videre og åpne med et program som heter XXD.
>> Tilbake i dag, var de fleste programmer som heter ganske kryptisk,
og så trenden fortsetter.
Men-b betyr spytte dette programmet ut binært.
Ikke kjøre den.
Vise det til meg som nuller og enere, og dette er C
programmere vi bare skrev.
Nå, jeg, som et menneske her, jeg ærlig har ingen anelse om hva
disse ulike mønstre av nuller og enere representerer.
Tilbake i dag, jeg, med mine hullkort eller lignende, ville
faktisk nødt til å slå opp hva disse ulike mønstre av
01111000, faktisk representerer.
Eller verre, ville jeg trenger å gjøre punching eller etablering
av disse mønstrene av nuller og enere.
Men for nå, ta på tro at en CPU, Intel inne, så
å snakke, på innsiden av alle våre datamaskiner i disse dager, vet
hvordan man skal tolke disse nuller og enere.
Og noen nuller og enere betyr print.
Noen nuller og enere betyr spille av en lyd.
Noen nuller og enere betyr ta brukerens input fra et tastatur.
Det er alle slags forskjellige mønstre, men vi heldigvis,
som mennesker, bare generelt trenger å bekymre deg programmering på
dette ganske høyere nivå.
Og i andre CS klasser kan du fordype deg ned dypere og se
på ting som de nuller og enere, eller enda
andre ting fortsatt.
>> Så la oss nå konvertere dette.
La oss bevege seg svært raskt bort fra C og flytte til noe
litt mer trøstende, litt mer spennende ved at
vi kan få tilbake våre animasjoner og lyder og sånn
klart har rømt oss i denne
ganske primitive grensesnitt.
Så denne samme programmet i C kan representeres nå i denne
programmeringsspråk kalt Scratch som følger.
Dette tilsvarer dette hello world program skrevet i
dette puslespillet stykke stil språk kalt Scratch.
Så la meg gå videre og åpne opp dette veldig programmet.
Det er igjen kalt Scratch.
Det er fritt tilgjengelig, og dette er det samme vi
startet i dag på.
>> Så dette her er Scratch, og det er brutt opp i noen
forskjellige stykker.
På toppen til høyre, har vi den såkalte scenen, og
faktisk, det er der cookies
utført bare litt siden.
Og på det stadiet er ting som kalles sprites, tegn eller
gjenstander eller enheter.
Det spiller egentlig ingen rolle hvor du tenker på dem, men de
er programmerbare, bevegelige ting, og i dette tilfellet er dette
program som vår student skrev har et par pepperkaker
cookies, et par sirkulære informasjonskapsler, en hel haug av
hjerter, en hel haug av briller.
På grunn av dette, er han eller hun i stand til å programmere hver av dem
individuelle tegn for seg.
>> Nå hva betyr det å programmere disse tegnene?
Vel, la meg gå videre og klikk på denne venstre cookie
og blar over til venstre her.
I øvre venstre av skjermen min er nå
såkalte skript området.
Dette er liksom en blank tavle, i utgangspunktet, hvorpå jeg kan
dra og slipp brikkene som, ærlig,
nøyaktig hva de sier.
På toppen av denne bunken av brikkene er ordet
Når Grønt Flagg Clicked, og hvis du ikke merke før,
måten jeg startet som cookie sangen ble klikke, bokstavelig talt,
et grønt flagg.
Slik at puslespillbit øverst til venstre der betyr når
menneskelige klikk den grønne flagg, fortsatte å gjøre
følgende ting.
>> Nå, hva gjorde de cookie fortsette å gjøre?
Jeg vet egentlig ikke hvordan du skal tolke dette ennå, men det
cookie tilsynelatende satt sin groove til null, så det ventet
tre sekunder, deretter skiftet gruppe til en, så det
ventet et sekund, så det skiftet
groove tilbake til en.
Og så dette ser faktisk ut som en bit av en bug, bør ikke
må endre sin groove igjen og igjen med mindre det er
endres andre steder, men disse trinnene er det som er
dikterer atferden til denne spesielle cookie.
Så la oss faktisk bla tilbake og ikke se på noe
ganske så komplisert ennå.
La meg gå videre og gå til File, New,
og få et rent rulleblad.
>> Så nå, jeg faktisk har en tom script område, en tom scene,
med vår standard sprite Scratch, og øverst til venstre
på skjermen min har jeg pallen av alle sine
tilgjengelige brikkene.
Og vi vil ikke gå gjennom nesten at mange av disse tingene
i dag fordi, igjen, de fleste er selvforklarende, men vi vil
forsøker å kategorisere dem og påpeke likhetene
med disse fremtidige språk som vi vil dykke.
Og øverst til venstre her er den første Når Grønt Flagg Clicked,
så la meg dra dette over her, zoome ut litt.
Og hvis jeg klikker på den grønne flagg, skjer det ingenting egentlig fordi
Jeg har ikke festet noen logikk, noen uttalelse så å si, til
at grønt flagg, så la meg gå opp til
kategoriene over her.
Jeg er for tiden i Control kategorien.
Jeg istedenfor kommer til å gå ned til Looks kategori, og
det er en hel haug med ting her som sier Say,
Tenk, endre farge, Switch Costume.
>> Så du kan gjøre dumme ting med kostymer og
lyder og lignende.
La meg gå videre og bare si si, og nå merker som jeg drar
og slippe dette puslespillet stykke, det kommer til å ønske å klinke
inn i den tilsvarende form.
Så når jeg går videre og gi slipp på musen min, låse de
sammen, og nå hvis jeg går over her og klikk på den grønne flagg,
katten sier faktisk hei fordi det er hva som er inni
av denne hvite boksen.
Vi vil snart se at denne hvite boksen er det som kalles en
argument, eller en parameter.
Det er en måte for å endre virkemåten av, i dette tilfellet, en
puslespill brikke, men hvis jeg ønsker å si nøyaktig hva jeg sa
før, si hei, verden, kan jeg nå gå tilbake over her,
Klikk play, og "Hello, World" er hva som er sagt.
>> Så vi er bokstavelig talt programmering nå.
Det er ikke alle som overbevisende av et program, men minst
det er litt mer overbevisende enn noe som ser, på
første øyekast, som dette.
Og vi kan raskt få enda mer uttrykksfulle
fordi i Scratch, som i andre språk, er det all
slags setninger, ikke bare si eller skrive noe, men
du kan gjøre ting som venter, som vi nettopp så med
informasjonskapselen, noen flere sekunder.
Du kan spille av lyder i miljøet av Scratch bare
som du kan i et vanlig dataprogram spille lyd.
Du kan sjekke det som kalles boolske uttrykk.
Så nå, la oss begynne å legge til vår verktøykasse noen terminologi
som relaterer faktisk med det eksemplaret som Josef og jeg gjorde
her med sokker.
Så uttalelser er bare faktaopplysninger.
Gjør dette.
Et direktiv for sprite, eller meg menneskelig, å gjøre noe.
Et boolsk uttrykk er noe som har en verdi, en
såkalte sannheten verdi, det er enten en null eller en, falske eller
sant, av eller på, eller ingen ja.
Spiller egentlig ingen rolle hvordan du tenker på dette, men det er en
binær tilstand.
Som Nate diskutert i onsdagens video, to
forskjellige ting.
>> Så i Scratch, boolske uttrykk tilfeldigvis se
som disse blå gjenstander her, og i dette tilfellet, er spørsmålet
mark innebærer at du spør et spørsmål.
Er katten, eller sprite, rørende musepekeren?
Så dette er bare ett eksempel på en Scratch blokk som kommer
å tillate oss å sjekke ja eller nei, er musen berøre
sprite på skjermen?
Og dette kan være nyttig hvis du faktisk ønsker å gjøre ting
med musen.
I tillegg til boolske uttrykk, har vi ting
som er musen ned, slik at du kan oppdage den slags
spørsmålet også.
Vi kan gjøre matematikk hvis du faktisk ønsker, og det er
faktisk mer overbevisende bruksområder for denne enn bare ren av
aritmetikk, som vi skal se.
Pseudo tilfeldigheten og gjør programmet ser ut til å tenke
eller oppfører seg annerledes basert på noen tilsynelatende tilfeldige verdier,
og da har vi ting som boolske uttrykk som AND.
Så hvis du faktisk ønsker å sjekke to verdier, vil vi se på
Skrap at vi faktisk kan teste om dette er
sant, og dette er sant.
For eksempel, i tilfelle av mine sokker, jeg kunne har på
Helt til slutt stilte spørsmålet om venstre sokk er på og rett sokk
er på, sluttet.
Du er ferdig for dagen, så det ville være en
mulighet for det.
>> Så la oss gå videre og prøve å sette noen av disse sammen
og gå inn i et par eksempler mer
overbevisende enn dette.
Så la meg gå videre her og åpne opp noen av eksemplene
som alltid vil være på kursets hjemmeside også, og
åpne opp hello2.
Så i hello2 her har vi et program som gjør noen
ting, men det er ikke å gjøre det så effektivt som vi kan.
Så her står det "Hei, verden" i ett sekund, og deretter venter
et sekund.
Og gjør da det igjen, og deretter gjør det igjen.
Så hvis jeg klikker på den grønne flagget, sier Scratch "Hello, world.
Hei, verden.
Hei, verden. "Og dette er åpenbart kandidat nå
forbedring.
>> Hva er marginal forbedring, forhåpentligvis, kan vi
nå gjøre hvis Scratch støtter konseptet?
En slags loop.
En slags repetisjon, nå, ville være hyggelig, så la meg
faktisk prøve det.
La meg faktisk gå og flytte denne.
Så varsel kan koble blokker like enkelt som du kan legge til
feste dem.
La meg gå under kontroll, bla nedover her, og ja,
Det er dette puslespillet stykke her, Gjenta og Forever and
Alltid If.
Så det er en rekke måter å uttrykke looping konstruksjoner
i Scratch.
Den jeg sannsynligvis vil her er ikke alltid fordi jeg bare
ønsker at dette skal skje tre ganger, men sannsynligvis Gjenta.
Så la meg dra Gjenta over her, dra og slipp den, og
nå i stedet for å si "Hei, verden" tre ganger,
la meg dra dette puslespillet stykke her.
Og selv om det ikke synes å passe, er programmet smart
nok til å innse det vil vokse til å fylle, så det er det
figurer som materie og ikke den absolutte størrelse.
La meg endre repetisjon til tre, og nå la meg gå
fremover og dra vente ett sekund i der også.
Det kommer til å knipse i så vel, og så nå skal jeg dra
disse gutta over her og bare kaste dem bort fordi jeg
trenger dem ikke lenger.
La meg zoome ut og klikk på den grønne flagget nå, og vi har
samme program, men som jeg spådde før, bedre
designet fordi du kan forestille deg hvor ille dette programmet
ville komme, sikkert estetisk, hvis du måtte
begynner å kopiere og lime inn, kopiere og lime inn, eller
dra og slippe de samme darn ting igjen og igjen.
>> Nå, bare si ting på skjermen, skrive til
skjermen, egentlig alt ikke så spennende, så la oss åpne en
tredje avviket her.
Og nå, som du ser, vil dette raskt bli irriterende -
[MEOW]
DAVID MALAN: - men det er også litt søt.
[MEOW]
DAVID MALAN: Ok, så bedre, og vi kan sikkert bruke det
samme overgangen chunking dette opp i en loop
struktur, men la oss gjøre det mer interessant likevel.
>> La meg gå videre og åpne opp kvart varians her, hvor jeg
ta ting et skritt videre.
Så ifølge dette, dum om dette er først
øyekast, er hva dette programmet kommer til å gjøre?
Det kommer til å meow gang.
Hvorfor?
Vel, man er, så vidt jeg vet, alltid mindre enn to.
Det er ingen forestilling om tilfeldigheter her.
Jeg har bokstavelig hardkodet en og to, men dette er et
eksempel nå for å faktisk bruke en boolsk uttrykk.
Mye som som Josef gjorde i pseudokode hans innrykket IF
du finne matchende sokker gjør deretter følgende, her har vi
et uttrykk hvis man er mindre enn to DERETTER -
og faktisk enda vi har en liten bit av innrykk,
hvor den lilla er litt innrykket til høyre -
Da er du kommer til å spille av lyden meow.
Nå, i dette tilfellet, er at man alltid er mindre enn to, så dette
er slag av en sløsing med en betingelse.
Men vi vil være i stand til, som vi skal se, å plugge andre ting i
disse plassholderne der en og to nå er.
Så la oss nå gå videre til eksempel fem av disse flere
hellos og se på hva dette programmet kommer til å gjøre.
>> Så nå, i en engelsk setning, hvordan fungerer dette
Programmet oppfører seg?
PUBLIKUM: meows halve tiden.
DAVID MALAN: Meow er halvparten av tiden, så dette er en måte å
formidle en veldig enkel idé.
Selv om vi måtte bruke noen ulikheter her
i noen tall, er dette egentlig bare en programmatical
måte, en presis måte, sier hvis mynten kommer opp hoder, går
fremover og meow.
Eller omvendt, hvis mynten kommer opp haler, ikke meow.
Og i dette tilfellet, hvordan vi uttrykker det?
Vi vil plukke et tilfeldig tall fra 1 til 10, og hvis det
tallet er mindre enn 6, gå videre og meow.
Og hvordan kom dette her?
Vel igjen, merker bare å dra og slippe og
ting låses på plass.
>> Så la oss nå se om denne tilfeldigheten fungerer.
La meg gå videre og klikk på den grønne flagg.
[MEOW]
DAVID MALAN: Ok.
[MEOW]
DAVID MALAN: Ok.
Ok, bra, så vi fikk hoder, hoder, haler effektivt.
Haler.
[MEOW]
DAVID MALAN: Heads.
[MEOW]
DAVID MALAN: Excellent.
Det er alltid vanskelig når bare statistisk du får en dårlig
kjøre, og det er alle hoder, og programmet faktisk ikke
fungere som du ville håpe.
Men denne gangen, det virket, og vi synes å ha, hvis vi gjorde
dette et uendelig antall ganger, 50% sjanser.
Nå igjen, ikke alle som interessant, bare gjør katter
meow, så la oss se om vi ikke kan fremme dette litt lenger
her i versjon seks.
Så nå har vi virkelig irriterende versjon -
[Meows med noen sekunders]
DAVID MALAN: - og dette er det som kalles, generelt, som en
uendelig loop.
>> Så uendelig loop i dette tilfellet føler seg dårlig.
Det er definitivt kommer til å begynne å høres dårlig, og likevel uendelig
løkker er ikke alltid dårlig.
Kan du tenke deg konteksten dataprogrammer der du vil
faktisk ønsker en uendelig loop?
Ja?
PUBLIKUM: Når du vil sjekke en tilstand.
DAVID MALAN: Ok, når du vil fortsette å se en tilstand?
Som hva da?
PUBLIKUM: [uhørlig]
DAVID MALAN: Ok, bra, så hvis du hadde noen program, noen
slags hjemme automasjon ting, der du vil hele tiden
skjermen er noe tilfelle.
Er lysene på?
Er lysene på fordi kanskje du har en timer, og
du vil ha dem til å gå av, må du kanskje gjøre noe
igjen og igjen.
Og faktisk, snakker om tidtakere, som har noen av dere
klokker på datamaskinen eller digitale klokker, er at en
uendelig loop.
Det fortsetter å oppdatere tid fordi det er stadig
sjekke og sjekke og sjekke har tid endret,
og hvis så, oh, min gud.
Klokken er endelig endret.
Den trenger vise at verdi for deg.
Så mens de fleste av tiden uendelige løkker er en feil,
eller minst en dårlig design beslutning, noen ganger gjør de
har sin verdi.
>> Vel, la oss avansere videre her hello7.
Så nå vil programmet bli litt mer interaktiv.
La meg zoome inn her, og igjen, dette er hva som er fint
om Scratch.
Og vi vil bruke den til å være klar, Scratch, bare i dag og i
neste ukes problem satt.
Men på mandag, dykke vi inn C. I dette programmet her, det gjør det,
evig, følgende.
HVIS berøre musepekeren - nå, hvem
sammenheng her?
Vel, og merker at hvem som velges her nede på bunnen
høyre er katten, en sprite, så disse skriptene, dette
Programmet gjelder for ham spesielt.
Så hvis det katt berører musepekeren, så det kommer
å spille dette ned og vent to sekunder, og
Deretter gjentar ad nauseum.
>> Så la oss gå videre og trykke play.
Ingenting skjer, men hvis jeg ønsker å pet
cat nå, kan jeg bare.
[MEOW]
DAVID MALAN: Adorable.
[MEOW]
DAVID MALAN: Okay, mindre irriterende, men får også kjedelig,
så la oss gå videre og se om vi ikke kan injisere
litt mer logikk.
Det var f.eks sju.
>> Her i eksempel åtte, skal vi
innføre en ELSE tilstand.
Så mye som en bokstavelig veiskille, der du kan gå
venstre, eller du kan gå rett, en tilstand i et programmeringsspråk
språk som Scratch, eller som vi vil se C, kan tillate deg å
gå i en eller annen retning via en IF ELSE konstruere.
Så bokstavelig talt, IF berøre musepekeren, dette
vil spille noen lyd, ELSE det kommer til å spille denne andre
lyd, meow.
Nå, hvis du kan slutte fra navnet på disse lydene, kan du
sikkert gjette hva dette programmet er ment å trylle frem
ideen.
Denne katten er meowing lykkelig.
[MEOW]
DAVID MALAN: Lykkelig, men ikke
ganske liker å bli berørt.
[Brøler]
DAVID MALAN: Så nå har vi en katt som vil kjefte på deg.
>> Greit, vel, en siste eksempel med katter her, og
la oss åpne versjonen ni av dette her.
Så nå har vi den nest mest irriterende lyd som jeg kunne
finne, så vi har en hvalross eller sjø løve her som kommer til å
gjør følgende.
[SEAL BARK]
DAVID MALAN: Ok, så dette vil gå på før du finne ut hvordan
Dette programmet fungerer.
Så denne gangen har dette dyret to skript, og hva som er
interessant her er at disse skriptene kommer til å utføre
parallelt.
Så fordi de begge starter med en grønn flagg klikket,
det er som å gå som dette, og begge programmene å kjøre det
gang selv om de er looping evig.
Så i den øverste script, jeg har noen logikk.
Hvilke funksjoner gir det der oppe?
[SEAL BARK]
PUBLIKUM: [uhørlig]
DAVID MALAN: Hvis det er hva?
[SEAL BARK]
PUBLIKUM: Hvis dempet til null, det kommer til å fortsette å spille
høres. [SEAL BARK]
DAVID MALAN: Ok, bra.
Så hvis dempet, uansett hva dette er, dette oransje ting er null,
Deretter spille Sjøløve lyd og tenke "Åh,
hei, "for to sekunder.
Nå vet jeg ikke hva dempet er, men null maner opp
ideen om falsk eller av.
Så hvis dempet er falsk, så hvis ikke er dempet,
fortsette å spille lyden.
Greit, vel, hvordan vi deaktivere denne tingen?
>> Vel, la oss se på den andre script der nede.
Det andre skriptet sier satt dempet til null.
Legg merke til det er også oransje, så hva Scratch gjør er det farger
blokker i samme nyanse hvis det er liksom
av logisk sammenheng.
Så akkurat som dempet opp toppen var oransje, så dempet ned her
nevnt i oransje blokk.
Men dette er en variabel oppdrag, så akkurat som i
algebra, har du x og y og z, i programmering du har
variabler, men de er generelt -
la oss stoppe et øyeblikk og figur hvordan
å stoppe dette bjeffing.
Hvordan gjør jeg dette?
[SEAL BARK]
DAVID MALAN: Ok.
Det stoppet. Okay.
>> Så akkurat som i algebra du har variablene x, y og z, men i
programmering, ha variabler som x, y, og z er vanligvis
mislikt fordi de ikke er i det hele tatt uttrykksfulle.
De har ingen semantiske betydning overhodet, så i de fleste
programmeringsspråk, kan variabler ha full
fledged navn eller ord eller setninger, liker dempet, for å si
hva de gjør.
Så denne andre script også lyttet alltid, og det sa
Hvis nøkkelen, tast på tastaturet Space, er
trykket, spørsmålstegn.
Så det er en tilstand med en boolsk uttrykk som er
kommer til å svare på et spørsmål enten sannferdig eller falsk,
da har jeg på innsiden av det hvis plassen trykkes OG
HVIS dempet er null, sett dempet til en, andre satt dempet til null.
Så denne andre veiskille, og legg merke til hvordan jeg har
nestede to hvis betingelser, er en metode for å kontrollere er
Space Bar trykket fordi hvis så, jeg enten ønsker å gå denne
måte eller på den måten.
Og hvordan invertere jeg verdien av dempet?
Jeg må sjekke er det null?
Hvis ja, gjør det en, andre gjør det null å derfor veksle
sine to stater.
>> All right, så vi har da noen av disse grunnleggende
konstruksjoner.
Vi har boolske uttrykk, og innse, også, disse er
ikke alle som ukjente.
Faktisk, her er en rask skjermbilde av Harvard kursets CS50
shopping verktøy, og hvilken som helst nettside der ute som har avkrysningsbokser
og drop downs har virkelig, hele tiden, brukt
Boolske uttrykk.
I dette tilfellet her, hvis du klikker på boksen ved siden av
kurs større enn eller lik 4,5, eller den samme ved siden
fakultetet, du angi en boolsk uttrykk.
Vis meg kurs som det uttrykket er sant.
Eller til høyre, ikke er i strid med kurs jeg er
tar, hvis det er merket av, så ja, du vil sjekke
den tilstanden, annet du ønsker å ignorere det.
Så boolske uttrykk er liksom alt rundt, men når
vi setter dem i forhold, enten IF forhold, IF
Andens, eller vi kan selv simulere dypere
nivåer, IF ELSE IF ELSE -
så det er liksom et trefoldig tilstand.
Du kan gå på denne måten eller denne måten eller på denne måten.
Vi kan holde hekkende ting å gå i forskjellige retninger.
>> Så Scratch har disse loopene, som alltid.
Den har disse funksjonene som Repeat 10, noen
endelig antall ganger.
Vi har muligheten på å konfigurere variabler, så i dette tilfellet
Jeg har erklært, for eksempel en variabel kalt sokker.
Jeg har initialisert til 0, og det er enda en retning
vi kunne ha tatt opp her med Joseph, der kanskje jeg
bare holde rede på hvor mange sokker jeg har på og avslutte
programmet når den variabelen verdi er 2.
Det ville være en annen måte å slags generalisere at
problemet og gjør noe igjen og igjen.
Vel, la oss gå videre og introduserer nå et par nye ting.
Så de av dere med tidligere programing erfaring vil
vet at mange språk har matriser, eller vektorer eller
lister, og faktisk har Scratch noe som dette, også.
Så la oss se om vi ikke kan ta ting til neste nivå her.
Hvis jeg har muligheten nå, med disse brikkene til
legge til noe, som et ord eller tall, til en variabel, kan jeg
begynne å samle ting.
Og dette er faktisk ganske apropos for ting som spill,
rollespill der du er slags vandre rundt
noen fantasiverden samle ting, plukke opp ting,
tjene poeng, eller lignende.
Du ønsker kanskje å holde styr på en slags inventar, og
faktisk, det er hva en av våre tidligere studenter her gjorde med
noe som kalles Fruitcraft RPG.
>> Så la meg gå videre og åpne opp denne tingen her, og i
Fruitcraft, har vi denne verden opp på toppen.
Så la meg gå videre og klikk på den grønne flagg.
Varsel øverst til venstre er en slags inventar.
Det er implementert i Scratch som det vi kaller en matrise eller
en liste, og nå har vi denne lille animasjonen.
Så akkurat som vi startet tidligere med denne informasjonskapselen kjærlighetshistorie,
og vi avanserte til katter og sjøløver, nå kan vi ha
ting som er enda mer interaktiv.
Og denne lille blå fyren, kan jeg begynne å flytte rundt hans
lite hjemme her.
Så det ser ut som han har en avkjøring her nede, så jeg bruker
piltastene, opp, ned, venstre høyre.
Og nå er jeg ute, så la det jeg har her.
Ser ut som en appelsin, og faktisk, så snart jeg berører
orange, blir det plopped i lagerbeholdningen min.
Hvis jeg går over her til kirsebær, nå har jeg noe
annet i utvalget mitt.
Og dette er alt fint og søt, men tenk på hvor nå, dette
er implementert.
Vel, vi har denne oppfatningen av en liste, og det er tilsynelatende en
puslespill brikke som du bare si hva du vil legge til det, legger
orange, legge kirsebær.
Nå er det denne lille blå fyren gjør?
Vel, han er en sprite.
Og antagelig den oransje og kirsebær -
de selv var separate sprites.
Og bruker forholdene i boolske uttrykk, de
student var trolig i stand til å uttrykke IF blå fyren er
rørende kirsebær deretter legge ordet kirsebær til hans
inventar, og deretter også skjule kirsebær sprite.
Så under panseret, er det trolig fortsatt et kirsebær
sprite der.
Vi har bare fortalt det til å bli effektivt usynlig.
>> Nå, hvis jeg fortsett å gå over her, kan vi også gjøre dette
proksimale ting, hvor jeg kan gå og lese skiltet.
Så hvis blå fyr rørende tegn, kan vi ha denne Say blokk
akkurat som katten snakket til oss i ord, hallo, tidligere, "Got
litt frukt?
Bringe den til frukt sted. "All right, så nå, tilsynelatende,
Jeg har mine retninger.
Jeg kan gå over her til frukt sted, stille meg opp
med døren.
Nå er jeg her.
Jeg kan gå opp til mannen på telleren.
Han oppdager at jeg er nær ham, så det trenger ikke å være
ganske likt rørende, og jeg har vunnet spillet.
Så det har vi Fruitcraft RPG.
>> Så vi kan gjøre ting enda mer avanserte enn dette.
Vi kan legge til lyder.
Vi kan legge til pseudo tilfeldigheter.
Vi kan legge til kompleksitet.
La meg gå videre her, og i stedet gjøre dette selv,
la meg vise deg en av de mer avanserte innleveringer
vi fikk i fjor fra et visst noen som heter Blake.
Kan vi ha en frivillig som er behagelig vises på
kamera og er opp for å spille et spill?
Hva med der?
Kom opp.
All right, så spillet som du nettopp har uvitende
frivillig å spille -
[Applaus]
DAVID MALAN: - er noe fra yesteryear kalles
"Frogger". Hva er ditt navn?
Renda: Renda.
DAVID MALAN: Redna?
Renda: Det er som Brenda med en b.
DAVID MALAN: Ok, Renda.
David.
Hyggelig å treffe deg.
>> Så her i "Frogger", og hvis vi kunne øke volumet bare
litt, er du denne lille
grønn frosk på bunnen.
Du kan bruke venstre, høyre, opp og ned, og målet ditt er å
krysse gata, krysse elven, og berør lilje pads
øverst.
Aw.
En mer t -
redo, ok?
La oss hit stopp.
Ingen så det.
[Applaus]
DAVID MALAN: Yeah.
Veldig godt gjort.
Utmerket, takk.
>> Slik at det var Frogger. Nå som du vet hva du har
fått dere inn, en mer frivillig for en annen
Spillet presentert av en annen student.
Du ønsker å komme på opp?
Hva heter du?
RICHARD: Richard.
DAVID MALAN: Richard.
Greit, Richard, kom opp.
[Applaus]
DAVID MALAN: Du har noe som vil høres
kjent snart, så her er dine instruksjoner.
Så i et øyeblikk, er noen brikkene kommer til å bla opp
fra skjermen som ser enten venstre
eller rett opp eller ned.
Du kommer til å måtte treffe piltastene på en slik måte
at det tilsvarer de brikkene kø med
plassholderne på toppen.
Så når du ser en pil venstre, og det er på linje med den venstre
pil traff den venstre pilen.
Du kan begynne.
[MUSIC - "sterkere" Kayne West]
DAVID MALAN: All right, stor applaus for Richard.
[Applaus]
DAVID MALAN: Veldig godt gjort.
Takk.
[Applaus]
>> DAVID MALAN: Så moro og, tilsynelatende, liksom
skremmende som det kan være å implementere noe som
tilsynelatende sofistikert som dette, innser at studenten
ikke satt ut og bare skrive alt dette på en gang.
Snarere kan du bryte ned et problem som tilsynelatende komplekse
som dette i mye mindre biter, og også dette er
kommer til å bli et tema.
Det verste du kan gjøre i å skrive et program i de fleste helst
språket er å sitte ned, få virkelig begeistret, skriver
Hele greia, og så bare håpe at det fungerer ved
gang du er ferdig med å skrive.
Snarere prosessen med programmering bør generelt
være svært bevisst, preget av gjentakelser, der du bare
satt veldig små skritt for dere selv, bite-size stykker
vil du bite av, og slik at du har disse forstanden
sjekker, små milepæler du kan møtes.
Og så kan du bygge på toppen av dem å skape mer
sofistikerte ting fortsatt.
>> Så for eksempel, hvordan kunne vi gå om
implementere et spill som dette?
Vel, ærlig, ville jeg absolutt starte med bare
støtter én tast av gangen.
La oss bare implementere støtte for venstre pilen.
Slik at studenten måtte liksom lage i Photoshop, eller i
Klø seg selv ved hjelp av den lille grafisk editor, en
piltasten som ser ut som den på toppen igjen der, bare
den grå plassholder.
Da studenten måtte finne ut hva x, y koordinere til
si det, hvor du skal sette den i vinduet.
0, 0 er her oppe, så du må finne ut hvor mange
piksler eller punkter, for å oppveie at pil fra
toppen av skjermen.
Og deretter en gang det er på plass, gjør ikke programmet faktisk
gjøre noe ennå, så du må deretter en andre sprite, for
eksempel en grønn pil som også peker til venstre, og du
Deretter må du begynne å skrive noen skript for det.
>> Og du merker kanskje at disse tingene begynte å komme på
ulike hastigheter, og fargene var i forskjellige
steder, og det er fordi studenten brukte en bit av
pseudo tilfeldigheter.
Og ved pseudo tilfeldigheter, jeg mener bare plukke et tall
mellom noe og noe fordi du kan
begynne å kartlegge ting, som hvis tallet er mellom ett og
fem, vel, la oss gjøre ting grønt.
Hvis det er mellom 6 og 10, la oss gjøre det puslespillbit
rødt i stedet.
Så lenge du har en måte å generere noen form for
tilfeldigheten, kan du ta avgjørelser basert på det
tilfeldigheter.
Og jeg fortsetter å si pseudo tilfeldig fordi det er en
litt skitten hemmelighet.
Datamaskiner kan ikke komme opp med tilfeldige tall.
De kan bare gjøre som de får beskjed fordi
de er menneskeskapte enheter.
De kan ikke bare gjette et tall som vi mennesker
føler at vi kan.
En datamaskin har å gjøre noe matematisk å trylle opp
illusjon av matematisk nummer, noen ganger med
gjeldende dag av tid som en inngang til å finne ut hva
for å gå tilbake, men mer om det en annen gang.
For nå, bare vet at vi kan generere pseudo tilfeldigheter.
>> Så når jeg har muligheten til venstre pilen for å starte
vises til forskjellige tider og ved forskjellige hastigheter, da
Jeg kan gå tilbake og legge noen av disse hvis forholdene.
HVIS dette sprite berører den andre, og pil venstre
har trykket -
så tre forhold i denne saken.
Jeg kan bruke den og blokkere kanskje, i så fall -
SÅ jeg ønsker å gå videre og øke poengsummen.
Og på toppen, vi har en score, vi har Awesome,
Cool, God og Boo.
Så det er tydeligvis fem variabler som denne studenten
brukes til å holde styr på disse ulike beregninger.
Så kort sagt, er sluttresultatet fantastisk.
Det er morsomt, det er gøy å spille, er det engasjerende, men dette er ikke
der studenten begynte.
Han eller hun begynte på en mye mindre sett med trinn.
>> Så hva er noen andre byggesteiner som vi kan
veve inn i disse programmene?
Vel, det er denne andre begrep i de fleste språk,
Skrap blant dem, kjent som tråder.
Så en datamaskin kan faktisk ikke gjøre flere ting på en
tid, i det minste ikke vanligvis.
Snarere, har en datamaskin vanligvis bare en CPU, og selv
skjønt datamaskiner er super rask og kan, derfor,
skape illusjonen av å gjøre flere ting på en gang -
sjekke e-posten din, få en umiddelbar
melding, skrive ut et dokument -
egentlig er en datamaskin bare hoppe fra utskrift til IMing
til e-post, tilbake og tilbake og frem og tilbake så fort at vi
langsomme tenkende mennesker bare ikke innse at det er faktisk
kjører disse programmene litt om gangen.
Nå, dette er litt av en hvit løgn i disse dager fordi, i dag,
mange våre datamaskiner er det som kalles multi-core, så du
har en CPU, men flere kjerner, noe som er ganske like
ha flere prosessorer.
>> Og så noen ganger kan datamaskiner virkelig gjøre flere ting
gangen, men generelt innenfor et program, programmer
stole på disse tingene kalles tråder.
Så en tråd er liksom som en miniatyr program som kan
eksistere sammen med en annen miniatyr program og kan kjøre
parallelt, eller i det minste kan kjøre under illusjonen om at
de kjører samtidig.
Så Scratch støtter disse tingene kalles tråder.
Du kan ha flere skript som utfører på en gang, akkurat som vi
gjorde med sjøløver og dette gir oss mulighet til faktisk
deretter har samspill mellom disse sprites.
La meg gå videre her og trekke opp, la oss si, tråder, og
spille dette som følger.
Vi har to sprites, hver av dem vi vil se
har bare ett skript.
Og du merker det synes å være noen intelligens i
katt i dette fordi han får nærmere -
[Brøler]
DAVID MALAN: - og nærmere den lille fuglen.
>> Så hvordan er fuglen fløyet?
Vel, la oss ta en titt på fuglen først.
Fuglen script sa når den grønne flagget er klikket, gå til x
lik negative 115 og y er lik 150.
Så jeg bare funnet ut en tilfeldig sted hvor jeg ville
fugl å starte, og jeg bare plopped ham der som standard.
Så Alltid IF ikke berøre katt, så dette er en annen
slags looping konstruksjon, men samme idé, gjøre dette igjen og
igjen og igjen.
Så lenge du ikke berører katten, flytte tre trinn, og
hvis du er på kanten, sprett, hvor det er liksom en
refleksjon i biljard forstand.
Så det er slik fuglen beveger seg rundt slags
tilsynelatende tilfeldig, men det er bare fordi det er retur av
veggene i dette tilfellet.
>> Nå katten, i mellomtiden, er slags juks.
Katten, når den grønne flagget er klikket, ja, starter i
noen plassering, et tilfeldig sted -
i det minste delvis som per pick
tilfeldig grønn blokk der -
og deretter Alltid IF berøre fugl, spille løven lyd,
og deretter stoppe skriptet.
Så når jeg sa avslutte, eller avslutte før, det er et puslespill
brikke i Scratch som bare vil drepe programmet på det
peke fordi det er slags logisk gjort.
Men ellers, her merke til hva som kommer til å skje.
Peker mot fugl og flytte ett trinn.
Så dette peker mot fugl er slags en fordel katten
har i at det er homing på bevegelige fugl, og vi kan
nå gjøre dette programmet enda mer interessant.
Istedenfor å flytte ett skritt om gangen per CPU syklus, per
streik toll av gongongen, så å si, la meg gå videre og
flytte, la oss si, fem skritt om gangen, så katten.
Klikk Kjør, og nå er han virkelig finner ham raskt.
Hvis vi dobler dette videre til 10 trinn, den slags går
riktig for ham.
Nå kan vi gi fuglen,
kanskje litt av en fordel.
La oss gå til fugl og sier i stedet for å flytte tre trinn,
la oss flytte ham 30 trinn.
Men han fortsatt fikk fanget til slutt.
>> Så her har vi to tråder.
Det er fengslet i Scratch med to skript og to
sprites, men ideen på andre språk er at du kan
skrive, i hovedsak, for mange programmer som dette og har
dem kjøre virkelig, eller imaginarily, parallelt.
>> Nå er det også dette konseptet i programmering kjent som
hendelser, og dette er noe vi ikke vil se i C, de
språk kjent som C. Vi vil se det mot semesters slutt
i web-programmering, når vi introduserer JavaScript og
oppfatningen av bygge websider som er dynamisk og samhandle
med brukerne.
Så i dette tilfellet, har vi et veldig enkelt eksempel av to
sprites, gutt og jente, hver av dem har sine respektive
tråder, men noe disse to er inter-kommunikasjon ved hjelp
av noe som kalles hendelser.
Så la meg gå videre her og zoome inn på gutten manus,
som ser ut som dette.
Når grønt flagg klikket, alltid gjøre følgende.
Dersom nøkkelen Space, eller mellomromstasten, trykkes, sier
Marco for to sekunder, det er rent estetisk på
skjerm, en liten tale boble, men så kringkastes.
>> Så kringkasting er en annen Scratch stykke som er
representerer en klasse av funksjonalitet i programmering
som gjør at ulike programmer, ulike tråder,
til inter-kommunisere, å liksom sende
meldinger, en til en annen.
Passerer et stykke papir i klassen er liksom den lave tech
tilsvarende.
Så kringkaste arrangementet.
Jeg kan sende denne meldingen, og ordet hendelsen
er helt vilkårlig.
Scratch har noen ganger disse drop downs, så jeg bare kom opp
med en tilfeldig ord som hendelse fordi nå, hva gutten gjør
når jeg trykker på nøkkelen er han sender denne hendelsen.
Og hvis jeg ser nå på jenta manus, er hennes script
super enkelt fordi alt hun trenger å gjøre er ikke handle når
grønt flagg klikkes.
Hun er utformet til handling når hun mottar sitat, unquote,
"Hendelse", og på det punktet, hun lytter derfor for
den såkalte hendelse igjen og igjen.
Så snart hun får så fall hun kommer til å rope
Polo i to sekunder.
>> Og så kan du kanskje slutte fra dette nøyaktig hva
neste resultatet kommer til å bli.
La meg klikker det grønne flagget.
Ingenting skjer fordi jeg trenger å gjøre hva?
PUBLIKUM: Space Bar.
DAVID MALAN: Space Bar.
Boy sier Marco, sier jenta Polo.
Men det er ikke vanskelig kodet per se.
Det er inter-kommunikasjon mellom skript, så nå er vi
har muligheten til å gjøre enda mer komplekse programmer hvor
disse to er liksom inter-kommunikasjon.
>> Så i hvilke retninger kan vi ta dette?
Vel, i oppgavesettet 0, egentlig, er målet å
ha det gøy med Scratch.
For hacker utgave, vil du i stedet ha det gøy med en mer
sofistikert versjon av Scratch kalt BYOB, Bygg
Din egen blokker, men ideen er den samme.
Du vil kunne -
Ja, det var bevisst.
Det kom fra Berkeley.
BYOB er hacker utgave versjon av denne, men begge
demografi, standard utgave og hacker utgave alike, den
målet på hånden for den kommende uken er egentlig bare å dykke i
dyp, få hendene skitne med programmering, og gjøre
noe interessant, gjøre noe interaktivt, gjør
noe kunstnerisk, gjør noe gøy å faktisk
demonstrere, slik at ved ukens slutt, vil du ha et prosjekt,
ikke bare for den første CS50 pset, men du vil ha en
Noe som du kan vise frem i Annenberg til
venner eller familie ved å laste den opp til MIT hjemmeside.
Og så som jeg sa på onsdag, forventer vi 90% av klassen,
generelt, for å gjøre de vanlige utgavene.
Innse at det er også dette uttaket for de av dere som
ellers finne deg selv litt lei med det grunnleggende
og virkelig ønsker å dykke i og lage en visjon du allerede
har med tidligere bakgrunn i dette mer vennlig
miljø.
>> Så la meg trekke opp en annen eksempel at en av våre tidligere
studenter her gjorde og fortelle litt noe gjennom sang.
Det samme som dette spiller, tenk på hvordan du går om
implementere dette programmet ved hjelp av nettopp disse samme
byggeklosser, en liten bit av pseudo tilfeldigheten, og en
litt kjent sang.
Hvis vi kunne øke volumet bare litt?
[MUSIC - "Det regner menn" The Weather Girls]
>> DAVID MALAN: Det er nok for CS50.
Vi vil se deg på mandag.
[Applaus]