[VIDEOAVSPELNING] [Bildörr Stänga] [CAR ENGINE START] [MUSIK SPELA] -Moving Höger längs i jakt goda tider och goda nyheter. Med goda vänner du inte kan förlora. -detta Skulle kunna bli en vana. -Opportunity Stötar Låt oss bara nå ut och ta tag i den. -Ja! -Tillsammans Vi nab den. -Vi Hitch vandra, buss eller gul cab det. -Dammit. -Vi Flyttar höger längs. -Footloose Och utsmyckat fritt. -Att Det är halva nöjet. Kom dela det med mig. -Vi Flyttar höger längs. -Vi Kommer att dela lasten. -Vi Behöver inte en karta få denna show på vägen. -Hej Fozzy, vill jag att du svänga vänster om du kommer till en gaffel i vägen. -Ja, Sir. Sväng vänster vid vägskäl. Sväng vänster. -Jag Tror inte det. -Cruising Höger längs vi hittat lamporna på motorvägen. -Och Din väg eller mitt sätt. -Så Litar på min navigering. -film Stjärnor med flashiga bilar och livet med taket nere. -Vi Storma de stora kullar. -Ja, Är storm rätt. Ska det snöa? -Nej, Jag tror inte det. -Moving Rätt tillsammans. -Footloose Och utsmyckat fritt. -Du Redo för den stora tid. -Är Det klart för mig? -Moving Rätt tillsammans. Flytta höger längs. Flytta höger längs. Flytta höger längs. -Jag Tror att du bättre dra över. -Ja, Sir. [END SPELA] [Applåder] DAVID J. MALAN: Detta är CS50. Och detta är slutet av vecka 0, men början på en underbar vänskap. Vi är så glada att vara här vid Yale University för första gången med vår vän SCAZ, och Jason och Andy. Alla 40 av CS50: s TF: s och CA är här på Yale. Och alla ni. Och i själva verket är det förmodligen dags att-- [Applåder] Så, även om de flesta föreläsningarna kommer verkligen att vara i Cambridge i år, verkligheten är att avsiktligt, och mycket medvetet CS50, Jag tror att vi närmar punkten tekniskt och pedagogiskt, där det kan vara en överlägsen pedagogiska erfarenhet för att samarbeta med vissa av kursens material på nätet. Faktum är att reality-- och om jag tror denna philosophically-- är att föredrag är inte särskilt effektiva medel för att leverera ganska komplex information. Säkert över timme plus långa spännvidder tid. Och faktiskt var några minutes-- Jag minns mig i college-- du zon ut för ett ögonblick, du missa några komplicerat ämne, och du är borta ganska mycket för de nästa 45 minuter. Och verkligheten är att om du är här i New Haven eller Cambridge eller utanför, enkelheten av att ha möjlighet att pausa och spola framåt, spola tillbaka, hyperlänk till högerkolumnen resurser, sök fulltext avskrifter och liknande är en möjlighet som Jag vågar säga våra online studenter långt utanför New Haven, ger dem en möjlighet för att verkligen ta tag i begrepps material som vi föreläsningar införa desto bättre. Men i slutändan i CS50 är elevernas erfarenheter karakteriseras så, så mycket mer av kursens problemsamlingar, eller veckoprogrammeringsprojekt, den kursens avsnitt under ledning av undervisningen kamrater, de nattliga kontorstid under ledning av kursassistenter och undervisning stipendiater, och faktiskt en sådan händelser som CS50 Puzzle Dag, CS50: s Hack-a-thon, den CS50 Fair, veckovis luncher, och så mycket mer. Och så om du är här i New Haven, eller ställer in avstånd, idag i Cambridge, och Vi ses snart igen, verkligheten är det är en och samma klass. Och vi är så glada över att vara här tillsammans idag. Och så i slutet av terminen, vare sig här eller fjärran, och förhoppningsvis du bär stolt, lyckligt, och kanske med lite av lättnad, skjortan som vittnar till dig att ha tagit CS50. Så var vi lämnar ut på onsdag? Vi tog en titt på computational tänkande. Och det är mot vad vi destillerade datavetenskap till, åtminstone för nu. Men vi destillerade det lite längre in åtminstone tre komponenter element. Ingångar, vad är så problem som vi försöker lösa? Utgångar, vad är det svarar vi hoppas att få? Och representation där av. Och vi kommer inte bo här på efter den binära, eller till och med ASCII, och liknande så mycket, men snarare tar för givet att vi kan representera denna information, eftersom betydligt mer intressanta delar av dessa problem är inte bara in- och utgångar, men de algoritmer som går in i att lösa dessa problem. Och du kanske minns från häromdagen att vi tog en ganska traditionell begreppet titta upp någon i en ganska stor telefonbok, eller mer allmänt digitalt dessa dagar, bara en mycket stor datamängd. En riktigt stor kontaktlista, med massor av namn i alfabetisk ordning. Och vi insåg att medan jag kan närma sig detta problem helt enkelt genom användning av en linjär approach-- sida för sida, eller till och med två-talet på en time-- vi insåg att ju mer intuitiva algorithm-- bara typ att dela och erövra problemet igen, och igen, och igen-- halvera den med varje tid, gav oss denna gröna resultat. Och det är så mycket plattare eftersom det antyder att även när detta problem blir större och större, vilket är fallet i dessa dagar med data apparater och reality-- Facebook och Google sökresultat och like-- gör vår algoritm utför lika effektivt med de större bites som det gjorde även med de mindre bites. Nu väcker frågan, vad kan vi faktiskt lösa liknande med denna typ av intuition? Denna typ av division och erövra? Tja, vi kan göra något som denna dag här. Vi skulle kunna ta närvaro. Så kanske gillar 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11-- kommer inte att vara så effektiv. Så vänta, grundskola. 2, 4, 6, 8, 10, 12, 14, 16, 18 och så vidare. Men kan vi göra lite bättre? Jag är ganska säker på att jag kan inte gör det själv. Så om du kommer humor oss för bara en stund, tog vi med oss en algoritm som är bara fick tre steg, men det require-- om du inte mind-- oss alla stå upp, om du vill. Så, med alla oss stående, steg en av denna algoritm är följande. Stå upp och tilldela själv nummer 1. Så vid denna tidpunkt, bokstavligen alla i det här rummet förhoppningsvis tänker för sig själva, emellertid olyckligt, siffran 1. Nu steg två i denna algoritm är kommer att innebära följande. Steg två, paret ut med någon som står, lägg dina nummer tillsammans, och anta summan som ditt nya nummer. Snabb sanity check. Vilket nummer är alla tänker på nu? Så 2, utom kanske för en, besvärliga, ensamt personen. Om vi ​​har ett udda antal av personer i rummet. Så en person kan fortfarande vara nummer 1, det är bra. Men steg tre här, en av bör du sitta ned. Den andra ska gå tillbaka till steg två, och upprepa, om du vill. Så om det fortfarande står, bör du vara bland de som ska åka tillbaka till steg två. Fortsätt. Ett fåtal människor kvar. Så, om det fortfarande står, koppla ihop med någon. Okej, krympande ner. Ett fåtal människor kvar. Jag ska hjälpa vid behov. Kom ihåg den viktigaste takeaway här är hur mycket snabbare det är än jag räkna. Så låt oss se. Jag kan hjälpa till. Så hur många är du fortfarande tänker på? PUBLIK: Jag är på 44. David J. MALAN: 44, så du gå vidare och sitta ner. Vilket nummer tänker du på? PUBLIK: 74. David J. MALAN: 74. Okej, gå vidare och sitta ner. Vem annars är kvar? 86. Och är någon annan kvar? Vilket nummer? Jag hörde 67. Och sedan i toppen? 32. Någon annan kvar och tänker på ett nummer? Åh, hej. Förlåt. Kommer snart. 42. Någon annan? PUBLIK: 47. David J. MALAN: 47. Är det någon annan kvar som inte har räknats? Så det slutliga antalet personer i ett rum som har 497 säten är-- vilka alla är filled-- är 390. Så det här är bra. Vi kommer snart att diskutera begreppet av ett fel i ett datorprogram. Men vi ska återkomma till det inom kort. Men i teorin, vad kanske har hänt just nu? Så även om det fanns tre stora steg till denna algoritm, var och en av dem var bara typ av en stor operation. Och det var det cyclicity till det i att om du fortfarande står, du hålls gå från steg 3-2, steg 3-2, steg 3-2. Men vad höll händer på varje iteration? Varje cykel av denna slinga? Vad som hände andra ställen i rummet? Inte bara samma sak, men vad hände hälften av er? Sitter ned. Och så där i lögner denna insikt, likt telefonboken exempel i att om hälften av er är sitta ned varje gång, problemet börjar med kanske 400 personer, sedan till 200 personer, än 100 personer, sedan 50 personer, och så vidare. Och så vi skära ner i teorin att bara en person, tänker på det totala värdet av alla. Nu verkligheten, vissa sociala dynamik, och vissa räknefel kan bidra till att det yttersta bugg. Men i teorin, medan jag fortfarande räkna bort, med flera dussin steg, eller hundratals steg att räkna er, att räkna ett rum fullt av 500-tal personer borde ha tagit betydligt färre steg, eftersom du bara kan dela 500 och 1/2 så många gånger. Och så precis som med telefonen boka exempel häromdagen, vi har något logaritmisk så att säga, varvid om vi var alla verksamma unisont, och ignorerar additions fel, skulle vi har uppnått exakt den typen av gångtid? Nu för att vara rättvis, typ av lurade, i att jag utnyttjas en annan resurs. Det är bara en av mig, Jag belånade hundratals dig. Men som kan sägas vara en exempel på parallell bearbetning, eller ett tillstånd av konst mycket i ropet där datorer dessa dagar har flera processorer, eller mer tekniskt, mer flera kärnor, och kan verkligen göra flera saker på en gång, ungefär som du allt vi gör det, parallellt. Men minns att vad vi också gjorde på onsdagen var försök att fånga denna intuition och formalisera den i programkoden. Något som pseudo-kod. Och faktiskt, och jag hoppas att du kommer förlåta, det är som 80 grader här inne. Så jag kommer att ta det här rabatt för bara en liten bit. Vad jag trodde att vi skulle göra är att övergången nu till ett program där vi återigen engagera publiken, men skriva ett program på engelska liknande syntax, som till lösa detta problem här. [VIDEOAVSPELNING] -Det Är jordnötssmör gelé tid. Jordnötssmör jelly tid. Jordnötssmör jelly tid. Way ya! Way ya! Way ya! Way ya! Nu finns du går! Här har du! Här har du! Här har du! Jordnötssmör jelly! Jordnötssmör jelly! Jordnötssmör jelly! Jordnötssmör jelly! Peanut, jordnötssmör gelé! Jordnötssmör jelly! Jordnötssmör jelly med ett basebollträ. [END SPELA] David J. MALAN: --det video, men det är lite beroendeframkallande, om inte lite irriterande. Men för att göra detta, tänkte jag vad vi skulle göra är att försöka skriva ett program tillsammans, som vi behöver tre frivilliga. Måste vara bekväm på kamera och internet. Sam, kom upp. Lila skjorta, just här, kom upp. Och från hit, låt mig gå lite längre tillbaka. Crimson och blå skjortor, kom upp. Perfekt. Kom igen nu. Kom upp, kom upp. Och vad heter du? Erica. David, trevligt att träffa dig. Om du vill ta plats här. Detta är Sam. Vad heter du? Antonio. Antonio, trevligt att träffa dig. Erica och Sam, om du skulle vill ha en plats här. Vad vi har kommit förberedd med, eftersom dessa killar upptäcker, är ingredienserna med för att göra en jordnötssmör och gelé smörgås. Nu detta kan vara något som du tar så mycket för givet. Men vi har gett varje av våra tre frivilliga här-- två volontärer och Sam här, en limpa bröd varje, en platta, en kniv, en burk av gelé eller sylt, och en burk jordnötssmör. Och målet till hands nu är kommer att vara för dessa tre att göra en jordnötssmör och gelé smörgås. Men vad vi ska göra är att förvänta den audience-- eftersom er alla säkert vet hur man gör detta så bra i reality-- kommer att ge oss steg för steg instruktioner. Pseudo-kod, om ni så vill. Så jag ska spela rollen av skrivare här. Och jag har fått lite att göra-lista, och så att var och av er, en i taget, ropar en potentiell instruktions, jag skriva ner det, upprepa det som behövs. Och då ni kommer att göra en jordnötssmör och gelé smörgås bara genom att göra vad du säger. Så tänk på er själva som datorer. Du kan bara göra vad du blir tillsagd. Inga antaganden, inga frågor. Du behöver bara göra det. Så vem vill fara för första instruktion för att göra en PBJ smörgås? På balkongen finns. PUBLIK: Öppna påsen med brödet. DAVID J. MALAN: Öppna påse med bröd, om ni så vill. Så låt oss se. Låt oss iterera, och få lite mer exakt. Bra sätt att börja om. Steg två, någon annan. Nu ingen vill frivilligt. Steg två, framför. PUBLIK: Öppna inner påse bröd samt. DAVID J. MALAN: Öppna inre påse bröd samt. Stor, lära vi. Lite mer exakt. Låt oss få detta att fungera. Ja, i grön skjorta. PUBLIK: [OHÖRBAR] DAVID J. MALAN: skivor av bröd. Försiktigt bort två skivor bröd. Det är bra. Steg fyra, någon annan? Här borta, ja? PUBLIK: [OHÖRBAR] DAVID J. MALAN: Placera bröd på plattan. Steg fem? Steg fem, ja? PUBLIK: [OHÖRBAR] DAVID J. MALAN: Ovanpå of-- oh, hand. Placera handen ovanpå jordnötssmör. Är det vad jag huvudet? Målgrupp: Ja, och skruva. DAVID J. MALAN: och-- säga det igen. PUBLIK: [OHÖRBAR] DAVID J. MALAN: Och sätta lock bredvid jordnötssmör. Lätt placera handen på toppen av jordnötssmör, och skruva, och sätt på locket bredvid jordnötssmör. OK, steg sex. Steg sex, någon annan. Yeah? PUBLIK: [OHÖRBAR] DAVID J. MALAN: Säg det igen. PUBLIK: Upprepa steg fem igen. DAVID J. MALAN: Och upprepa steg fem igen, som kommer att skapa en bit av ett problem nu om vi gör det här steg för steg. Så nu går vi tillbaka till steg fem. Lätt placera handen ovanpå jordnötssmör och skruva och sätta lock bredvid jordnötssmör. Sedan ta tag i jordnötssmör och upprepa steg fem igen. Så vi kommer att åsidosätta det oändlig slinga, om ni så vill. Steg sju, någon annan. Ja, på baksidan. PUBLIK: [OHÖRBAR] DAVID J. MALAN: --on ovanpå varandra. PUBLIK: [OHÖRBAR] DAVID J. MALAN: På Däremot på den andra toppen. Vill du bara komma upp hit? Hur gör jag avslutar instruktionen? Vad är resten av instruktionen? PUBLIK: Ignorera den delen. DAVID J. MALAN: Ignorera den delen. Låt oss börja om. Steg sju. PUBLIK: [OHÖRBAR] DAVID J. MALAN: Ta tag med motsatta hand-- detta är bra. Detta är faktiskt bra. PUBLIK: [OHÖRBAR] DAVID J. MALAN: Och plast jar-- PUBLIK: [OHÖRBAR] DAVID J. MALAN: Och twist-- PUBLIK: [OHÖRBAR] DAVID J. MALAN: För två sekunder. Bara öppna jordnötssmör burken. Jag hoppas att du förlåter. Så låt oss anta att vi kom dit. Öppna jordnötssmör burken. [Applåder] DAVID J. MALAN: Steg åtta, låt oss gå. Steg åtta, ja, på baksidan. PUBLIK: [OHÖRBAR] DAVID J. MALAN: Good. Steg nio, ja? PUBLIK: [OHÖRBAR] David J. MALAN: --out av jordnötssmör burken. Och-- och vad? PUBLIK: [OHÖRBAR] DAVID J. MALAN: Och sätta kniv tillbaka in jordnötssmör. Steg tio. Steg tio. PUBLIK: [OHÖRBAR] DAVID J. MALAN: Placera kniven ut och ta bort tätningen. Fin. Av jordnötssmör. Okej, steg 11. PUBLIK: [OHÖRBAR] DAVID J. MALAN: OK, grå dator Följ blå eller röd dator. God. [Applåder] DAVID J. MALAN: Ta oss hem. Några fler steg. Vad händer härnäst? Steg 12. Steg 12. Yeah? PUBLIK: Placera en av de skivor bröd försiktigt på ett av dina händer. DAVID J. MALAN: En av dina händer. Och sedan, steg 13. Yeah? PUBLIK: [OHÖRBAR] DAVID J. MALAN: --on skiva bröd. God. Ganska bra. Steg 14, ja. PUBLIK: Ångra steg 13. DAVID J. MALAN: Ångra steg 13. Låt oss gå vidare till gelé. Det är en 100- steg program, men vi var på steg 15. Yeah. PUBLIK: [OHÖRBAR] David J. MALAN: 7 genom 13 användning av gelé, eftersom de gick så bra. Upprepa steg 7 till 13, med hjälp av gelé. Så förstå den nedre halvan av geléburk med en hand ovanpå. Å andra sidan om den andra topp, ignorerar den delen, greppa med motsatta händer, locket och plastburk vid botten, och vrid i två sekunder. Öppna sedan geléburk. Och slutligen, låt oss försöka ge oss något ätbart. Steg 16. Så varför vi inte lämna det där. Tack så mycket för våra tre frivilliga. [Applåder] Vi har en liten CS50 stress boll för dig. Det skulle bli en smörgås men-- så vad var poängen, utöver att ha en lite kul med algoritmen? Men verkligheten är att även om du programmera en dator, du måste vara super exakt. Så komplext eller hotfull som din egen dator kan mycket väl vara för dig, på stone när något går fel, verkligheten är att det är en ganska dum enhet som uppfanns av oss människor, och kan bara göra en delmängd av vad vi do-- ibland säkert faster-- men det vet inte hur att göra antaganden. Det vet inte hur man ska vara på samma våglängd som ni. Det kommer bara göra exakt vad du säger det. Och du kommer att slås, kanske, som vi börjar skriva faktiska koden med första problemsamlingar och utanför, hur lätt det är att göra ett antagande som en människa, och inte räknar jag behöver för att hantera så fall eller det hörnet fall så att säga, det kan mycket väl uppstå om till exempel Sam hade den enda squeezable burk gelé, medan alla hade annars några glasburkar som väl. Så innan vi vänder vår uppmärksamhet på några faktiska koden, Tillåt mig att införa kursens huvuden här på Yale. Våra vänner SCAZ, Andy, och Jason att komma upp och säga hej. [Applåder] SCAZ: Vi har förlorat Jason tillfälligt. Hej igen, alla. Mitt namn är SCAZ. Jag har undervisat på Yale sedan 2001. Och när jag inte undervisar, min forskning är inom robotik och artificiell intelligens. Och tillkännagivandet som jag har i dag är att med början i ett par veckor, vi kommer att föra några kompletterande material till CS50 att prata om Intelligence. Vi kommer att prata om hur platser som Netflix och Hulu kan rekommendera filmer kanske du vill titta på. Där vi pratar om hur förarlösa bilar fungerar faktiskt. Och vi kommer att kunna marken dessa saker i begreppen att du lär dig i denna klass i dag. Eftersom alla dessa saker är bygger på samma grund. Och det är vad detta serien kommer att undersöka. Så jag ser verkligen fram fram emot att se mer av dig allt, och du kommer att få se mer av oss alla mycket snart. Låt mig då presentera Jason. JASON: Hej alla. Mitt namn är Jason. Jag tyvärr gick till Harvard som en undergrad. Det kommer att få skära ut ur den faktiska strömmen. Och nu är jag här som en föreläsare i datorvetenskapliga institutionen. Och jag hjälper köra kursen med SCAZ, David och Andy. ANDY: Hey guys. Jag heter Andy. Jag är faktiskt den enda Yale student på scenen just nu. [Applåder] Jag är i Berkeley College, ursprungligen från Solon, Ohio. Och jag var en av dessa barn där, när jag kom till Yale, Jag trodde verkligen att jag skulle aldrig måste titta på ett antal någonsin igen. Och då insåg jag att du behövde både vetenskap och QR poäng till examen. Och så mitt första våren, tog jag en klass, en CS, intro CS klass här vid Yale. Jag var som, är detta som faktiskt ganska coolt. Och medan jag faktiskt hamnade förklara som en global frågor större, kompetens Jag lärde mig i CS och programmering är så tillämplig på alla fält du väljer att göra. Och personalen här på Yale, Vi har varit så hårt på jobbet att förbereda sig för er. Och vi ser fram emot att se allt i avsnittet och kontorstid. Så ja. [Applåder] DAVID J. MALAN: Tack. Så strax innan lektionen började, Vi hade en möjlighet att gå runt campus med en mobiltelefon och ta vissa selfies i video form av riktigt min första turné i Yale campus här. Och så vi trodde att vi skulle dela en grov nedskärning av just detta som SCAZ och Andy och Jason tog mig runt campus. [VIDEOAVSPELNING] [SIRENER] -David. -Välkommen Till Yale. -Trevligt att se dig. -Trevligt att träffas. -Kan Vi gå på en turné? -Låt Oss gå på en turné. -Road tour. -Det Tecken har varit där ett tag. -Whah, CS50. -Hurry! Gå, gå, gå, gå. Du bör [OHÖRBAR] Harkness Tower. -Och Vi såg att ett par gånger. [Applåder] -Titta Ut för cykeln! Ahh! Hej Frank. -Vad är upp killar? -Hur mår du? -Trevligt att se dig. -Välkommen Till videon. Agera inte alltför upphetsad. -Jag Älskar Silliman. Ahh! -Det Har varit ungefär tre timmar sedan Jason hade glass och Nutella. Så vi måste stoppa tillbaka på Silliman för lite. -Det Är inte ens [OHÖRBAR] ändå, bara det faktum att de har det här är så fantastiskt. Dude, det finns Nutella vid varje måltid. -Det Var förra året också. -Ja. -Säg mycket om Yale hittills. Men jag tror nu TD borta. Och det är ansett utanför campus. -Här Har vi gotisk arkitektur. Världskänd. Vi har lite mer gotisk arkitektur. Och konstruktion, och mer gotisk arkitektur. Hej. Det är där vi ska ha kontorstid Tisdagar genom torsdagar i Hogwarts, som [OHÖRBAR]. -Okej. Det var allt för turnén. Vi är vid Yale University s Law School, där dagens föreläsning är på väg att ske. Låt oss gå in. [END SPELA] DAVID J. MALAN: Och som ger oss här nu. Så hittills har vi varit fokus på pseudokod, vilket är engelska-liknande syntax. Det har ingen föreskriven specifikation. Det är bara du använder några intuitiv språk om du vill förklara vad du vill göra. Men låt oss börja nu övergången till kod, som de flesta människor skulle säga. Men mer exakt, något känd som källkoden. Detta är det språk som människor skriver att datorer ultimately-- eventuellt efter ett visst antal steps-- slutligen förstår så att veta hur man gör något. Att du såg en skymt av detta kanske på onsdag. Detta är ett exempel som otroligt, underwhelming när den körs bara säger "hello world." Och det är skrivet på ett språk som kallas C, som är syntaktiskt mycket lika till en hel del andra språk att du kanske inte vet, men kanske har hört talas om som Java, och C ++, och Python, och Ruby, och liknande, och faktiskt, vi ska bringar en stor del av terminen med C, och sedan mot slutet av termin, som bygger på det, och införa alla antal andra språk. Bland dem PHP och JavaScript, ett databasspråk som kallas SQL. Men med C, vad vi ska ha denna bottom-up förståelse exakt hur datorer fungerar, vad du kan göra med dem, och hur du kan lösa problem desto mer effektivt genom detta skiktning som vi diskuterade på onsdag, och stående på axlarna av andra. Men mer om det framöver. Idag tittar vi på en enklare miljö, men en i grunden identisk miljö kallas Scratch av våra vänner på MIT Media Lab. Detta är en grafisk programmeringsspråk, Scratch, där du kan dra och släppa saker som ser ut som pusselbitar som endast spärr om det gör logisk eller programmatisk känsla att göra det. Men det kommer att ge oss möjlighet att har ett samtal om alla av samma program fundamenta att några av er kanske vet redan, att många av er kanske inte veta något om utan att behöva fastna ärligt talat, i intellektuellt ointressant syntax av semikolon, och parenteser, och citat, och liknande. Allt detta, tidigt på, är en distraktion vad är intressanta och verkligen användbara idéer. Så låt oss ta en snabb blick på miljön här, så att du vet vad som väntar. Och i själva verket bland de spel vi kan spela är några program skrivna av CS50 egna tidigare studenter. En av dem, själv, ska jag vara här skriven i forskarskolan för mig. Om jag kunde ta en volontär som är villig att spela ett spel för allra första gången. Visst. Kom upp. Vad heter du? PUBLIK: Angela. DAVID J. MALAN: Angela, kom upp. Så Scratch har varit ute för ett par år. Och när jag var i forskarskolan, Jag var över registrerade vid MIT, tar professor Mitchel Resnick s kurs i undervisningsteknik. Och vi var bland de allra första studenter i världen att faktiskt beta prov Scratch. Och mitt projekt var vad Angela har nu nådigt frivilligt att spela kallas Oscartime. Så jag kommer att gå vidare och dubbelklicka på ikonen här. Det kommer att öppna upp en programmerings miljö som vi snart kommer att dyka i. Jag kommer att fullskärmsläge det för Angela, här. Jag kommer att träffa green flagga på bara ett ögonblick. Och sedan en hel del skräp kommer att falla från himlen. Och du kommer att använda musen här för att faktiskt dra och släppa papperskorgen i Oscars soptunnor. Så om du vill gå vidare och klicka den gröna flaggan, kommer spelet börja. [MUSIK SPELA] Åh, jag älskar papperskorgen. Något smutsig eller jolleseglare eller dammig. Något ojämn eller ruttna eller rostig. Ja, jag älskar papperskorgen. Om du verkligen vill se något trashy, titta på detta. Jag har här en sneaker det är sliten och slitna. Det är alla fulla av hål håller och snören slits. En gåva från min mor den dagen jag föddes. Jag älskar det eftersom it's-- DAVID J. MALAN: --green dessa dagar bara vara att kasta allt i papperskorgen. Och så vad en av CS50 egen personal did-- Jordanien, som du kanske möta today-- har faktiskt uppdateras detta för dagens tider. Och så tillåt mig att öppna upp en remix stället för Angela. Och vi ska spela detta i stället för en stund där du nu vänlig kommer att behöva välja mellan om att kasta något i papperskorgen, eller återvinna det eller kompost det. Så det är lite av press på dig att få denna rätt framför din 392 till 497 klasskamrater här i hallen, om du vill. [VIDEOAVSPELNING] [MUSIK SPELA] -Oh Jag älskar papperskorgen. Något smutsig eller jolleseglare eller dammig. Något ojämn eller ruttna eller rostig. Ja, jag älskar papperskorgen. Om du verkligen vill se något trashy, titta på detta. Jag har här en sneaker det är sliten och slitna. Det är alla fulla av hål och snören slits. En gåva från min mor den dagen jag föddes. Jag älskar det eftersom det är skräp. Åh, jag älskar papperskorgen. Något smutsig, eller jolleseglare, eller dammig. Något ojämn eller ruttna eller rostig. Ja, jag älskar papperskorgen. Här är lite mer ruttet saker. Jag har här några newspaper-- [END SPELA] David J. MALAN: --are faktiskt komposterbar. Men tack till vår volontär, Angela. Vi har en stress boll här för dig också. Så tack. Så här var skriven av mig. Men nu en av en faktisk tidigare elev som genomfört denna, vilket är ett spel. Allt i detta språk som kallas Scratch, att vi ska snart skal tillbaka lager av. Men om vi skulle like-- hur om en annan volontär? Höger. Kom upp. Vad heter du? Blick? Lance. Lance, kom upp. Trevligt att träffas. Kom på denna väg. Så här kan ha en tema bekant för några av er. Men du ser också att det kan finnas interaktivitet, där du faktiskt kan vara roll av tecknet flyttar. Trevligt att träffas. David. Jag ger dig, Pikachu. Instruktioner kommer om att komma på skärmen. Men kort sagt, kommer du att vill fånga den läckra grejer, och undvika bomberna och andra saker. Med markörerna helt. Så tryck på mellanslagstangenten. -Pikachu. DAVID J. MALAN: Fånga grejer på vänster, inte fånga grejer till höger. [MUSIK SPELA] Så en sista här. Om vi ​​kunde ha en mer volontär här. Vi trodde att vi skulle återskapa något from-- i den gula shirt-- från onsdag. Vad heter du? Mary, kom upp Mary. Och minns på onsdag vi införde begreppet binära och binära glödlampor. Detta är faktiskt nu en genomförandet av samma gränssnitt som vi hade på iPad med ljuset lökar, men här framförs digitalt. Och snarare än att göra ett stress ball-- trevligt att träffa dig, David. Vi tog ett par ljus lökar från Cambridge. Om du kan, klicka på dem glödlampor för att slå på och av, komma med binära representation av säga 256. Och du kommer att se i mitten, nuvarande stämmer. Så att man är på. Så biten längst till vänster är på. MARY: Ja, [OHÖRBAR] DAVID J. MALAN: Tja, så vi har bara-- oh. Så det här är den 128-kolonn. Så vi är upp till 128. Vi fick komma till 256. Och du kan mixtra på och utanför, no big deal. Eller så kan du slå det 128 flera gånger om du vill. Okej, bra. 24. Ja, att få närmare. Närmare! Åh, vad är problemet då? Så vad är problemet? Så vad behöver vi lösa detta problem? Så vi behöver en annan bit. Och det är helt rimliga i verkligheten, eller hur? Om du vill räkna från antalet Ett till två till 3 till fyra till 5, 6, 7, 8, 9 faktiskt rulla över 10, du är kommer att behöva ytterligare en bit. Så låt oss faktiskt spola tillbaka här och komma upp with-- det var uppenbarligen tänkt att vara en uppsättning upp. Du kan inte göra 256 med bara en glödlampa. Så vad sägs om helt enkelt antalet 50? Nummer 50. Utmärkt. En stor applåd för Mary och hennes samt. Tack. Så detta topic-- avsikt som att was-- faktiskt kommer att återkomma. Det största värde som du kan representera med åtta bitar, eller ett byte, är verkligen 256. Men inte om du startar räknat från 0, som vi verkar hålla göra genom att ha alla dessa bitar off. Men nu ska vi dyka in i den underliggande genomförandet av denna miljö, och retas isär några av dessa idéer. Så vi i ett ögonblick håller på att se en några olika programmering fundamenta. Den första som vi kallar uttalande. Typ av verb, om ni så vill. Handlingar. Saker som bör göras. Och i ett ögonblick ser du block som ser ut så här. Säg "Hej världen", till exempel. Eller vänta en sekund. Eller spela upp ljud jamar. Och faktiskt miljön i som vi kommer att göra detta kallas Scratch. Och om jag dra upp Scratch utan förladdning någon faktisk kod, låt oss ta en snabb titt på detta användargränssnitt, så att säga. Kontrollerna som vi interagerar. På toppen kvar här i skärm, under menyerna, vi har på scenen, så att säga. Så Scratch är vad vi kallar Sprite. Det är ett tecken. Och han kan styras av skriva program mot honom. Och han kommer att kunna flytta upp och ner och vänster och höger i den här miljön, inte bara genom att flytta mus, men programmatiskt. Jag kan berätta för honom gå rätt, gå vänster, uppåt, nedåt eller liknande. Och jag kan presentera andra sprites eller tecken samt. Faktiskt på botten här är där ser du listan med sprites. Just nu, jag har bara en, men jag kan skapa mer, och de kommer att visas exakt där nere. Så om du spola tillbaka för ett ögonblick, som Oscartime-- till exempel, Oscar, till vänster, papperskorgen kan, var en sprite. Och saken i mitten, papperskorgen, var en annan sprite. Och komposten var en annan sprite. Och varje bit av sopor eller återvinningsbart avfall som föll från himlen är också en sprite, som var och en programmerades individuellt. How do you programmerar? Tja, här borta till höger sidan är det skript området. Och det är där vi kan Dra och släpp pusselbitar. I en vecka, det kommer att bli där vi ekvivalent skriva kod med mer av ett tangentbord, men för idag kommer att dra och släppa pusselbitar, de paletter som kan alla hittas här just i mitten. Ja, i mitten här finns en hel drös kategorier av pussel bitar eller block. Man har i samband med rörelse, titta, ljud, en penna går upp och ner, uppgifter, händelser styra. Inte helt säker ännu vad alla dessa betyder, men du ser att de har varit snyggt kategoriseras. Och för att skriva ett program i Scratch, låt oss göra just detta. Jag ska börja i Händelser och dra detta här. När grön flagga klickade. Nu varför den? Väl påminna om att våra volontärer kom upp, det första jag eller de gjorde var att klicka på den gröna flaggan i övre högra hörnet. Och det betyder bara starta programmet. Så när den händelse inträffar, Vad vill jag göra? Jag kommer att gå under Looks, och jag kommer att göra ", säger hej." Och jag kommer att ändra på detta och säga något i stil med "Hej Yale." Och nu ska jag för att zooma ut, klicka på den gröna flaggan, och voila, har jag skrivit ett program. Det är inte så spännande ännu, men detta är precis där varje av dessa författare börjat, båda med Pikachu, och binära glödlampor Oscartime, och så många fler exempel. Du börjar super enkel, och då du börjar skikt, och lägga på funktioner och funktionalitet. Så vad är dessa skikt kommer att bestå av? Tja, utöver uttalanden, vi ska också har saker som är lite mer fancily kallas Boolean uttryck, efter någon som heter Bool. Och ett booleskt uttryck är helt enkelt en uttryck som är antingen sant eller falskt, ja eller nej, 1 eller 0. Alla motpoler som detta. Det är antingen sant eller inte. Men vi kommer också att se de som kan se ut så här. Så till exempel, är musen ner? De är typ av frågor, om ni så vill. Musen är antingen ner, sant eller det är inte falska. 1 eller 0, om man så vill, tenderar att vara kartläggningen. Sant är 1, är falsk 0. Väl vad om mindre än detta? Eller så är det mindre än så här? Det är en fråga av slag. Och om du lägger två siffror i det, antingen x kommer att vara mindre än y eller lika med y, eller större än y, men detta block får vi se, är bara kommer att svara på frågan, är detta mindre än så? Vi kan också se ut ungefär så här. Touching muspekare. Så i Scratch, kan du be Frågan är Sprite röra muspekaren? Andra ord är markör svävar över locket, eller motsvarande? Vi får se Anding saker tillsammans. Du kan ställa två frågor, och se till att de båda ge dig ja eller riktiga svar innan fattar ett beslut att göra något. Men hur gör du beslut? Tja, vi har dessa förutsättningar. Och vi såg detta i vår exempel på telefonboken. Funderar du på att vänster eller rätt för Mike Smith. Och i det skick du göra något potentiellt, om ett booleskt uttryck är sant. Och faktiskt, märker formerna nu. Det är det här platshållare just nu på overhead där vi kan fit-- om jag spola tillbaka en slide-- den formen. Det är inte riktigt samma storlek. Och faktiskt, ser du att Scratch ändrar storlek saker dynamiskt att placera pusselbitar, men form är vad som är viktigt. Denna sak ser ut det, och ja det är ungefär samma form som borde passa in där. Och om vi vill göra något detta sätt eller så, om annars, vi har detta pussel bit i Scratch också. Nu antar att du ville göra om, annars om, annars. Med andra ord, en tre-vägs vägskäl. Och vad kan du göra bara genom att kasta en blick på det här? Jag kan ta den här pusselbit, och det inte verkar passa, men återigen, är Scratch går ändra storlek bra för oss. Jag kunde börja lager dessa saker tillsammans. Så nu har jag en trevägs gaffel om detta är sant, gör så här. Annars om det andra är sant, gå på detta sätt, annars går det på annat sätt. Och i The Muppet Movie, den gaffel i vägen, så att säga, mellan Yale eller Stanford, var exakt det, bara två villkor. Antingen gå på detta sätt, annars gå den vägen. Tja, öglor också existera i programmering. Och vi har dessa redan används klass och i pseudokod kod, och säkert i dessa Skrap program alltid. Scratch har denna pusselbit som kommer bara låta dig göra något för evigt. Och ibland vill att göra något för evigt. Det är inte nödvändigtvis en bugg, det är eftersom du vill ha en klocka för att hålla igång, eller ett spel för att fortsätta spela. Eller så kan du ange ett begränsat antal steg, som med denna upprepning blocket här, som kommer att upprepa något 10 gånger. Vi kan sätta variabler, kommer vi snart se. Och med variabler, liknande i anden till algebra, som X, eller y eller z. Det är något symboliskt som kan lagra visst värde, viss bit information, att du kanske vill att komma ihåg till senare. Bästa exemplet på detta kan vara ett spel där du har en poäng, liknande i Pikachu. Hur många bitar av kakan och allt har du fånga? Tja, kan det vara en variabel kallas betyget som börjar på 0. Och sedan varje gång vi fångade en bit kaka eller godis, eller liknande, det blir ökas. Det läggs till en i taget. Och så en variabel lagrar en bit information så. Sedan finns matriser, och vi kommer tillbaka till dessa i en vecka eller två tid, men en array är ungefär som en lager eller en axelväska, inuti varav kan du lägga virtuella saker. Det gör att du kan lagra mer än en bit av information. Och det kan vara användbart om i spelet, du är sorts gå runt plocka upp saker. Och kanske du vill behålla alla dessa bitar av kakan runt, och inte bara äta dem en efter en. Och så finns det en snyggare konstrukt vi ska komma till kallas funktioner eller procedurer. Och även om vi tänker snabbare här, vi ska se att dessa är en mycket naturlig lösning på problem att vi ska möte. Eftersom våra program startar blir större vi ska börja märka mönster den kod som vi skriver, pusselbitar vi är att dra och släppa. Och så fort du märker själv gör något om och om igen, eller ännu värre kopiera och klistra in programmering kod som du har skrivit, det är förmodligen en möjlighet att faktor ut vad du håller kopiering och klistra in, och sätta det i något som kallas en "funktion." Men mer om dem i mycket mer i detalj inom kort. Och sedan finns det ännu snyggare funktioner. För de av er mer bekväm, eller ta APCS eller motsvarande, Skrap faktiskt stöder aktiviteterna som trådar och evenemang och mycket mer. Så inse att det har en ganska högt i tak, även om det är också mycket i stort sett tillgängliga för folks som aldrig har programmerat tidigare. Så ja, låt oss ta en titt vid ett enkelt program eller två. Vi har redan tittat på hur vi kan säga hej med Scratch. Låt mig gå vidare och öppna upp en lite mer intressant program som jag skrev i förväg. Och detta ens kallas Pet katten. Alla dessa program kommer att tillgänglig på CS50 hemsida. Faktum är redan där. Så du kan ladda ner dem och leka med dem, och med Problem Set 0, vilket är också på kursens hemsida, du uppmuntras att gå igenom dessa. Och dessutom har vi en Antalet walk-through videoklipp på nätet där jag och CS50 team verkligen gå genom var och en av dessa exempel på en mycket långsammare takt, en mycket snabb forwardable, eller återlindningsbar takt, så att du kan gå genom dessa på din fritid också. Så här är Scratch till vänster. Här är ett program till höger att jag har redan pre-made. Så låt mig in på den här. Och kan någon på engelska, att veta vad du vet, bara från nu som till hur Scratch verk, typ av säga i en engelsk fras eller mening, vad gör detta program tydligen göra? Ja, i orange skjorta. PUBLIK: [OHÖRBAR] DAVID J. MALAN: Ja, om din markören är på Scratch katten, spela en jama ljud. Men lägg märke till hur vi uttrycker det. Det finns uppenbarligen en loop där för evigt. Och så finns det en skick, om uttrycket. Och kollektivt, vad de betyder? Innebär det att programmet är bara alltid igång, och det är bara alltid väntar och titta på och lyssna för mig att flytta musen över katten. Eftersom varje gång jag gör det, som du föreslår, det kommer att göra detta. Låt mig börja programmet. Ingenting verkar vara händer, men lägg märke till hur det är markerat nu i en gul linje. Det betyder bara att det är igång. Och eftersom det finns en evigt loop, det är fortfarande igång. Så låt mig flytta min markören över Scratch. [JAMA] [JAMA] Och om jag flyttar bort det, [MEOW] nu slutar, men programmets fortfarande körs. [MEOW] Och så bedårande. [MEOW] Så låt oss öppna upp något mer avancerad Exempelvis kallas inte klappa katten. Och nu ska vi se vad händer här. [JAMA] jama. Så det är lite på autopilot, om ni så vill. --pet katten. Jag undrar varför. [ROAR] [MEOW] Så hur gjorde detta arbete? Tja, kan du typ av skäl genom det intuitivt, kanske. Men låt oss titta på den faktiska koden. Så återigen, när den gröna flaggan klickas, gör det för evigt. Vad vill du göra för evigt? Tja, om röra musen pekare, sedan spela ett ljud som tydligen heter Lion 5, det är insidan av detta projekt, annars spela upp ljud jamar, och sedan vänta två sekunder, så att det inte jama oavbrutet. I själva verket kan du mycket snabbt börja att irritera dig själv och dina rumskamrater. Låt oss ta detta block. Och lägg märke till vad som är trevligt om Scratch. Saker bara typ av drag och släpp och förregling. Så återigen, växer det till fylla vad du vill. Men om jag tar bort det, och sedan hit play, [DATOR BLIP SOUND] --den är typ av snubbla över själv, eftersom det är bokstavligen gör vad jag säger. Det säger alltid spela ljud, men Jag tänker inte ge det en chans att avsluta. Och så det skulle vara en bugg. Och det är därför vi hade den här saken här nu. Så låt oss faktiskt börja från scratch-- slags vits något intended-- där vi nu har katten flytta. Så jag kommer att göra detta i farten. Jag kommer att zooma in här, bara att få mig igång på händelser. Och grön flagga klickade. Och det finns andra sätt att starta skript. Vi kommer att hålla det enkelt här. Och nu ska jag gå framåt och gå under kontroll. Och återigen, om du glömmer där saker, bara klicka runt, och så småningom kommer du att hitta dem igen. Så jag vill alltid göra vad? Jag vill använda rörelseblock som jag vet existerar, flytta 10 steg. Så låt oss se vad som händer här om jag spelar det här spelet. Tack och lov är det inte går för långt. Jag kan fortfarande slags gripa honom i svansen och dra tillbaka honom. Men programmet är fortfarande igång, så han är ganska kämpa mig. Men det skulle vara typ av trevligt om jag villkorligt åtgärda detta i kod. Eftersom detta är inte-- faktiskt detta är verkligen inte ett roligt spel för alla oavsett ålder. Så låt oss försöka åtgärda detta genom att med någon typ av förhållanden. Så jag kommer att gå under Kontroll och sedan om. Jag gillar den här idén. Så efter att ha flyttat 10 steg, if-- låt mig känna var jag är. Jag kommer att gå under Sensing, och då ser jag kan gå hit. ro till form matcherna. Storleken spelar inte, men det är kommer att växa för att fylla. Och nu detta är en liten meny. Och nu mus pointer-- jag inte vill musen, jag vill kanten. Så Scratch är smart nog att veta när en sprite vidrör kanten. Vad vill jag honom att faktiskt göra? Låt mig gå vidare och ändra rörelse. Du vet vad? Jag kommer att ha honom vända. Så vid 15 grader är inte verkligen kommer att hjälpa mig. Jag vill att han ska vända och gå åt andra hållet. Så låt oss se vad som händer här, om jag slog spela nu. OK, typ av dum ut, men Det gör precis vad jag sa. Och det är att rotera hela spriten. Nu visar det sig att jag kan fixa detta. Och jag visste inte hur att åtgärda detta först. Jag typ var tvungen att futz runt och se det bästa sättet att göra detta. Men om jag går att-- låt oss se, rörelse. Åh, jag hittade det här. Egentligen Ställ Rotation stil. Vänster, höger, eller inte rotera eller runt om. Och det visar sig att det är vad jag vill. Och jag kommer att sätta detta inte min slinga, eftersom jag inte behöver ställa in rotations stil flera gånger. Jag ska lägga den på toppen av det här programmet så att det blir in en gång, och sedan minns. Och nu ska jag prova det här igen. Låt mig stoppa programmet. Och nu när fast att fel. Så jag iterativt förbättra på detta. Programmet blir en lite mer komplicerat och större, men jag tar barnet steg så att säga, och små bites av problemet att få det bättre och bättre. Men även detta är typ av Lama. Du vet vad? Skulle be någon med en riktigt bra, fruktansvärda röst vilja komma upp? Någon med en röst. Eh, ja. Kom upp. I den gröna tröjan. Så visar det sig att det finns något annat kul saker, estetik och låter lika. Här är jamar. Jag klickar på fliken Ljud. [JAMA] Det är jamar. [JAMA] [JAMA] [JAMA] --actually rekord något vår egen här. Så låt oss göra just detta. Istället för att använda denna katt ljud, låt oss gå vidare här, och vad heter du? Nick, trevligt att träffa dig. Det är David. Så i ett ögonblick, jag ska att slå på inspelningsknappen. Och om du kan bara skrika in den bärbara datorn, "ouch" som om du bara gick in i väggen, som kommer att vara mycket uppskattat. 1, 2. NICK: Ouch! DAVID J. MALAN: Awesome. Och nu kan göra lite redigering här. Kommer att bli av med de lugnaste delarna. Och jag tror det är bra. Tack så mycket. NICK: Pleasure. DAVID J. MALAN: Jag har bara döptes den "ouch" men nu ska jag gå tillbaka till mina manus. Och meddelande finns det verkligen ljudet här. Och jag kommer att gå vidare och spela upp ljud ouch, och jag kommer att göra det om det röra endast kanterna. Och sedan kommer jag att har det vända. Så låt oss se vad som händer här. Låt oss gå helskärm. [VIDEOAVSPELNING] -Ouch! Ouch! Ouch! Ouch! Ouch! Ouch! Ouch! Ouch! [END SPELA] DAVID J. MALAN: Så du inser att vi får lite tur. Jag kommer att ha honom flytta som 100 steg i taget. Effekten av vilken nu kommer att be-- [dator glitch SOUND] Så inom rimliga gränser. Så en möjlighet att förfina det ytterligare om vi verkligen vill. Så nu ska vi presentera ett annat koncept. Att låta mig gå in i en som heter Räkna Får och användning något kallas en variabel. Detta är en bedårande liten får, och Jag har ändrat hans dräkt så att säga. Så även om standard är en katt, kan du ladda upp, du kan rita, du kan göra ett obegränsat antal tecken på din sprite. Här är ett program som är kommer att göra vad på engelska? Baserat igen på precis vad du vet nu. Vad är det här programmet göra? Ja, det kommer att räknas. Ett nummer i taget. Vi har uppenbarligen har denna uppsättning räknare. Jag vet inte vad det är, men kanske är det en variabel. Det är bara en container, x eller y. Men ordet räknaren är mer beskrivande än matematiker x eller y. Så vi kan använda engelska ord för saker. Evigt, betyder bara hålla på så här. Säg räknare. Nu var kom det ifrån? Tja, visar det sig att disk är en variabel. Så det är bara en annan pussel lappar mig skapade i förväg. Och även om det händer inte att vara samma form här, normalt du skulle säga något liknande hello här. Du kan också dra en variabel så att det är vad oss ​​komma sagt. Då ska jag vänta på en andra, jag ändra räknaren med ett, uppräkning det genom att lägga ett. Så att nettoeffekten är denna förtjusande räkna får. Fast han räknar sig själv. Nu är det mycket snabbt kommer att bli tråkigt eftersom han kommer att gör det verkligen för evigt, men det är precis vad programmets utformning föreskriver. Låter nu försöka annat exempel som utnyttjar en variabel. Detta kallas Hi Hi Hi, att skulle bli irriterande snabbt. Nu är detta en har två skript. Och så igen, vi tar baby steg. Vi började med något super liten, sattes till den, sätts till den. Nu vill jag göra något ännu mer dynamisk, så jag vill lyssna på två olika saker på en gång. Så till vänster, när grön flagg klickas, Jag sätter en variabel som jag skrev i förväg kallas Dämpad. Och jag godtyckligt sätta den till 0. Så Scratch inte har riktiga och falskt, men det har 0 och en. Så jag kan närma samma idé. Och sedan för evigt, om mellanslagstangenten är pressade, ställ sedan variabeln till 0. Eller ledsen. Om Space trycks och om avstängd, variabeln är 0, ställ sedan in dämpad 1, annars satt dämpad till 0. Detta verkar ungefär som vi är bara göra och ångra arbete. Men vad är effekten? Varje gång jag slog på mellanslagstangenten, vad händer med min variabel kallas avstängt, logiskt? Typ av blir vänt. Det förändrar 0-1 eller 1-0. Så det tog några kvarter för att uttrycka det, men alla Jag gör är växling staten denna variabel till 0 eller 1, eller 0 eller 1 varje gång jag slog på mellanslagstangenten. Nu hit, vad är det här gör? Evigt, om dämpad är 0, så om avstängd är falskt. Så om det inte är avstängt, är semantik där, spela upp ljud sjölejon, och tänka Hi Hi Hi för två sekunder, vänta två sekunder. Så märker nu dessa skript är effektivt kommer att löpa parallellt så att en kan lyssna efter en åtgärd, den andra att fatta ett beslut på grundval av denna åtgärd. Och det kan göra det för evigt. [Sea Lion BARKING] [Sea Lion BARKING] Det kommer att göra det för evigt och [Sjölejon BARKING] som jag just har gjort. Och nu är det fortfarande igång men jag har "dämpad" spelet. [Sjölejon BARKING] Och det är allt här killen gör nu också. Vi öppnar ett annat exempel här. Låt mig gå in på händelser, och nu denna förtjusande också. Men märker det har två sprites. Så inte bara två manus med en sprite, men två sprites. Och om jag klickar på den blå killen som jag redan har, jag ser att han som ett program här uppe som bokstavligen bara säger detta, när jag får en händelse, säger "Polo" i två sekunder. Så om du någonsin spelat i en pool, spelet Marco Polo, om den orange killen skriptet är någon indikation, tydligen varje gång jag slog på mellanslagstangenten, Vad är den orange killen kommer att göra? Han kommer att säga "Marco." Och då detta är ett nytt block. Vi har inte sett det här förut, men sända ett evenemang. Och jag kunde kalla det händelse vad vi vill. Vi ska återkomma till detta kanske inom kort. Men sända ett evenemang är ett sätt för en sprite att tala med en annan av väsentligen passerar den ett meddelande. Det är inte ett meddelande som du ser. Det är inte något visuellt. Det blir liksom en dator meddelande att den andra killen lyssnar efter. Eftersom ja, den blå kille, minns inte har när grön flagg klickade. Han har i stället, när jag tar emot en händelse. När han blir överlämnade denna not i klassen, så att säga, skulle han säga "Polo". Och så att nettoeffekten är att när jag slog den gröna flaggan, händer ingenting. Men när jag slog på mellanslagstangenten, säger han "Marco", säger han svarar med "Polo". Men det enda sprite jag interagera med är den orange en. Så det här är ett sätt att sorts passerande meddelanden mellan sprites och låta dem kommunicera med en annan. Nu ska vi titta på en sista en här kallade trådar. Och lägg märke till detta genom att spela det. Så dessa är två sprites. Fågeln är typ att flyga runt. Han studsar. Det finns ingen "ouch", men samma idé. Men katten verkar ganska smart. Vad katten tydligen göra? Och vänta. Vad katten tydligen göra? Det är inte bara studsar. Han följer fågeln. Och så uppenbarligen finns det en väg med en kombination av block här-- och låt oss titta på katten riktigt snabbt. Evigt, om att röra fågel, sedan spela ljudet Lion 4, vad det nu är. Vi hörde det en gång. Annars pekar mot fågel, och flytta ett steg. Nu det faktum att det är en steg är det som ger fågeln lite av en fördel initialt, men om vi istället göra denna 10, till exempel, så att varje iteration av slingan han flytta 10 steg tid. Så mer utrymme. Låt oss se vad som händer då. [LION ROAR] Inte så mycket bättre. Så nu ska vi försöka förbättra på dessa lite iterativt, och komma tillbaka till det begreppet en funktion. Och faktiskt en av de fundamentala takeaways för klassen design. Inte bara skriva program som fungerar och som är korrekta, men är väl utformade. Och design är mycket mer subjektiv, och du kommer att bli bättre på det med tiden. Men låt oss ta några baby steg mot börjar med ett program som fungerar, absolut, men det är inte bra. Det är inte mycket välskriven. Så här är ett program som gör detta. Hosta, hosta, hosta. Vad gör programmet ut? Ser rätt för mig. Det säger soffa för en andra, då den väntar. Då säger det igen, då väntar. Då säger det igen, då väntar. Och sedan programmet implicit slutar, eftersom det inte finns någon slinga. Men varför är detta ett dåligt skrivna program? Även om du aldrig har programmerat förut? Liksom, vad gnuggar fel sätt, kanske här? Yeah? PUBLIK: [OHÖRBAR] DAVID J. MALAN: Exakt. Du upprepa själv om och om igen. Och bokstavligen, kopierade jag och klistras två av dessa block och om igen. Och det är precis den typ av sanity Kontrollera att du borde göra. Vänta en minut. Ska jag verkligen göra detta? Så vad är det här vad är självklar lösning kanske? Har någon form av slingan. Och jag inte riktigt minns vad pusselbiten är, men om jag tittar på nästa iteration här, ja, det finns inte bara evigt slingan, det finns upprepa några antal gånger. Och så jag har angett tre. Och nu märker hur mycket snävare, hur mycket mer kortfattade detta program är. Och på sätt och vis, hur mycket mer att underhålla. Om jag vill ändra ordet från hosta till något annat, som achoo, som han nysningar. Då ska jag ändra det i en plats, och inte tre. Så detta redan känns något bättre design. Låt mig i stället öppna hosta 2, vårt tredje exempel. Lägg märke till som en datorforskare, Jag börjar räkna på 0, typiskt. Nu ser lite skrämmande på först, men effekten är densamma. Hosta, hosta, hosta. Men vad som verkar vara fundamentalt ny i den övre delen av programmet? Jag har tagit bort ordet. Jag har tagit bort att vänta. Och vad har jag inkopplad i stället? En funktion. En hosta block. Jag menar, ärligt talat, jag verkar snäll av en idiot om jag inte bara börjar med blocket som är tydligen kallas "hosta", om det är allt jag vill ha honom göra. Men som inte finns i Scratch. Snarare jag gick till en i palett kallade Fler Blocks här, och jag drar denna stora lila sak här som låter mig definiera en funktion. Det låter mig i huvudsak skapa mitt eget pussel pjäs som kan kallas något jag vill, kan det göra vad jag vill, men det ger det ett namn. Det ger mig en ny, lila pusselbit som gör nu vad jag säger att det ska göra. Så här lila pjäs här motsvarar detta en här. Och vad gör det? Den säger hosta för en andra, och sedan väntar. Och nu har jag slags skapat min egna pusselbit, så att det beter sig exakt samma sätt. Så jag kan hålla på så här. Och faktiskt, det kommer att bli mer och fler möjligheter för modularisering, och skiktning, komplexitet ovanpå varandra. Men denna grundläggande idé, verkligen i problem sade 0. Vad du kommer att utmanas att göra är för att ladda ner Scratch, eller bara använda det på webben, och bara ha kul med det. Vi ger dig en uppsättning krav, som har ett ljud, och några antal pusselbitar. Men du kommer att göra just detta. Och du inser att du kommer att vill ta några babysteg från början, tills programmet får mer och mer komplexa. Men med tanke på detta är det bästa sättet jag kunde göra detta? Kan jag undvika denna instinkt kanske för att kopiera och klistra in? Men innan Problem Set 0, och innan vi ajournera, trodde vi skulle ta upp en mer volontär om vi kunde, för en sista program det är kanske den mest passande alls, med tanke på dagens arena. Kom ner. Yeah. Ja. Vad heter du? Hoppsan. Det är ok. Båda komma ner. Och jag har kommer att ta itu med detta på något sätt inom att kommande tio sekunder. Så kom ner. Kom ner. Låt mig komma upp hit. Kom igen. Okej. Låt oss se här. Så märker riktigt snabbt här, Om du vill komma på upp. Vi ska göra två omgångar av detta. Och vad heter du? SABRINA: Sabrina. DAVID J. MALAN: Sabrina och? YING GEE: Ying Gee. DAVID J. MALAN: Ying Gee. Trevligt att träffas båda. David. Så vår sista exempel här är kallas Ivy svåraste spelet. Och varför gör vi inte att ni ska göra Nivå 1, och du gör nivå 2. Och vi får se hur långt utöver det vi faktiskt gå. Skriven av en student förra året, remixad av mig så att det skulle gå över brunnen i New Haven. Och jag ger dig ett spel som kommer att innebär att flytta pilarna uppåt och nedåt, och få Yale till mållinjen. Nu kör vi. [VIDEOAVSPELNING] [MUSIK - NFL på FOX TEMA SONG] [MUSIK - MC HAMMER, "U kan inte röra  THIS "] U kan inte röra det. U kan inte röra det. Kan inte röra det. Min, min, min, slår min musik mig så hårt, gör mig säga, åh, min herre. Tack för att du välsignar mig med en emot att rimma och två hype fötter. Det är bra när du vet att du är nere. En super knark homeboy från Oaktown. Och jag är känd som sådan och detta ett beat uh, kan du inte röra. Jag sa ju Homeboy U kan inte röra det. Ja, det är hur vi lever och du vet att U kan inte röra det. Titta i mina ögon, man. U kan inte röra det. Yo, låt mig byst funky texter. U kan inte röra det. Färska nya sparkar och byxor. Du fick det så och du vet att du vill dansa. Så flytta ut från din plats och få en fluga flicka och fånga denna takt. Även om det är rullande grepp om pumpen lite bit och låta dem veta vad som händer. Precis som. Precis som. Kalla på ett uppdrag så dra tillbaka. Låt dem veta att du är för mycket och detta är ett steg uh du inte kan röra. Yo, jag sa ju U kan inte röra det. Varför du står där mannen? U kan inte röra det. Yo, ljud klockan skolans in, suga. U kan inte röra det. Ge mig en sång, en rytm som gör dem svettas det är vad jag ger dem nu. De vet när man talar om Hammer du pratar om en show som är hypade. Och snäva sångare är svettas så passerar dem en mikrofon. Eller en tejp för att lära sig vad det kommer att ta och nu han kommer att bränna listorna. Legit antingen arbeta hårt eller du kan lika gärna sluta. Eftersom du vet U inte kan röra detta. U kan inte röra det. Bryt ner det. Sluta. Hammardags. Gå med flödet i en spin Om du inte kan flytta till detta då är du antagligen döda. Så vifta med händerna i luften [OHÖRBAR] Detta är det för en vinnare dansa till detta och du kommer att få tunnare. Flytta dra ditt gumpen bara för en minut låt oss alla göra knölen. Yeah. U kan inte röra det. U kan inte röra det. Du får bättre hypade Pojken U kan inte röra det. Ring på klockan skolans igen. Bryt ner det. Sluta. Hammardags DAVID J. MALAN: Det är allt för CS50! Tack så mycket för att gå med oss! Vi ses utanför. [END SPELA] [VIDEOAVSPELNING] [MUSIK - "Seinfeld" theme song] -Hey David. -Hey, David. Hur går det? -Bra Jobb, idag. -Så Har du tänkt på vad du kommer att göra för ut skämt? -Nej, Jag fick ingenting. -Vad If-- tänk om det är out skämt? -liknande, Uppackning kärror? -Uh-Va. Du vet, det är ingenting. -Så Vill, ingen historia, ingen konflikt, ingen lösning. Jag förstår inte. Vad handlar det om då? -Inget. -Så Vi har ute skämt handlar om ingenting, och vi har inga aktörer. Vem kommer att vara i det här? -Nej nej nej. Jag menar, jag ska vara i det. -Du Vara med? -Ja! Folk säger alltid att jag är ett tecken. -Ja, Jag menar, det är sant. Men vem kommer att vara i det? Det kan inte bara vara du. -Du Kommer att vara i det, Gavin, Dan, Dan, Colton, Z'Myla, Alysse, Doug, David, alla. -Så Det handlar om ingenting, och alla är på det? -Absolut ingenting. -Detta är löjligt.