[MUSIK SPELA] 

-Alright! 

Det här är CS50. 

Det här är CS50. 

Det här är CS50. [MUSIK - IGGY AZALEA, "snygga"] 

-Min Favorit minne från CS50 var när jag åkte till Puzzle dag. 

-Troligtvis Bara tiden bringade arbetar med problemsamlingar med mina vänner och människor som Wold så småningom bli mina blockmates. 

-Min Bästa minne från CS50 är Hackathon. -The CS50 Hackathon. 

-Hackathon. 

-Hackathon. -Hackathon. -The Hackathon -Rob Bowden. Bara allt om honom. 

[MUSIK - IGGY AZALEA, "snygga"] 

-Min Favorit minne är när jag var på skede och jag spelade den prestigefyllda rollen av en nod [? i Linked?] [? List. ?] 

-När Vi alla fick gratis Dropbox-utrymme och David var som, titta under era platser. Och det var, plats för alla! 

[MUSIK - IGGY AZALEA, "snygga"] 

-Min Rådgivning för alla inkommande studenten skulle vara att verkligen arbeta med P-apparater med vänner. 

-Kontor Timmar är väldigt mycket din vän. 

-Gör Det mesta av din erfarenhet och träffa så många människor som möjligt. 

-Var Inte rädd för att be om hjälp. -Start P-set i början av veckan. Jag tror att den största är att utnyttja alla resurser som CS50 har. 

-Gå Till kontorstid i början av veckan. 

-Definitivt Titta shortsen. 

-Var Förhala på din P-set. -Kontrollera Att du hittar en bra grupp människor att arbeta på P-apparater med. Du kan ha mycket roligt och få arbetet gjort tillsammans. 

-Var Inte rädd för att skjuta dig själv. Gå för hacker upplagan ibland. 

Skrivning av saker på papper innan du någonsin röra din dator. 

-CS50 Är riktigt bra på tillhandahåller sätt att få hjälp. 

-Min Ett råd är sömn. Har någon sagt det? Sömn, för säker. Det är lätt att inte göra, men du måste göra det, tror jag. 

Jag skulle säga egentligen vara mentalt förberedd eftersom du kommer att älska det. [MUSIK - IGGY AZALEA, "snygga"] 

Det här är CS50. 

Det här är CS50. 

Det här är CS50. [MUSIK - IGGY AZALEA, "snygga"] 

Det här är CS50. 

[Applåder] 

DAVID J. MALAN: Så detta är CS50 och detta är slutet på vecka 0. Och det var bara några av CS50: s personal som väntar inte bara i avsnitten Mottagning, men, också, denna kommande helg vid CS50 Puzzle dag. Vilket, återigen, inte allt om programmering. I själva verket är det troligt att du kommer inte att behöva programmera något, utan snarare lösa problem med hjälp av intelligens och vänner tillsammans dig. 

Vi kommer att få sällskap av några av våra vänner på Facebook-- Om du registrerar här-- som under de senaste åren, har faktiskt skrivit dessa utmaningar med oss. Och så kommer de att vara de i slutändan kör Puzzle dag. Och så kommer du att utmanas med just den typen av saker och problem som folks vid Facebook gillar att tänka på. Så det är i morgon. Registrera dig på cs50.harvard.edu/register. 

Nu ett ord om ett par av personal i synnerhet. Detta här är Ansel Duff, vem är faktiskt en av medförfattarna till dessa binära lökar som vi såg på onsdagen, förutom CS50 egen Dan Bradley. Ansel Duff var också en före detta förstaårselev advisee av mina 3 år sedan och han faktiskt även byggt denna talarstol. Han har gått på att göra ingenjörsvetenskap och mer. Nu är hans bild här faktiskt Ansel 3 år sedan i CS50 Hackathon när han lånade en av våra ballonger, fast den till sin bärbara dator, och, för nästa 12 vissa udda timmar, med fokus på hans sista projekt, tar pauser bara öppna påsar med godis på Hackathon. 

Men han fortsatte senare till bringar i somras med oss, sedan CS50 för sin personal, och nu eleverna denna termin, har en egen 3D-skrivare. Och i ett nötskal en 3D-skrivare är en enhet som ser ganska så här. Du fyller den med en plast spole som smälts ned av enheten och du bygger saker bokstavligen från ingenting. Ungefär som en bläckstråleskrivare, börjar du spotta ut små prickar av plast den formen tillsammans bilda hela objekt. Och så Ansel exempelvis tidigare i sommar, har en iPhone 5 och beslutade att han verkligen ville att stötta upp på hans skrivbord. Men han ville inte gå ut och köpa något från Apple Store eller liknande, så han satte sig ner och började rita något. Han tog några mätningar hur tjock och hur stort hans iPhone var, Han drog denna bilden här, Han bestämde att han ville att ha en 75 graders lutning som stirrade på honom på hans skrivbord där. Han vände då detta, med hjälp av programvara, till en 3D CAD-modell det såg lite ungefär så här. Och så fortsatte han, i slutändan, att faktiskt skapa den. Så i själva verket, om någon av er här, kanske i rad som jag kan kasta till, har an-- där har vi folk med iPhone 5, och här har vi två till. 

Nu, inte vara sämre, CS50 egen Cheng Gong fastställs också i sommar att bygga en hel del saker och, i själva verket, för skäl som fortfarande är oklara, har varit långsamt utskrift av en armé av elefanter med ledade armar och stammar. Ett par av dem är faktiskt här om någon skulle nu like-- en elefant. Okej,. men vad Cheng gjorde också för oss är han mycket vänligt inrätta en kamera eftersom det elefant, tro det eller ej, tar cirka två och en halv timme för att skriva ut. Även iPhone monter tog en och en halv timme för att skriva ut. Och vad Cheng gick framåt och gjorde inrättades en trevlig kamera framför i denna 3D-skrivare, filmat i en timme och en halv som Ansel design skrivs ut. Vi överdrog några sexig musik till den för för att ge dig det här för att titta hur 3D tryckeri. Och även om detta är faktiskt i plast, inser att om detta är ett område av intresse för dig akademiskt, det finns folk, bland dem Jennifer Lewis här på Högskolan för Engineering, som faktiskt arbetar med 3D-utskrifter av plastföremål. Men även, i allt större utsträckning, biologiska material för att lösa fysiologiska problem för människor. Men här är en liten något från CS50. 

[LOUD mekaniska ljud] DAVID J. MALAN: Det låter inte något liknande i verkligheten, men det är mycket svalare att titta på det vid den hastigheten, och med det ljudet. 

Nu på onsdag, hur fick vi först hit? Vi började prata om datorn vetenskap och vi frågade vad det var. Och det handlar om ett antal saker, och det finns så många olika riktningar där du kan bege efter en kurs som CS50. I själva verket om du plockat upp en av dessa icke-officiella guiderna till CS utsidan, häftet som Vi har förutsatt, oavsett om du är funderar på att ta just CS50, eller kanske göra en sekundär, eller kanske till och koncentrera i CS, behöver bläddra igenom det. Och du kommer att se ett diagram mot slutet som visar de många olika riktningar i CS som du kan gå ut i. 

Men i dag, kommer vi att fokusera, igen, på verkligen en av de grundläggande åsikter, kanske, där du har ingångar på problem, du har utgångar från problem, och du har algoritmer som man kan skapa dessa utgångar från dessa ingångar. Och ett sådant exempel var av Naturligtvis denna telefonbok här. Och vi som ett exempel för att gå genom en algoritm som var korrekt. Och sedan en annan var korrekt, men lite snabbare. Och sedan en annan som var lite mer dramatiskt, men i grunden snabbare. 

Just denna telefonbok vi hävdade hade cirka 1.000 sidor. Och hur många gånger har jag har att riva telefonboken i hälften att hitta någon som Mike Smith, maximalt, av 1000 sidig bok? Så, 10 ge och ta. Och så när jag rev den här saken i hälften, eller helt enkelt, mer moget, uppdelad på mitten, det är bara 10 sidor av 1000. Och om du extrapolera, lite orealistiskt för en telefonbok, men om detta telefonbok hade vissa 4 miljard sidor i den, så helt otymplig fysiskt, hur många gånger ska du delar ett 4 miljarder sida telefonbok i hälften? Så det är faktiskt 32, ge eller ta. Och bara så 32 gånger, ut 4 miljarder sidor, kan du hittar någon som Mike Smith. Och det är effektiviteten. Det är en bra algoritm, förmodar. 

Men sedan flyttade vi från det att försöka formalisera det. Och jag föreslog denna pseudokoden. Pseudokod kod är inte något formellt. Det är inte något du memorera. Det är bara något du uttrycker ganska intuitivt att använda engelska, eller något språk riktigt, att förmedlar dina idéer fattat. Men vad är nyckeln om pseudokod kod är att du försöka förutse alla de möjliga fall som kan hända. Och faktiskt, i denna pseudo kod, fanns det egentligen tre fall varje gång jag delade telefonboken. Mike kan vara till vänster. Mike kan vara till höger. Eller han kan vara rätt på sidan jag är på. Eller en fjärde hörn fall, så att säga. En dålig scenario skulle kunna vara en which-- vad som händer? Mike är bara inte in telefonboken alls. 

Och när programmen crash-- när Mac och PC-program som ni kör på dina datorer ibland hänger eller avslutas oväntat, som i allmänhet innebär att vissa programmerare, en del människa som dig snart, bara skruvas upp och gjorde några misstag. Kanske inte räknar med att det kanske finns är inte Mike Smith i telefonboken. Och om du inte faktiskt skriva kod för att hantera situationer som detta, i allmänhet oförutsägbar saker kan hända. Maskinen kan frysa. Den kan starta. Programmet kan sluta. Och så alla dessa dumheter som du kan har stött på i din faktiska livet bara med hjälp av datorer, kommer också att bli precis förklaras bort av denna intuition och denna förståelse av vad som är faktiskt händer under huven. 

Nu ska försöka att ta en titt på ett mer allmänt problem. I stället för att ta närvaro på en plats som detta, vilket skulle vara ganska långsam att göra en, två, tre, fyra. Eller kanske två, fyra, sex, åtta. Låt oss fokusera i stället på hur vi kan formalisera algoritmen i den process genom som vi kunde ta närvaro. Och längs vägen, låt oss börja att tillämpa vissa nomenklatur att vi använder i dag, när vi faktiskt börja programmera i ett språk. Så jag ger er nu, en fyra minuters video att vi tillsammans med våra vänner från TED, organisationen. Där vi levererade ett manus och de förde sina animatörer att bära, och faktiskt skapade en 2D animering av vad en algoritm är. Om vi ​​kunde dämpa belysningen. 

[MUSIK SPELA] BERÄTTARE: Vad är en algoritm? I datavetenskap, en algoritm är en uppsättning av instruktioner lösa vissa problem steg-för-steg. Typiskt algoritmer är utförs av datorer, men vi människor har algoritmer som väl. Till exempel, hur skulle du går om att räkna antalet personer i ett rum? Tja, om du är som jag, skulle du antagligen peka på varje person ett i taget och räkna upp från noll. Ett, två, tre, fyra, och så vidare. Tja, det är en algoritm. Faktum är, låt oss försöka uttrycka det en lite mer formellt i pseudokod kod. Engelsk-liknande syntax som liknar ett programmeringsspråk. 

Låt n lika med 0. För varje person i rummet, ställa n lika med n plus 1. Hur man tolka pseudokoden? Tja linje ett deklarerar, så att säga, en variabel kallade n och initierar dess värde till 0 här just innebär att vid början av vår algoritm, sak som vi är räkning har ett värde på 0. När allt innan vi börjar räkna Vi har inte räknat något ännu. Ringa denna variabel n är bara en konvention. Jag kunde har kallat det mest något. Nu linje två avgränsar början av en slinga, en sekvens av steg som kommer att upprepa några antal gånger. Så i vårt exempel, steg vi tagande räknar personer i rummet. Under linjen två är linje tre som beskriver exakt hur vi ska gå till väga för att räkna. Inbuktningen innebär att Det är linje tre som kommer att upprepa. Så med pseudokod-koden är tale är att efter start vid 0 för varje person i Rummet vi öka n med 1 Nu är den här algoritmen korrekt? Bra låt oss bang på det lite. 

Fungerar det om det finns två personer i rummet? Låt oss se. I linje man initiera vi n till 0. För var och en av dessa två personer, vi sedan öka n med 1. Så i första resa genom loop, uppdaterar vi n från 0 till 1. Den andra resan genom det samma slinga, uppdaterar vi n från 1 till 2. Och så, med denna algoritm är ände, är n 2, vilket faktiskt motsvarar det antal av personer i rummet. Så långt är allt väl. 

Vad sägs om ett hörn fall om? Antag att det finns 0 personer i room-- förutom mig, vem är gör räkna. I linje ett, vi återigen initiera n till 0. Den här gången dock, linje tre körs inte alls eftersom det inte finns en person i rummet. Och så n är fortfarande 0, vilket verkligen matchar antalet personer i rummet. Ganska enkelt, eller hur? Men räkna människor en i taget är ganska ineffektivt, också, nej? Visst kan vi göra bättre. Varför inte räkna två personer åt gången, stället för att räkna ett, två, tre, fyra, fem, sex, sju, åtta, och så vidare. Varför inte räkna två, fyra, sex, åtta, och så vidare? Det låter ännu snabbare. Och det säkert är. 

Låt oss uttrycka denna optimering i pseudokod kod. Låt n lika med 0. För varje par av människor i rum, satt n lika med n plus 2. Ganska enkel förändring, eller hur? I stället räknar människor en i taget, vi istället räkna dem två åt gången. Denna algoritm har sålunda dubbelt så fort som den sista. Men är det korrekt? Låt oss se. Fungerar det om det finns två personer i rummet? I linje ett, vi initiera n till 0. För att ett par personer, vi sedan öka n med 2. Och så av denna algoritm s ände n är 2, vilket faktiskt motsvarar det antal av personer i rummet. 

Antag därefter att det finns noll personer i rummet. I linje man initiera vi n till 0. Liksom tidigare linje tre inte köra allt eftersom det inte finns några par människor i rummet, och så n förblir 0. Vilket verkligen matchar antal personer i rummet. Men tänk om det finns tre personer i rummet? Hur fungerar denna algoritm biljettpriset? Låt oss se, i linje ett, Vi initiera n till 0. För ett par av dessa människor, vi sedan öka n med 2. Men sen då? Det finns inte en annan full par personer i rummet, så linje två inte längre gäller. Och så av denna algoritm slut, n är fortfarande 2 som inte är korrekt. I själva verket sade denna algoritm är att vara barnvagn eftersom det har ett misstag. 

Låt oss upprättelse med några ny pseudokod kod. Låt n lika med 0. För varje par av människor i rum, satt N till n plus 2. Om en person fortfarande oparade, set N lika med n plus 1. För att lösa detta problem, vi har introducerades i linje fyra villkor, annars känd som en gren, bara att exekverar om det finns en person som vi kunde inte para ihop med en annan. Och så nu, oavsett om det finns en, eller tre, eller någon udda antal personer i rummet, denna algoritm kommer nu räkna dem. Kan vi göra ännu bättre? Jo, vi kunde räkna in tre och tre, eller fyror, eller till och med femmor och tior, men utöver det, det kommer att få lite svårt att peka. 

Vid slutet av dagen, oavsett om utförs av datorer eller människor, algoritmer är bara en uppsättning instruktioner med som att lösa problem. Dessa var bara tre. Vilka problem skulle du lösa med en algoritm? 

DAVID J. MALAN: Så medvetet, ett mycket enkelt program, en mycket enkel algoritm, för att uppnå något mycket enkelt, att räkna antal personer i rummet. 

Men låt oss retas isär en del av den representativa terar här som faktiskt kommer att vara till nytta även när genomföra den mest komplex av programvara. Så till exempel, i detta första raden, Vi har vad vi kallar variabeln, och från algebra, du allmänt bekant med x och y och z ibland, och så vidare. Men i programmering, variabler fortfarande, i slutet av dagen, mycket lik den som. Men det är kanske enklare att tänka på en variabel som bara en behållare. Och i själva verket är det ett visst antal bitar genomfört något sätt i din hårddisk eller i datorns minne, men mer om det i framtiden. Det är bara en container. Och om du säger något som låter n lika med 0, Ja, det är som att kalla detta glas skål här n, bara ett godtyckligt namn, och sätta något i den till en början. Så värdet av denna skålen är just nu noll. Och naturligtvis om du uppfattar i en efterföljande linje, att faktiskt öka något linje kod, som i detta tredje raden här, med 1, det är som att säga vad som är det aktuella värdet på n, det är 0, plus 1, sätta något som en ping pong boll här. Nu värdet av denna variabel är helt enkelt 1. Och du kan mycket snabbt extrapolera, men nu är det 2, nu är det 3, och så vidare. Så det är allt en variabel är. Det är en bit av lagring till faktiskt lagra vissa uppgifter. För nu är det en ping pong boll. Där är det ett nummer. Men det kan vara ord i ett lexikon, som stavningskontrollen Jag hänvisade till på onsdag för en av förra årets problemsamlingar. 

Nu en annan viktig idé, som på liknande sätt är ganska intuitivt skulle jag påstå, är det av en slinga. Och slingan i processen att räkna alla är, naturligtvis, att göra samma sak igen och igen-- endera åt gången eller två åt gången. Och du kan uttrycka detta på engelska, eller pseudokod kod, i en rad olika sätt, men med användning av denna preposition "för" är ett mycket vanligt sätt att göra det. För varje person i rummet, gör det här. Om och om igen. Och det faktum att det är indragen, linje tre, betyder bara att det som du ska göra är saker som är indragen under linjen två själv. Bara en mänsklig konvention, men en vanlig man som vi ser i själva högre nivå programmeringsspråk. 

Nu lite mer intressant är när du får i ett hörn fall. Till exempel, ett hörn fallet var när det var tre personer, eller fem, eller sju, eller någon udda antal personer i rummet, eftersom att göra det två och två bromsar så småningom eftersom din kommer att missa någon, antingen vid början eller slutet beroende på hur du gör det. Och så, nu har jag denna gren, eller tillstånd, om en person som kvarstår, sedan gå vidare och hantera att en lonesome person som inte fick parat med någon annan. Så det är vad vi skulle kalla ett tillstånd, eller en filial. 

Nu pseudokod kod mer generellt kan vara skriven för att lösa eventuella antal problem. Och vad jag tyckte vi skulle göra här är att ta en stund att bjuda in ska vi säga CS50 s äger Rob Bowden på scen att få sällskap av två volontärer, som inte har någon aning om vad som väntar. En hand gick ner så fort jag sa det. Vad sägs om dig på slut här, kom upp. Och vad sägs om från längre bort, vad sägs om vägen i ryggen. Bakre raden, kom upp med händerna. Okej, och vad heter du? 

ANITA: Anita. 

DAVID J. MALAN: Anita. Okej, trevligt att träffas. Låt mig presentera dig för Rob Bowden. Det här är Anita. Och vad heter du? 

Kiersten: Kiersten 

DAVID J. MALAN: Kiersten. Kiersten, kom upp och träffa Rob Bowden och Anita. Trevligt att träffas. Kiersten: Trevligt att träffas. DAVID J. MALAN: Alright, Rob. ROB BOWDEN: Trevligt att träffas. DAVID J. MALAN: Anita. Kiersten: Hi Anita. DAVID J. MALAN: Och din flera hundra klasskamrater. Så, nu vill jag gå vidare och dra upp bara ett enkelt program här på Mac OS som låter mig faktiskt krafsa ner några anteckningar. Och om ni vill var och en vidta en ställning på en av dessa skolor där, Låt mig gå vidare och startar en lista av pseudokod kod, om du kommer. Och vad jag vill göra här, i slutändan är typ för dig några instruktioner om att vår publiken är faktiskt kommer att recitera för oss. Låt mig gå vidare och bara ändra detta till en numrerad lista att matcha det vi gjorde där uppe. Och vad jag ska göra med din hjälp, är att skriva ett program i pseudokod, med vilken dessa killar går att genomföra en jordnöt smör och gelé smörgås. Så det är kanske apropos till visa något vissa av er kanske har sett på internet för bara en kort stund irriterande. 

[MUSIK BUCKEWHEAT BOYS, "JORDNÖTSSMÖR  JELLY TIME "] DAVID J. MALAN: OK. Det är nog av det. Så här tiden, jag har en par Google Glasses som vi ska sätta på CS50 egen Rob Bowden att se världen genom hans ögon. Och vi ska göra vårt bästa i tjänst produktionen att faktiskt väva filmen om vad Rob är att se Nu, i denna faktiska föreläsning video med våra två volontärer bredvid honom. Så vad jag ska göra är, ska jag vara maskinskriverska. Vi har som mål här i faktiskt skriver ett program som man kan göra, i slutändan, en jordnötssmör och gelé smörgås, men dessa tre kommer att bete sig som om de är datorer. Och datorer, i slutet av dagen, är faktiskt ganska dumma enheter. De är supersnabb, men de bara kan gör, bokstavligen, vad de sagt. Man kan inte bara säga att en jordnöt smör och gelé smörgås. Du måste programmera dem att göra det. Du måste berätta för dem med precision vad man ska göra, mindre saker går fruktansvärt och, förhoppningsvis roande snett. 

Så med det sagt, vi behöver ett samtal ut från publiken för vad som bör öka man vara, om målet här är att göra en jordnöt smör och gelé smörgås. Ja? 

PUBLIK: [ohörbart] påse med bröd. DAVID J. MALAN: Öppna påsen med brödet. Så om de tre tävlande skulle vilja fortsätta att göra det bokstavligt. Öppna påsen av bröd. 

[PUBLIK SKRATTA] DAVID J. MALAN: Så låt oss arbeta med det. Okej. Så steg två, how-- låt oss ta detta vidare. Ja, i fronten. 

PUBLIK: [ohörbart] brödet. 

DAVID J. MALAN: Vad är det? 

PUBLIK: Ta bort brödet. DAVID J. MALAN: Ta brödet. Likaså kortfattad. Tack. 

[Applåder] DAVID J. MALAN: Det är det? OK, så steg två kommer vara avlägsna brödet. Okej, någon vill skriva oss ett längre straff? Någon annan? Lite mer [ohörbart]. Nej, ingenting nu. Ja? 

PUBLIK: Placera två skivor bredvid varandra. 

DAVID J. MALAN: Placera två skivor bredvid varandra. 

[PUBLIK SKRATTA] 

DAVID J. MALAN: Placera två skivor bredvid varandra. Steg fyra. Ja? 

PUBLIK: Ta din hand och sätta den lätt ovanpå locket jordnötssmör. 

[PUBLIK SKRATTA] PUBLIK: [ohörbart] bredvid jordnötssmör. DAVID J. MALAN: Vad? Säg det igen. 

PUBLIK: Skruva av locket och sätta den försiktigt bredvid jordnötssmör. 

DAVID J. MALAN: Lägg den försiktigt bredvid jordnötssmör. OK, framsteg. Steg fem. Utmärkt. Ja? 

Plocka upp kniven. DAVID J. MALAN: Plocka upp kniven. OK, steg sex. Yeah? 

PUBLIK: Håll kniven i handtaget. DAVID J. MALAN: Håll kniv i handtaget. Håll kniven i handtaget. Steg sju. Ja? 

PUBLIK: [ohörbart] kniven i jordnöts smör och så lite ut [ohörbart]. 

DAVID J. MALAN: Sätt kniven in-- jag hört "sätta kniven i jordnötssmör och ta så lite ut som möjligt. " Förresten, ta bort papperet. Okej, steg nio. Steg nio. Steg nio. Vi har faktiskt inte gjort en smörgås än. Ja? PUBLIK: Använda kniv i jordnötssmör, tillämpa jordnötssmör på nämnda bröd. 

DAVID J. MALAN: Att använda kniv i jordnötssmör, tillämpa jordnötssmör på nämnda bröd. 

[PUBLIK SKRATTA] DAVID J. MALAN: Okej steg 10. Steg 10. Ja? 

PUBLIK: Taste jordnöt smör för att säkerställa kvaliteten. 

[PUBLIK SKRATTA] David J. MALAN: Steg 11. Steg 11. Steg 11. Kom igen. Yeah? Just där. 

PUBLIK: plocka försiktigt upp gelé. 

DAVID J. MALAN: plocka försiktigt upp gelé. OK, och sedan en annan hand var upp. Bakom dig. Ja, i blått. 

PUBLIK: Okej, ta bort lock från [ohörbart], ja, ta bort locket från jelly. 

[PUBLIK SKRATTA] 

David J. MALAN: Från gelé. Ha ha. 

[PUBLIK SKRATTA] DAVID J. MALAN: Och? PUBLIK: Och knappt sopa något [ohörbart]. [PUBLIK SKRATTA] Publik: Naturligtvis, innan [ohörbart], bort papperet från jelly. DAVID J. MALAN: Ta bort papper från jelly. Steg 14. Vi är nästan där. Ja? 

PUBLIK: Vänd gelé flaska innan allt faller ut. 

DAVID J. MALAN: Invert gelé flaska innan gelé faller ut. Steg 15. 

PUBLIK: Sätt tillbaka locket. 

DAVID J. MALAN: Sätt tillbaka locket. Steg 16. Yeah? 

PUBLIK: [ohörbart] DAVID J. MALAN: Säg det igen. PUBLIK: Ta locket från din gelé. DAVID J. MALAN: Av din gelé. Så really-- Oj. Kom igen. Sätt tillbaka locket. Sätt cap-- Du sa ta bort locket från jelly. Känns som att vi är i lite av en slinga. Steg 17. Ja? 

PUBLIK: [ohörbart] DAVID J. MALAN: Säg det igen. PUBLIK: [ohörbart] DAVID J. MALAN: Gå tillbaka till step-- PUBLIK: [ohörbart] DAVID J. MALAN: Ta bort locket från jordnötssmör. Ja? 

PUBLIK: Släpp alla gelé på brödet. 

DAVID J. MALAN: Släpp alla gelé på brödet. DAVID J. MALAN: Vi är nästan där. Steg 19. 

PUBLIK: Ta bort överflödig gelé. 

DAVID J. MALAN: Haha, gelé. 

[Applåder] DAVID J. MALAN: Varför inte Vi-- ett steg att ta detta hem. Ett steg till och sedan serverar vi smörgåsar. Ja? 

PUBLIK: [ohörbart] 

DAVID J. MALAN: Även om alla sandwich remains-- låter strecksatsen detta-- äta. 

[Publiken skratt] 

DAVID J. MALAN: Okej, tack dig till våra volontärer här. 

[Applåder} 

DAVID J. MALAN: Vi har några trevliga parting gåvor till var och en av er. Din egen jordnötssmör, gelé, och bröd att ta med hem. Tack. 

Kiersten: Tack. DAVID J. MALAN: [ohörbart] välkomna. [Applåder] DAVID J. MALAN: Så det här är, om naturligtvis ett löjligt exempel. Rätt? Men det slags avslöjar hur vi människor tar bara tydlighet för givet. Och det faktum jag har varit prata med en annan människa, han eller hon bara vet vad du menar. 

Datorer kommer inte att veta vad du menar, även vid användning av, som vi håller på att göra i dag, programmering något i Scratch, ett drag och släpp, pusselbit stil språk. Även avsedd för unga barn, har du att vara så tydlig och så bokstav med vad du vill att ditt program ska göra. Nu i slutändan, är vi kommer att vara programmering inte i pseudokod-koden, Engelska liknande syntax, men kod eller, mer korrekt, källkod. Källkod är bara finare sätt för att beskriva kod du faktiskt skriva med ett tangentbord som är inte på engelska per se. Det är i C eller Java eller C ++ eller något så där, så vi får snart se. 

Och faktiskt, bara för att skrämma en några av er, vid första anblicken, detta är ett program skrivet på ett språk heter C. Men för att un-skrämma några av er, du kommer helt förstå vad som händer på kommer nästa måndag när det kommer till ungefär så här. Ärligt talat, det här är en äldre språk. Det är ganska svårbegriplig, men det är representativt av en massa språk dessa dagar som har massor av parenteser och lockigt hängslen och citationstecken och semikolon. Och en hel del av detta syntaktisk saker som inte alls intellektuellt intressant. I själva verket är det en fullkomlig distraktion från de mycket enkla idéer som stirrar oss i ansiktet. Detta program, som ni kanske bara gissa, utskrifter till någons datorskärm orden "Hej kommatecken världen." Det är allt. Så klart, det finns en massa saker som är komma i vägen för någon uppenbar där, men det kommer att mycket snabbt glida bort och vara helt intuitivt. 

Ja, vad vi ska göra idag är destillera denna ganska komplicerade ser programmet, som återigen kommer att komma att förstå snabbt, utan att något mycket enklare. Låt oss bara säga vad vi menar. Låt oss rita en bild av vad vi menar, genom dessa pusselbitar här. 

Så detta är en programmering språk kallas Scratch. Det utvecklades av MIT: s Media Lab. Och vad du ser i problembild noll, som kommer att släppas senare i kväll, vi måste du gå till denna URL här scratch.mit.edu. Och de har en webb baserat gränssnitt via vilket du kommer att skriva ditt första program. Eller de av er med tidigare erfarenhet, dina andra program, men i en miljö som är förmodligen lite obekanta och att kommer att driva dig att skapa något användning av denna mycket visuell miljö. 

Nu, vad jag ska göra här är öppna själva programmet. Den existerar inte bara som en webbläsare, men också som ett nedladdningsbart program så att du faktiskt kan använda den Om du inte har tillgång till internet. Och jag kommer att göra det här, i Sanders, bara ifall Wi-Fi inte samarbeta super bra. Och vad jag ska göra är att peka ut några funktioner i programmet. Så, för att vara tydlig, jag har bara dubbel klickade på ikonen på skrivbordet, eller ekvivalent gått till scratch.mit.edu, och det drog upp det här fönstret. Detta är en programmeringsmiljö. Det är en programvara som några av våra vänner på MIT skrev att låt oss och du skriver program i ett språk som kallas Scratch. 

Nu råkar det vara en katt som är också heter Scratch och detta är hans värld där han bor. Detta är det skede, så att säga, att rektangel på det övre vänstra hörnet. Och han behöver inte se ut som en katt. Du kan få honom att se som någonting och du kan ha många sådana sprites, eller tecken, i ett program. Under tiden här borta på långt höger, är en stor tom yta. Och det är här, i ett ögonblick, vi kommer att börja programmera genom att dra och släppa dessa grafiska pussel bitar som är rätt här i mitten. Och det finns mycket mer av dem än Vi tillbringar tid på här i klassen eftersom du kommer att upptäcka att de är alla ganska intuitivt. Återigen, det är utformat för barn, men vi använda den för att retas isär en del av dem grundtankar variabler, loopar, villkor och, snart, saker liknande tillställningar och evenemang och gängor och andra fina saker som vi kommer komma till inom kort för att faktiskt skapa något från Scratch. Pun intended. 

Nu, vad jag ska göra här är klicka på inte motion, utan kontroll. Och detta är bara en kategorisering av här-- och jag ser en annan färguppsättning av block. Men märker några välbekanta ord. "Om" och "else if" och "repeat". Och du kan nog gissa det är som påminner om filialen, eller villkoren som vi såg, och även den looping konstruktet. Så vi har liknande kvarter här. Men det mest intressanta en är det en här. När denna gröna flaggan klickas, detta, för dem med tidigare programmering erfarenhet, motsvarar till en huvudfunktion. Men för dem obekanta, detta är den pusselbit som kommer att få igång hela vårt program. Det betyder bokstavligen när jag går, i detta program, och klicka på en grön flag-- som du kan se här uppe i övre vänstra hörnet på UI, så ser den gröna flaggan bredvid den röda stoppskylten? När jag klickar på det, min Programmet kommer att löpa. Nu ska jag göra något super enkelt med Scratch. Jag kommer att gå vidare och gå till ser panelen Här, där jag har ett gäng av lila pusselbitar, och jag kommer att gå vidare och göra något super enkelt ut, säger. Och sen-- meddelande här text i den vita rutan är editable-- jag ska säga "Hej världen", precis som vi gjorde i den text version för en stund sedan. Och nu om jag går och klicka här grön flagg, har jag nu programmerat. Det är inte en särskilt intressant program, men jag gjorde datorn göra något. Jag startade ett program och det gjorde vad jag sa till den att göra. Nu kan jag fortsätta att dra och släppa mer och mer av dessa pusselbitar och de kommer att låsa, men låt oss smälla lite terminologi här att vi får se återkommande under hela kursen, och verkligen hela datavetenskap och programmering i allmänhet. 

Denna "säger" block, i lila, låt oss bara börja ringa ett uttalande. Det är som ett konstaterande. Gör detta. Så det är en kategori av instruktioner som du kan mata en dator som en del av ett program eller en algoritm. Och för att vara tydlig, du har förmodligen tas för givet att du har program på din dator. Och de är typ av algoritmer, men ett Programmet är verkligen ett gäng algoritmer att vissa människor skrev. De förpackade det upp och de sålde det så att du, eller de publiceras på en webbplats som du kan hämta. Så, är ett program bara en massa nollor och ettor det, på något sätt, skapade människan. Och de mönster av nollor och ettor representerar saker, slutligen, som "säga hej världen" eller "play denna musik "eller" spela upp den här videon " eller "skicka ett mail." Men vi kommer tillbaka i sätt mer i detalj vad ett program är när du, själv, skriver dem. 

Här är en annan statement-- "Vänta en sekund." Jag använde inte detta ännu, men om jag vill mitt program att stanna upp en stund att göra något, kan jag tala om för den att göra det. Vänta en sekund. Nu en annan kan vara "spela upp ljud." Så detta är unikt för Scratch, det har förmågan att spela upp ljud. Så, ett uttalande jag kanske användning, här ", spela upp ljud." Samtidigt Booleskt uttryck, så detta är en snyggare ord uppkallad efter bara en kille som heter Mr Bool, och det handlar om en fråga. Sant eller false-- är musen ner? Ett booleskt uttryck är bara några uttryck på engelska som är antingen sant eller falskt. Antingen på eller av. Antingen en eller noll. Du kan tänka på det i ett antal olika sätt, men det är antingen sant eller denna falska, i slutändan. Så "musen ner frågetecken," det skulle vara ett booleskt uttryck. Och du kan tänka på andra, kanske. Till exempel, "är den vänstra antal mindre än rätt nummer? " Även detta skulle vara ett booleskt uttryck. "Mindre än" är ett booleskt uttryck. 

Den här också, "röra muspekaren." Jag är inte säker på varför de kallade det muspekaren. Det betyder bara, är markören är pil på skärmen, peka på katt, till exempel. Eller någon annan aspekt av skärmen. Och det är en fråga, igen, och som betecknar ett booleskt uttryck. Något som du kanske vill använda i ett tillstånd. Så vi kommer till det på bara ett ögonblick. Du kan "och" saker tillsammans. Så, om du vill kontrollera om detta är fallet och det är fallet, Du kan använda en "och" block så här. Och här är det tillståndet. Lägg märke till formen på den lilla öppningen i toppen av denna gula pusselbit, det är som påminner om formen att vi bara såg en stund sedan. Var och en av dessa booleska uttryck ha dessa spetsiga kanter till vänster och höger. Och det beror på MIT folks beslutade att genom att visuellt rörtransport former, du kan sorts hjälpa människor, studenter och barn, till typ av fylla i tomrummen bokstavligt. 

Nu puzzle-- att öppningen är lite liten, och som vi får se i programmet, i Scratch, kommer det att växa för att passa. Det kommer att behålla sin form, i slutändan. Så en förutsättning låter dig bestämma "Ska jag göra något eller inte?" Ett booleskt uttryck är den verkliga frågan du använder för att bestämma går jag till vänster eller går jag åt höger när jag stöter på det här sk vägskäl? Du kan ha två grenar. Om något är sant, gör detta, annars går den vägen, eller så kan du bara göra ingenting allt eftersom detta block förstådda. På samma sätt kan vi bo här sakerna. Så om du vill att tredubbla gaffel i väg, antingen göra det eller det eller det, du kan bara bo dessa saker tillsammans. Och det börjar bli lite fult, så småningom, säkert, men logiken är fortfarande densamma. Du kan bokstavligen läsa denna topp till botten och det säger vad det means-- om detta är sant, gör det, annars om annat. 

En slinga blir inte enklare i Scratch. För alltid gör följande. Nu kanske du inte tror att du kan göra mycket för det finns inte mycket utrymme mellan den övre och den ner på denna pusselbit öppning. Men du ser Scratch kommer att växa för att passa så många pusselbitar som du vill klämma in där. En annan slinga kan vara uttryckt med upprepningar. Om du vet i förväg, "I vill göra något 10 gånger, " du kan bara berätta Scratch att göra något 10 gånger. Och under tiden kan vi få variabler. Så här är godtyckligt, det är orange i det här fallet, och detta är en virvelvind turné. Återigen hittar du här mycket tillgänglig när du börjar peka och klicka. Jag har namngav min variabeln n, men jag kunde ha heter det vad jag vill, och jag ställer in det här, i denna godtyckliga exempel till noll. 

Nu ser ett program som hello världen är inte så övertygande, så låt oss faktiskt öppna upp något att en före detta elev gjort. Låt mig gå vidare och öppna upp, till exempel den här, där skulle jag älska att ha en frivillig. Okej, hur om-- låt oss gå vidare. Ja, kom upp. Vad heter du? 

ABBY: Abby. DAVID J. MALAN: Abby, kom upp. Så har du någonsin spelat det här spelet förut? ABBY: Nej DAVID J. MALAN: Okej. David, trevligt att träffas. Kom över. Och vad är din programmering bakgrund, om någon. 

ABBY: Jag har lärt mig en del C ++. DAVID J. MALAN: Du har lärt dig lite C ++. Och vad är ditt spel leka bakgrund? 

ABBY: Inte mycket. DAVID J. MALAN: OK, så vi tar det. Så här är hur spelet kommer att fungera. Jag kommer att gå vidare och klicka på den gröna flaggan, som är här uppe längst upp till höger. Nu är din föregångare i klassen har gett dig några instruktioner här. Och på bara ett ögonblick, det säger "utrymme för att börja." Så sätt igång och slår på mellanslagstangenten. 

Dataspel: Pikachu. DAVID J. MALAN: Och målet är att fånga mat, som visas där till vänster. Och till [ohörbart] 

[GAME musik spelar] 

DAVID J. MALAN: AWW, ja, tack för att spela. Vi har här en liten parting gåva till dig. Vi har CS50 stress boll, Om du vill välja. Okej, bra att träffas. Tack för att ni kom och utmanande. Så vi har mer stress bollar, så låt oss göra ett exempel för att motivera. En volontär? Okej, vad sägs om här framför. Vad heter du? 

PHILLIP: Phillip. 

DAVID J. MALAN: Phillip. Kom upp, Phillip. Så, är Phillip kommer att bli utmanades med ett annat spel att en av era föregångare skrev som en del av problemet set noll, heter Ivy s svåraste spelet. Och vi får se på bara ögonblick vad som menas med detta. Phillip, trevligt att träffas. Vad är din bakgrund? PHILLIP: Gjort en hel del kodning. Gjort lite spel också. 

DAVID J. MALAN: OK. Fick en hel del spel också. Och har du spelat det här spelet förut? 

PHILLIP: Nej DAVID J. MALAN: Alla rätt, så nu kör vi. Jag kommer att gå vidare och klicka på den gröna flaggan. 

[GAME MUSIK] 

[MUSIK MC HAMMER, "U kan inte handlag detta"] 

PHILLIP: [ohörbart] DAVID J. MALAN: [ohörbart] PHILLIP: [ohörbart] [Skrattar] [MUSIK MC HAMMER, "U kan inte handlag detta"] DAVID J. MALAN: [ohörbart] Plow genom den. PHILLIP: [ohörbart] DAVID J. MALAN: Sätt i gång. [MUSIK MC HAMMER, "U kan inte handlag detta"] DAVID J. MALAN: Okej. Gratulerar. 

[Applåder] 

DAVID J. MALAN: Vi kommer inlägg att online senare så att du kan dra ut på tiden med det också. Princeton kommer upp nästa, efter det. 

Så nu ska vi faktiskt gå vidare börja om från början, så att säga, och faktiskt bygga upp tills Vi kan reta sönder några av dessa idéer och få till något ännu mer komplex genom utgången. Jag kommer att gå hit och jag ska att gå vidare och skapa en ny fil. Så återigen, kommer problemet set promenad dig genom några av dessa steg. Men det var allt jag gjorde go till Arkiv-menyn och jag sade "nya", så mycket som Microsoft Word, eller något program som. 

Och låt oss gå vidare nu-- och vi genomföras "Hej världen" för en stund sedan, men låt oss göra något lite sötare. Jag kommer att gå upp till händelser. Och jag ska göra "när grön flagg klickade. " Och sedan ska jag använda, ska vi säga, en gren. Så jag kommer att använda ett "om" tillstånd. Och märker hur fort jag kommer nära till det, vill man att knäppa ihop. Så jag släppa taget och den snäpper ihop. Och nu kan jag göra något intressant. Om jag bläddrar igenom här, jag kommer att se en massa block. Om jag går till "data" - låt mig zooma in-- finns det något om variabler. Om jag går till "rörelse", kan du tydligen vända utvecklingen. Om jag går till "operatörer" - åh, det här är intressant, Jag kan plocka ett slumptal. Så låt mig göra något med bara viss sannolikhet, bara för att. Jag kommer att gå vidare och drar denna pusselbit, detta är att mindre än blocket, så det är bara "Är denna siffra lägre än en?" Men jag vill inte ha en hård kod ett nummer eftersom det är ganska meningslöst. Så jag kommer att dra denna pjäs här, och märker hur den klickar in, och nu vill jag gå vidare och säga "om numret som är plockade slumpmässigt är mindre än sex, gör följande. " Nu varför mindre än sex? Vilken sannolikhet är detta effektivt kommer att ge mig, bara intuitivt? Cirka 50%, eller hur? Om det nummer som är gissa slumpmässigt mellan 1 och 10 är lägre än sex, klart det är en, två, tre, fyra eller fem. Och så det kommer att ge mig en 50% sannolikhet för vad som händer? 

Bra låt oss göra något liknande detta, "spela upp ljud mjau." Och varsel, återigen, pusselbiten växer för att passa, så länge som de former matcha. Det är det som är viktigt. Låt mig gå över till Scratch här och klicka på "play". Ingenting händer. Är det en bugg? Nej, inte nödvändigt. Det kan bara vara att en större antal valdes. Så låt oss göra det igen. Ingenting. 

[MEOW] DAVID J. MALAN: Där är det. [MEOW] DAVID J. MALAN: Igen. Nej 

[Jamar] DAVID J. MALAN: Så om du har någonsin spelat ett spel, naturligtvis, där saker händer slumpmässigt, som skurkarna kommer eller inte kommer ut på skärmen, eller saker faller eller inte faller, det är bara för att något super enkelt som detta händer. Plocka ett slumptal, och om det är mindre än ett visst värde, kanske göra detta eller kanske göra det. Vi kan införliva som i ett tillstånd. Låt oss göra något annorlunda. 

Låt mig kasta bort det. Du kan bli av med grejer från bara dra den av till vänster och släppa taget. Låt mig gå vidare och göra ett evigt blocket och mycket snabbt göra något irriterande. Låt mig gå vidare och säger "spela upp ljud mjau." Men jag vill inte att detta ska vara för irriterande, så låt mig ta detta block, "Vänta en sekund," och varsel det finns inget mer utrymme för det. Men om du går tillräckligt nära, den vill gå dit. Så jag släppa taget och det kommer växer för att fylla blocket. Så nu, detta är en slinga. [Jamar] DAVID J. MALAN: Jag är bokstavligen gör detta för alltid. Om och om igen. Det är helt enkelt inte naturligt klingande. Låt mig gå vidare och ändra detta att inte en sekund, två sekunder och tryck på Retur. Och vad är trevligt om Scratch är som du kan programmera interaktivt. Gör en ändring, kanske trycka Enter eller Play igen, och det kommer bara fortsätta. Nåväl, nu varför inte vi gör något lite sötare? I stället för att göra allt från grunden, Låt mig gå vidare och öppna upp ett förskott gjorde en, som jag förgräddade, kallas "Pet katten." Och vi kommer att lägga upp alla dessa filer på nätet, och problembild noll kommer att säga hur man kommer åt dem och öppna dem. Och varsel, detta är ganska enkel. Men i förväg, jag verkar ha gripit ett "evigt" block, så jag har en loop. Och så har jag ett "om" tillstånd. Jag har ett booleskt uttryck. 

Så i engelska, bara kasta en blick på detta, särskilt om du har aldrig programmerat förut, bara intuitivt, Vad kommer detta att göra, det här programmet? 

[Publik prat] 

DAVID J. MALAN: Om du klappa katten, katten kommer att jama, eller hur? Eftersom "forever avmarkera" är muspekaren röra katten. Så för att vara tydlig, och jag sa inte detta innan, alla dessa pussel bitar och det skript som Vi har kombinerat dem i, så att säga, är ett skript synonymt med Programmet, egentligen, tillhör denna katt. Och anledningen är-- eftersom varsel hur denna samma katt här är markerat, här nere kan du skapa en andra katt eller hund eller egentligen vad du vill grafiskt. Du kan importera något från Photoshop, eller liknande, och integrera något om du vill göra det till ett projekt. Och vad du hittar, i slutändan, är att du kan lägga till manus, lägg pussel bitar, till enskilda tecken. Så dessa tillhör alla denna speciella katt. Så nu om jag går vidare och spela detta program är inget som händer. Men den är igång. Programmet är i detta forever loop, slags väntar på vad som ska hända? 

[Publik prat] 

DAVID J. MALAN: Att klappa katten. Så om jag flyttar min mus mot honom-- 

[Jamar] 

DAVID J. MALAN: Så nu Jag klappa katten. Under tiden kan vi ha en dubbel gren. Låt mig gå vidare och öppna upp inte klappa katten. Vi kommer att lägga ut på nätet också. Detta är lite mer komplex, men utan att säga du kan gissa kanske vad som kommer att hända. 

[Jamar] 

DAVID J. MALAN: Cat är jamar, grand old tid. Men det här programmet är naturligtvis heter "Inte klappa katten," så tydligt, jag vill klappa katten. 

[Roaring] 

DAVID J. MALAN: inte klappa katten. Nu ska vi ta en titt på ett annat exempel här. Den här kommer att kallas "Hej, Hej, Hej," skäl som kommer att vara klar, eftersom så fort jag kör denna sak-- 

[SEAL BARKING] DAVID J. MALAN: Mycket lätt att skriva irriterande Scratch program. [SEAL BARKING] DAVID J. MALAN: Nu kommer vi inte att gå in i detalj med alla dessa, men märker att det finns en par nya funktioner här. Det finns en variabel, kallad "dämpad", och sedan finns det en massa villkor. Och nu, låt mig bara reta dig genom att säga att om den här killen blir för irriterande, Jag kan slå på mellanslagstangenten och han stannar. Eftersom den roll som spelas av dessa två skript är som följer. En av dem är att göra det skällande med några sekunders mellanrum. Den andra är bara väntar för mig att slå på mellanslagstangenten. Och om jag slår på mellanslagstangenten, det kommer att förändra tillståndet för denna variabel, värdet denna variabel, det är uppenbarligen kallade "dämpad," jag inte ringa det något tråkigt som n, Jag kallade det ett engelskt ord, "dämpad". Från 1 till 0 eller 0 till 1. Från true till false eller falskt till sant. Och så kan du faktiskt se nu, att du skulle kunna ha två manus, två program körs samtidigt, och båda kan sitta i en slinga gör något. Väntar på det mänskliga att göra något som att slå på mellanslagstangenten. [SEAL BARKING] DAVID J. MALAN: Och nu han är på väg igen. [SEAL BARKING] DAVID J. MALAN: Så vad mer kan vi göra med dessa exempel? Nåväl, låt oss gå vidare och göra en exempel med räkna får. Vi fortsätter denna linje här of-- låt oss öppna upp fåren exemplet. Och varsel, ungefär som förut, den här, tack och lov, är lite mindre irriterande. När jag slog spela här-- Åh nej, det är irriterande. Han kommer att BAA med viss sannolikhet. Låt oss spela detta igen. 

[Får bleeting] DAVID J. MALAN: Den enda skillnaden är Vi har ändrat kostym, så att säga, och vi halvera och säger vad det verkliga antalet är. Nåväl låt oss gå vidare och ta detta ett steg längre. Och låt mig reta dig med en annan funktion här. Låt oss gå vidare och öppna upp ett program som kallas trådar. Så mycket som du kan ha en sprite, som har flera skript, du kan ha två älvor, en fågel i en katt, var och en har sitt eget manus. Och var och en av dem kan arbeta samtidigt. Om du någonsin har hört Ordet "multithreading" en dator är "flertrådade" betyder det kan göra flera saker på en gång, och, faktiskt, så kan Scratch. 

Och nu märker fågeln är typ av dum. Det är bara att göra saker slumpmässigt, studsar utanför skärmen. Helt klart är att katten har programmerats att typ av få som söker kapacitet hem i på fågeln eftersom han alltid pekar på honom. Tills slutligen, han fångar den färdiga fågel. Så jag kommer inte att uppehålla mig vid detaljerna här, men du kan typ av skymt samma former, några "Om" förhållanden, vissa variabler, kanske några slingor, är i slutändan gör samma sak. 

Låt mig gå vidare och öppna upp något helt annat, att retas några av er, särskilt de bekvämare, vad du faktiskt kan göra med detta. Jag kommer att gå vidare och öppna upp knapp här. Och detta är en super enkel-skenprogram, men se vad som händer när Jag-- Titta vad händer när jag öppnar denna version av den, Här i webbläsaren, scratch.mit.edu. Och när jag klickar på den här stora röda knappen, ser vad som sker. Så vad händer här? Det finns faktiskt mycket mer komplicerad händer under huven, trots att jag har genomfört detta, eller ärligt talat, Dan Bradley har genomfört det så enkelt. Han har designat en egen Scratch pussel pjäs, kallad Scratch förlängning, Han kallade det Toggle. 

Och vad Toggle gör är det skickar ett meddelande över Internet. Och det budskapet i sig ser lite kryptiskt. Men även detta, du ska menar med begreppet slut. Budskapet han faktiskt skicka ser lite ut så här. Det är bara text. Cryptic. Du kommer att förstå det när vi få problemet satt sju. Det är bara att skicka ett textmeddelande över internet till en server. Och den servern är, i slutändan, prata med denna lampa, som har en av dessa tjusiga glödlampor i det som, i sig, talar till Wi-Fi i nätverket här, där en lokal enhet ned här-- och i slutändan är det faktiskt vrida det ljuset på och av. Men vi kan göra mer intressanta saker fortfarande. Lägg märke till vad Dan också gjorde för oss. Han gjorde flera sprites, var och en av som har ett manus som väntar på ett klick. Och om jag klickar rött, går det rött. Om jag får blå, det går blåaktig. Grön, gul, orange. Och allt detta sker med gå vägen ut på internet, backa hit till glödlampa, på och av. 

Och om du kan tro det-- och det är kanske en av de mest komplexa Scratch projekt någon har implemented-- han gjorde det, i rättvisans namn, på en dag. Och det var den utmaning som vi kastade ner till Dan när vi såg har binära lökar, vi har Scratch, hur kan vi kombinera dem? Och faktiskt, detta är absolut något som någon i det här rummet skulle kunna göra med termins end-- Är han implementerats om binära glödlampor som använder samma gränssnitt som var på vår iPad på onsdag. Så att nu, om jag faktiskt Klicka på plus hit, Vi har en, två, tre. Jag kan slå 16 och slå den en på. 128, och så vidare. 

Nu om det enbart har och blåst ditt sinne, du kan göra saker mycket mer tillgängligt, som inte innebär någon hårdvara säkert. Bara saker på själva skärmen. Och, faktiskt, vad de flesta studenter sluta göra är någon form av spel, någon bit av konstnärligt arbete, eller någon typ av interaktiv animation. Och jag kommer att säga en av våra Favoriter har varit här. Och jag tänkte att om vi skulle kunna dämpa belysningen, vi tar en inblick i denna final Scratch projektet avslutningsvis. Men vad du bör tänka på, som Jag kan reta dig med en detalj, sektione börjar nästa vecka. Öppettider kommer att börja nästa vecka. Problem set noll kommer att finnas CS50.harvard.edu senare idag. Och du kommer att välkomnas i problembild noll till CS50 egen Zamyla Chan, som styr de flesta av våra genomgångar. Dessa är inbäddade videoklipp i problemsamlingar som kommer att hålla din hand genom en hel del av den ursprungliga uppsättningen upp och genom många av de möjliga designbeslut. Så allt om du har haft den känslan när du plockar upp en hemuppgift och undrar, var ska jag börja? Hon kommer att få det svaret för dig. Och nu, ett slutligt program från en av era föregångare i svaret på frågan "Vad räven säga?" [MUSIK YLVIS, "VAD GÖR FOX SÄGA?] 

YLVIS: (sjunger) Hund går woof. Katt går jama. Bird går tweet och mus går knyst. Ko går moo. Groda går croak. Och elefanten går toot. Ducks säger kvacksalvare och fisk går blub. Och tätningen går ow ow ow, men det finns ett ljud som ingen vet, vad räven säga? Och 

DAVID J. MALAN: Det är det för CS50. Vi kommer att se dig på Puzzle dag och på måndag. 

[Applåder] 

[MUSIK YLVIS, "HUR SER FOX SAY?"] 

BERÄTTARE: Och nu djupt tankar, av Daven Farnham. Idag blev jag träffad i ansikte med en telefonbok. Förvirrande, eftersom jag är på hemma tittar på nätet.