[Powered by Google Translate] [ROCK MUSIK] [MUSIK - "lyckliga tillsammans" sköldpaddorna] DAVID MALAN: Idag börjar vi vår utforskning av grunderna i datavetenskap och vår introduktion, nu till konsten att programmering, där det är bara ett exempel. Men i samma anda av problemlösning, vet att CS50 traditionella pussel dag är i morgon. Om du inte har ännu RSVPed för denna händelse, kan du gå till cs50.net/rsvp. Du kan ta grupper om två eller tre eller fyra. Du kommer att utmanas med problem som den du såg uppe i början. Alla nya problem i år om du drack förra året, och du kommer att ha en chans att sedan vinna några fantastiska priser. Bland dem, en Wii och några presentkort och liknande, samtidigt som umgås med CS50 studenter och klasskamrater och pizza och Facebook. Så mer om detta i morgon om du vill. Detta är då CS50, för dig med oss ​​för första gången. Och vet att denna kurs är särskilt fast besluten att få dig genom kursen till de slutliga, då du kommer att ha inte bara en förståelse av dessa Grundläggande datalogi, men du kommer att ha detta mycket praktiska färdigheter som du sedan kan ta tillbaka till egen avdelning, oavsett om det är ingenjörsvetenskap, tillämpad matematik, naturvetenskap, naturliga vetenskap, eller liknande. Ja, vad är så spännande med datavetenskap dessa dagar är att det är bara så tillämpas alla typer av områden. Och även om i dag, kommer vi skrapa bara på ytan av en mycket traditionella programmeringsspråk som kallas C, vi istället titta på något som kallas Scratch, något med vilken kaka kärlekshistoria genomfördes genom en av dina föregångare i år tidigare, att berätta historier, att skapa spel, att skapa interaktiv konst och att faktiskt börja att slå våra sinnen runt några av de grundläggande konstruktioner som bakom programmering men i ett sammanhang, som du ser, det är mycket mindre skrämmande, det är mycket mindre svårbegripliga, än vad du ser snart. Och inse också, för de av er bara med oss ​​här termin fraserna som vi slutade onsdagens föreläsning, det är inte så viktigt när du hamnar i förhållande till din klasskamrater i denna klass, men där du, genom termins slut vecka 11, sluta i förhållande till sig själv rätt denna dag. Så utan vidare, det är också värt att notera att de mindre bekväma, de någonstans mittemellan, är också, genom utformningen av denna naturligtvis inte på något sätt missgynnas vis-a-vis de mer bekväm kommer in denna klass. Som du ser över de kommande veckorna har vi olika spår för disparat tillbaka bakgrund, sektioner för de mindre bekväm, bekvämare, de någonstans däremellan. Som du ser i helgen och nästa vecka, två versioner av flesta problem apparater i både standard-och hackare upplaga så att ni alla kan själv välja den väg som du är mest bekväm. Så idag, dyka vi i denna programmering språk som kallas Scratch. Det är ett grafiskt programmeringsspråk, och ändå har den samma funktioner för några av de högre nivå språk kommer vi utforska senare i terminen, bland dem C JavaScript och PHP. Men det kommer att tillåta oss att undvika några av de distraktioner tidigt av syntax, saker som semikolon, parenteser, och andra svårbegripliga detaljer som, vid första anblicken, är helt enkelt inte alls intellektuellt intressant och tenderar att få vägen från några grundläggande förståelse. När det gäller nu stödstrukturen framåt, insett detta verktyg, CS50 diskutera, vilket kommer att kopplas på kursens hemsida senare idag, är online diskussionsforum i som du kommer att kunna ställa frågor till varandra och personal, och det är också ett verktyg som vi får se nästa vecka, att vi kommer att använda mycket integratedly i kontorstid också. Faktum kontorstid börjar på måndag, och ärligt talat, den första vecka kontorstid är ganska låg nyckeln. Jag tror inte att du hittar Scratch allt otillgängliga. Det är ganska självförklarande, som vi får se, och så vad Vi kommer att använda det för i dag är att extrahera en del av grundläggande idéer som då kvarstår hela resten av terminen. Men från och med måndagen vid 8:00 PM till 23:00 kommer kontorstid i Annenberg över hjärnan paus. Sektionering två kommer att börja i kväll, så någon gång helgen, gå till cs50.net/section, och du kommer tillfrågas ett antal frågor. Bland dem, hur skulle du beskriva din komfort nivå i dag? Det finns ingen hård och snabb regel om vem som hink. Det är just den typ av sak som du säkert vet om du är bland dem mindre bekväm eller på annat sätt. Och nu, genomgångar. Problemet inställda specifikation för denna vecka, både standard och hackare upplaga både är online på cs50.net och med nu. Och du kommer att se att den första av dessa utgåvor, den standardutgåva varje vecka, åtföljs av något vi ringa en kod genomgång, ledde en session av en av kursens pedagogiska stipendiater att guida dig genom, ge tips om, och få dig ner en viss väg när det gäller att starta dessa problem uppsättningar. Så med alla dessa problem sätter, om du någonsin vill själv var jag börjar, börjar du med dessa genomgångar. Och faktiskt, låt mig presentera Zamyla Chan, detta Årets undervisning karl som kommer att leda varje en av dessa genomgångar. Zamyla? [Applåder] ZAMYLA CHAN: Åh, hej, alla. Mitt namn är Zamyla. Jag är en junior studera teknik i Winthrop House. Men jag försöker passa in så många kurser datavetenskap som jag kan, vilket är anledningen till att jag är verkligen glad över att vara ledande här Årets genomgångar. Walkthroughs, för mig, var en viktig del av min CS50 erfarenhet. Under genomgång, för varje p-set, kommer vi att gå igenom problemet som tillsammans se över problemen, typ av dela upp dem i hanterbara biter. Jag ska ge er tips, tekniker, för att få igenom och komma igång. Jag hoppas att ni alla på genomgångar. Om du inte kan göra det personligen, då vänligen gör lyssna på nätet. DAVID MALAN: Utmärkt. Tack, Zamyla. So inser att genomgångar är verkligen på en fredag eftermiddag, men detta är avsiktligt av design så att även om du inte vill delta i klassen på en fredag eftermiddagen kommer videor upp allt snabbare över helgen. So inser att cs50.net blir alla Zamyla s genomgångar. Och att det är dagens datum och tid, 3:00 PM, Harberd Hall, 104. Och några av de pedagogiska stipendiater har också förberett några anmärkningar för dig i frånvaro för att ge dig lite perspektiv vad deras erfarenheter kommer in och gå ut CS50 var. Så om vi kunde dämpa belysningen för bara ett ögonblick, jag ger dig några av CS50 personal. JACKSON Steinkamp: Jag tog CS50 förra året som en nybörjare i falla, och det absolut blåste mig. Jag hade aldrig tagit några programmering klasser innan, och kom aldrig in med någon datavetenskap erfarenhet alls. Och bara hörde jag surr om klass och beslutat att ta den. JULIA Mitelman: Det var riktigt roligt, verkligen engagerande. Jag fortfarande, i dag - Jag har nyligen såg jag har disketten som David gav oss på vår första dag i föreläsningen. Jag hade hängt den på min vägg. Detta är förmodligen lite nördig, men jag hängde på min vägg under klassen som en påminnelse om hur coolt det var. TRAVIS Downs: Det är så pinsamt. JACKSON Steinkamp: Datavetenskap är något du ska försöka även om du inte är en för de traditionella vetenskaperna. Det är sin egen erfarenhet, och CS50 kommer att se att du är stöd väl igenom det med sin veritabel armé av TF. ALI Nahm: Jag tog det som en nybörjare, så jag gjorde en hel del av nya vänner. Jag fick också införts för att hela denna koncentration och Hela Högskolan, så jag rekommenderar det och hälsar dig välkommen till vår CS50 familj. Yaniv YACOBY: CS50 lär bara dig hur du använder verktyg som är allmänt tillgänglig. Du behöver bara en bärbar dator, behöver du en webbläsare, och du behöver lära sig att skriva lite kod, och du kan verkligen bygga fina saker. KAREN XIAO: Det är bara så coolt att kunna göra något och har människor använder det och har folk se det, och det är vad jag älskar verkligen det. TIM McLaughlin: - en känsla av gemenskap, tror jag, i denna Naturligtvis mer än någon annan kurs jag tagit hittills. Du är inte bara att ta en annan - du inte fylla ett annat krav. Du är inte bara att föreläsningar och gå på avsnittet. Men du gör massor av saker som handlar om programmering och allt om teknik, men det gör inte verkligen känna sig som en klass för det mesta. Travis Downs: Och på den första dagen, delade de ut tårta och Jag blev genast såld. JACOB Pritt: Gratis godis och pizza. ZAMYLA CHAN: - oavsett ditt intresse nivå, tror jag att CS50 får du kul, och du kommer att vara intellektuellt stimuleras. MARK GROZEN-Smith: Det är alltid en fest i klassen, och det är en fest varje kväll arbeta på din p-set. JACKSON Steinkamp: Varje gång du avslutar ett problem som, du kommer att kännas som att du har avslutat ett projekt. MELISSA NIU: Det var första år, och jag var gjort shopping. Jag hade mina fyra klasser redo, och jag var i Annenberg. Och jag stöta på en vän, och han säger hej, jag shoppa denna klass kallas CS50, och du bör komma med mig. Slutade med det som faller, och efter den klassen jag tänkte jag ska ringa i CS. Men här är jag, tre år senare, fortfarande studerar dator vetenskap och verkligen göra det som en stor, och jag älskade varje ögonblick av det. ROB BOWDEN: Jag har ingen aning. ALI Nahm: Låt oss se. MELISSA NIU: galenskap. Högtalare 1: Jag känner att jag skulle vara mycket klyscha. Jag skulle bara säga, liksom, awesome. Yaniv YACOBY: Tillgänglighet. JACOB Pritt: Gratis godis och pizza. TRAVIS Downs: Det går inte att tacka nej till en klass som delar ut tårta. TIM McLaughlin: Energisk. Vipul SHEKHAWAT: Essential. ROB BOWDEN: Låt mig tänka på ett svar. Jag tror att jag har något. Åh, gud. Ja, mitt namn är Rob Bowden, och detta CS50. [Applåder] DAVID MALAN: Okej, så låt oss börja att måla en bild av i vilken riktning vi kan gå, och låt oss införa detta begrepp här kallas pseudokod. Så pseudokod är inte ett programmeringsspråk språket i sig. Det är inget tekniskt i sig, men det är bara en slags generellt sätt att uttrycka dig ganska exakt, ganska algoritmiskt, ganska formellt, men utan behöva oroa sig för vad språk du uttrycker dig i. Det är lite modell av engelska och programmeringsspråk med som du råkar vara bekant, så att vi kan börja skriver sådana saker som vi går. Och faktiskt, Josef, kan jag låna dig på scenen för att vara skriftlärd här? Jag har gått framåt här i förväg och glömt att sätta på vissa strumpor idag, och detta kommer att vara bland våra mer löjliga exempel. Nu, jag behöver dig här. Jag gör det strumpor delen. Så här har vi en liten anteckningsblock. Detta är bokstavligen bara TextEdit i en Mac. Vi faktiskt inte kommer att skriva en körbart program, men Vi kommer bara att börja skissa på pseudokod baserad på några av de råd du ger till mig här. Så här är min hög med strumpor hemma. Jag har inga strumpor på när jag vaknar på morgonen, och vi har nu behöver skriva ett program, en algoritm av slag, som att få dessa strumpor på fötterna. Och längs vägen, låt oss se om vi snubblar över, eller stöter, några av de idéer som du kommer att behöva börja tänka mycket mer på allvar vid programmering så att dina program beter sig inte riktigt som det var tänkt. Så jag sitter här nere. Jag har min hög med strumpor. Vad är det första en rimlig människa skulle göra när målet är att sätta på sig ett par strumpor? Någon ge mig en steg och endast ett steg. Ja? Publiken: Böj ner. DAVID MALAN: Böj ner, okej. Steg två. Steg två. PUBLIK: Plocka upp din strumpa. DAVID MALAN: Plocka upp din strumpa. Okej, är så liten tvetydighet här, och en av de första stötestenar som vi ska medvetet stöter här. Det är lite tvetydigt, så plocka upp din strumpa. Okej, jag tar den här, men en dator inser på bara en bit, inte kommer att ha den sortens mänsklig instinkt att bara välja den närmaste. Vi kommer att behöva börja, snart, uttrycker oss mer exakt. Okej, så steg två är att plocka upp strumpan. Vi tar det. Steg tre. I ryggen. PUBLIK: Hitta ett matchande par. DAVID MALAN: Hitta matchande par. Okej, så det är bra. Jag var tvungen att välja denna strumpa. Så målet är att hitta en matchande strumpa, nu, men vad betyder det? En rimlig människa, ungefär som på onsdagen när jag bara visste hur man hittar Mike Smith i en telefonbok, bara typ av gick med sin instinkt. Men här är det uppenbarligen strumpa här, men en dators inte kommer att vara så instinktiv. En dator kommer att ha en samling av bitar, som vi diskuteras på onsdag, och de är organiseras på något sätt i minnet. Men poängen är att en dator har bara förmågan att titta på saker en i taget, och i själva verket, även vi människor - även om det känns som om jag tittade ner och en delad sekund senare jag vet var strumpan är min hjärna och mina ögon förmodligen gjorde en snabb skumma av dessa strumpor och sedan låst vidare till en i fråga. Så om vi desto mer medveten nu som en dator, Hur hittar jag den här matchande par? Nåväl, vi måste iterera. Vi måste kanske en slinga över den här röran strumpor på golv där jag säger något i stil med FÖR VARJE strumpa, plocka upp, och om samma form och storlek som den andra, SÅ punkt, punkt, punkt, kommer vi att fortsätta berättelsen. Så för varje strumpa, så jag plockar upp den här. Jag kollar detta lika här. Det är inte så jag gallrat sida. Då jag iterera igen. Är detta en lika? Nej, det är inte så jag satte det åt sidan. Är den här? Nej. Den här? Nej, och så vidare. Och slutligen, förhoppningsvis kommer jag stöter på det här strumpan här. Så om det är samma form, storlek, ta den. Och nu, vad skulle bli vår nästa steg här? Ja? PUBLIK: Identifiera rätt från vänster. DAVID MALAN: Okej, identifiera höger och vänster, så lyckligtvis den sortens gärningar. Lite symmetrisk, eller jag har bara slitna dem så. Okej, så jag har identifierat rätt. Och nu, innan vi går vidare, låt mig påpeka vad Josephs gjort här som en slags insatt programmerare. Så återigen, det finns ingen sätt att göra detta, men längre än bara numrering linjerna har Josef redan börjat göra detta slags indrag. I själva verket är detta en mycket vanlig konvention i programmering, där när du gör något iterativ, looping stil, som vi antyder med den engelska frasen "för varje strumpa, "konventionen i pseudokod och, som vi ser, normala programmeringsspråk, är att bara strecksatsen. Hit mellanslagstangenten ett par gånger, tryck på Tab-tangenten eller liknande, så att kapslade under "För varje strumpa" är bit av saker som du behöver göra som en följd av den slingan. Så det är allt som förmedla semantiskt. Nu under tiden den "Om det är samma form och storlek," den Att "ta det" är indragen vidare bara innebär det är det enda du ska göra om detta villkor, om den gren, som vägskäl, i själva verket är sant. Så nu här, vi är på steg fyra, identifiera höger och vänster. Jag har identifierat rätt. Ge mig steg fem. Och tekniskt, kan vi verkligen kalla det för varje sak - Du bör nog numrera alla rader om vi ska göra detta. Joseph: [OHÖRBAR] DAVID MALAN: [OHÖRBAR]? Okej, okej, vi gör det på ditt sätt. Okej, så steg fem, hur gör vi rätt strumpa? Hur går vi nästa, här? Ja? PUBLIK: Lyft upp höger ben. DAVID MALAN: Lyft upp höger ben, okej. Steg sex? Snabbt. Ja. PUBLIK: Hitta en öppen ände av strumpan. DAVID MALAN: Okej, hitta den öppna änden av strumpan. Så bra. Så här, ärligt talat, skulle en mycket vanlig instinkt bara vara sätta på höger strumpa, men det är också ganska tvetydig. Om inte datorn eller mänskliga vet exakt vad det betyder, det inte kommer att vara att genomföra det, så här, jag har fann öppnandet av beståndet. Steg Sju? PUBLIK: Tryck tårna. DAVID MALAN: Touch tårna. Okej, så nu går vi - Okej, jag ska ta några friheter här. Tack. Steg åtta? Sätt på strumpan. Okej, så nu har jag, tror vi är tillräckligt nära för att sortera om att ta detta en hemma. Okej, så detta går upp. Jag tar några friheter med vad det innebär, faktiskt. Sätt strumpan på. Okej, nu steg nio? PUBLIK: Sätt ner foten. DAVID MALAN: Tack. Steg nio, satte ner foten, och nu kan vi upprepa. Så förmodligen kan vi gå nu in steg 10 och säga identifiera vänster strumpa, men det är förmodligen redan gjort. Och så då kan jag sortera av upprepa dessa steg. Men denna typ av väcker frågan. Före, sista gången vi ville upprepa något, vi gjorde det iterativt, om och om igen, en FOR Varje slinga så att säga. Skulle det vara meningsfullt att använda en slinga för att hantera både vänster och höger strumpa? Eftersom det känns som dessa operationer är ganska mycket identiska med undantag för det faktum att man börjar här och en börjar här? Har vi slinga eller vill vi bara fortsätta skriva steg 10 och 11 och 12? Publiken: Loop. DAVID MALAN: Okej, så slinga. Jag faktiskt kunde ha sagt bara fortsätta. Så varför är det så? Nåväl, detta är faktiskt den första av våra icke uppenbara designbeslut, och i själva verket en av de mätetal som Vi kommer att börja utvärdera för oss själva och för dig som kvalitet av ett program är bara hur väl utformade det är. Har ni gjort en minimal mängd arbete som krävs för att få jobbet gjort mest snabbt, antingen i form av din tid eller i termer av datorns drifttid? Hur många verksamheter gör det tar att utföra? Så utan tvekan är detta en möjlighet för en slinga, eftersom så fort jag börjar kopiera och klistra, som Joseph effektivt skulle börja göra i ett ögonblick, du typ av att slösa bort din tid, och att du är dubbelt uttrycksfulla. Men på samma gång, det är egentligen bara två särskilda fall, vänster och höger. Och medan tidigare, kan jag få 10 eller 20 eller fler strumpor i en hög, gör det definitivt betydelse inte ha 50 rader kod säger kontrollera detta strumpa, sedan nästa, då nästa. Här är det lite mindre uppenbart, och jag skulle föreslås att vi kunde gå åt båda hållen. Vi kan antingen ha den slinga, även om det bara loopar två gånger, eller vi kan helt enkelt kopiera och klistra in bara lite här för att få jobbet gjort. Men detta program är buggig, så att säga. Det kan ha vissa misstag, fel eller fall hörn, så att tala, att vi verkligen inte förutse. Ingenting gick fel den här gången, men det kunde ha gått fel medan verkställande programmet? Målgrupp: Du behöver inte ha några strumpor. DAVID MALAN: Så det kan finnas några strumpor där alls. Så låt oss betrakta det hörnet fallet. Så om vi kunde rulla tillbaka upp till steg ett, så steg en var böja sig ner, så checkar ut. Steg två, plocka upp din strumpa, men sedan hitta matchande strumpa, identifiera höger. Vi sorts gjort en hel massa antaganden, och det är, ärligt talat, varför programmet kraschar ibland. Om du som programmerare har gjort vissa antaganden, som säkert det kommer att bli strumpor eller säkert det kommer att vara minne kvar i datorn, säkert det kommer vara diskutrymme kvar på hårddisken - Tja, om du gör dessa antaganden, och det är inte, i själva verket verkligheten vet vem ibland vad datorns kommer att göra? Och ibland, när du får den snurrande badboll eller fryst Windows eller liknande, det är just därför vissa programmerare inte förutse de så kallade hörn fall. Vad kunde ha gått fel i det här programmet? Ja? Målgrupp: Du har inte en höger ben och vänster ben. DAVID MALAN: Okej, kanske inte ha både en höger ben och en vänster ben, och så det här programmet kanske inte allmänt tillämpligt. Andra? Målgrupp: Du kanske har plockat upp en föräldralös strumpa. David MALAN: Jag kanske har plockat upp en föräldralös strumpa, så en icke-matchande strumpa som bara har några syskon eftersom jag har förlorade det, det slits, det är i tvätten fortfarande, eller liknande. Så att även inte riktigt hanterats. Ja? Målgrupp: Du kanske redan har strumpor på. David MALAN: Jag kanske redan har strumpor på. Jag faktiskt inte kolla. OM du inte har strumpor på, sedan vidare för att göra linje ett och två. Och det kan hända. Du somnar med dina strumpor på och liknande, så det också, en mycket rimlig hörn fall. Och kanske en annan? PUBLIK: Sockan är ut och in. DAVID MALAN: Så strumpan är inne, så vi gjorde inget fel kontroll, i kort. Vi har inte kontrollera om tillståndet i världen är som vi förväntar oss. Vi har inte kontrollera om vi faktiskt hittat vad vi letar efter. Och även om detta är en slags löjligt exempel där strumpor, i slutet av dagen, det är precis den typ av tankesätt måste du ha när du skriver program, även i Scratch samt i C, i JavaScript, i PHP, annars kommer dina program uppvisar motsvarande det snurrande badboll eller bara ger felaktiga resultat. Så många tack här till vår skrivare Joseph. [Applåder] DAVID MALAN: Okej, så vad är i Faktum är att ett datorprogram? Nåväl, låt oss ta en snabb titt på en representant här. Så detta är ett program skrivet i ett språk som kallas C. C är ganska gamla dessa dagar, men många nyare språk byggs ovanpå det. Faktum PHP, en av de webb-centrerad språk kommer vi användning mot termen slut, har själv vad som kallas en tolk, ett program som är skrivet i C, men mer om det i många veckor nu. Men detta program, och det är vad det innebär att skriva en Programmet, om än en mycket enkel. Vi har några ganska kryptiskt syntax här, men du kan förmodligen gissa, även om du aldrig har programmerat förut, vad detta program gör. I själva verket vet jag inte vad printf är, men skriv ut säkert frammanar tanken att skriva något. Och så ja, det här programmet kommer i slutändan att skriva ut orden "Hej, Världen". Nu, om du har en Mac eller en PC eller en Linux-dator, oddsen är, åtminstone om du hämtade några fritt tillgängliga programvaran kan du har skrivit program på din egen bärbara dator ganska länge nu. På Mac OS, till exempel, det finns det här programmet som heter Terminal som kommer med en Mac, det är oftast i ditt Mappen Verktygsprogram, och det öppnar vanligtvis en svart och vit eller en vit och svart fönster där du har en frågar där du kan skriva kommandon. Så detta är faktiskt påminner om vad datorer brukade vara innan grafiskt användargränssnitt gränssnitt, GUI, kom. Nu i Windows, har du en liknande mekanism i form av kommandotolken. Men vad jag ska göra här är att öppna upp, låt oss säga, Textredigerare igen, så samma program vi använder för pseudokod för en stund sedan, och jag ska gå vidare och skriva min första programmet. Inkludera stdio.h, vad det nu betyder, int main ogiltigt, vad det nu betyder, och sedan i mitten här, printf ("hej, värld."). Och stäng sedan citat, Stäng paren, semikolon. Nu ska jag gå vidare och bara slå kommando-S. Jag ska att gå vidare och spara det som hej.c så konventionen i världen av C programmering är namnet på filen prick C. Jag ska bara sätta i John Harvard hemkatalog, Här klickar du på Spara och nu ska jag gå över till denna terminalfönster, som återigen är svart och vitt snabb där jag kan utföra kommandon. Jag kan köra program genom att skriva deras namn, inte av dubbelklicka på ikoner i vanlig mening. Men saken är om C är att ett språk som C 1. kommer i denna form, kallas något källkod. Något som ser lite ut som engelska men är definitivt mindre som engelska än Josefs pseudokod en stund sedan. Det är lite mer svårbegripliga. Det verkar följa vissa mönster och regler. Det faktum att jag har klammerparenteser, semikolon, citat, vinkel hängslen, känns som en dator kom med detta typ av språk. Men om jag går nu, denna terminalfönster, kan jag köra en kommando som kommer att konvertera källkod är något som kallas objektkod. Det kommer att konvertera engelska-liknande syntax nollor och sådana, samma sorters nollor och ettor vi talade om onsdag. Nu ska jag köra ett kommando som heter klang. Mer om detta i de kommande veckorna, men det är ett program med som jag kan konvertera hej.c till en massa av nollor och ettor. Nu har jag köra det här kommandot. Jag har rymt klang, och då sa jag köra själv på den här filen heter hej.c, som jag skapade nyss, och ingenting verkar hända. Men ja, om jag petade runt min hemkatalog, skulle jag se att detta dumt namn programmet a.out finns nu. Detta är bara standardnamnet för ett program när du skriver i C. Vi kan åsidosätta detta så småningom, men a.out är namnet på programmet jag konverterade bara till nollor och ettor. Och nu när det är nollor och ettor, min Mac, i detta fall, eller din Windows-dator kan förstå dessa bitar, de nollor och ettor. Och så när jag slog in, ser jag "hej, världen!" Men det är lite buggig. Jag har inte riktigt säga "hej, värld: luft: -! Jharvard." Luft är namnet på min dator. Jharvard är namnet på kontot, så vad gjorde jag klart utelämna från programmet? Något slags radbrytning. Jag träffade inte motsvarande Enter eller vagnretur, och detta är återigen ett bevis på det faktum att datorer kan bara gör vad du säger till dem att göra. Och det faktum att jag inte tala om för datorn att flytta markören till nästa rad - Tja, är det verkligen inte kommer att bara göra det övermodigt för mig. Så om jag går tillbaka till mitt program, och jag säger \ n - Så \ n, som vi snart kommer att se, är vägen för representerar konstiga saker som nya linje karaktärer, saker som annars skulle vara resultatet av trycka Enter. Men nu, vet bara att trycka på Enter skulle bara göra vår kod ser udda, så världen bestämde, vet du vad, för att hålla saker och ting vackrare, för att hålla den på en rad, låt oss bara säga \ n representerar en ny rad. Låt mig spara om min fil, gå tillbaka till terminalfönstret, och repris a.out, Enter. Fortfarande buggig, men varför? PUBLIK: [OHÖRBAR] DAVID MALAN: Ja, så jag måste kompilera det. Så för att kompilera ett program betyder bara konvertera den från källan kod objektkod, källkoden till nollor och ettor. Nu har det faktum att jag slog Spara i Textredigerare inte bär på dessa nollor och ettor, eftersom jag först behöver berätta klang hej, jag har ändrat de rader kod, källkod. Du behöver att förnya a.out. Ingenting verkar ha hänt, men i en dator, på kommandoraden, så att säga, när ingenting händer, det betyder oftast allt är bra. När något händer, betyder det Ni ställt till det, i allmänhet. Så låt oss nu gå till a.out, ja nu har jag "hej, värld. " Och nu, hur dessa nollor och ettor? Om det i själva verket är de? Jag kan inte riktigt bara typ av säcken runt mycket effektivt. Låt mig öppna Textredigeraren. Här är a.out. Låt mig gå vidare och öppna, och det är tydligen vad min Programmet ser ut. Så jag har öppnat, inte hej.c, men a.out. Men detta är egentligen inte vad mitt program egentligen är. Detta är naturligtvis något slags alfabetiska tecken. Jag ser inga nollor och ettor, men detta är eftersom a.out är ett program. Nollor och ettor - men Textredigeraren, som namnet antyder, är det precis som Anteckningar i Windows är bara en textredigerare, så det är förvirrande alla dessa nollor och ettor som om de vore, vad? ASCII-tecken. Så minns på onsdag, kom vi bara upp med detta godtycklig kartläggning av siffror, eller bitar, för bokstäverna i alfabetet och symboler skiljetecken och liknande. Så Textredigerare, att det är en textredigerare som misstolkar de mönster av ettor och nollor som är tänkta att vara utskrift ord, som "Hej, världen." Det är att visa dem som ASCII, och det är därför det ser lite rörigt. Nu finns det några inslag av korrekthet i här. Märka om jag lyfta, det finns en antydan till faktiskt "Hej, värld ", så någonstans i programmet är meningen jag skrev. Men låt oss gå vidare och nu ser med ett annat program. Detta är inte något vi kommer att använda så ofta, men det också kommer med en Mac och kommer att vara inne i CS50 apparaten. Låt mig gå vidare och öppna med ett program som heter XXD. Tillbaka i dag, var de flesta program som heter ganska kryptiskt, och så trenden fortsätter. Men-b betyder spotta programmet ut som binär. Kör inte det. Visa det för mig som nollor och ettor, och det är C programmera vi bara skrev. Nu har jag, som en mänsklig här, jag har ärligt talat ingen aning om vad dessa olika mönster av nollor och ettor representerar. Tillbaka i dag, jag med mina hålkort eller liknande, skulle faktiskt måste se upp vad dessa olika mönster för 01111000, faktiskt representerar. Eller ännu värre, skulle jag behöva göra stansning eller skapande av dessa mönster av nollor och ettor. Men nu, ta på tron ​​att en CPU, Intel Inside, så att tala, inuti alla våra datorer i dessa dagar, vet hur man ska tolka dessa nollor och ettor. Och vissa nollor och ettor betyder tryck. Vissa nollor och ettor innebär spela ett ljud. Vissa nollor och ettor betyder ta indata från ett tangentbord. Det finns alla möjliga olika mönster, men vi tack och lov, som människor, bara i allmänhet behöver oroa programmering detta ganska högre nivå. Och i andra CS klasser kan du gräva ner djupare och titta på saker som de nollor och ettor, eller ännu andra saker fortfarande. Så nu ska vi omvandla detta. Låt oss gå mycket snabbt bort från C och flytta till något lite mer tröstande, lite mer spännande, eftersom vi kan få tillbaka våra animationer och ljud och liknande som tydligt undgått oss i detta ganska primitiv gränssnitt. Så detta samma program i C kan representeras nu i detta programmeringsspråk som kallas Scratch enligt följande. Detta motsvarar detta hallå världen program skrivet i denna pusselbit stil språk kallas Scratch. Så låt mig gå vidare och öppna upp denna mycket program. Det åter kallas Scratch. Det är fritt tillgängliga, och det är samma sak som vi igång idag på. Så detta är här Scratch, och det är delas upp i ett fåtal olika delar. På högst upp till höger, har vi sk fas, och faktiskt, det är där kakorna utförs bara lite sedan. Och på detta stadium är saker kallas sprites, tecken eller föremål eller enheter. Det spelar egentligen ingen roll hur du tänker på dem, men de är programmerbara, rörliga ting, och i detta fall, detta program som våra studenter skrev har ett par pepparkaka kakor, ett par cirkulära kakor, en hel massa hjärtan, en hel massa glasögon. På grund av detta, är han eller hon kan programmera varje av dessa enskilda tecken separat. Nu vad betyder det att programmera dessa tecken? Nåväl, låt mig gå vidare och klicka på denna vänster cookien och bläddra över till det övre vänstra här. I den övre vänstra min skärm nu är det så kallade skript området. Detta är en slags oskrivet blad inledningsvis på vilken jag kan dra och släpp pusselbitar som, uppriktigt sagt, gör exakt vad de säger. Längst upp på denna bunt pusselbitar är ordet När Grön Flagg klickning, och om du inte märker innan, hur jag började att cookies låten klicka, bokstavligen, en grön flagga. Så att pusselbit uppe till vänster där medel när mänskliga klick den gröna flaggan, fortsatte att göra följande saker. Nu gjorde vad de cookies fortsätta att göra? Jag vet inte riktigt hur man ska tolka detta ännu, men Cookien tydligen satt sitt spår till noll, då det väntade tre sekunder, sedan bytte grupp till en, då det väntade en sekund, sedan bytte spår tillbaka till en. Och då detta ser faktiskt ut som en bit av en bugg, bör inte måste ändra sitt spår och om igen om det inte är ändras någon annanstans, men denna serie av steg är vad som är dikterar beteende denna kaka. Så låt oss faktiskt bläddra tillbaka och inte titta på något ganska så komplicerad än. Låt mig gå vidare och gå till Arkiv, Nytt, och få en kula. Så nu har jag verkligen ett tomt skript område, en tom scen, med vår standard sprite Scratch och längst upp till vänster på min skärm har jag pallen i alla sina tillgängliga pusselbitar. Och vi kommer inte att gå igenom nästan att många av dessa saker dag eftersom, återigen, de flesta är självförklarande, men vi kommer försöka kategorisera dem och påpeka likheterna med dessa framtida språk som vi kommer att dyka. Och uppe till vänster här är den första När Grön Flagg klickning, så låt mig dra det här, zooma ut lite. Och om jag klickar på den gröna flaggan, händer ingenting verkligen eftersom Jag har inte fäst någon logik, eventuella uttalanden så att säga, att den gröna flaggan, så låt mig gå upp till kategorier där borta. Jag är för närvarande i Control kategorin. Jag stället att gå ner till utseende kategori och Det finns en hel massa saker här som säger Säg, Tänk, ändra färg, Switch Kostym. Så du kan göra dumma saker med kostymer och ljud och liknande. Låt mig gå vidare och bara säga Säg, och nu märker när jag drar och släppa denna pusselbit, det kommer att vilja låsa till motsvarande form. Så när jag går vidare och släppa min mus, låsa de tillsammans, och nu om jag går hit och klicka på den gröna flaggan, katten säger faktiskt hej eftersom det är vad som finns inuti detta vita rutan. Vi kommer snart att se att detta vita rutan är vad som kallas en argument eller en parameter. Det är ett sätt att förändra beteendet hos, i detta fall, en pusselbit, men om jag vill säga exakt vad jag sa tidigare, säga hej, värld, kan jag gå nu tillbaka hit, Klicka spela och "Hello, world" är vad som är sagt. Så vi bokstavligen programmering nu. Det är inte så övertygande av ett program, men åtminstone det är lite mer övertygande än något som ser på första anblicken, så här. Och vi kan mycket snabbt få alla mer uttrycksfullt eftersom Scratch, liksom på andra språk, det finns allt typer av uttalanden, inte bara säga eller skriva något, men Du kan göra saker som väntar, som vi bara såg med cookie, visst antal sekunder. Du kan spela upp ljud i omgivningen av Scratch bara som du kan i en normal dator programmerad uppspelning ljud. Du kan kontrollera vad som kallas booleska uttryck. Så nu, låt oss börja att lägga till vår verktygslåda några terminologi som faktiskt avser exempel som Josef och jag gjorde här med strumpor. Så uttalanden är bara uttalanden faktiskt. Gör så här. Ett direktiv för spriten, eller jag människan, att göra något. Ett booleskt uttryck är något som har ett värde, en sk sanning värde, det är antingen en nolla eller en, felaktiga eller sant, av eller på, Nej eller Ja. Spelar egentligen ingen roll hur du tänker på det, men det är en binär tillstånd. Som Nate diskuteras i onsdagens video, två olika saker. Så i Scratch, booleska uttryck råkar titta som dessa blå föremål här, och i detta fall, frågan märke innebär att du ställer en fråga. Är katten eller spriten, röra muspekaren? Så detta är bara ett exempel på en repa block som händer att tillåta oss att kontrollera ja eller nej, är musen vidrör sprite på skärmen? Och detta kan vara användbart om du verkligen vill göra saker med musen. Förutom booleska uttryck har vi saker Liksom är musen ner, så att du kan upptäcka denna typ av fråga också. Vi kan göra matematik om du verkligen vill, och det finns faktiskt mer övertygande användningsområden för detta än bara ren om aritmetik, som vi får se. Pseudo slumpmässighet och göra ditt program verkar tro eller bete sig annorlunda baserat på några till synes slumpmässiga värden, och sedan har vi saker som booleska uttryck som AND. Så om du verkligen vill kontrollera två värden, vi ser i Scratch att vi faktiskt kan testa om det är sant och det är sant. Till exempel i fallet med mina strumpor, kunde jag har på slutet ställde frågan om de lämnas strumpa är på och höger strumpa är på, avsluta. Du är klar för dagen, så det skulle vara en möjlighet för det. Så låt oss gå vidare och försöka pussla några av dessa tillsammans och gå in i ett par exempel mer övertygande än denna. Så låt mig gå vidare här och öppna upp några exempel som alltid kommer att finnas på kursens hemsida också, och öppna hello2. Så hello2 här har vi ett program som gör några saker, men det är inte att göra det så effektivt som vi skulle kunna. Så här står det "Hello, world" i en sekund och sedan väntar för en sekund. Och sedan gör det igen, och sedan gör det igen. Så om jag klickar på den gröna flaggan, Scratch säger "Hej, världen. Hej, världen. Hallå, världen. "Och detta är naturligtvis kandidat nu förbättring. Vad är marginell förbättring, förhoppningsvis, kan vi nu gör om Scratch stöder tanken? Någon form av slingan. Någon form av upprepning, nu skulle vara trevligt, så låt mig faktiskt prova det. Låt mig faktiskt gå och flytta det. Så varsel kan ta bort block så lätt som du kan lägga till bifoga dem. Låt mig gå under kontroll, rulla ner här, och faktiskt, Det är detta pusselbit här, Upprepa och för evigt och Evigt om. Så det finns ett antal sätt att uttrycka looping konstruktioner i Scratch. Det enda jag vill förmodligen här är inte för evigt eftersom jag bara vill att detta ska hända tre gånger, men förmodligen Upprepa. Så låt mig dra Upprepa hit, dra och släpp den, och nu i stället för att säga "Hej, världen" tre separata gånger, Låt mig dra denna pusselbit här. Och även om det inte verkar passa, är programmet smarta nog att inse det kommer att växa för att fylla, så det är den former som materia och inte den absoluta storleken. Låt mig ändra upprepning till tre, och nu vill jag gå framåt och dra vänta en sekund där liksom. Det kommer att knäppa i också, och så nu ska jag dra dessa killar hit och bara kasta bort dem eftersom jag inte behöver dem längre. Låt mig zooma ut och klicka på den gröna flaggan nu, och vi har samma program men som jag förutspådde tidigare, bättre utformade för att ni kan föreställa er hur illa det här programmet skulle få, säkert estetiskt, om du var tvungen att börja kopiera och klistra, kopiera och klistra in, eller dra och släppa samma darn saker om och om igen. Nu bara säga saker på skärmen, skriva ut till skärmen, verkligen allt inte så spännande, så låt oss öppna en 3. varians här. Och nu, som ni ser, det här snabbt få irriterande - [MEOW] DAVID MALAN: - men det är också rätt söt. [MEOW] DAVID MALAN: Okej, så bättre, och vi kan verkligen använda det Samma övergång spaltning upp detta i en looping struktur, men låt oss göra det mer intressant ändå. Låt mig gå vidare och öppna upp kvart varians här, där jag ta saker ett steg längre. Så enligt detta, dum om detta är först blick, vad detta program kommer att göra? Det kommer att jamar gång. Varför? Tja, en är, såvitt jag vet, alltid mindre än två. Det finns ingen uppfattning av slumpmässighet här. Jag har bokstavligen hårdkodad en och två, men detta är ett exempel nu på att faktiskt använda ett booleskt uttryck. Mycket vill som Josef gjorde i sitt pseudokod, fördjupningen IF du hitta matchande strumpor gör följande, här har vi ett uttryck om man är mindre än två då - och i själva verket har vi även en liten bit av indrag, där den lila är något indragen till höger - Då du kommer att spela upp ljudet mjau. Nu, i detta fall, är att man alltid är mindre än två, så detta är typ av slöseri av ett tillstånd. Men vi kommer att kunna, som vi ska se, att ansluta andra saker i Dessa platshållare där ett och två nu är. Så låt oss nu gå vidare till exempel fem av dessa flera hellos och titta på vad det här programmet kommer att göra. Så nu, i en engelsk mening, hur det Programmet beter sig? PUBLIK: meows halva tiden. DAVID MALAN: Mjau har hälften av tiden, så detta är ett sätt att förmedla en mycket enkel idé. Även om vi råkar använda vissa ojämlikheter här I vissa siffror, det är egentligen bara en programmatical sätt, ett exakt sätt, att säga om myntet kommer upp huvuden, gå framåt och jamar. Eller omvänt, om myntet kommer upp svansar, inte mjau. Och i detta fall, hur vi uttrycker det? Vi hämtar ett slumptal från 1 till 10, och om det nummer är mindre än 6, gå vidare och jamar. Och hur gick det in? Bra igen, märker bara att dra och släppa och Saker spärrarna på plats. Så nu ska vi se om denna slumpmässighet fungerar. Låt mig gå vidare och klicka på den gröna flaggan. [MEOW] DAVID MALAN: Okej. [MEOW] DAVID MALAN: Okej. Okej, bra, så vi fick huvuden, huvuden, svansar effektivt. Svansar. [MEOW] DAVID MALAN: Heads. [MEOW] DAVID MALAN: Utmärkt. Det är alltid besvärligt när bara statistiskt får du en dålig springa, och det är alla huvuden, och programmet faktiskt inte arbete som du skulle hoppas. Men den här gången, det fungerade, och vi verkar ha, om vi gjorde detta ett oändligt antal gånger, 50% odds. Nu igen, inte så intressant, bara göra katter mjau, så låt oss se om vi inte kan gå detta lite längre här i version sex. Så nu har vi verkligen irriterande version - [Meows några sekunders] DAVID MALAN: - och detta är vad som kallas, allmänt som en oändlig loop. Så oändlig slinga i det här fallet känns dåligt. Det kommer definitivt att börja låta dåligt, men ändå oändligt slingor är inte alltid dåligt. Kan du komma på sammanhang i datorprogram där du skulle faktiskt vill ha en oändlig loop? Ja? PUBLIK: När du vill kontrollera ett villkor. DAVID MALAN: Okej, när du vill fortsätta att söka ett tillstånd? Som vad? PUBLIK: [OHÖRBAR] DAVID MALAN: Okej, bra, så om du hade några program, vissa typ av hemautomation sak, där du vill hela tiden bildskärm är något fallet. Är belysningen? Är belysningen på eftersom du kanske har en timer, och du vill att de ska gå ut, kan du behöva göra något och om igen. Och i själva verket talar om timers, som har någon av er klockor på datorn eller digitala klockor, det är en oändlig loop. Det fortsätter att uppdatera tiden eftersom det är ständigt kontroll och kontroll och kontroll har tid ändrats, och i så fall Herregud. Klockan har äntligen förändrats. Det behöver visa att värde för dig. Så medan de flesta av tiden oändliga slingor är ett misstag, eller åtminstone ett dåligt beslut konstruktion, ibland gör har sitt värde. Nåväl, låt oss gå vidare här hello7. Så nu kommer programmet att bli lite mer interaktiv. Låt mig zooma in här, och igen, det är vad som är bra om Scratch. Och vi kommer att använda den för att vara tydlig, Scratch, bara idag och i nästa veckas problem in. Men på måndag, dyka vi in ​​C. I detta program här, det gör det, evigt, följande. OM röra muspekaren - nu, vem sammanhang här? Tja, och märker att vem valt här nere på botten höger är katten, sprite en, så dessa skript, detta Programmet gäller för honom specifikt. Så om det katten vidrör muspekaren, så kommer att spela detta ner och vänta två sekunder och upprepa sedan annons nauseum. Så låt oss gå vidare och träffa spela. Ingenting händer, men om jag vill klappa katt nu kan jag helt enkelt. [MEOW] DAVID MALAN: Adorable. [MEOW] DAVID MALAN: Okej, mindre irriterande, men blir också tråkig, så låt oss gå vidare och se om vi inte kan injicera lite mer logik. Det var exempel sju. Här i exempel åtta, vi ska införa en ANNARS tillstånd. Så mycket som en bokstavlig vägskäl, där du kan gå vänster eller så kan du gå till höger, ett tillstånd i ett program språk som Scratch, eller som vi får se C kan tillåta dig att gå i en riktning eller en annan via en IF ELSE konstruera. Så bokstavligen OM röra muspekaren, detta kommer att spela vissa ljud, annars kommer att spela denna andra ljud, mjau. Nu, om du kan dra slutsatsen att namnet på dessa ljud kan du förmodligen gissa vad det här programmet är tänkt att trolla fram idén om. Denna katt jamar lyckligt. [MEOW] DAVID MALAN: Lyckligtvis, men inte ganska vilja att bli rörd. [Vrålar] DAVID MALAN: Så nu har vi en katt som kommer skrika på dig. Okej, en sista exempel med katter här, och låt oss öppen version nio av detta här. Så nu har vi den näst irriterande ljud som jag kunde hitta, så vi har en valross eller sjölejon här som kommer att gör följande. [SEAL BARK] DAVID MALAN: Okej, så detta kommer att fortsätta tills du räkna ut hur Programmet fungerar. Så den här gången har detta djur två manus, och vad intressant här är att dessa skript kommer att utföra parallellt. Så eftersom de båda börjar med en grön flagga klickade, Det är som att gå ut så här, och båda programmen börjar visas den gång även om de är looping evigt. Så i den övre manus, jag har en viss logik. Vilka funktioner ger upp det där? [SEAL BARK] PUBLIK: [OHÖRBAR] DAVID MALAN: Om det är vad? [SEAL BARK] PUBLIK: Om avstängt noll, det kommer att fortsätta spela ljuda. [SEAL BARK] DAVID MALAN: Okej, bra. Så OM avstängt, oavsett detta är, denna orange sak är noll, Sedan spela sjölejon ljud och tänker "Åh, Hej, "i två sekunder. Nu vet jag inte vad avstängt är, men noll frammanar den idén om falsk eller av. Så om avstängt är falsk, så om inte är avstängd, fortsätta spela ljudet. Okej, hur ska vi stänga av denna sak? Nåväl, låt oss titta på den andra skriptet nere. Det andra skriptet säger satt dämpad till noll. Notera det är också orange, så vad Scratch gör är det färger block i samma nyans om det är typ av logiskt relaterade. Så lika dämpad uppe var orange, så dämpas här nere nämns i orange blocket. Men detta är en variabel uppdrag, så precis som i algebra, du x och y och z, i programmering har du variabler, men de är i allmänhet - låt oss stanna upp en stund och figur hur att stoppa denna skällande. Hur gör jag det? [SEAL BARK] DAVID MALAN: Okej. Det slutade. Okej. Så precis som i algebra har variablerna x, y, och z, men i programmering, med variabler som x, y och z är i allmänhet ogillat eftersom de är inte alls uttrycksfull. De har ingen semantisk innebörd som helst, så i de flesta programmeringsspråk, kan variabler ha full utvecklad namn eller ord eller fraser, gillar dämpad, säga vad de gör. Så denna andra skriptet också lyssnade alltid, och det sade om nyckeln, tangenten Space är trycks frågetecken. Så det finns ett tillstånd med ett booleskt uttryck som är kommer att svara på en fråga antingen sanningsenligt eller falskt, så har jag inne i det om mellanslagstangenten trycks ned och OM avstängt är noll, ställ dämpad till en, annan har dämpad till noll. Så denna andra vägskäl, och märker hur jag har kapslade de två om villkoren är ett sätt att kontrollera den Space Bar tryckte för om så är fallet, jag antingen vill gå här sätt eller så. Och hur jag vända värdet av avstängt? Jag måste kolla det noll? Om så är fallet, gör det en, annars gör det noll till därför växla de två stater. Okej, så vi har sedan några av dessa grundläggande konstruktioner. Vi har booleska uttryck, och inse, även dessa är inte så främmande. I själva verket är här en snabb skärmdump av Harvard kursens CS50 shoppa verktyg och en webbplats där ute som har kryssrutor och släpp nedskrivningar har verkligen, hela tiden, använt Booleska uttryck. I detta fall här, om du klickar på kryssrutan bredvid Naturligtvis är större än eller lika med 4,5, eller samma bredvid fakultet, du anger ett booleskt uttryck. Visa mig kurser för vilka uttrycket är sant. Eller till höger, inte strider mot kurser jag är tar, om det är markerat, så ja, du vill kontrollera detta villkor, annars du vill ignorera det. Så booleska uttryck är typ av runt, men när Vi satte dem i förhållanden, vare sig om villkoren, OM Annans, eller vi kan även simulera djupare nivåer, om annat om ELSE - så det är typ av en ternär stat. Du kan gå på detta sätt eller på detta sätt eller så. Vi kan hålla häckande saker att gå i olika riktningar. Så Scratch har dessa slingor, som alltid. Den har dessa funktioner som Repetera 10, några ändligt antal gånger. Vi har förmågan nu att sätta variabler, så i det här fallet Jag har deklarerats, exempelvis, en variabel som heter strumpor. Jag har initieras till 0, och det är ännu en riktning Vi kunde ha tagit upp här med Josef, där jag kanske bara hålla koll på hur många strumpor jag har på och avsluta programmet när det variabelns värde är 2. Det skulle vara ett annat sätt att sorts generalisera det problem och göra något och om igen. Nåväl, låt oss gå vidare och nu introducerar ett par nya saker. Så de av er med tidigare programmering erfarenhet kommer vet att många språk har matriser eller vektorer eller listor, och faktiskt har Scratch något sådant också. Så låt oss se om vi inte kan ta det till nästa nivå här. Om jag har möjlighet, nu med dessa pusselbitar till lägga till något, som ett ord eller nummer, till en variabel, kan jag börjar ackumulera saker. Och det är faktiskt ganska apropos för saker som spel, rollspel där du är typ att gå runt några fantasivärld samla saker, plocka upp saker, tjäna poäng, eller liknande. Du kanske vill hålla reda på någon form av lager och faktiskt det är vad en av våra tidigare studenter här gjorde med något som kallas Fruitcraft RPG. Så låt mig gå vidare och öppna upp denna sak här, och i Fruitcraft har vi den här världen upp på toppen. Så låt mig gå vidare och klicka på den gröna flaggan. Meddelande uppe till vänster är någon form av inventering. Det är genomfört i Scratch som vad vi ska kalla en matris eller en lista och nu har vi denna lilla animation. Så precis som vi började tidigare med den här cookien kärlekshistoria, och då vi avancerade till katter och sjölejon, nu kan vi ha saker som är ännu mer interaktiv. Och den här lilla blå kille, kan jag börja att flytta runt sina lilla hem här. Så det ser ut som han har en utgång här nere, så jag använder piltangenterna, upp, ner, vänster, höger. Och nu är jag utanför, så låt är vad jag har här. Ser ut som en apelsin, och faktiskt, så fort jag rör vid apelsin, det blir plopped i min inventering. Om jag går hit till körsbär, nu har jag något annat i mitt lager. Och detta är alla trevliga och söt, men fundera på hur, nu detta genomförs. Tja, vi har denna föreställning om en lista, och det är uppenbarligen en pusselbit som du bara säga vad du vill lägga till det, lägga apelsin, körsbär lägg. Nu, vad detta lilla blå killen gör? Jo, han är en sprite. Och förmodligen är orange och körsbär - de själva var separata sprites. Och med hjälp av förhållandena i booleska uttryck, de elev var förmodligen kunna uttrycka IF blå killen är röra körsbär sedan lägga ordet körsbär till hans inventering och sedan också dölja körsbär spriten. Så under huven, är det antagligen fortfarande är ett körsbär sprite där. Vi har precis sagt att det blir effektivt osynlig. Nu, om jag hålla promenader hit, kan vi också göra det proximala sak, där jag kan gå och läsa skylten. Så om blå kille röra tecken, kan vi ha denna Say blocket precis som katten talade till oss i ord, hej, tidigare "Got lite frukt? Ta med den till frukten plats. "Okej, så nu, tydligen, Jag har mina riktningar. Jag kan gå hit till frukten platsen, Line mig upp med dörren. Nu är jag här. Jag kan gå upp till mannen vid disken. Han upptäcker att jag är nära honom, så det behöver inte vara helt identiskt röra, och jag har vunnit spelet. Så där har vi Fruitcraft RPG. Så vi kan göra saker och ting ännu mer avancerade än så. Vi kan lägga till ljud. Vi kan lägga till pseudo slumpmässighet. Vi kan lägga komplexitet. Låt mig gå vidare här, och i stället göra det själv, Låt mig visa dig en av de mer sofistikerade bidrag vi fick förra året från en viss person som heter Blake. Kan vi få en volontär som är bekväm visas på kameran och är upp för att spela ett spel? Vad sägs om där? Kom upp. Okej, så spelet som du just har omedvetet frivilligt att spela - [Applåder] DAVID MALAN: - är något från förr kallades "Frogger". Vad heter du? Renda: Renda. DAVID MALAN: Redna? Renda: Det är som Brenda med en B. DAVID MALAN: Okej, Renda. David. TREVLIGT ATT TRÄFFAS. Så här i "Frogger", och om vi kunde öka volymen bara lite, är du här lilla grön groda på botten. Du kan använda vänster, höger, upp och ner, och ditt mål är att korsa gatan, över floden, och tryck på lilja vadderar upptill. Aw. One More t - gör om, okej? Låt oss hit stopp. Ingen såg det. [Applåder] [Applåder] DAVID MALAN: Ja. Mycket bra gjort. Utmärkt, tack. Så att det var Frogger. Nu när du vet vad du har fått er till, en mer frivillig för en annan spel som lagts fram av en annan student. Vill du komma på upp? Vad heter du? RICHARD: Richard. DAVID MALAN: Richard. Okej, Richard, kom upp. [Applåder] DAVID MALAN: Du har något som kommer att låta bekant snart, så här är dina instruktioner. Så i ett ögonblick, är några pusselbitar kommer att rulla uppåt från skärmen som antingen ser kvar eller höger upp eller ned. Du kommer att få träffa piltangenterna på ett sådant sätt att det motsvarar de pusselbitar kö med platshållarna upptill. Så när du ser en vänsterpil, och det är i linje med vänster pil, slog på vänsterpilen. Du kan börja. [MUSIK - "starkare" Kayne WEST] DAVID MALAN: Okej, stor applåd för Richard. [Applåder] DAVID MALAN: Mycket bra gjort. Tack. [Applåder] DAVID MALAN: Så kul och, till synes, typ av skrämmande som det kan vara att genomföra något så synes sofistikerad som denna, inser att den studerande inte anges, och bara skriva detta på en gång. Snarare kan man bryta ner ett problem som till synes komplexa eftersom detta i mycket mindre bitar, och detta är också kommer att bli ett tema. Det värsta du kan göra i att skriva ett program i de flesta någon språk är att sitta ner, bli riktigt upphetsad, skriver hela jävla sak, och sedan bara hoppas att det fungerar med tid du är klar skriver. Snarare programplaneringsprocessen bör generellt vara mycket medvetet, mycket iterativ, där du bara ställa mycket små steg för er själva, lagom stora bitar vill du bita av, och så att du har dessa förstånd kontroller, lite milstolpar du kan möta. Och sedan bygga ovanpå dem att skapa mer sofistikerade saker fortfarande. Så till exempel, hur skulle vi gå genomföra ett spel som detta? Tja, ärligt talat, skulle jag börja verkligen med bara stödja en tangent i taget. Låt oss bara genomföra stöd för vänster pil. Så att studenten hade något skapa i Photoshop, eller Repa sig med den lilla grafisk editor, en pil som ser ut som en uppe till vänster där, bara den grå platshållaren. Sedan studenten var tvungen att räkna ut vad x, y-koordinat till uttryckte det, var att sätta den i fönstret. 0, 0 är här uppe, så du måste räkna ut hur många bildpunkter eller prickar, för att kompensera den pil från överst på skärmen. Och sedan en gång som är på plats, inte ditt program egentligen inte göra något ännu, så du sedan behöver en andra sprite, för exempel en grön pil som också är som pekar åt vänster, och du då måste börja skriva några skript för det. Och du märker kanske att dessa saker började komma på olika hastigheter, och färgerna var olika platser, och det beror på eleven använt lite pseudo slumpmässighet. Och med pseudo slumpmässighet, menar jag bara plocka ett nummer mellan något och något eftersom du kan börjar på saker, som om antalet är mellan en och fem, ja, låt oss göra saken grönt. Om det är mellan 6 och 10, låt oss göra pusselbiten röd istället. Så länge du har ett sätt att generera någon form av slumpmässighet kan du göra sedan beslut bygger på att slumpmässighet. Och jag fortsätter att säga pseudoslumptal eftersom det finns en lite smutsiga hemlighet. Datorer kan inte komma med slumptal. De kan bara göra vad de blir tillsagda att de är konstgjorda enheter. De kan inte bara gissa ett nummer som vi människor känns som vi kan. En dator har att göra något matematiskt att trolla fram illusion av matematiska tal, ibland med hjälp av aktuell dag tid som en ingång till räkna ut vad nummer att återvända, men mer om det en annan gång. För nu, vet bara att vi kan generera pseudo slumpmässighet. Så när jag har möjlighet för den vänstra pilen för att starta uppträder vid olika tidpunkter och med olika hastigheter, sedan Jag kan gå tillbaka och lägga till några av dessa om villkoren. OM denna sprite vidrör den andra, och vänsterpilen har tryckts - så tre villkor i det fallet. Jag kan använda det och blockera kanske i så fall - Då vill jag gå vidare och öka poängen. Och på toppen har vi en poäng, vi har Awesome, Cool, bra, och Boo. Så det finns tydligen fem variabler som denna elev används för att hålla reda på dessa olika mått. Så kort sagt, är slutresultatet häpnadsväckande. Det är kul, det är kul att spela, det engagerande, men det är inte där studenten började. Han eller hon började på ett mycket mindre antal steg. Så vad är några andra byggstenar som vi kan väva in dessa program? Tja, det finns det andra begrepp i de flesta språk, Scratch bland dem, som kallas trådar. Så en dator kan faktiskt inte riktigt göra flera saker på en tid, åtminstone inte vanligtvis. Snarare, har en dator i allmänhet bara en CPU, och även Men datorer är supersnabbt och kan därför skapa en illusion av att göra flera saker samtidigt - kontrollera din e-post, få en omedelbar meddelande, skriva ut ett dokument - verkligen är en dator hoppar bara från utskrift till IMing att skicka e-post, tillbaka och tillbaka och fram och tillbaka så snabbt att vi långsamma witted människor bara inte inser att det faktiskt är kör dessa program en liten bit i taget. Nu, detta lite av en vit lögn dessa dagar eftersom numera många våra datorer är så kallade multi-core, så att du ha en processor men flera kärnor, vilket är ungefär som har flera processorer. Och så ibland kan datorer göra riktigt många saker vid en tidpunkt, men vanligen inom ett program, program förlita sig på dessa saker som kallas trådar. Så en tråd är ungefär som en miniatyr program som kan samexistera med annan miniatyr program och kan köras parallellt, eller åtminstone kan köras under illusionen att De kör samtidigt. Så Scratch stöder dessa saker som kallas trådar. Du kan ha flera skript exekverar på en gång, precis som vi gjorde med sjölejon, och detta gör att vi kan faktiskt sedan har samspelet mellan dessa sprites. Låt mig gå vidare här och dra upp, låt oss säga, trådar och spela detta på följande sätt. Vi har två sprites, var som vi får se har bara en skript. Och du märker att det verkar finnas en viss intelligens i katt i detta eftersom han närmar - [Vrålar] DAVID MALAN: - och närmare den lilla fågeln. Så hur är fågeln drift? Nåväl, låt oss ta en titt på fågeln först. Fågeln manus sa när den gröna flaggan klickas, gå till X lika negativ 115 och y är lika med 150. Så jag tänkte bara ut en slumpmässig plats där jag ville fågel att starta, och jag bara plopped honom där som standard. Då evigt om inte röra katt, så det här är en annan typ av looping konstruktion, men samma idé, göra det igen och och om igen. Så länge du inte röra katten, flytta tre steg, och om du är på kanten, studsa, där det är en slags reflektion i biljard mening. Så det är hur fågeln rör sig runt typ av synes slumpmässigt, men det är bara för att det är studsar väggarna i detta fall. Nu katten, under tiden, är typ av fusk. Katten, när den gröna flaggan klickas, ja, startar i någon plats, en slumpmässig position - åtminstone delvis enligt hackan slumpmässiga gröna blocket där - och sedan för evigt om att röra fågeln, spela lejonet ljud, och sedan stoppa script. Så när jag sa avsluta, eller avsluta tidigare, det finns ett pussel bit i Scratch som bara kommer att döda programmet på den punkt eftersom det är typ av logiskt gjort. Men annars, här, ser vad som kommer att hända. Pekar mot fågeln och flytta ett steg. Så denna punkt mot fågel är typ en fördel katten har i att det är målsökande in på den rörliga fågel, och vi kan nu göra detta program ännu mer intressant. Istället för att flytta ett steg i taget per CPU cykel, per slå Toll på klockan, så att säga, låt mig gå vidare och flytta, låt oss säga, fem steg i taget som katten. Klicka på Kör, och nu är han verkligen finner honom snabbt. Om vi ​​fördubbla detta ytterligare till 10 steg, det slags går rätt för honom. Nu kan vi ge fågeln, kanske lite av en fördel. Låt oss gå till fågeln och säga i stället för att flytta tre steg, låt oss gå honom 30 steg. Men han fastnade till slut. Så här har vi två trådar. Det är inspärrade i Scratch med två skript och två sprites, men tanken på andra språk är att man kan skriva i huvudsak för många program som detta och har dem springa riktigt, eller imaginärt, parallellt. Nu finns det även detta koncept inom programmering kallas händelser, och detta är något vi inte kommer att se i C, de språk som kallas C. Vi kommer att se den mot termin slut i webbprogrammering, när vi introducerar JavaScript och begreppet sidor bygga webbsidor som är dynamisk och interagerar med användare. Så i det här fallet har vi ett mycket enkelt exempel på två älvor, pojke och flicka, som var och har sina respektive trådar, men på något sätt dessa två hänger kommunicerar genom av något som kallas händelser. Så låt mig gå vidare här och zooma in på pojkens manus, som ser ut så här. När gröna flaggan klickar alltid göra följande. Om nyckeln Space eller mellanslagstangenten, trycks säga Marco för två sekunder, det är rent estetiskt på skärm, lite pratbubbla, men sedan sända. Så sändning är en annan Scratch pjäs som är representant för en klass av funktionalitet i programmering som gör att olika program, olika trådar, till mellan kommunicera, att på något sätt skicka meddelanden, ett till en annan. Förbi ett papper i klassen är ganska låg tech motsvarande. Så sänder händelsen. Jag kan skicka det här meddelandet och ordet händelsen är helt godtycklig. Scratch har ibland dessa drop downs, så jag bara kom upp med ett slumpmässigt ord som händelse eftersom nu, vad pojken gör när jag trycker på knappen är han sänder denna händelse. Och om jag nu titta på flickans manus, är hennes manus super enkelt eftersom allt hon behöver göra är inte agera när den gröna flaggan klickas. Hon är utformad för att agera när hon får offert, unquote, "Händelse", och vid den tidpunkten, hon lyssnar därför den så kallade händelse och om igen. Så fort hon får denna händelse, hon kommer att skrika Polo i två sekunder. Och så kan du kanske sluta från detta exakt vad nästa resultat kommer att bli. Låt mig klicka på den gröna flaggan. Ingenting händer att jag behöver göra det? Publiken: Mellanslag. DAVID MALAN: Space Bar. Pojke säger Marco, säger flickan Polo. Men det är inte svårt kodad i sig. Det är mellan kommunikation mellan skript, så nu har vi har förmågan att göra ännu mer komplexa program där Dessa två är något mellan kommunikation. Så vad riktningar kan vi ta detta? Tja, i problembild 0, egentligen, är målet att ha kul med Scratch. För hacker utgåvan får du istället kul med en mer sofistikerad version av Scratch kallas BYOB, Bygg Dina egna block, men idén är densamma. Du kommer att kunna - Ja, det var avsiktligt. Det kom från Berkeley. BYOB är hacker utgåvan av denna, men båda demografi, Standard Edition och hackare upplaga både den Målet till hands för den kommande veckan är egentligen bara att dyka i djup, få händerna smutsiga med programmering, och göra något intressant, göra något interaktivt, gör något konstnärligt, göra något roligt att faktiskt visa, så att genom veckans slut, har du ett projekt, inte bara för din första CS50 pset, men du har en liten sak som du kan visa upp i Annenberg till vänner eller ens familj genom att överföra den till MIT: s webbplats. Och så som jag sa på onsdagen räknar vi 90% av klassen, allmänt att göra de vanliga utgåvorna. Inse att det finns också här utlopp för dig som annars hitta dig själv lite uttråkad med grunderna och verkligen vill dyka in och hantverk en vision som du redan har med tidigare bakgrund i detta mer vänligt miljö. Så låt mig dra upp en annan exempel som en av våra tidigare eleverna gjorde här och berätta lite något genom sång. Det samma sätt, eftersom detta spelar, tänk på hur du går om genomförandet av detta program med just dessa samma byggstenar, lite av pseudo slumpmässighet, och en lite bekant sång. Om vi ​​kunde öka volymen bara lite? [MUSIK - "Det regnar MÄN" Vädret FLICKOR] DAVID MALAN: Det är det för CS50. Vi kommer att se dig på måndag. [Applåder]