[VIDEO PLAYBACK] [Bildør lukke] [Bilmotor START] [Musik spiller] -I Højre ad i jagten af gode tider og gode nyheder. Med gode venner kan du ikke miste. -Det Kunne blive en vane. -Opportunity Slag Lad os lige nå ud og få fat i det. -Ja! -Sammen vil vi snuppe den. -Vi Hitch hike, bus eller gul cab det. -Dammit. -We're Bevæger højre langs. -Footloose Og fancy gratis. -Kom Der er halvt så sjovt. Kom dele det med mig. -We're Bevæger højre langs. -We're Vil dele belastningen. -Vi Har ikke brug for et kort for at få dette show på vejen. -Hey Fozzy, jeg vil have dig til at dreje til venstre hvis du kommer til en gaffel i vejen. -Ja hr. Drej til venstre ved udfletningen i vejen. Drej til venstre. -Jeg Tror ikke, at. -Cruising Højre langs vi fundet lysene på motorvejen. -Og Din vej eller min måde. -Så Tillid til min navigation. -film Stjerner med prangende biler og livet med toppen ned. -We're Stormede de store bakker. -Ja, Storm er rigtige. Skulle det være sner? Nej, tror jeg ikke det. -I Højre ad. -Footloose Og fancy gratis. -Du Klar til den store tid. -er Det klar til mig? -I Højre ad. Flytning til højre ad. Flytning til højre ad. Flytning til højre ad. -Jeg Tror, du bedre trække over. -Ja hr. [END AFSPIL] [Applaus] DAVID J. MALAN: Dette er CS50. Og dette er slutningen af ​​uge 0, men starten på et smukt venskab. Vi er så glade for at være her på Yale University for første gang med vores ven SCAZ, og Jason, og Andy. Alle 40 af CS50 s TF s og CA er her på Yale. Og alle jer. Og i virkeligheden, er det nok tid at-- [Applaus] Så selv om de fleste af forelæsningerne vil faktisk være i Cambridge i år, virkeligheden er, at ved design, og meget bevidst i CS50, Jeg tror, ​​vi nærmer det punkt teknologisk og pædagogisk, hvor det kan være en overlegen pædagogisk erfaring til at engagere sig med nogle af kurset materielle online. Faktisk reality-- og hvis jeg tror denne philosophically-- er, at forelæsninger er ikke en særlig effektive midler til levering af temmelig komplekse oplysninger. Bestemt løbet time plus lange spænd af tid. Og faktisk hver par minutes-- Jeg husker mig selv i college-- du zone ud for et øjeblik, du går glip af nogle komplekse emne, og du er gået temmelig meget for de næste 45 minutter. Og virkeligheden er, at uanset om du er her i New Haven eller Cambridge eller længere, enkelhed har evnen til at holde pause og spole frem, spole tilbage, hyperlink til relaterede ressourcer, søg fuld tekst udskrifter og lignende er en mulighed, Jeg tør sige for vores online studerende langt ud over New Haven, giver dem en mulighed til virkelig at forstå den konceptuelle materiale, som vi indføre i foredrag desto bedre. Men i sidste ende i CS50, er de studerendes erfaringer karakteriseres så, så meget mere ved kursets problemet sæt, eller ugentlige programmeringsprojekter, den kursets sektioner ledet af undervisningen stipendiater, de natlige kontortid ledet af kurset assistenter og undervisningen stipendiater og ja sådan begivenheder som CS50 Puzzle Day, CS50 s Hack-a-thon, det CS50 Fair, ugentlige frokoster, og så meget mere. Og så uanset om du er her i New Haven, eller tuning i langvejs fra, dag i Cambridge, og vi vil se dig igen snart, virkeligheden er det er én og samme klasse. Og vi er så glade for at være her alle sammen i dag. Og så i slutningen af ​​semestret, enten her eller afstand, godt forhåbentlig du bære med stolthed, glæde, og måske lidt af lettelse med, den skjorte, der vidner til dig at have taget CS50. Så hvor vi holder op på onsdag? Vi tog et kig på beregningsmæssige tænkning. Og det er i retning af, hvad vi destilleret datalogi til, i det mindste for nu. Men vi destilleret det lidt længere ind mindst tre komponenter elementer. Indgange, så hvad er det problem, vi prøver at løse? Udgange, hvad er besvare vi håber at få? Og repræsentation der for. Og vi vil ikke dvæle her på efter på binær eller endda ASCII, og lignende så meget, men snarere tager for givet at vi kan repræsentere denne information, fordi langt mere interessante dele af disse problemer er ikke blot den indgange og udgange, men algoritmer at gå ind i at løse disse problemer. Og du måske husker fra den anden dag, at vi tog en temmelig traditionelle Begrebet søger en person op i en temmelig stor telefonbog eller mere generelt digitalt i disse dage, blot et meget stort datasæt. En virkelig stor kontaktlisten, med masser af navne alfabetisk sorteret. Og vi indså, at mens jeg kunne nærme sig dette problem simpelthen ved anvendelse af en lineær approach-- side for side, eller endda to s på en time-- vi indså at jo mere intuitive algorithm-- bare lidt dividere og erobre problemet igen og igen, og igen-- halvere det med hver tid, gav os denne grønne resultat. Og det er så meget fladere fordi det antyder at selv som dette problem bliver større og større, som det er tilfældet i disse dage med data sæt og reality-- Facebook og Google søgeresultater og den like-- gør vores algoritme udføre lige så effektivt med disse større bid som det gjorde selv med de mindre bites. Nu rejser spørgsmålet, hvad kan vi faktisk løse tilsvarende med denne form for intuition? Denne form for splittelse og erobre? Tja, vi kunne gøre noget som denne dag her. Vi kunne tage fremmøde. Så måske gerne 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11-- ikke vil være alt det effektivt. Så vent, folkeskolen. 2, 4, 6, 8, 10, 12, 14, 16, 18 og så videre. Men kunne vi gøre det lidt bedre? Jeg er temmelig sikker på, jeg ikke kan gøre dette ved mig selv. Så hvis du vil humor os for bare et øjeblik, vi bragt med os en algoritme, der er lige fået tre trin, men det require-- hvis du ikke mind-- os alle stå op, hvis du ville. Så med alle os nu stående, trin en af ​​denne algoritme er følgende. Stå op og tildele selv nummer 1. Så på dette tidspunkt, bogstaveligt alle i dette rum forhåbentlig tænker på sig selv, imidlertid akavet, nummer 1. Nu trin to af denne algoritme er kommer til at involvere følgende. Trin to, parre sig med nogen stående, tilføje dine tal sammen, og vedtage beløbet som dit nye nummer. Hurtig tilregnelighed check. Hvilket nummer er alle tænker på nu? Så 2, undtagen måske for en, akavet, ensom person. Hvis vi har et ulige antal af mennesker i lokalet. Så en person kan stadig være nummer 1, det er fint. Men trin tre her, en af jer skal sidde ned. Den anden skal gå tilbage til trin to, og gentag, hvis du ville. Så hvis stadig stående, skal du være blandt dem, der går tilbage til trin to. Bliv ved. Nogle mennesker stadig stående. Så hvis der stadig står, parre op med nogen. Okay, svindende ned. Nogle mennesker stadig stående. Jeg vil hjælpe, hvis nødvendigt. Husk nøglen takeaway her, er, hvordan meget hurtigere det er end mig tælle. Så lad os se. Jeg kan hjælpe. Så hvad nummer er du stadig tænker på? PUBLIKUM: Jeg er på 44. David J. MALAN: 44, så du gå videre og sætte sig ned. Hvilket nummer tænker du på? PUBLIKUM: 74. David J. MALAN: 74. Okay, gå videre og sætte sig ned. Hvem ellers er stadig stående? 86. Og er nogen andre stadig stående? Hvilket nummer? Jeg hørte 67. Og derefter i toppen? 32. Alle andre stadig stående og tænker på et nummer? Åh, hej. Undskyld. Er straks tilbage. 42. Nogen andre? PUBLIKUM: 47. David J. MALAN: 47. Er nogen andre stadig stående som ikke er blevet talt? Så det endelige antal personer i et værelse der har 497 pladser is-- som alle er filled-- er 390. Så dette er stor. Vi vil snart diskutere begrebet af en fejl i et computerprogram. Men vi vil vende tilbage til inden længe. Men i teorien, hvad der kan være sket lige nu? Så selv om der var tre store trin til denne algoritme, hver af dem var bare sådan en stor operation. Og der var denne cyclicity til det i, at hvis du stadig stod, du holdt går fra trin tre til to, trin tre til to, trin tre til to. Men hvad holdes sker på hver iteration? Hver cyklus af denne løkke? Hvad der skete andre steder i rummet? Ikke kun det samme, men hvad foregik til halvdelen af ​​jer? Sidder ned. Og så der i løgne denne indsigt, meget gerne telefonbog eksempel, i, at hvis halvdelen af ​​jer er sidder ned hver gang, problemet er begyndt med måske 400 mennesker, derefter til 200 mennesker, end 100 mennesker, derefter 50 personer, og så videre. Og så vi skære ned i teori til blot én person, tænker på den samlede værdi af alle. Nu virkelighed, nogle sociale dynamikker, og nogle regnefejl kan bidrage til det ultimative bug. Men i teorien, mens jeg var stadig tælle væk, tager flere dusin trin eller hundredvis af trin at tælle jer selv, for at tælle en stuen fuld af 500 eller så folk burde have taget langt færre trin, fordi du kun kan opdele 500 og 1/2 så mange gange. Og så ligesom med telefonen bog eksempel den anden dag, gjorde vi har noget logaritmisk så at sige, hvorved hvis vi var alle opererer i fællesskab, og ignorerer tilføjelse fejl, ville vi har opnået nøjagtigt den slags køretid? Nu for at være fair, slags snydt, i at jeg gearede anden ressource. Det er bare en af ​​mig, Jeg gearede hundredvis af dig. Men der kan siges at være en eksempel på parallel behandling, eller en tilstand af kunst meget på mode hvor computere i disse dage har flere CPU'er, eller mere teknisk, mere flere kerner, og kan virkelig gøre flere ting på én gang, ligesom du alt, hvad vi laver der, parallelt. Men huske på, at det, vi også gjorde onsdag var at forsøge at indfange denne intuition og formalisere det i kode. Noget som pseudo-kode. Og i virkeligheden, og jeg håber, du vil tilgive, det er ligesom 80 grader i her. Så jeg har tænkt mig at tage denne off for bare en lille smule. Hvad jeg troede, vi ville gøre, er overgangen nu til et program, hvorved vi engagere igen publikum, men skrive et program på engelsk lignende syntaks, med til at løse dette problem her. [VIDEO PLAYBACK] -Det Er jordnøddesmør gelé tid. Jordnøddesmør gelé tid. Jordnøddesmør gelé tid. Måde ya! Måde ya! Måde ya! Måde ya! Nu er der du går! Værs'go! Værs'go! Værs'go! Jordnøddesmør gelé! Jordnøddesmør gelé! Jordnøddesmør gelé! Jordnøddesmør gelé! Peanut, jordnøddesmør gelé! Jordnøddesmør gelé! Jordnøddesmør gelé med et baseball bat. [END AFSPIL] DAVID J. MALAN: --that video, men det er lidt vanedannende, hvis ikke en smule irriterende. Men for at gøre dette, tænkte jeg, hvad vi havde gøre, er at forsøge at skrive et program sammen, som vi har brug for tre frivillige. Nødt til at være komfortable på kamera og internet. Sam, kom op. Lilla skjorte, lige her, kom op. Og fra herovre, lad mig gå lidt længere tilbage. Crimson og blå skjorter, kom op. Perfekt. Kom nu. Kom op, kom op. Og hvad er dit navn? Erica. David rart at møde dig. Hvis du gerne vil tage denne plads her. Det er Sam. Hvad er dit navn? Antonio. Antonio, rart at møde dig. Erica og Sam, hvis du ville gerne have en plads her. Hvad vi er kommet forberedt med, da disse fyre er ved at opdage, er de ingredienser med til at gøre en jordnøddesmør og gelé sandwich. Nu er dette måske noget, du tager meget for givet. Men vi har givet hver af vores tre frivillige her-- to frivillige og Sam her, en brød hver, en plade, en kniv, en krukke med gelé eller marmelade, og en krukke med jordnøddesmør. Og målet ved hånden nu er vil være for disse tre at foretage en jordnøddesmør og gelé sandwich. Men hvad vi vil gøre, er at forvente, den audience-- da alle jer sikkert ved, hvordan man gør det så godt i reality-- kommer til at give os trin for trin instruktioner. Den pseudo-kode, hvis du vil. Så jeg vil spille rollen som skriftklog her. Og jeg har lidt to-do liste, og så hver af jer, en ad gangen, kalder en potentiel instruktions, jeg vil skrive det ned, skal du gentage den efter behov. Og så du fyre vil gøre en jordnøddesmør og gelé sandwich kun ved at gøre, hvad du får at vide. Så tænk på jer selv som computere. Du kan kun gøre, hvad du får at vide. Ingen forudsætninger, ingen spørgsmål. Du skal bare nødt til at gøre det. Så der gerne vil vove den første instruktion for at gøre en PBJ sandwich? På balkonen er der. PUBLIKUM: Åbn posen med brød. DAVID J. MALAN: Åbn pose brød, hvis du vil. Så lad os se. Lad os gentage, og få lidt mere præcis. God måde at starte selv. Trin to, en anden. Nu ingen ønsker at arbejde frivilligt. Trin to, foran. PUBLIKUM: Åbn den indre pose brød samt. DAVID J. MALAN: Åbn indvendig sæk af brød samt. Store, vi lærer. Lidt mere præcis. Lad os få denne arbejdsgruppe. Ja, i grøn skjorte. PUBLIKUM: [uhørligt] DAVID J. MALAN: Skiver af brød. Fjern forsigtigt to skiver brød. Det er godt. Trin fire, en anden? Herovre, ja? PUBLIKUM: [uhørligt] DAVID J. MALAN: Sted brød på plade. Trin fem? Trin fem, ja? PUBLIKUM: [uhørligt] DAVID J. MALAN: På toppen of-- åh, hånd. Placer hånden på toppen af ​​jordnøddesmør. Er, at hvad jeg hovedet? PUBLIKUM: Ja, og skru. DAVID J. MALAN: og-- sige det igen. PUBLIKUM: [uhørligt] DAVID J. MALAN: Og sætte låg ved siden af ​​jordnøddesmør. Let at placere hånden på toppen af ​​jordnøddesmør, og skru, og læg låg siden af ​​jordnøddesmør. OK, trin seks. Trin seks, en anden. Ja? PUBLIKUM: [uhørligt] DAVID J. MALAN: Sig det igen. PUBLIKUM: Gentag trin fem igen. DAVID J. MALAN: Og gentage trin fem igen, der vil skabe lidt af et problem nu, hvis vi gør dette skridt for skridt. Så nu går vi tilbage til trin fem. Let at placere hånden på toppen af jordnøddesmør og skru og sætte låg ved siden af ​​jordnøddesmør. Så fat i jordnøddesmør og gentag trin fem igen. Så vi vil negligere den uendelig løkke, hvis du vil. Trin syv, en anden. Ja, i ryggen. PUBLIKUM: [uhørligt] DAVID J. MALAN: --on oven på andet. PUBLIKUM: [uhørligt] DAVID J. MALAN: På anden hånd på den anden toppen. Vil du bare komme herop? Hvordan kan jeg afslutte instruktion? Hvad er resten af ​​instruktionen? PUBLIKUM: Ignorerer denne del. DAVID J. MALAN: Ignorerer denne del. Lad os starte forfra. Trin syv. PUBLIKUM: [uhørligt] DAVID J. MALAN: Tag fat med modsatrettede hand-- det er godt. Det er faktisk godt. PUBLIKUM: [uhørligt] DAVID J. MALAN: og plast jar-- PUBLIKUM: [uhørligt] DAVID J. MALAN: Og twist-- PUBLIKUM: [uhørligt] DAVID J. MALAN: I to sekunder. Bare åbne jordnøddesmør krukke. Jeg håber du vil tilgive. Så lad os antage, vi fik der. Åbn jordnøddesmør krukke. [Applaus] DAVID J. MALAN: Trin otte, lad os gå. Trin otte, ja, i ryggen. PUBLIKUM: [uhørligt] DAVID J. MALAN: Godt. Trin ni, ja? PUBLIKUM: [uhørligt] DAVID J. MALAN: --out af Jordnøddesmør krukken. Og-- og hvad? PUBLIKUM: [uhørligt] DAVID J. MALAN: Og sætte kniv tilbage i jordnøddesmør. Trin ti. Trin ti. PUBLIKUM: [uhørligt] DAVID J. MALAN: Sæt kniven ud, og derefter fjerne forseglingen. Nice. Off the jordnøddesmør. Okay, trin 11. PUBLIKUM: [uhørligt] DAVID J. MALAN: OK, grå computer følg blå eller rød computer. Godt. [Applaus] DAVID J. MALAN: Bring os hjem. Par flere trin. Hvad bliver det næste? Trin 12. Trin 12. Ja? PUBLIKUM: Sæt en af ​​skiver af brød forsigtigt på en af ​​dine hænder. DAVID J. MALAN: En af dine hænder. Og så, trin 13. Ja? PUBLIKUM: [uhørligt] DAVID J. MALAN: --on skive brød. Godt. Ret godt. Trin 14, ja. PUBLIKUM: Fortryd trin 13. DAVID J. MALAN: Fortryd trin 13. Lad os gå videre til gelé. Det er en 100- trin program, men vi var på trin 15. Ja. PUBLIKUM: [uhørligt] David J. MALAN: 7 til 13 ved hjælp af gelé, fordi dem gik så godt. Gentag trin 7 til 13, ved hjælp af gelé. Så forstå nederste halvdel af gelé krukke med den ene hånd på toppen. På den anden side af anden top, ignorere denne del, fat med modsatrettede hænder, låget og plastbeholder nederst, og twist i to sekunder. Derefter åbne gelé krukke. Og endelig, lad os prøve at give os noget spiseligt. Trin 16. Så hvorfor gør vi ikke forlade det der. Tak så meget til vores tre frivillige. [Applaus] Vi har en lille CS50 stress bold for dig. Det skulle være en sandwich men-- hvad så var punktet, ud over at have en lidt sjov med den algoritme? Men virkeligheden er, at selv når du programmere en computer, du nødt til at være super præcis. Så komplekst eller truende som din egen computer kan meget vel være for dig, ved mindst når noget går galt, virkeligheden er det en temmelig dum enhed, der blev opfundet af os mennesker, og kan kun gøre en delmængde af det, vi do-- tider sikkert faster-- men det gør ikke, hvordan at gøre antagelser. Det er ikke, hvordan at være på samme bølgelængde som dig. Det vil kun gøre præcist hvad du fortæller det. Og du vil blive ramt, måske, som vi begynder skrive konkrete kode med Første problem sæt og uden for, hvor nemt det er at gøre en antagelse som menneske, og ikke forventer jeg nødt til at håndtere så fald eller dette hjørne tilfælde så at sige, der kan meget vel opstå, hvis for eksempel Sam havde den eneste squeezable krukke med gelé, hvorimod alle andre havde nogle glas som godt. Så før vi vende vores opmærksomheden på nogle konkrete kode, tillad mig at introducere kursets hoveder her på Yale. Vores venner SCAZ, Andy, og Jason til at komme op og sige hej. [Applaus] SCAZ: Vi har mistet Jason midlertidigt. Hej igen, alle. Mit navn er SCAZ. Jeg har undervist på Yale siden 2001. Og når jeg ikke underviser, min forskning er i robotteknologi og kunstig intelligens. Og meddelelsen om, at jeg har i dag er, at der starter i et par uger, vi vil være at bringe nogle supplerende materiale til CS50 at tale om intelligence software. Vi kommer til at tale om, hvordan steder som Netflix og Hulu kan anbefale film du måske ønsker at se. Hvor vi vil tale om, hvordan driver-mindre biler rent faktisk arbejder. Og vi vil være i stand til at jorde disse ting i de begreber at du lærer i denne klasse i dag. Fordi alle disse ting er bygget på samme fundament. Og det er, hvad dette serien vil udforske. Så jeg ser virkelig frem til at se flere af jer alle, og du kommer til at komme til se mere fra os alle meget snart. Lad mig derefter introducere Jason. JASON: Hej alle. Mit navn er Jason. Jeg gik desværre til Harvard som en bachelorstuderendes. Det kommer til at få skåret ud af den faktiske strøm. Og nu er jeg her som en lektor i datalogi afdelingen. Og jeg hjælpe køre kurset med SCAZ, David og Andy. ANDY: Hey guys. Mit navn er Andy. Jeg er faktisk det eneste Yale studerende på scenen lige nu. [Applaus] Jeg er i Berkeley College, oprindeligt fra Solon, Ohio. Og jeg var en af ​​de børn hvor, hvornår jeg kom til Yale, Jeg troede virkelig, at jeg ville aldrig nødt til at se på en række nogensinde igen. Og så indså jeg, at du havde brug for både videnskab og QR credits at opgradere. Og så mit første forår, tog jeg en klasse, en CS, intro CS klasse her på Yale. Jeg var ligesom, det er ligesom faktisk temmelig cool. Og mens jeg faktisk endte erklære Som en global anliggender stor, de færdigheder Jeg lærte i CS og programmering er så anvendes på ethvert område du vælger at gøre. Og personalet her på Yale, vi har været så hårdt på arbejde at forberede jer. Og vi ser frem til at se alle i afsnittet og kontortid. Så ja. [Applaus] DAVID J. MALAN: Tak. Så lige før timen begyndte, vi havde en mulighed at gå rundt campus med en mobiltelefon og tage nogle selfies i video form af virkelig min første tur til Yale campus her. Og så vi troede, vi ville dele en ru skåret over præcis dette som SCAZ og Andy og Jason tog mig omkring campus. [VIDEO PLAYBACK] [SIRENS] -David. -Velkommen Til Yale. -Godt at se dig. -Dejligt at se dig. -Kan Vi gå på en tur? -Lad Os gå på en turné. -Road Tur. -Denne Tegn har været der i et stykke tid. -Whah, CS50. -Hurry! Gå, gå, gå, gå. Du bør [uhørligt] Harkness Tower. -Og Vi så, at et par gange. [Applaus] -Se Ud til cyklen! Ahh! Hi Frank. -Hvad Er op, gutter? -Hvordan har du det? -Godt at se dig. -Velkommen Til videoen. Må ikke handle alt for ophidset. -Jeg Elsker Silliman. Ahh! -Det Har været omkring tre timer siden Jason havde is og Nutella. Så vi er nødt til at stoppe tilbage på Silliman for en lille smule. -Det Er ikke engang [uhørligt] endnu, bare det faktum at de har det her er så fantastisk. Dude, der er Nutella ved hvert måltid. -Der Var sidste år også. -Ja. -tell meget om Yale hidtil. Men jeg tror nu, at der er TD derovre. Og det anses for off campus. -Her Har vi gotisk arkitektur. Verdensberømte. Vi har nogle mere gotisk arkitektur. Og byggeri, og mere gotisk arkitektur. Hej. Det er her, vi har kontortid Tirsdage gennem torsdage i Hogwarts, som [uhørligt]. -Okay. Det er det for turen. Vi er på Yale University Law School, hvor dagens foredrag er ved at finde sted. Lad os hovedet på. [END AFSPIL] DAVID J. MALAN: Og der bringer os her nu. Så indtil videre har vi været fokus på pseudokode, som er det engelske-lignende syntaks. Det har ingen foreskrevne specifikation. Det er bare du bruge nogle intuitiv sprog, hvis du ønsker at forklare, hvad du vil gøre. Men lad os begynde nu til overgangen til koden, som de fleste mennesker ville sige. Men mere præcist, noget kendt som kildekode. Det er det sprog, der mennesker skriver, at computere ultimately-- eventuelt efter et bestemt antal steps-- sidste ende forstår således at vide, hvordan man gør noget. At du så et glimt af dette måske på onsdag. Dette er et eksempel, utroligt, underwhelming når den køres simpelthen siger "hej verden". Og det er skrevet på et sprog kaldet C, som er syntaktisk meget ens til en masse andre sprog som du måske ikke kender, men måske har hørt om som Java, og C ++ og Python og Ruby, og lignende, og faktisk, vi får bruger meget af semestret ved hjælp af C, og derefter mod slutningen af semester, der bygger på det, og indføre enhver række andre sprog. Blandt dem PHP, og JavaScript, en database sprog kaldes SQL. Men med C, hvad vi vil have denne bottom-up-forståelse af præcis hvordan computere arbejde, hvad du kan gøre med dem, og hvordan du kan løse problemer desto mere effektivt af denne lagdeling, at vi diskuterede på onsdag, og stående på skuldrene af andre. Men mere om det at komme. I dag ser vi på en enklere miljø, men en fundamentalt identiske miljø kendt som Scratch af vores venner på MIT Media Lab. Dette er en grafisk programmeringssprog, Scratch, hvorved du kan trække og slip ting, ligner puslespilsbrikker, der kun interlock hvis det gør logisk eller programmatisk mening at gøre det. Men det kommer til at tillade os at have en samtale om alle af samme programmering fundamentals at nogle af jer måske ved allerede, at mange af jer måske ikke vide noget af uden at at køre fast ærligt, i intellektuelt uinteressant syntaks af semikoloner, og parenteser, og citerer og lignende. Som alle, tidlig på, er en distraktion til hvad er interessante og virkelig nyttige idéer. Så lad os tage et hurtigt blik på miljøet her, så du ved, hvad der venter. Og i virkeligheden, blandt de spil, vi kan spille er et par programmer skrevet af CS50 egne tidligere studerende. En af dem, mig selv, jeg vil være denne ene skrevet i graduate skole for mig. Hvis jeg kunne tage en frivillig der er villig til at spille et spil for første gang. Sikker. Kom op. Hvad er dit navn? PUBLIKUM: Angela. DAVID J. MALAN: Angela, kom op. Så Scratch har været ude i et par år. Og da jeg var i graduate skole, Jeg var kors, der er registreret på MIT, tager professor Mitchel Resnick s kursus om pædagogiske teknologier. Og vi var blandt de allerførste studerende i verden til rent faktisk beta test Scratch. Og mit projekt var, hvad Angela har nu allernådigst frivilligt at spille kaldt oscartime. Så jeg har tænkt mig at gå videre og dobbeltklikke på ikonet her. Det kommer til at åbne op for en programmering miljø, at vi snart vil dykke ned i. Jeg har tænkt mig at fuld skærm det for Angela, her. Jeg har tænkt mig at ramme den grønne flag på blot et øjeblik. Og så en hel masse skrald kommer til at falde fra himlen. Og du kommer til at bruge musen her til rent faktisk at trække og slippe papirkurven i Oscar s skraldespande. Så hvis du ønsker at gå videre og klik det grønne flag, vil spillet begynde. [Musik spiller] Åh, jeg elsker papirkurven. Noget snavset eller nusset eller støvet. Noget laset eller rådne, eller rusten. Ja, jeg elsker papirkurven. Hvis du virkelig ønsker at se noget tarvelige, se på dette. Jeg har her en sneaker det er laset og slidt. Det er alle fulde af huller besidder og snørebånd er revet. En gave fra min mor den dag, jeg blev født. Jeg elsker det, fordi it's-- DAVID J. MALAN: --green disse dage bare være at smide alt i papirkurven. Og så hvad en af CS50 eget personale did-- Jordan, som du måske mødes today-- har faktisk opdateret dette for dagens tider. Og så tillade mig at åbne op et remix stedet for Angela. Og vi vil spille dette i stedet for et par øjeblikke, hvor nu er du nødt til at vælge mellem, hvorvidt at smide noget i skraldespanden, eller genbruge det eller kompost det. Så der er lidt af pres på dig at få denne ret foran din 392 til 497 klassekammerater her i hallen, hvis du ville. [VIDEO PLAYBACK] [Musik spiller] -OH Jeg elsker papirkurven. Noget snavset eller nusset eller støvet. Noget laset eller rådne eller rusten. Ja, jeg elsker papirkurven. Hvis du virkelig ønsker at se noget tarvelige, se på dette. Jeg har her en sneaker det er laset og slidt. Det er alle fulde af huller og snørebånd er revet. En gave fra min mor den dag, jeg blev født. Jeg elsker det, fordi det er papirkurven. Åh, jeg elsker papirkurven. Noget beskidt eller nusset, eller støvet. Noget laset eller rådne eller rusten. Ja, jeg elsker papirkurven. Her er nogle flere rådne ting. Jeg har her nogle newspaper-- [END AFSPIL] DAVID J. MALAN: --are faktisk komposterbart. Men tak til vores frivillige, Angela. Vi har en stress bold til dig her. Så tak. Så denne ene blev skrevet af mig. Men nu er en af ​​en faktiske tidligere elev der gennemført denne, hvilket er et spil. Alt i dette sprog kaldes Scratch, at vi vil snart skrælle lagene af. Men hvis vi ville like-- hvordan om en anden frivillig? Højre. Kom op. Hvad er dit navn? Blik? Lance. Lance, kom op. Dejligt at møde dig. Kom denne måde. Så dette kunne man have en tema kender til nogle af jer. Men du vil se alt for, at kan der være interaktivitet, hvorved du rent faktisk kunne være rolle tegnet bevæger sig rundt. Dejligt at møde dig. David. Jeg giver dig, Pikachu. Instruktioner vil om at komme på skærmen. Men kort sagt, er du nødt til ønsker at fange den velsmagende ting, og undgå bomber og andre ting. Med markører helt. Så ramte mellemrumstasten. -Pikachu. DAVID J. MALAN: Catch de ting til venstre, ikke fange ting til højre. [Musik spiller] Så en sidste her. Hvis vi kunne have en mere frivillig her. Vi troede, vi ville genskabe noget from-- i den gule shirt-- fra onsdag. Hvad er dit navn? Mary, kom op Maria. Og husker på onsdag vi introducerede begrebet binære, og binære pærer. Dette er faktisk nu en gennemførelse af denne samme interface at vi havde på iPad med lyset pærer, men her digitalt afsmeltet. Og snarere end at gøre en stress ball-- rart at møde dig, David. Vi bragte et par lys pærer fra Cambridge. Hvis du kan, klikke på dem pærer til at slå dem til og fra, komme op med den binære repræsentation af sige 256. Og du vil se i midten, den aktuelle tally. Så man er på. Så bitten længst til venstre er tændt. MARY: Ja, [uhørligt] DAVID J. MALAN: Nå, så vi har bare-- oh. Så dette er den 128-søjle. Så vi er op til 128. Vi fik at komme til 256. Og du kan pille på og fra, nogen big deal. Eller du kan ramme den 128 flere gange, hvis du ønsker. Okay, godt. 24.. Ja, komme tættere. Tættere! Åh, hvad er problemet så? Så hvad er problemet? Så hvad skal vi løse dette problem? Så vi har brug for en anden bit. Og det er helt rimelige i virkeligheden, ikke? Hvis du ønsker at tælle fra det antal 1 til 2 til 3 til 4 til 5, 6, 7, 8, 9 til rent faktisk at rulle over til 10, er du vil få brug for en ekstra bit. Så lad os faktisk spole tilbage her, og komme op med-- det var selvfølgelig beregnet til at være et sæt op. Du kan ikke gøre 256 med blot en pære. Så hvad med blot nummer 50? Nummer 50. Fremragende. En stor runde af bifald for Mary og hendes så godt. Tak. Så dette topic-- bevidst som at was-- rent faktisk vil gentage sig. Den største værdi, som du kan repræsenterer med otte bits, eller en byte, er faktisk 256. Men ikke hvis du starter tælle fra 0, som vi synes at holde gør ved at have alle disse bits off. Men lad os nu dykke ned i den underliggende gennemførelsen af ​​dette miljø, og drille hinanden nogle af disse ideer. Så i et øjeblik, vi er ved at se en få forskellige programmeringssprog fundamentals. Det første, som vi vil kalde erklæring. Slags verber, hvis du vil. Handlinger. Ting, der skal gøres. Og om et øjeblik vil du se blokke, der ligner dette. Sig "hej verden," for eksempel. Eller vent et sekund. Eller afspille lyd meow. Og faktisk miljøet som vi kommer til at gøre dette kaldes Scratch. Og hvis jeg trækker op Scratch uden forbelastning nogen egentlig kode, lad os tage et hurtigt kig på dette brugergrænseflade, så at sige. Kontrollerne, som vi interagerer. På toppen venstre her på skærmen, under menuerne, Vi har scenen, så at sige. Så Scratch er, hvad vi vil kalde Sprite. Det er et tegn. Og han kan styres ved skrive programmer mod ham. Og han vil være i stand til at bevæge sig op og ned og til venstre og højre i dette miljø, ikke kun ved at bevæge mus, men programmatisk. Jeg kan fortælle ham gå lige, gåtur venstre, op, ned eller lignende. Og jeg kan introducere andre sprites eller tegn så godt. Faktisk på bunden her er, hvor vil du se din liste over sprites. I øjeblikket, jeg bare har en, men jeg kan skabe mere, og de vil blive vist præcist dernede. Så hvis du spole tilbage et øjeblik, ligesom Oscartime-- for eksempel, Oscar, til venstre, papirkurven kan, var en sprite. Og de ting i midten, den genanvendelse bin, var en anden sprite. Og kompostbeholder var en anden sprite. Og hvert stykke skrald eller genanvendeligt der var ved at falde fra himlen er også en sprite, som hver blev programmeres individuelt. Hvordan du programmerer? Nå, her på den rigtige side er den scripts området. Og det er her vi kan trække og slippe puslespilsbrikker. I en uge, det vil være hvor vi ækvivalent skrive kode med mere af et tastatur, men for dag vil være at trække og slippe puslespilsbrikker, den paletter, som der alle findes her lige i midten. Faktisk i midten her er der en hel masse kategorier af puslespil stykker eller blokke. Man er relateret til bevægelse, se, lyd, en pen går op og ned, data, begivenheder styre. Ikke helt sikker på endnu hvad alle disse betyde, men du vil se, at de har været pænt kategoriseret. Og at skrive et program i Scratch, lad os gøre netop dette. Jeg har tænkt mig at starte i Events, og træk denne ene her. Når grønne flag klikkede. Nu hvorfor, at én? Nå minde om, at vores frivillige kom op, den første ting, jeg eller de gjorde var at klikke, at grøn flag i øverste højre hjørne. Og det betyder bare starte programmet. Så når begivenheden sker, hvad gør jeg ønsker at gøre? Jeg har tænkt mig at gå under Looks, og jeg har tænkt mig at gøre "sige hej". Og jeg har tænkt mig at ændre dette, og sige noget lignende "hello Yale." Og nu jeg har tænkt mig at zoome ud, skal du klikke på det grønne flag, og voila, har jeg skrevet et program. Det er ikke alt, spændende bare endnu, men dette er præcis, hvor hver af disse forfatteren startede, begge med Pikachu og binære pærer og oscartime, og så mange flere eksempler. Du starter super enkel, og så du begynder at lag, og tilføje funktioner og funktionalitet. Så hvad er disse lag kommer til at bestå af? Nå, ud over udtalelser, vi vil også har ting, der er lidt mere fancily kaldet Boolesk udtryk, efter en person ved navn Bool. Og et Boolsk udtryk er simpelthen en udtryk, der er enten sandt eller falsk, ja eller nej, 1 eller 0. Eventuelle polære modsætninger sådan. Det er enten sandt eller ej. Men vi også kommer til at se dem, der kan se sådan ud. Så for eksempel, er musen ned? De er en slags spørgsmål, hvis du vil. Musen er enten ned, sandt eller det er ikke, falsk. 1 eller 0, hvis du vil, tendens til at være kortlægningen. Sandt er 1, falsk er 0. Nå hvad med mindre end dette? Eller deromkring, er det mindre end dette? Det er et spørgsmål slags. Og hvis du lægger to tal i der, enten x vil være mindre end y eller lig med y, eller større end y, men denne blok vil vi se, er bare kommer til at besvare spørgsmålet, er det mindre end det? Vi kunne også se noget som dette. Berøring musemarkører. Så i Scratch, kan du bede spørgsmålet, er Sprite røre musen? Med andre ord er markøren svævende over hætten, eller tilsvarende? Vi vil se Anding ting sammen. Du kan stille to spørgsmål, og sørge for, at de begge give dig ja eller sande svar før træffer en beslutning om at gøre noget. Men så hvordan kan du træffe beslutninger? Tja, vi har disse betingelser. Og vi så det i vores eksempel på telefonbogen. Ser til venstre eller rigtige for Mike Smith. Og i den stand, du gøre noget potentielt, hvis en boolesk udtryk er sandt. Og ja, mærke formerne nu. Der er denne pladsholder lige nu over hovedhøjde, hvor vi kan fit-- hvis jeg tilbage en slide-- denne form. Det er ikke helt den samme størrelse. Og ja, vil du se, at Scratch ændrer størrelse tingene dynamisk at passe puslespilsbrikker, men form er hvad der er vigtigt. Denne ting ligner det, og det er faktisk nogenlunde samme form der bør passe derind. Og hvis vi ønsker at gøre noget denne måde eller på den måde, hvis ellers, vi har dette puslespil brik i Scratch så godt. Nu formoder du ville gøre, hvis, ellers hvis, eller andet. Med andre ord, en tre-vejs gaffel i vejen. Godt hvad kan du gøre blot ved et blik på dette? Jeg kan tage denne brik, og det ser ikke ud til at passe, men igen, er Scratch går at re-størrelse pænt for os. Jeg kunne begynde at lag disse ting sammen. Så nu har jeg en tre-vejs gaffel, hvis dette er sandt, gøre dette. Ellers hvis denne anden ting er sandt, gå denne vej, ellers gå denne anden vej. Og i The Muppet Movie, den gaffel i vejen, så at sige, mellem Yale eller Stanford, var præcis det, blot to forhold. Enten gå denne vej, ellers gå den vej. Nå, sløjfer også eksistere i programmeringen. Og vi har brugt disse allerede i klasse og i pseudokode kode, og sikkert i de Skrab programmer evigt. Scratch har dette puslespil brik, vil bare lade dig gøre noget for evigt. Og nogle gange, du ønsker til at gøre noget for evigt. Det er ikke nødvendigvis en fejl, er det fordi du ønsker et ur til at holde ud, eller et spil til at holde spille. Eller du kan angive et endeligt antal trin, som med denne gentagelse blok her, der vil gentage noget 10 gange. Vi kan sætte variabler, vil vi snart se. Og med variabler, der ligner i ånden til algebra, som x, y eller eller z. Det er noget symbolsk, der kan gemme en vis værdi, nogle stykke information, at du måske ønsker at huske til senere. Bedste eksempel på dette kunne være et spil, hvor du har en score, ligesom i Pikachu. Hvor mange stykker kage og whatnot har du fange? Tja, måske at være en variabel kaldet score, der starter ved 0. Og så hver gang vi fanget en stykke kage eller slik eller lignende, det bliver øges. Det bliver tilsat til en ad gangen. Og så en variabel gemmer en oplysning som. Så er der arrays, og vi vil komme tilbage til disse i en uge eller to gang, men en række er lidt ligesom en beholdning eller en skoletaske, inde som du kan sætte virtuelle ting. Det giver dig mulighed for at lagre mere end en oplysning. Og som kan være nyttige hvis i spillet, er du slags gå rundt plukke ting op. Og måske du ønsker at holde alle disse stykker kage rundt, og ikke bare spise dem en efter en. Og så er der en amatør konstruktion vi får kommer til kaldte funktioner eller procedurer. Og selv om vi skal hen hurtigere her, vi får se, at dette er en meget naturlig løsning på problemerne at vi vil støde på. Som vores programmer starter få større vi får begynde at lægge mærke til mønstre i den kode, vi skriver, puslespilsbrikker vi er trække og slippe. Og så snart du opdager dig selv gør noget igen og igen, eller værre endnu kopiere og indsætte programmering kode, som du har skrevet, det er nok en mulighed for at faktor ud uanset hvad du holder kopiering og indsætte, og sætte det i noget, der hedder en "funktion." Men mere om dem i meget mere detaljeret inden længe. Og så er der endnu mere avanceret funktioner. For dem af jer mere behageligt, eller tage APCS eller tilsvarende, Scratch faktisk understøtter ting som tråde og begivenheder og meget mere. Så indse, at det har en temmelig høj loft, selvom det er også meget bredt tilgængelige for folk der aldrig har programmeret før. Så ja, lad os tage et kig på et simpelt program eller to. Vi har allerede set på, hvordan vi kan sige goddag med Scratch. Lad mig gå videre og åbne op for en lidt mere interessant program at jeg skrev på forhånd. Og denne her er kaldet Pet Cat. Alle disse programmer vil være tilgængelig på CS50 hjemmeside. Faktisk, der allerede. Så kan du downloade dem, og lege med dem, og med Problem Set 0, som er også på kursets hjemmeside, Du opfordres til at gå gennem disse. Og desuden har vi en Antallet af walk-through videoer online, hvor jeg og CS50 hold virkelig gå gennem hver af disse eksempler på et meget langsommere tempo, en meget hurtig kan videresendes, eller vikles tempo, så du kan gå gennem disse på din fritid så godt. Så her er Scratch til venstre. Her er et program på det rigtige at jeg har allerede pre-made. Så lad mig zoome ind på dette. Og kunne nogen på engelsk, vel vidende hvad du ved, bare fra nu, som hvordan Scratch værker, en slags sige i en engelsk sætning eller en sætning, hvad betyder dette program tilsyneladende gøre? Ja, i orange trøje. PUBLIKUM: [uhørligt] DAVID J. MALAN: Ja, hvis din markøren er på Scratch katten, spille en meowing lyd. Men læg mærke til hvordan vi udtrykker det. Der er tilsyneladende en loop der, for evigt. Og så er der en tilstand, hvis udtryk. Og kollektivt, hvad gør de, betyde? Det betyder dette program er bare altid kører, og det er bare altid venter og ser og lytter for mig at flytte min musen over katten. Fordi hver gang jeg gør det, så De foreslår, det vil gøre dette. Lad mig starte programmet. Intet synes at være sker, men bemærk, hvordan det er fremhævet nu i en gul linje. Det betyder bare, det kører. Og fordi der er en evigt loop, er det stadig kører. Så lad mig flytte min markøren over Scratch. [MEOW] [MEOW] Og hvis jeg flytter det ud, [MEOW] nu det stopper, men programmets stadig kører. [MEOW] Og så yndig. [MEOW] Så lad os åbne op lidt mere avanceret eksempel hedder Ikke Pet Cat. Og lad os nu se, hvad sker her. [MEOW] meowing. Så det er lidt på auto pilot, hvis du vil. --pet katten. Jeg undrer mig hvorfor. [ROAR] [MEOW] Så hvordan gjorde dette arbejde? Nå, kan du slags grund igennem det intuitivt, måske. Men lad os se på den konkrete kode. Så igen, når det grønne flag klikkes, gør dette for evigt. Hvad vil du gøre for evigt? Tja, hvis rørende mus pointer, så spiller en lyd, der er tilsyneladende hedder Lion 5, der er inde i dette projekt, ellers afspille lyd meow, og derefter vente to sekunder, så at det ikke meowing ustandseligt. I virkeligheden, kan du meget hurtigt begynde at irritere dig selv og dine bofæller. Lad os fjerne denne blok. Og læg mærke til, hvad der er rart om Scratch. Ting bare lidt træk og slip og interlock. Så igen, det vokser til udfylde hvad du ønsker. Men hvis jeg fjerner denne, og derefter hit spil, [COMPUTER BLIP SOUND] --Det er slags snuble over selv, fordi det er bogstaveligt talt gør, hvad jeg siger. Det siger evigt afspille denne lyd, men Jeg er ikke at give det en chance for at afslutte. Og så det ville være en fejl. Og det er derfor, vi havde denne ting herinde nu. Så lad os faktisk starte fra scratch-- slags ordspil lidt intended-- hvor vi nu har katten flytte. Så jeg har tænkt mig at gøre dette på i farten. Jeg har tænkt mig at zoome ind her, bare at få mig i gang på begivenheder. Og grønne flag klikkede. Og der er andre måder at starte scripts. Vi kommer til at holde det enkelt her. Og nu jeg har tænkt mig at gå fremad og gå under kontrol. Og igen, hvis du glemmer, hvor tingene er, skal du blot klikke rundt, og til sidst du finder dem igen. Så jeg vil gerne evigt gøre hvad? Jeg vil bruge bevægelse blok at jeg ved eksisterer, flytte 10 trin. Så lad os se hvad der sker her, hvis jeg spiller dette spil. Heldigvis er det ikke går for vidt. Jeg kan stadig slags grab ham i halen og trække ham tilbage. Men programmet er stadig kører, så han er lidt at kæmpe mig. Men det ville være slags rart, hvis jeg betinget løse dette i kode. Da dette er not-- faktisk det er virkelig ikke et sjovt spil for nogen i enhver alder. Så lad os prøve at løse dette ved at have en form for betingelser. Så jeg har tænkt mig at gå under Kontrol, og derefter, hvis. Jeg kan lide denne idé. Så efter flytning 10 trin, if-- lad mig fornemmer, hvor jeg er. Jeg har tænkt mig at gå under Sensing, og så det ser jeg kan gå her. ro til formen kampe. Størrelse ikke, men det er kommer til at vokse til at udfylde. Og nu er det en lille menu. Og nu mus pointer-- jeg ikke ønsker musen, jeg vil have kanten. Så Scratch er smart nok til at vide når en sprite rører kanten. Hvad ønsker jeg ham til rent faktisk at gøre? Lad mig gå videre og ændre bevægelse. Du ved hvad? Jeg har tænkt mig at have ham vende rundt. Så på 15 grader er ikke virkelig vil hjælpe mig. Jeg vil have ham til at vende rundt og gå den anden vej. Så lad os se hvad der sker her, hvis jeg ramte Spil nu. OK, slags dumme leder, men det gør præcis, hvad jeg sagde. Og det er at dreje hele Sprite. Nu viser det sig, jeg kan løse dette. Og jeg vidste ikke, hvordan at løse dette i første omgang. Jeg slags måtte futz rundt og se den bedste måde at gøre dette. Men hvis jeg går at-- lad os se, bevægelse. Åh, jeg fandt denne. Faktisk, Indstil Rotation Style. Venstre, højre, eller ikke rotere eller hele vejen rundt. Og det viser sig det er hvad jeg vil have. Og jeg har tænkt mig at sætte dette er ikke min loop, fordi jeg ikke behøver at sætte rotation stil flere gange. Jeg har tænkt mig sætte det øverst på dette program, så det bliver sat én gang, og derefter husker. Og nu jeg har tænkt mig at prøve dette igen. Lad mig stoppe programmet. Og nu der er fastsat, at fejlen. Så jeg iterativt forbedre på dette. Programmet er at få en lidt mere komplekse og større, men jeg tager små skridt så at sige, og små bites ud af problemet at få det bedre og bedre. Men også dette er slags halt. Du ved hvad? Vil bede en person med en rigtig god, frygtelig stemme gerne komme op? Nogen med en stemme. Øh, ja. Kom op. I grøn skjorte. Så det viser sig der er nogle andre sjove ting, æstetik og lyder ens. Her er meow. Jeg klikker på fanen Lyde. [MEOW] Der er den meow. [MEOW] [MEOW] [MEOW] --actually rekord noget af vores egne her. Så lad os gøre netop dette. Stedet for at bruge denne kat lyd, lad os gå videre her, og hvad er dit navn? Nick, rart at møde dig. Det er David. Så i et øjeblik, jeg skal at ramme knappen Optag. Og hvis du kan bare råber i den bærbare computer, "ouch", som om du bare gik ind i væggen, der vil blive meget værdsat. 1, 2. NICK: Ouch! DAVID J. MALAN: Awesome. Og nu kan gøre lidt redigering her. Kommer til at slippe af med de rolige dele. Og jeg tror, ​​det er godt. Mange tak. NICK: Pleasure. DAVID J. MALAN: Jeg har bare omdøbt det "ouch" men nu vil jeg gå tilbage til mine scripts. Og meddelelse der faktisk er forsvarlig her. Og jeg har tænkt mig at gå videre og afspille lyden ouch, og jeg har tænkt mig at gøre det, hvis det rører kun kanterne. Og så vil jeg har det vende rundt. Så lad os se hvad der sker her. Lad os gå fuld skærm. [VIDEO PLAYBACK] -Av! Av! Av! Av! Av! Av! Av! Av! [END AFSPIL] DAVID J. MALAN: Så du er klar at vi får lidt heldig. Jeg har tænkt mig at have ham flytte ligesom 100 trin ad gangen. Virkningen af ​​som nu går at være-- [computer fejl SOUND] Så inden grund. Så en mulighed for at forfine det yderligere, hvis vi virkelig vil. Så lad os nu indføre et andet koncept. At lade mig gå ind i en kaldet Tælle får og brug noget kaldes en variabel. Dette er en yndig lille får, og Jeg ændrede hans kostume så at sige. Så selv om standard er en kat, kan du uploade, du kan tegne, du kan gøre et vilkårligt antal tegn på din sprite. Her er et program, der er kommer til at gøre hvad på engelsk? Baseret igen på lige hvad du ved nu. Hvad er dette program gøre? Ja, det kommer til at tælle. En række ad gangen. Vi har tilsyneladende har dette sæt tæller. Jeg ved ikke, hvad det er, men måske er det en variabel. Det er bare en container, x eller y. Men ordet tælleren er mere beskrivende end matematiker s x eller y. Så vi kan bruge engelske ord for ting. Forever, betyder bare holde gør dette. Sig tæller. Nu hvor kom det fra? Tja, det viser sig, at tælleren er en variabel. Så det er bare en anden puslespil stykke jeg skabte på forhånd. Og selv om det sker ikke at være den samme form her, normalt ville du sige noget som hej her. Du kan også trække en variabel således at det er, hvad os komme sagt. Så jeg venter på et sekund, jeg ændre tælleren med en, forøgelse den ved at tilføje en. Således at nettoeffekten er denne bedårende tælle får. Selvom han selv er at tælle. Nu er det meget hurtigt kommer til at blive kedeligt fordi han kommer til at gøre dette virkelig for evigt, men det er, hvad det præcist programmets udformning foreskriver. Lader nu forsøge et andet eksempel der udnytter en variabel. Denne ene kaldes Hi Hi Hi, at får irriterende hurtigt. Nu er dette ene har to scripts. Og så igen, vi tager små skridt. Vi startede med noget super lille, tilføjes det, hvormed det. Nu ønsker jeg at gøre noget endnu mere dynamisk, så jeg vil gerne lytte til to forskellige ting ad gangen. Så til venstre, når grønne flag klikkes, Jeg sætte en variabel, som jeg skrev på forhånd kaldet Dæmpet. Og jeg vilkårligt sæt den til 0. Så Scratch har ikke sandt, og falsk, men det har 0 og 1. Så jeg kan tilnærme den samme idé. Og så evigt, hvis rummet bar er presset, derefter indstille variablen til 0. Eller ked af det. Hvis der trykkes på Space, og hvis dæmpet, variablen, er 0, derefter indstille dæmpet til 1, ellers sat dæmpet til 0. Dette synes lidt ligesom vi er bare gør og løsne arbejde. Men hvad er effekten? Hver gang jeg ramte mellemrumstasten, hvad sker der med min variabel kaldet slået, logisk? Slags bliver vendt. Det ændrer fra 0 til 1, eller 1 til 0. Så det tog et par blokke til at udtrykke det, men alle Jeg gør er at skifte tilstand variablen til 0 eller 1, eller 0 eller 1 hver gang jeg ramte mellemrumstasten. Nu herovre, hvad det gør? Evigt, hvis dæmpet er 0, så hvis tavs er falsk. Så hvis det ikke er slået fra, er den semantik der, afspille lyd søløve, og tænke Hi Hi Hi for to sekunder, vente to sekunder. Så opdager nu disse scripts er effektivt kommer til at løbe parallelt, så man kan lytte til en handling, den anden at træffe en beslutning baseret på denne handling. Og det kan gøre det for evigt. [Søløve BARKING] [Søløve BARKING] Det kommer til at gøre dette for evigt og [Sea Lion BARKING] som jeg lige har gjort. Og nu er det stadig kører men jeg har "slået" spillet. [Sea Lion BARKING] Og det er al denne fyr gør nu også. Lad os åbne et andet eksempel her. Lad mig gå ind i begivenheder, og nu denne bedårende også. Men bemærke det har to sprites. Så ikke bare to scripts med én sprite, men to sprites. Og hvis jeg klikker på den blå fyr, som jeg allerede har, jeg se, at han som ét program heroppe, der bogstaveligt talt bare siger dette, når jeg modtager en begivenhed, sige "Polo" i to sekunder. Så hvis du nogensinde har spillet i en pulje, spillet Marco Polo, Hvis den orange fyr script er nogen indikation, tilsyneladende hver gang jeg ramte mellemrumstasten, hvad er den orange fyr kommer til at gøre? Han kommer til at sige "Marco". Og så er det en ny blok. Vi har ikke set det før, men transmittere en begivenhed. Og jeg kunne kalde det begivenhed noget, vi ønsker. Vi vil vende tilbage til dette måske inden længe. Men udsende en begivenhed er en måde for en sprite at tale til en anden ved væsentlige passerer det en meddelelse. Det er ikke et budskab, du ser. Det er ikke noget visuelt. Det er en slags computer-meddelelse at den anden fyr lytter efter. Fordi ja, den blå fyr, tilbagekaldelse ikke har, når grønne flag klikkes. Han har i stedet, når jeg modtager en begivenhed. Da han bliver afleveret denne note i klassen, så at sige, bør han sige "Polo". Og så nettoeffekten er, at når jeg ramte den grønne flag, sker der ingenting. Men da jeg ramte mellemrumstasten, siger han "Marco", han svarer med "Polo". Men den eneste sprite jeg interagere med, er den orange en. Så det er en måde at slags passerer beskeder mellem sprites og have dem kommunikere med hinanden. Lad os nu se på et sidste én her kaldet tråde. Og bemærke dette ved at spille det. Så det er to sprites. Fuglen er slags flyver rundt. Han hoppende. Der er ingen "ouch", men samme idé. Men katten synes temmelig smart. Hvad er katten tilsyneladende gør? Og vente på det. Hvad er katten tilsyneladende gør? Det er ikke bare hoppende. Han efter fuglen. Og så tilsyneladende, er der en vej med en kombination af blokke her-- og lad os se på katten virkelig hurtigt. Forever, hvis røre fugl, så spiller lyden Lion 4, hvad det så er. Vi hørte det én gang. Ellers peger i retning af fugl, og flytte et trin. Det faktum, at det er nu en trin er det, der giver fuglen lidt af en fordel i første omgang, men hvis vi i stedet gør dette 10, for eksempel, så at hver iteration af løkken, han er flytte 10 trin af tid. Så mere plads. Lad os se hvad der sker derefter. [LION ROAR] Ikke alt, meget bedre. Så lad os nu prøve at forbedre på disse lidt iterativt, og komme tilbage til det forestillingen om en funktion. Og faktisk en af ​​de grundlæggende grillbarer af klassen design. Ikke bare at skrive programmer, der arbejder og som er korrekt, men er godt designet. Og design er langt mere subjektive, og du vil blive bedre til det med tiden. Men lad os tage nogle små skridt i retning af begyndende med et program, der virker, absolut, men det er ikke meget godt. Det er ikke meget godt skrevet. Så her er et program, der gør dette. Hoste, hoste, hoste. Hvad betyder det program ud? Ser rigtige for mig. Det siger sofa for en sekund, så den venter. Så det siger det igen, så er det venter. Så det siger det igen, så er det venter. Og så programmet implicit ender, fordi der er ingen løkke. Men hvorfor er det et dårligt skrevet program? Selv hvis du aldrig har programmeret før? Ligesom, hvad gnider forkerte vej, måske her? Ja? PUBLIKUM: [uhørligt] DAVID J. MALAN: Præcis. Du gentage dig selv igen og igen. Og bogstaveligt, jeg kopieres og indsættes to af disse blokke igen og igen. Og det er præcis den slags tilregnelighed kontrollere, at du skal gøre. Vent et minut. Skal jeg virkelig gøre dette? Så hvad er det, hvad er det indlysende løsning måske? Har en form for løkke. Og jeg ikke helt huske hvad brik er, men hvis jeg ser på næste iteration her, ja, er der ikke lige evigt loop, der er gentage nogle antal gange. Og så jeg har angivet tre. Og nu mærke til, hvor meget strammere, hvordan langt mere kortfattet dette program er. Og i en vis forstand, hvor meget lettere at vedligeholde. Hvis jeg ønsker at ændre ordet fra hoste til noget andet, ligesom Achoo, ligesom han nysen. Så jeg ændre det i en sted, og ikke tre. Så dette allerede føles lidt bedre design. Lad mig i stedet åbne hoste 2, vores tredje eksempel. Læg mærke som en datalog, Jeg begynder at tælle ved 0, typisk. Nu er dette ser lidt skræmmende på første, men virkningen er den samme. Hoste, hoste, hoste. Men hvad synes at være fundamentalt nyt i den øverste del af programmet? Jeg har fjernet sige. Jeg har fjernet ventetiden. Og hvad har jeg tilsluttet i stedet? En funktion. En hoste blok. Jeg mener helt ærligt, jeg synes slags af en idiot, hvis jeg ikke bare starte med blokken der er tilsyneladende kaldt "hoste", hvis det er alt jeg vil have ham gøre. Men det betyder ikke eksisterer i Scratch. Jeg gik i stedet til en i palet kaldes flere blokke her, og jeg trækker denne store lilla ting her, der lader mig definere en funktion. Det væsentlige lader mig skabe min egen puslespil stykke, der kan kaldes noget jeg vil, kan det gøre noget, jeg vil, men det giver den et navn. Det giver mig en ny, lilla brik at nu gør hvad jeg fortæller det at gøre. Så denne lilla stykke her svarer til denne ene her. Og hvad gør det? Den siger hoste for en sekund, og derefter venter. Og nu har jeg slags oprettet min egen tilpassede brik, således at den opfører sig præcis det samme måde. Så jeg kan holde gør dette. Og ja, har der kommer til at være mere og flere muligheder for modularisering, og lagdeling, kompleksitet oven på hinanden. Men denne grundtanke, faktisk i problemet sagde 0. Hvad du vil blive udfordret til at gøre, er at hente Scratch, eller bare bruge det på internettet, og bare have det sjovt med det. Vi giver dig et sæt af krav, der har en lyd, og nogle antal puslespilsbrikker. Men du vil gøre netop dette. Og du vil indse, at du kommer til at ønsker at tage nogle små skridt i første omgang, indtil dit program får mere og mere komplekse. Men i betragtning er det den bedste måde jeg kunne gøre dette? Kan jeg undgå dette instinkt måske, at kopiere og indsætte? Men før Problem Set 0, og før vi afbryder, troede, vi ville tage op en mere frivillig, hvis vi kunne, til en sidste program det er måske den mest montering på alle, givet dagens mødested. Kom ned. Ja. Ja. Hvad er dit navn? Uh-oh. Det er ok. Begge kommer ned. Og jeg har, vil beskæftige sig med dette en eller anden måde inden at næste ti sekunder. Så kom ned. Kom ned. Lad mig komme videre op her. Kom nu. Okay. Lad os se her. Så opdager virkelig hurtigt her, Hvis du gerne vil komme videre op. Vi vil gøre to runder af dette. Og hvad er dit navn? SABRINA: Sabrina. DAVID J. MALAN: Sabrina og? YING GEE: Ying Gee. DAVID J. MALAN: Ying Gee. Rart at møde jer begge. David. Så vores sidste eksempel her er kaldet Ivy s hårdeste spil. Og hvorfor ikke, vi har du Niveau 1, og du gør Niveau 2. Og vi vil se, hvor langt ud over at vi faktisk gå. Skrevet af en studerende sidste år, remixet af mig således at dette ville gå løbet godt i New Haven. Og jeg giver dig et spil, der kommer til at og bevæge sig pilene op og ned, og få Yale til målstregen. Nu sker det. [VIDEO PLAYBACK] [MUSIC - NFL på Fox TEMA SONG] [MUSIC - MC Hammer, "U kan ikke røre  DENNE "] -U Kan ikke røre ved dette. U kan ikke røre ved dette. Kan ikke røre dette. Min, min, min, min musik rammer mig så hårdt, gør mig sige, åh, min herre. Tak for velsignelse mig med en sind at rime og to hype fødder. Det er godt, når du ved, du er nede. En super dope homeboy fra Oaktown. Og jeg kendt som sådan, og dette et beat øh, kan du ikke røre ved. Jeg fortalte dig Homeboy U kan ikke røre dette. Ja, det er, hvordan vi lever og du ved U kan ikke røre dette. Kig i mine øjne, mand. U kan ikke røre ved dette. Yo, lad mig buste de funky sangtekster. U kan ikke røre ved dette. Friske nye spark og bukser. Du fik det sådan, og du ved, du ønsker at danse. Så flytte ud af din plads og få en flyve pige og fange denne rytmen. Mens det rullende hold på pumpe lidt bit og lade dem vide, hvad der foregår. Sådan. Sådan. Koldt på en mission så trække tilbage. Lad dem vide, at du er for meget og det er et træk Øh, du kan ikke røre. Yo, jeg fortalte dig, U kan ikke røre dette. Hvorfor du stå der mand? U kan ikke røre ved dette. Yo, lyder klokken skolens i, sugekop. U kan ikke røre ved dette. Giv mig en sang, en rytme at gøre dem sved det er hvad jeg giver dem nu. De ved, når du taler om Hammer du taler om et show, der er hyped. Og stramme sangere er sveden så videregive dem en mikrofon. Eller et bånd at lære, hvad det kommer til at tage, og nu han kommer til at brænde hitlisterne. Legit enten arbejde hårdt eller du kan lige så godt holde op. Fordi du ved U kan ikke røre dette. U kan ikke røre ved dette. Bryde det ned. Stop. Hammer tid. Gå med strømmen i et spin hvis du ikke kan flytte til dette så har du sandsynligvis er døde. Så bølge hænderne i luften [uhørligt] Dette er det for en vinder dans til dette, og du kommer til at få tyndere. Flyt slide din bagdel bare for et minut lad os alle gøre bump. Ja. U kan ikke røre ved dette. U kan ikke røre ved dette. Du må hellere få hyped Drengen U kan ikke røre dette. Ring på klokken skolens igen. Bryde det ned. Stop. Hammer tid DAVID J. MALAN: Det er det for CS50! Tak så meget for slutter sig til os! Se dig udenfor. [END AFSPIL] [VIDEO PLAYBACK] [MUSIC - "Seinfeld" TEMA SONG] -Hey David. -Hey, David. Hvordan går det? -god Job, dag. -Så Har du tænkt over, hvad du kommer til at gøre for ud vittigheder? Nej, jeg fik ikke noget. -Hvad If-- hvad hvis det er den ude joke? -lignende, Udpakning vogne? Uh-huh. Du ved, det handler om ingenting. -Så Kan lide, ingen historie, ingen konflikt, ingen løsning. Jeg forstår det ikke. Hvad er det om så? -Intet. -Så Vi har ud vittighed handler om ingenting, og vi har ingen skuespillere. Hvem kommer til at være i dette? -Nej Nej Nej. Jeg mener, vil jeg være i det. -Du Være i det? -Ja! Folk er altid fortæller mig jeg er et tegn. Tja, jeg mener, det er sandt. Men hvem der ellers kommer til at være i det? Det kan ikke bare være dig. -Du Vil være i det, Gavin, Dan, Dan, Colton, Z'Myla, Alysse, Doug, David alle. -Så Det handler om ingenting, og alle der er i den? -Absolutely Ingenting. -Dette Er latterligt.