1 00:00:08,483 --> 00:00:11,477 [Powered by Google Translate] [ROCK MUSIK] 2 00:00:32,435 --> 00:00:35,429 [MUSIK - "lyckliga tillsammans" sköldpaddorna] 3 00:01:27,330 --> 00:01:30,170 DAVID MALAN: Idag börjar vi vår utforskning av 4 00:01:30,170 --> 00:01:32,710 grunderna i datavetenskap och vår introduktion, 5 00:01:32,710 --> 00:01:35,070 nu till konsten att programmering, där det är 6 00:01:35,070 --> 00:01:36,260 bara ett exempel. 7 00:01:36,260 --> 00:01:39,600 Men i samma anda av problemlösning, vet att 8 00:01:39,600 --> 00:01:42,080 CS50 traditionella pussel dag är i morgon. 9 00:01:42,080 --> 00:01:45,190 Om du inte har ännu RSVPed för denna händelse, kan du gå till 10 00:01:45,190 --> 00:01:47,510 cs50.net/rsvp. 11 00:01:47,510 --> 00:01:50,940 Du kan ta grupper om två eller tre eller fyra. 12 00:01:50,940 --> 00:01:53,080 Du kommer att utmanas med problem som den du såg 13 00:01:53,080 --> 00:01:54,190 uppe i början. 14 00:01:54,190 --> 00:01:57,000 Alla nya problem i år om du drack förra året, och du 15 00:01:57,000 --> 00:01:59,680 kommer att ha en chans att sedan vinna några fantastiska priser. 16 00:01:59,680 --> 00:02:02,750 Bland dem, en Wii och några presentkort och liknande, 17 00:02:02,750 --> 00:02:05,650 samtidigt som umgås med CS50 studenter och klasskamrater 18 00:02:05,650 --> 00:02:07,720 och pizza och Facebook. 19 00:02:07,720 --> 00:02:10,430 Så mer om detta i morgon om du vill. 20 00:02:10,430 --> 00:02:13,330 >> Detta är då CS50, för dig med oss ​​för 21 00:02:13,330 --> 00:02:14,510 första gången. 22 00:02:14,510 --> 00:02:18,030 Och vet att denna kurs är särskilt fast besluten att få 23 00:02:18,030 --> 00:02:22,605 dig genom kursen till de slutliga, då du 24 00:02:22,605 --> 00:02:24,270 kommer att ha inte bara en förståelse av dessa 25 00:02:24,270 --> 00:02:26,450 Grundläggande datalogi, men du kommer att ha 26 00:02:26,450 --> 00:02:29,120 detta mycket praktiska färdigheter som du sedan kan ta tillbaka till 27 00:02:29,120 --> 00:02:31,370 egen avdelning, oavsett om det är ingenjörsvetenskap, 28 00:02:31,370 --> 00:02:33,570 tillämpad matematik, naturvetenskap, naturliga 29 00:02:33,570 --> 00:02:34,780 vetenskap, eller liknande. 30 00:02:34,780 --> 00:02:37,030 Ja, vad är så spännande med datavetenskap dessa 31 00:02:37,030 --> 00:02:39,900 dagar är att det är bara så tillämpas 32 00:02:39,900 --> 00:02:40,990 alla typer av områden. 33 00:02:40,990 --> 00:02:46,210 Och även om i dag, kommer vi skrapa bara på ytan av en 34 00:02:46,210 --> 00:02:49,020 mycket traditionella programmeringsspråk som kallas C, vi 35 00:02:49,020 --> 00:02:51,040 istället titta på något som kallas Scratch, något med 36 00:02:51,040 --> 00:02:53,420 vilken kaka kärlekshistoria genomfördes genom en av dina 37 00:02:53,420 --> 00:02:57,020 föregångare i år tidigare, att berätta historier, att skapa spel, 38 00:02:57,020 --> 00:03:00,060 att skapa interaktiv konst och att faktiskt börja att slå våra 39 00:03:00,060 --> 00:03:02,240 sinnen runt några av de grundläggande konstruktioner som 40 00:03:02,240 --> 00:03:05,390 bakom programmering men i ett sammanhang, som du ser, det är 41 00:03:05,390 --> 00:03:09,140 mycket mindre skrämmande, det är mycket mindre svårbegripliga, än vad du ser 42 00:03:09,140 --> 00:03:10,140 snart. 43 00:03:10,140 --> 00:03:12,410 Och inse också, för de av er bara med oss ​​här 44 00:03:12,410 --> 00:03:16,170 termin fraserna som vi slutade onsdagens föreläsning, 45 00:03:16,170 --> 00:03:20,260 det är inte så viktigt när du hamnar i förhållande till din 46 00:03:20,260 --> 00:03:22,950 klasskamrater i denna klass, men där du, genom termins slut 47 00:03:22,950 --> 00:03:27,190 vecka 11, sluta i förhållande till sig själv rätt denna dag. 48 00:03:27,190 --> 00:03:32,000 >> Så utan vidare, det är också värt att notera att 49 00:03:32,000 --> 00:03:34,450 de mindre bekväma, de någonstans mittemellan, är 50 00:03:34,450 --> 00:03:36,825 också, genom utformningen av denna naturligtvis inte på något sätt missgynnas 51 00:03:36,825 --> 00:03:38,760 vis-a-vis de mer bekväm 52 00:03:38,760 --> 00:03:39,920 kommer in denna klass. 53 00:03:39,920 --> 00:03:41,810 Som du ser över de kommande veckorna har vi olika 54 00:03:41,810 --> 00:03:44,600 spår för disparat tillbaka bakgrund, sektioner för de 55 00:03:44,600 --> 00:03:46,500 mindre bekväm, bekvämare, de någonstans 56 00:03:46,500 --> 00:03:47,250 däremellan. 57 00:03:47,250 --> 00:03:49,520 Som du ser i helgen och nästa vecka, två versioner av 58 00:03:49,520 --> 00:03:52,410 flesta problem apparater i både standard-och hackare upplaga så 59 00:03:52,410 --> 00:03:55,390 att ni alla kan själv välja den väg som du 60 00:03:55,390 --> 00:03:56,615 är mest bekväm. 61 00:03:56,615 --> 00:03:58,770 >> Så idag, dyka vi i denna programmering 62 00:03:58,770 --> 00:04:00,060 språk som kallas Scratch. 63 00:04:00,060 --> 00:04:02,250 Det är ett grafiskt programmeringsspråk, och ändå har den 64 00:04:02,250 --> 00:04:04,500 samma funktioner för några av de högre nivå språk kommer vi 65 00:04:04,500 --> 00:04:07,050 utforska senare i terminen, bland dem C 66 00:04:07,050 --> 00:04:08,670 JavaScript och PHP. 67 00:04:08,670 --> 00:04:11,890 Men det kommer att tillåta oss att undvika några av de distraktioner 68 00:04:11,890 --> 00:04:14,890 tidigt av syntax, saker som semikolon, parenteser, 69 00:04:14,890 --> 00:04:17,720 och andra svårbegripliga detaljer som, vid första anblicken, är helt enkelt inte 70 00:04:17,720 --> 00:04:19,916 alls intellektuellt intressant och tenderar att få 71 00:04:19,916 --> 00:04:22,310 vägen från några grundläggande förståelse. 72 00:04:22,310 --> 00:04:24,870 När det gäller nu stödstrukturen framåt, insett detta 73 00:04:24,870 --> 00:04:27,570 verktyg, CS50 diskutera, vilket kommer att kopplas på kursens 74 00:04:27,570 --> 00:04:30,320 hemsida senare idag, är online diskussionsforum i 75 00:04:30,320 --> 00:04:32,480 som du kommer att kunna ställa frågor till varandra och 76 00:04:32,480 --> 00:04:35,020 personal, och det är också ett verktyg som vi får se nästa vecka, 77 00:04:35,020 --> 00:04:37,240 att vi kommer att använda mycket integratedly i 78 00:04:37,240 --> 00:04:38,780 kontorstid också. 79 00:04:38,780 --> 00:04:41,670 Faktum kontorstid börjar på måndag, och ärligt talat, den första 80 00:04:41,670 --> 00:04:43,930 vecka kontorstid är ganska låg nyckeln. 81 00:04:43,930 --> 00:04:46,820 >> Jag tror inte att du hittar Scratch allt otillgängliga. 82 00:04:46,820 --> 00:04:48,930 Det är ganska självförklarande, som vi får se, och så vad 83 00:04:48,930 --> 00:04:51,380 Vi kommer att använda det för i dag är att extrahera en del av 84 00:04:51,380 --> 00:04:53,990 grundläggande idéer som då kvarstår hela 85 00:04:53,990 --> 00:04:54,900 resten av terminen. 86 00:04:54,900 --> 00:04:57,980 Men från och med måndagen vid 8:00 PM till 23:00 kommer 87 00:04:57,980 --> 00:05:01,530 kontorstid i Annenberg över hjärnan paus. 88 00:05:01,530 --> 00:05:04,490 Sektionering två kommer att börja i kväll, så någon gång 89 00:05:04,490 --> 00:05:07,260 helgen, gå till cs50.net/section, och du kommer 90 00:05:07,260 --> 00:05:08,530 tillfrågas ett antal frågor. 91 00:05:08,530 --> 00:05:10,290 Bland dem, hur skulle du beskriva din 92 00:05:10,290 --> 00:05:12,040 komfort nivå i dag? 93 00:05:12,040 --> 00:05:14,450 Det finns ingen hård och snabb regel om vem som hink. 94 00:05:14,450 --> 00:05:17,170 Det är just den typ av sak som du säkert vet om du 95 00:05:17,170 --> 00:05:20,280 är bland dem mindre bekväm eller på annat sätt. 96 00:05:20,280 --> 00:05:21,350 >> Och nu, genomgångar. 97 00:05:21,350 --> 00:05:24,020 Problemet inställda specifikation för denna vecka, både standard 98 00:05:24,020 --> 00:05:28,560 och hackare upplaga både är online på cs50.net och med nu. 99 00:05:28,560 --> 00:05:31,500 Och du kommer att se att den första av dessa utgåvor, den 100 00:05:31,500 --> 00:05:33,940 standardutgåva varje vecka, åtföljs av något vi 101 00:05:33,940 --> 00:05:36,550 ringa en kod genomgång, ledde en session av en av 102 00:05:36,550 --> 00:05:39,100 kursens pedagogiska stipendiater att guida dig genom, ge 103 00:05:39,100 --> 00:05:42,290 tips om, och få dig ner en viss väg när det gäller 104 00:05:42,290 --> 00:05:44,150 att starta dessa problem uppsättningar. 105 00:05:44,150 --> 00:05:46,790 Så med alla dessa problem sätter, om du någonsin vill 106 00:05:46,790 --> 00:05:50,250 själv var jag börjar, börjar du med dessa 107 00:05:50,250 --> 00:05:50,890 genomgångar. 108 00:05:50,890 --> 00:05:53,450 Och faktiskt, låt mig presentera Zamyla Chan, detta 109 00:05:53,450 --> 00:05:55,870 Årets undervisning karl som kommer att leda varje 110 00:05:55,870 --> 00:05:56,910 en av dessa genomgångar. 111 00:05:56,910 --> 00:05:57,961 Zamyla? 112 00:05:57,961 --> 00:06:03,370 >> [Applåder] 113 00:06:03,370 --> 00:06:03,975 ZAMYLA CHAN: Åh, hej, alla. 114 00:06:03,975 --> 00:06:05,130 Mitt namn är Zamyla. 115 00:06:05,130 --> 00:06:08,250 Jag är en junior studera teknik i Winthrop House. 116 00:06:08,250 --> 00:06:10,890 Men jag försöker passa in så många kurser datavetenskap som jag 117 00:06:10,890 --> 00:06:13,350 kan, vilket är anledningen till att jag är verkligen glad över att vara ledande här 118 00:06:13,350 --> 00:06:14,590 Årets genomgångar. 119 00:06:14,590 --> 00:06:16,950 Walkthroughs, för mig, var en viktig del av min CS50 120 00:06:16,950 --> 00:06:17,910 erfarenhet. 121 00:06:17,910 --> 00:06:22,710 Under genomgång, för varje p-set, kommer vi att gå igenom 122 00:06:22,710 --> 00:06:25,580 problemet som tillsammans se över problemen, typ av 123 00:06:25,580 --> 00:06:27,360 dela upp dem i hanterbara biter. 124 00:06:27,360 --> 00:06:28,990 Jag ska ge er tips, tekniker, för att få 125 00:06:28,990 --> 00:06:30,820 igenom och komma igång. 126 00:06:30,820 --> 00:06:33,510 Jag hoppas att ni alla på genomgångar. 127 00:06:33,510 --> 00:06:34,720 Om du inte kan göra det personligen, då 128 00:06:34,720 --> 00:06:36,580 vänligen gör lyssna på nätet. 129 00:06:36,580 --> 00:06:36,840 >> DAVID MALAN: Utmärkt. 130 00:06:36,840 --> 00:06:37,950 Tack, Zamyla. 131 00:06:37,950 --> 00:06:40,870 So inser att genomgångar är verkligen på en fredag 132 00:06:40,870 --> 00:06:43,110 eftermiddag, men detta är avsiktligt av design så att 133 00:06:43,110 --> 00:06:45,750 även om du inte vill delta i klassen på en fredag 134 00:06:45,750 --> 00:06:48,490 eftermiddagen kommer videor upp allt snabbare över 135 00:06:48,490 --> 00:06:48,990 helgen. 136 00:06:48,990 --> 00:06:51,880 So inser att cs50.net blir alla Zamyla s 137 00:06:51,880 --> 00:06:53,130 genomgångar. 138 00:06:54,800 --> 00:06:56,890 Och att det är dagens datum och tid, 3:00 PM, 139 00:06:56,890 --> 00:06:58,370 Harberd Hall, 104. 140 00:06:58,370 --> 00:07:00,080 Och några av de pedagogiska stipendiater har också förberett 141 00:07:00,080 --> 00:07:03,250 några anmärkningar för dig i frånvaro för att ge dig lite 142 00:07:03,250 --> 00:07:06,760 perspektiv vad deras erfarenheter kommer in och 143 00:07:06,760 --> 00:07:08,990 gå ut CS50 var. 144 00:07:08,990 --> 00:07:11,250 Så om vi kunde dämpa belysningen för bara ett ögonblick, jag ger dig 145 00:07:11,250 --> 00:07:18,100 några av CS50 personal. 146 00:07:18,100 --> 00:07:20,440 >> JACKSON Steinkamp: Jag tog CS50 förra året som en nybörjare i 147 00:07:20,440 --> 00:07:22,880 falla, och det absolut blåste mig. 148 00:07:22,880 --> 00:07:25,090 Jag hade aldrig tagit några programmering klasser innan, 149 00:07:25,090 --> 00:07:26,380 och kom aldrig in med någon datavetenskap 150 00:07:26,380 --> 00:07:27,320 erfarenhet alls. 151 00:07:27,320 --> 00:07:29,240 Och bara hörde jag surr om klass och 152 00:07:29,240 --> 00:07:30,050 beslutat att ta den. 153 00:07:30,050 --> 00:07:31,780 >> JULIA Mitelman: Det var riktigt roligt, verkligen engagerande. 154 00:07:31,780 --> 00:07:33,480 Jag fortfarande, i dag - 155 00:07:33,480 --> 00:07:36,560 Jag har nyligen såg jag har disketten som David gav oss 156 00:07:36,560 --> 00:07:38,140 på vår första dag i föreläsningen. 157 00:07:38,140 --> 00:07:40,020 Jag hade hängt den på min vägg. 158 00:07:40,020 --> 00:07:42,410 Detta är förmodligen lite nördig, men jag hängde på min 159 00:07:42,410 --> 00:07:46,930 vägg under klassen som en påminnelse om hur coolt det var. 160 00:07:46,930 --> 00:07:49,240 >> TRAVIS Downs: Det är så pinsamt. 161 00:07:49,240 --> 00:07:50,770 >> JACKSON Steinkamp: Datavetenskap är något du 162 00:07:50,770 --> 00:07:52,370 ska försöka även om du inte är en för 163 00:07:52,370 --> 00:07:54,980 de traditionella vetenskaperna. 164 00:07:54,980 --> 00:07:58,510 Det är sin egen erfarenhet, och CS50 kommer att se att du är 165 00:07:58,510 --> 00:08:01,520 stöd väl igenom det med sin veritabel armé av TF. 166 00:08:01,520 --> 00:08:03,700 >> ALI Nahm: Jag tog det som en nybörjare, så jag gjorde en hel del 167 00:08:03,700 --> 00:08:04,215 av nya vänner. 168 00:08:04,215 --> 00:08:07,170 Jag fick också införts för att hela denna koncentration och 169 00:08:07,170 --> 00:08:10,770 Hela Högskolan, så jag rekommenderar det 170 00:08:10,770 --> 00:08:14,360 och hälsar dig välkommen till vår CS50 familj. 171 00:08:14,360 --> 00:08:17,510 >> Yaniv YACOBY: CS50 lär bara dig hur du använder verktyg 172 00:08:17,510 --> 00:08:19,210 som är allmänt tillgänglig. 173 00:08:19,210 --> 00:08:21,840 Du behöver bara en bärbar dator, behöver du en webbläsare, och du 174 00:08:21,840 --> 00:08:26,030 behöver lära sig att skriva lite kod, och du kan verkligen bygga 175 00:08:26,030 --> 00:08:27,400 fina saker. 176 00:08:27,400 --> 00:08:31,660 >> KAREN XIAO: Det är bara så coolt att kunna göra något 177 00:08:31,660 --> 00:08:34,580 och har människor använder det och har folk se det, och det är 178 00:08:34,580 --> 00:08:35,900 vad jag älskar verkligen det. 179 00:08:35,900 --> 00:08:37,429 >> TIM McLaughlin: - en känsla av gemenskap, tror jag, i denna 180 00:08:37,429 --> 00:08:39,470 Naturligtvis mer än någon annan kurs jag tagit hittills. 181 00:08:39,470 --> 00:08:41,350 Du är inte bara att ta en annan - 182 00:08:41,350 --> 00:08:42,740 du inte fylla ett annat krav. 183 00:08:42,740 --> 00:08:45,310 Du är inte bara att föreläsningar och gå på avsnittet. 184 00:08:45,310 --> 00:08:49,630 Men du gör massor av saker som handlar om 185 00:08:49,630 --> 00:08:51,560 programmering och allt om teknik, men det gör inte 186 00:08:51,560 --> 00:08:53,090 verkligen känna sig som en klass för det mesta. 187 00:08:53,090 --> 00:08:55,012 >> Travis Downs: Och på den första dagen, delade de ut tårta och 188 00:08:55,012 --> 00:08:56,215 Jag blev genast såld. 189 00:08:56,215 --> 00:08:57,822 >> JACOB Pritt: Gratis godis och pizza. 190 00:08:57,822 --> 00:08:59,820 >> ZAMYLA CHAN: - oavsett ditt intresse nivå, tror jag 191 00:08:59,820 --> 00:09:05,170 att CS50 får du kul, och du kommer att vara intellektuellt 192 00:09:05,170 --> 00:09:06,070 stimuleras. 193 00:09:06,070 --> 00:09:07,926 >> MARK GROZEN-Smith: Det är alltid en fest i klassen, och det är en 194 00:09:07,926 --> 00:09:09,990 fest varje kväll arbeta på din p-set. 195 00:09:09,990 --> 00:09:11,880 >> JACKSON Steinkamp: Varje gång du avslutar ett problem som, du 196 00:09:11,880 --> 00:09:13,710 kommer att kännas som att du har avslutat ett projekt. 197 00:09:13,710 --> 00:09:16,580 >> MELISSA NIU: Det var första år, och jag var gjort shopping. 198 00:09:16,580 --> 00:09:19,030 Jag hade mina fyra klasser redo, och jag var i Annenberg. 199 00:09:19,030 --> 00:09:21,670 Och jag stöta på en vän, och han säger hej, jag shoppa 200 00:09:21,670 --> 00:09:24,330 denna klass kallas CS50, och du bör komma med mig. 201 00:09:24,330 --> 00:09:28,150 Slutade med det som faller, och efter den klassen jag 202 00:09:28,150 --> 00:09:30,510 tänkte jag ska ringa i CS. 203 00:09:30,510 --> 00:09:33,760 Men här är jag, tre år senare, fortfarande studerar dator 204 00:09:33,760 --> 00:09:36,680 vetenskap och verkligen göra det som en stor, och jag älskade varje 205 00:09:36,680 --> 00:09:37,780 ögonblick av det. 206 00:09:37,780 --> 00:09:39,030 >> ROB BOWDEN: Jag har ingen aning. 207 00:09:46,408 --> 00:09:48,060 >> ALI Nahm: Låt oss se. 208 00:09:48,060 --> 00:09:49,200 >> MELISSA NIU: galenskap. 209 00:09:49,200 --> 00:09:50,610 >> Högtalare 1: Jag känner att jag skulle vara mycket klyscha. 210 00:09:50,610 --> 00:09:52,530 Jag skulle bara säga, liksom, awesome. 211 00:09:52,530 --> 00:09:53,540 >> Yaniv YACOBY: Tillgänglighet. 212 00:09:53,540 --> 00:09:55,080 >> JACOB Pritt: Gratis godis och pizza. 213 00:09:55,080 --> 00:09:57,310 >> TRAVIS Downs: Det går inte att tacka nej till en klass som delar ut tårta. 214 00:09:57,310 --> 00:09:58,510 >> TIM McLaughlin: Energisk. 215 00:09:58,510 --> 00:10:00,040 >> Vipul SHEKHAWAT: Essential. 216 00:10:00,040 --> 00:10:02,636 >> ROB BOWDEN: Låt mig tänka på ett svar. 217 00:10:02,636 --> 00:10:04,480 Jag tror att jag har något. 218 00:10:04,480 --> 00:10:07,092 Åh, gud. 219 00:10:07,092 --> 00:10:13,370 Ja, mitt namn är Rob Bowden, och detta CS50. 220 00:10:13,370 --> 00:10:16,340 >> [Applåder] 221 00:10:20,810 --> 00:10:23,390 DAVID MALAN: Okej, så låt oss börja att måla en bild 222 00:10:23,390 --> 00:10:26,230 av i vilken riktning vi kan gå, och låt oss införa 223 00:10:26,230 --> 00:10:28,190 detta begrepp här kallas pseudokod. 224 00:10:28,190 --> 00:10:29,560 Så pseudokod är inte ett programmeringsspråk 225 00:10:29,560 --> 00:10:30,810 språket i sig. 226 00:10:30,810 --> 00:10:33,250 Det är inget tekniskt i sig, men det är bara en slags 227 00:10:33,250 --> 00:10:36,490 generellt sätt att uttrycka dig ganska exakt, 228 00:10:36,490 --> 00:10:39,730 ganska algoritmiskt, ganska formellt, men utan 229 00:10:39,730 --> 00:10:42,570 behöva oroa sig för vad språk du uttrycker 230 00:10:42,570 --> 00:10:43,150 dig i. 231 00:10:43,150 --> 00:10:46,280 Det är lite modell av engelska och programmeringsspråk med 232 00:10:46,280 --> 00:10:48,790 som du råkar vara bekant, så att vi kan börja 233 00:10:48,790 --> 00:10:50,600 skriver sådana saker som vi går. 234 00:10:50,600 --> 00:10:54,450 Och faktiskt, Josef, kan jag låna dig på scenen för att vara 235 00:10:54,450 --> 00:10:55,490 skriftlärd här? 236 00:10:55,490 --> 00:11:00,130 Jag har gått framåt här i förväg och glömt att sätta 237 00:11:00,130 --> 00:11:02,920 på vissa strumpor idag, och detta kommer att vara bland våra mer 238 00:11:02,920 --> 00:11:03,780 löjliga exempel. 239 00:11:03,780 --> 00:11:04,580 >> Nu, jag behöver dig här. 240 00:11:04,580 --> 00:11:05,630 Jag gör det strumpor delen. 241 00:11:05,630 --> 00:11:08,040 Så här har vi en liten anteckningsblock. 242 00:11:08,040 --> 00:11:09,940 Detta är bokstavligen bara TextEdit i en Mac. 243 00:11:09,940 --> 00:11:12,270 Vi faktiskt inte kommer att skriva en körbart program, men 244 00:11:12,270 --> 00:11:14,220 Vi kommer bara att börja skissa på pseudokod baserad 245 00:11:14,220 --> 00:11:17,830 på några av de råd du ger till mig här. 246 00:11:17,830 --> 00:11:20,760 Så här är min hög med strumpor hemma. 247 00:11:20,760 --> 00:11:23,320 Jag har inga strumpor på när jag vaknar på morgonen, och vi har nu 248 00:11:23,320 --> 00:11:26,280 behöver skriva ett program, en algoritm av slag, som 249 00:11:26,280 --> 00:11:27,900 att få dessa strumpor på fötterna. 250 00:11:27,900 --> 00:11:30,860 Och längs vägen, låt oss se om vi snubblar över, eller stöter, 251 00:11:30,860 --> 00:11:32,860 några av de idéer som du kommer att behöva börja 252 00:11:32,860 --> 00:11:35,470 tänka mycket mer på allvar vid programmering 253 00:11:35,470 --> 00:11:37,950 så att dina program beter sig inte riktigt som det var tänkt. 254 00:11:37,950 --> 00:11:39,580 >> Så jag sitter här nere. 255 00:11:39,580 --> 00:11:41,180 Jag har min hög med strumpor. 256 00:11:41,180 --> 00:11:43,780 Vad är det första en rimlig människa skulle 257 00:11:43,780 --> 00:11:46,600 göra när målet är att sätta på sig ett par strumpor? 258 00:11:46,600 --> 00:11:49,190 Någon ge mig en steg och endast ett steg. 259 00:11:49,190 --> 00:11:49,796 Ja? 260 00:11:49,796 --> 00:11:50,690 Publiken: Böj ner. 261 00:11:50,690 --> 00:11:54,290 DAVID MALAN: Böj ner, okej. 262 00:11:54,290 --> 00:11:55,540 Steg två. 263 00:11:59,975 --> 00:12:00,645 Steg två. 264 00:12:00,645 --> 00:12:01,840 PUBLIK: Plocka upp din strumpa. 265 00:12:01,840 --> 00:12:03,220 DAVID MALAN: Plocka upp din strumpa. 266 00:12:03,220 --> 00:12:07,610 Okej, är så liten tvetydighet här, och en av de första 267 00:12:07,610 --> 00:12:09,380 stötestenar som vi ska medvetet 268 00:12:09,380 --> 00:12:10,290 stöter här. 269 00:12:10,290 --> 00:12:14,110 Det är lite tvetydigt, så plocka upp din strumpa. 270 00:12:14,110 --> 00:12:17,425 Okej, jag tar den här, men en dator inser på bara en 271 00:12:17,425 --> 00:12:20,420 bit, inte kommer att ha den sortens mänsklig instinkt att bara 272 00:12:20,420 --> 00:12:21,490 välja den närmaste. 273 00:12:21,490 --> 00:12:23,590 Vi kommer att behöva börja, snart, uttrycker 274 00:12:23,590 --> 00:12:24,610 oss mer exakt. 275 00:12:24,610 --> 00:12:26,600 >> Okej, så steg två är att plocka upp strumpan. 276 00:12:26,600 --> 00:12:27,520 Vi tar det. 277 00:12:27,520 --> 00:12:28,620 Steg tre. 278 00:12:28,620 --> 00:12:29,532 I ryggen. 279 00:12:29,532 --> 00:12:30,900 PUBLIK: Hitta ett matchande par. 280 00:12:30,900 --> 00:12:32,060 DAVID MALAN: Hitta matchande par. 281 00:12:32,060 --> 00:12:34,740 Okej, så det är bra. 282 00:12:34,740 --> 00:12:35,650 Jag var tvungen att välja denna strumpa. 283 00:12:35,650 --> 00:12:39,200 Så målet är att hitta en matchande strumpa, nu, men vad 284 00:12:39,200 --> 00:12:39,990 betyder det? 285 00:12:39,990 --> 00:12:42,130 En rimlig människa, ungefär som på onsdagen när jag bara 286 00:12:42,130 --> 00:12:44,700 visste hur man hittar Mike Smith i en telefonbok, bara typ av 287 00:12:44,700 --> 00:12:45,640 gick med sin instinkt. 288 00:12:45,640 --> 00:12:49,220 Men här är det uppenbarligen strumpa här, men en dators 289 00:12:49,220 --> 00:12:51,350 inte kommer att vara så instinktiv. 290 00:12:51,350 --> 00:12:53,830 En dator kommer att ha en samling av bitar, som vi 291 00:12:53,830 --> 00:12:55,380 diskuteras på onsdag, och de är 292 00:12:55,380 --> 00:12:56,710 organiseras på något sätt i minnet. 293 00:12:56,710 --> 00:13:00,400 Men poängen är att en dator har bara förmågan 294 00:13:00,400 --> 00:13:03,390 att titta på saker en i taget, och i själva verket, även vi 295 00:13:03,390 --> 00:13:05,980 människor - även om det känns som om jag tittade ner och en delad 296 00:13:05,980 --> 00:13:08,900 sekund senare jag vet var strumpan är min hjärna och mina ögon 297 00:13:08,900 --> 00:13:12,000 förmodligen gjorde en snabb skumma av dessa strumpor och sedan låst 298 00:13:12,000 --> 00:13:13,400 vidare till en i fråga. 299 00:13:13,400 --> 00:13:15,780 >> Så om vi desto mer medveten nu som en dator, 300 00:13:15,780 --> 00:13:17,780 Hur hittar jag den här matchande par? 301 00:13:17,780 --> 00:13:18,890 Nåväl, vi måste iterera. 302 00:13:18,890 --> 00:13:21,440 Vi måste kanske en slinga över den här röran strumpor på 303 00:13:21,440 --> 00:13:25,760 golv där jag säger något i stil med FÖR VARJE strumpa, plocka 304 00:13:25,760 --> 00:13:30,195 upp, och om samma form och storlek som den andra, SÅ 305 00:13:30,195 --> 00:13:32,150 punkt, punkt, punkt, kommer vi att fortsätta berättelsen. 306 00:13:32,150 --> 00:13:34,430 Så för varje strumpa, så jag plockar upp den här. 307 00:13:34,430 --> 00:13:36,520 Jag kollar detta lika här. 308 00:13:36,520 --> 00:13:38,250 Det är inte så jag gallrat sida. 309 00:13:38,250 --> 00:13:39,220 Då jag iterera igen. 310 00:13:39,220 --> 00:13:40,340 Är detta en lika? 311 00:13:40,340 --> 00:13:42,010 Nej, det är inte så jag satte det åt sidan. 312 00:13:42,010 --> 00:13:42,710 Är den här? 313 00:13:42,710 --> 00:13:43,200 Nej. 314 00:13:43,200 --> 00:13:43,670 Den här? 315 00:13:43,670 --> 00:13:44,520 Nej, och så vidare. 316 00:13:44,520 --> 00:13:48,730 Och slutligen, förhoppningsvis kommer jag stöter på det här strumpan här. 317 00:13:48,730 --> 00:13:51,350 Så om det är samma form, storlek, ta den. 318 00:13:51,350 --> 00:13:53,980 >> Och nu, vad skulle bli vår nästa steg här? 319 00:13:53,980 --> 00:13:54,402 Ja? 320 00:13:54,402 --> 00:13:56,090 PUBLIK: Identifiera rätt från vänster. 321 00:13:56,090 --> 00:13:58,980 DAVID MALAN: Okej, identifiera höger och vänster, så 322 00:13:58,980 --> 00:14:01,870 lyckligtvis den sortens gärningar. 323 00:14:01,870 --> 00:14:04,020 Lite symmetrisk, eller jag har bara slitna dem så. 324 00:14:04,020 --> 00:14:07,020 Okej, så jag har identifierat rätt. 325 00:14:07,020 --> 00:14:09,980 Och nu, innan vi går vidare, låt mig påpeka vad Josephs 326 00:14:09,980 --> 00:14:12,890 gjort här som en slags insatt programmerare. 327 00:14:12,890 --> 00:14:15,800 Så återigen, det finns ingen sätt att göra detta, men längre än bara 328 00:14:15,800 --> 00:14:18,480 numrering linjerna har Josef redan börjat göra detta 329 00:14:18,480 --> 00:14:19,460 slags indrag. 330 00:14:19,460 --> 00:14:21,950 I själva verket är detta en mycket vanlig konvention i programmering, 331 00:14:21,950 --> 00:14:26,110 där när du gör något iterativ, looping stil, som 332 00:14:26,110 --> 00:14:28,480 vi antyder med den engelska frasen "för varje 333 00:14:28,480 --> 00:14:31,090 strumpa, "konventionen i pseudokod och, som vi ser, 334 00:14:31,090 --> 00:14:33,410 normala programmeringsspråk, är att bara strecksatsen. 335 00:14:33,410 --> 00:14:36,240 Hit mellanslagstangenten ett par gånger, tryck på Tab-tangenten eller liknande, 336 00:14:36,240 --> 00:14:40,660 så att kapslade under "För varje strumpa" är bit av 337 00:14:40,660 --> 00:14:43,430 saker som du behöver göra som en följd av den slingan. 338 00:14:43,430 --> 00:14:45,940 Så det är allt som förmedla semantiskt. 339 00:14:45,940 --> 00:14:48,620 Nu under tiden den "Om det är samma form och storlek," den 340 00:14:48,620 --> 00:14:51,590 Att "ta det" är indragen vidare bara innebär 341 00:14:51,590 --> 00:14:54,370 det är det enda du ska göra om detta villkor, 342 00:14:54,370 --> 00:14:59,770 om den gren, som vägskäl, i själva verket är sant. 343 00:14:59,770 --> 00:15:02,130 >> Så nu här, vi är på steg fyra, identifiera höger och vänster. 344 00:15:02,130 --> 00:15:03,410 Jag har identifierat rätt. 345 00:15:03,410 --> 00:15:05,150 Ge mig steg fem. 346 00:15:05,150 --> 00:15:07,880 Och tekniskt, kan vi verkligen kalla 347 00:15:07,880 --> 00:15:09,510 det för varje sak - 348 00:15:09,510 --> 00:15:11,450 Du bör nog numrera alla rader om 349 00:15:11,450 --> 00:15:12,190 vi ska göra detta. 350 00:15:12,190 --> 00:15:14,006 Joseph: [OHÖRBAR] 351 00:15:14,006 --> 00:15:14,610 DAVID MALAN: [OHÖRBAR]? 352 00:15:14,610 --> 00:15:16,070 Okej, okej, vi gör det på ditt sätt. 353 00:15:16,070 --> 00:15:19,590 Okej, så steg fem, hur gör vi rätt strumpa? 354 00:15:19,590 --> 00:15:22,310 Hur går vi nästa, här? 355 00:15:22,310 --> 00:15:22,730 Ja? 356 00:15:22,730 --> 00:15:24,300 PUBLIK: Lyft upp höger ben. 357 00:15:24,300 --> 00:15:27,100 DAVID MALAN: Lyft upp höger ben, okej. 358 00:15:27,100 --> 00:15:29,330 Steg sex? 359 00:15:29,330 --> 00:15:30,728 Snabbt. 360 00:15:30,728 --> 00:15:31,202 Ja. 361 00:15:31,202 --> 00:15:33,100 PUBLIK: Hitta en öppen ände av strumpan. 362 00:15:33,100 --> 00:15:34,440 DAVID MALAN: Okej, hitta den öppna änden av strumpan. 363 00:15:34,440 --> 00:15:34,840 Så bra. 364 00:15:34,840 --> 00:15:37,180 Så här, ärligt talat, skulle en mycket vanlig instinkt bara vara 365 00:15:37,180 --> 00:15:39,880 sätta på höger strumpa, men det är också ganska tvetydig. 366 00:15:39,880 --> 00:15:42,750 Om inte datorn eller mänskliga vet exakt vad det betyder, 367 00:15:42,750 --> 00:15:45,160 det inte kommer att vara att genomföra det, så här, jag har 368 00:15:45,160 --> 00:15:46,520 fann öppnandet av beståndet. 369 00:15:46,520 --> 00:15:48,222 Steg Sju? 370 00:15:48,222 --> 00:15:49,700 PUBLIK: Tryck tårna. 371 00:15:49,700 --> 00:15:51,070 DAVID MALAN: Touch tårna. 372 00:15:51,070 --> 00:15:53,546 Okej, så nu går vi - 373 00:15:53,546 --> 00:15:56,480 Okej, jag ska ta några friheter här. 374 00:15:56,480 --> 00:15:57,110 Tack. 375 00:15:57,110 --> 00:15:59,210 Steg åtta? 376 00:15:59,210 --> 00:16:00,060 Sätt på strumpan. 377 00:16:00,060 --> 00:16:02,060 Okej, så nu har jag, tror vi är tillräckligt nära för att sortera om att ta 378 00:16:02,060 --> 00:16:03,480 detta en hemma. 379 00:16:03,480 --> 00:16:05,980 Okej, så detta går upp. 380 00:16:05,980 --> 00:16:07,950 Jag tar några friheter med vad det innebär, faktiskt. 381 00:16:07,950 --> 00:16:08,920 Sätt strumpan på. 382 00:16:08,920 --> 00:16:10,853 Okej, nu steg nio? 383 00:16:10,853 --> 00:16:11,740 PUBLIK: Sätt ner foten. 384 00:16:11,740 --> 00:16:12,510 DAVID MALAN: Tack. 385 00:16:12,510 --> 00:16:15,610 Steg nio, satte ner foten, och nu kan vi upprepa. 386 00:16:15,610 --> 00:16:19,540 Så förmodligen kan vi gå nu in steg 10 och säga identifiera 387 00:16:19,540 --> 00:16:21,960 vänster strumpa, men det är förmodligen redan gjort. 388 00:16:21,960 --> 00:16:24,100 >> Och så då kan jag sortera av upprepa dessa steg. 389 00:16:24,100 --> 00:16:25,260 Men denna typ av väcker frågan. 390 00:16:25,260 --> 00:16:28,100 Före, sista gången vi ville upprepa något, vi 391 00:16:28,100 --> 00:16:30,730 gjorde det iterativt, om och om igen, en FOR 392 00:16:30,730 --> 00:16:32,660 Varje slinga så att säga. 393 00:16:32,660 --> 00:16:36,420 Skulle det vara meningsfullt att använda en slinga för att hantera både 394 00:16:36,420 --> 00:16:38,470 vänster och höger strumpa? 395 00:16:38,470 --> 00:16:40,460 Eftersom det känns som dessa operationer är ganska mycket 396 00:16:40,460 --> 00:16:43,090 identiska med undantag för det faktum att man börjar här och en 397 00:16:43,090 --> 00:16:44,850 börjar här? 398 00:16:44,850 --> 00:16:47,400 Har vi slinga eller vill vi bara fortsätta skriva steg 399 00:16:47,400 --> 00:16:48,745 10 och 11 och 12? 400 00:16:48,745 --> 00:16:50,540 Publiken: Loop. 401 00:16:50,540 --> 00:16:52,240 >> DAVID MALAN: Okej, så slinga. 402 00:16:52,240 --> 00:16:54,730 Jag faktiskt kunde ha sagt bara fortsätta. 403 00:16:54,730 --> 00:16:55,720 Så varför är det så? 404 00:16:55,720 --> 00:16:57,940 Nåväl, detta är faktiskt den första av våra icke uppenbara 405 00:16:57,940 --> 00:17:01,210 designbeslut, och i själva verket en av de mätetal som 406 00:17:01,210 --> 00:17:03,990 Vi kommer att börja utvärdera för oss själva och för dig som 407 00:17:03,990 --> 00:17:06,780 kvalitet av ett program är bara hur väl utformade det är. 408 00:17:06,780 --> 00:17:09,619 Har ni gjort en minimal mängd arbete som krävs för att 409 00:17:09,619 --> 00:17:12,480 få jobbet gjort mest snabbt, antingen i form av 410 00:17:12,480 --> 00:17:15,430 din tid eller i termer av datorns drifttid? 411 00:17:15,430 --> 00:17:17,589 Hur många verksamheter gör det tar att utföra? 412 00:17:17,589 --> 00:17:20,180 Så utan tvekan är detta en möjlighet för en slinga, eftersom 413 00:17:20,180 --> 00:17:22,829 så fort jag börjar kopiera och klistra, som Joseph effektivt 414 00:17:22,829 --> 00:17:25,010 skulle börja göra i ett ögonblick, du typ av att slösa bort din 415 00:17:25,010 --> 00:17:27,140 tid, och att du är dubbelt uttrycksfulla. 416 00:17:27,140 --> 00:17:30,260 >> Men på samma gång, det är egentligen bara två särskilda 417 00:17:30,260 --> 00:17:31,890 fall, vänster och höger. 418 00:17:31,890 --> 00:17:34,930 Och medan tidigare, kan jag få 10 eller 20 eller fler strumpor i 419 00:17:34,930 --> 00:17:37,960 en hög, gör det definitivt betydelse inte ha 50 rader 420 00:17:37,960 --> 00:17:40,180 kod säger kontrollera detta strumpa, sedan nästa, 421 00:17:40,180 --> 00:17:41,300 då nästa. 422 00:17:41,300 --> 00:17:43,450 Här är det lite mindre uppenbart, och jag skulle föreslås 423 00:17:43,450 --> 00:17:44,390 att vi kunde gå åt båda hållen. 424 00:17:44,390 --> 00:17:46,720 Vi kan antingen ha den slinga, även om det bara loopar 425 00:17:46,720 --> 00:17:50,620 två gånger, eller vi kan helt enkelt kopiera och klistra in bara lite 426 00:17:50,620 --> 00:17:53,270 här för att få jobbet gjort. 427 00:17:53,270 --> 00:17:55,210 Men detta program är buggig, så att säga. 428 00:17:55,210 --> 00:17:59,120 Det kan ha vissa misstag, fel eller fall hörn, så att 429 00:17:59,120 --> 00:18:00,860 tala, att vi verkligen inte förutse. 430 00:18:00,860 --> 00:18:03,400 Ingenting gick fel den här gången, men det kunde ha gått fel 431 00:18:03,400 --> 00:18:06,100 medan verkställande programmet? 432 00:18:06,100 --> 00:18:07,040 Målgrupp: Du behöver inte ha några strumpor. 433 00:18:07,040 --> 00:18:08,980 >> DAVID MALAN: Så det kan finnas några strumpor där alls. 434 00:18:08,980 --> 00:18:10,380 Så låt oss betrakta det hörnet fallet. 435 00:18:10,380 --> 00:18:14,670 Så om vi kunde rulla tillbaka upp till steg ett, så steg en var 436 00:18:14,670 --> 00:18:16,540 böja sig ner, så checkar ut. 437 00:18:16,540 --> 00:18:21,250 Steg två, plocka upp din strumpa, men sedan hitta matchande strumpa, 438 00:18:21,250 --> 00:18:22,420 identifiera höger. 439 00:18:22,420 --> 00:18:25,050 Vi sorts gjort en hel massa antaganden, och det är, 440 00:18:25,050 --> 00:18:27,720 ärligt talat, varför programmet kraschar ibland. 441 00:18:27,720 --> 00:18:30,240 Om du som programmerare har gjort vissa antaganden, som 442 00:18:30,240 --> 00:18:33,000 säkert det kommer att bli strumpor eller säkert det kommer 443 00:18:33,000 --> 00:18:35,310 att vara minne kvar i datorn, säkert det kommer 444 00:18:35,310 --> 00:18:37,420 vara diskutrymme kvar på hårddisken - 445 00:18:37,420 --> 00:18:39,040 Tja, om du gör dessa antaganden, och det är inte, 446 00:18:39,040 --> 00:18:41,880 i själva verket verkligheten vet vem ibland vad datorns 447 00:18:41,880 --> 00:18:42,520 kommer att göra? 448 00:18:42,520 --> 00:18:44,450 Och ibland, när du får den snurrande badboll eller 449 00:18:44,450 --> 00:18:47,750 fryst Windows eller liknande, det är just därför vissa 450 00:18:47,750 --> 00:18:50,980 programmerare inte förutse de så kallade hörn fall. 451 00:18:50,980 --> 00:18:53,050 Vad kunde ha gått fel i det här programmet? 452 00:18:53,050 --> 00:18:53,330 Ja? 453 00:18:53,330 --> 00:18:55,950 >> Målgrupp: Du har inte en höger ben och vänster ben. 454 00:18:55,950 --> 00:18:58,920 DAVID MALAN: Okej, kanske inte ha både en höger ben och en 455 00:18:58,920 --> 00:19:01,940 vänster ben, och så det här programmet kanske inte allmänt 456 00:19:01,940 --> 00:19:02,590 tillämpligt. 457 00:19:02,590 --> 00:19:03,658 Andra? 458 00:19:03,658 --> 00:19:05,650 Målgrupp: Du kanske har plockat upp en föräldralös strumpa. 459 00:19:05,650 --> 00:19:07,970 David MALAN: Jag kanske har plockat upp en föräldralös strumpa, så en 460 00:19:07,970 --> 00:19:11,250 icke-matchande strumpa som bara har några syskon eftersom jag har 461 00:19:11,250 --> 00:19:13,650 förlorade det, det slits, det är i tvätten fortfarande, eller liknande. 462 00:19:13,650 --> 00:19:15,550 Så att även inte riktigt hanterats. 463 00:19:15,550 --> 00:19:15,790 Ja? 464 00:19:15,790 --> 00:19:17,510 Målgrupp: Du kanske redan har strumpor på. 465 00:19:17,510 --> 00:19:19,050 David MALAN: Jag kanske redan har strumpor på. 466 00:19:19,050 --> 00:19:20,080 Jag faktiskt inte kolla. 467 00:19:20,080 --> 00:19:23,350 OM du inte har strumpor på, sedan vidare för att göra 468 00:19:23,350 --> 00:19:24,330 linje ett och två. 469 00:19:24,330 --> 00:19:24,980 Och det kan hända. 470 00:19:24,980 --> 00:19:26,880 Du somnar med dina strumpor på och liknande, så 471 00:19:26,880 --> 00:19:28,860 det också, en mycket rimlig hörn fall. 472 00:19:28,860 --> 00:19:29,630 Och kanske en annan? 473 00:19:29,630 --> 00:19:31,310 PUBLIK: Sockan är ut och in. 474 00:19:31,310 --> 00:19:34,000 DAVID MALAN: Så strumpan är inne, så vi gjorde inget fel 475 00:19:34,000 --> 00:19:35,330 kontroll, i kort. 476 00:19:35,330 --> 00:19:38,550 Vi har inte kontrollera om tillståndet i världen är som vi förväntar oss. 477 00:19:38,550 --> 00:19:41,310 Vi har inte kontrollera om vi faktiskt hittat vad vi letar efter. 478 00:19:41,310 --> 00:19:43,310 >> Och även om detta är en slags löjligt exempel 479 00:19:43,310 --> 00:19:46,110 där strumpor, i slutet av dagen, det är precis den 480 00:19:46,110 --> 00:19:48,740 typ av tankesätt måste du ha när du skriver program, 481 00:19:48,740 --> 00:19:51,740 även i Scratch samt i C, i JavaScript, i PHP, 482 00:19:51,740 --> 00:19:53,920 annars kommer dina program uppvisar 483 00:19:53,920 --> 00:19:56,980 motsvarande det snurrande badboll eller bara ger 484 00:19:56,980 --> 00:19:58,210 felaktiga resultat. 485 00:19:58,210 --> 00:20:00,250 Så många tack här till vår skrivare Joseph. 486 00:20:00,250 --> 00:20:05,060 [Applåder] 487 00:20:05,060 --> 00:20:06,850 >> DAVID MALAN: Okej, så vad är i 488 00:20:06,850 --> 00:20:08,230 Faktum är att ett datorprogram? 489 00:20:08,230 --> 00:20:09,670 Nåväl, låt oss ta en snabb titt på en 490 00:20:09,670 --> 00:20:11,100 representant här. 491 00:20:11,100 --> 00:20:15,260 Så detta är ett program skrivet i ett språk som kallas C. C är 492 00:20:15,260 --> 00:20:17,830 ganska gamla dessa dagar, men många nyare språk byggs 493 00:20:17,830 --> 00:20:18,460 ovanpå det. 494 00:20:18,460 --> 00:20:21,180 Faktum PHP, en av de webb-centrerad språk kommer vi 495 00:20:21,180 --> 00:20:24,050 användning mot termen slut, har själv vad som kallas en 496 00:20:24,050 --> 00:20:27,550 tolk, ett program som är skrivet i C, men mer om det 497 00:20:27,550 --> 00:20:28,690 i många veckor nu. 498 00:20:28,690 --> 00:20:30,840 Men detta program, och det är vad det innebär att skriva en 499 00:20:30,840 --> 00:20:32,880 Programmet, om än en mycket enkel. 500 00:20:32,880 --> 00:20:35,540 Vi har några ganska kryptiskt syntax här, men du kan 501 00:20:35,540 --> 00:20:38,340 förmodligen gissa, även om du aldrig har programmerat förut, vad 502 00:20:38,340 --> 00:20:39,750 detta program gör. 503 00:20:39,750 --> 00:20:43,640 I själva verket vet jag inte vad printf är, men skriv ut säkert 504 00:20:43,640 --> 00:20:45,700 frammanar tanken att skriva något. 505 00:20:45,700 --> 00:20:48,590 Och så ja, det här programmet kommer i slutändan att skriva ut 506 00:20:48,590 --> 00:20:50,250 orden "Hej, Världen". 507 00:20:50,250 --> 00:20:53,390 >> Nu, om du har en Mac eller en PC eller en Linux-dator, oddsen 508 00:20:53,390 --> 00:20:55,550 är, åtminstone om du hämtade några fritt 509 00:20:55,550 --> 00:20:58,000 tillgängliga programvaran kan du har skrivit program på 510 00:20:58,000 --> 00:21:00,310 din egen bärbara dator ganska länge nu. 511 00:21:00,310 --> 00:21:03,040 På Mac OS, till exempel, det finns det här programmet som heter 512 00:21:03,040 --> 00:21:05,340 Terminal som kommer med en Mac, det är oftast i ditt 513 00:21:05,340 --> 00:21:07,550 Mappen Verktygsprogram, och det öppnar vanligtvis en svart och 514 00:21:07,550 --> 00:21:09,820 vit eller en vit och svart fönster där du har en 515 00:21:09,820 --> 00:21:11,410 frågar där du kan skriva kommandon. 516 00:21:11,410 --> 00:21:13,060 Så detta är faktiskt påminner om vad datorer 517 00:21:13,060 --> 00:21:15,100 brukade vara innan grafiskt användargränssnitt 518 00:21:15,100 --> 00:21:16,710 gränssnitt, GUI, kom. 519 00:21:16,710 --> 00:21:19,200 Nu i Windows, har du en liknande mekanism i form 520 00:21:19,200 --> 00:21:20,130 av kommandotolken. 521 00:21:20,130 --> 00:21:23,430 >> Men vad jag ska göra här är att öppna upp, låt oss säga, 522 00:21:23,430 --> 00:21:26,580 Textredigerare igen, så samma program vi använder för 523 00:21:26,580 --> 00:21:28,870 pseudokod för en stund sedan, och jag ska gå vidare och 524 00:21:28,870 --> 00:21:30,080 skriva min första programmet. 525 00:21:30,080 --> 00:21:34,030 Inkludera stdio.h, vad det nu betyder, int main 526 00:21:34,030 --> 00:21:36,880 ogiltigt, vad det nu betyder, och sedan i mitten här, 527 00:21:36,880 --> 00:21:40,560 printf ("hej, värld."). Och stäng sedan citat, 528 00:21:40,560 --> 00:21:42,340 Stäng paren, semikolon. 529 00:21:42,340 --> 00:21:44,460 Nu ska jag gå vidare och bara slå kommando-S. Jag ska 530 00:21:44,460 --> 00:21:47,650 att gå vidare och spara det som hej.c så konventionen i 531 00:21:47,650 --> 00:21:50,530 världen av C programmering är namnet på filen prick C. 532 00:21:50,530 --> 00:21:52,880 Jag ska bara sätta i John Harvard hemkatalog, 533 00:21:52,880 --> 00:21:56,370 Här klickar du på Spara och nu ska jag gå över till denna 534 00:21:56,370 --> 00:21:59,110 terminalfönster, som återigen är svart och vitt snabb 535 00:21:59,110 --> 00:22:00,860 där jag kan utföra kommandon. 536 00:22:00,860 --> 00:22:04,550 >> Jag kan köra program genom att skriva deras namn, inte av 537 00:22:04,550 --> 00:22:06,710 dubbelklicka på ikoner i vanlig mening. 538 00:22:06,710 --> 00:22:10,590 Men saken är om C är att ett språk som C 1. 539 00:22:10,590 --> 00:22:13,150 kommer i denna form, kallas något källkod. 540 00:22:13,150 --> 00:22:15,400 Något som ser lite ut som engelska men är 541 00:22:15,400 --> 00:22:17,980 definitivt mindre som engelska än Josefs pseudokod en 542 00:22:17,980 --> 00:22:18,930 stund sedan. 543 00:22:18,930 --> 00:22:20,560 Det är lite mer svårbegripliga. 544 00:22:20,560 --> 00:22:22,830 Det verkar följa vissa mönster och regler. 545 00:22:22,830 --> 00:22:25,300 Det faktum att jag har klammerparenteser, semikolon, citat, 546 00:22:25,300 --> 00:22:28,240 vinkel hängslen, känns som en dator kom med detta 547 00:22:28,240 --> 00:22:29,250 typ av språk. 548 00:22:29,250 --> 00:22:32,010 Men om jag går nu, denna terminalfönster, kan jag köra en 549 00:22:32,010 --> 00:22:35,250 kommando som kommer att konvertera källkod är 550 00:22:35,250 --> 00:22:36,610 något som kallas objektkod. 551 00:22:36,610 --> 00:22:39,690 Det kommer att konvertera engelska-liknande syntax nollor 552 00:22:39,690 --> 00:22:41,760 och sådana, samma sorters nollor och ettor vi 553 00:22:41,760 --> 00:22:42,820 talade om onsdag. 554 00:22:42,820 --> 00:22:44,810 Nu ska jag köra ett kommando som heter klang. 555 00:22:44,810 --> 00:22:47,750 Mer om detta i de kommande veckorna, men det är ett program med 556 00:22:47,750 --> 00:22:52,330 som jag kan konvertera hej.c till en massa 557 00:22:52,330 --> 00:22:53,640 av nollor och ettor. 558 00:22:53,640 --> 00:22:54,950 >> Nu har jag köra det här kommandot. 559 00:22:54,950 --> 00:22:57,940 Jag har rymt klang, och då sa jag köra själv på den här filen 560 00:22:57,940 --> 00:23:00,630 heter hej.c, som jag skapade nyss, och 561 00:23:00,630 --> 00:23:02,090 ingenting verkar hända. 562 00:23:02,090 --> 00:23:05,550 Men ja, om jag petade runt min hemkatalog, skulle jag se 563 00:23:05,550 --> 00:23:09,620 att detta dumt namn programmet a.out finns nu. 564 00:23:09,620 --> 00:23:12,250 Detta är bara standardnamnet för ett program när du skriver i 565 00:23:12,250 --> 00:23:15,140 C. Vi kan åsidosätta detta så småningom, men a.out är 566 00:23:15,140 --> 00:23:18,340 namnet på programmet jag konverterade bara till nollor och ettor. 567 00:23:18,340 --> 00:23:21,490 Och nu när det är nollor och ettor, min Mac, i detta fall, eller 568 00:23:21,490 --> 00:23:24,670 din Windows-dator kan förstå dessa bitar, de 569 00:23:24,670 --> 00:23:25,410 nollor och ettor. 570 00:23:25,410 --> 00:23:29,130 Och så när jag slog in, ser jag "hej, världen!" 571 00:23:29,130 --> 00:23:31,270 >> Men det är lite buggig. 572 00:23:31,270 --> 00:23:34,110 Jag har inte riktigt säga "hej, värld: luft: -! Jharvard." Luft är 573 00:23:34,110 --> 00:23:35,020 namnet på min dator. 574 00:23:35,020 --> 00:23:37,730 Jharvard är namnet på kontot, så vad gjorde jag klart 575 00:23:37,730 --> 00:23:41,070 utelämna från programmet? 576 00:23:41,070 --> 00:23:42,480 Något slags radbrytning. 577 00:23:42,480 --> 00:23:45,150 Jag träffade inte motsvarande Enter eller vagnretur, 578 00:23:45,150 --> 00:23:47,760 och detta är återigen ett bevis på det faktum att datorer kan 579 00:23:47,760 --> 00:23:49,800 bara gör vad du säger till dem att göra. 580 00:23:49,800 --> 00:23:52,400 Och det faktum att jag inte tala om för datorn att flytta 581 00:23:52,400 --> 00:23:53,860 markören till nästa rad - 582 00:23:53,860 --> 00:23:55,200 Tja, är det verkligen inte kommer att bara göra det 583 00:23:55,200 --> 00:23:56,750 övermodigt för mig. 584 00:23:56,750 --> 00:24:00,860 Så om jag går tillbaka till mitt program, och jag säger \ n - 585 00:24:00,860 --> 00:24:03,180 Så \ n, som vi snart kommer att se, är vägen för 586 00:24:03,180 --> 00:24:06,910 representerar konstiga saker som nya linje karaktärer, saker 587 00:24:06,910 --> 00:24:08,840 som annars skulle vara resultatet av 588 00:24:08,840 --> 00:24:09,940 trycka Enter. 589 00:24:09,940 --> 00:24:11,730 Men nu, vet bara att trycka på Enter skulle 590 00:24:11,730 --> 00:24:14,170 bara göra vår kod ser udda, så världen bestämde, vet du 591 00:24:14,170 --> 00:24:16,580 vad, för att hålla saker och ting vackrare, för att hålla den på en rad, låt oss 592 00:24:16,580 --> 00:24:19,070 bara säga \ n representerar en ny rad. 593 00:24:19,070 --> 00:24:22,260 Låt mig spara om min fil, gå tillbaka till terminalfönstret, och 594 00:24:22,260 --> 00:24:25,290 repris a.out, Enter. 595 00:24:25,290 --> 00:24:28,374 Fortfarande buggig, men varför? 596 00:24:28,374 --> 00:24:29,750 >> PUBLIK: [OHÖRBAR] 597 00:24:29,750 --> 00:24:31,540 DAVID MALAN: Ja, så jag måste kompilera det. 598 00:24:31,540 --> 00:24:34,610 Så för att kompilera ett program betyder bara konvertera den från källan 599 00:24:34,610 --> 00:24:37,660 kod objektkod, källkoden till nollor och ettor. 600 00:24:37,660 --> 00:24:40,830 Nu har det faktum att jag slog Spara i Textredigerare inte 601 00:24:40,830 --> 00:24:43,450 bär på dessa nollor och ettor, eftersom jag först behöver 602 00:24:43,450 --> 00:24:48,260 berätta klang hej, jag har ändrat de rader kod, 603 00:24:48,260 --> 00:24:49,040 källkod. 604 00:24:49,040 --> 00:24:51,010 Du behöver att förnya a.out. 605 00:24:51,010 --> 00:24:52,990 Ingenting verkar ha hänt, men i en dator, 606 00:24:52,990 --> 00:24:55,820 på kommandoraden, så att säga, när ingenting händer, 607 00:24:55,820 --> 00:24:57,510 det betyder oftast allt är bra. 608 00:24:57,510 --> 00:24:59,040 När något händer, betyder det 609 00:24:59,040 --> 00:25:00,420 Ni ställt till det, i allmänhet. 610 00:25:00,420 --> 00:25:04,020 >> Så låt oss nu gå till a.out, ja nu har jag "hej, 611 00:25:04,020 --> 00:25:04,440 värld. " 612 00:25:04,440 --> 00:25:05,990 Och nu, hur dessa nollor och ettor? 613 00:25:05,990 --> 00:25:07,520 Om det i själva verket är de? 614 00:25:07,520 --> 00:25:10,710 Jag kan inte riktigt bara typ av säcken runt mycket 615 00:25:10,710 --> 00:25:11,210 effektivt. 616 00:25:11,210 --> 00:25:12,650 Låt mig öppna Textredigeraren. 617 00:25:12,650 --> 00:25:14,060 Här är a.out. 618 00:25:14,060 --> 00:25:17,390 Låt mig gå vidare och öppna, och det är tydligen vad min 619 00:25:17,390 --> 00:25:19,080 Programmet ser ut. 620 00:25:19,080 --> 00:25:21,570 Så jag har öppnat, inte hej.c, men a.out. 621 00:25:21,570 --> 00:25:23,960 Men detta är egentligen inte vad mitt program egentligen är. 622 00:25:23,960 --> 00:25:26,450 Detta är naturligtvis något slags alfabetiska tecken. 623 00:25:26,450 --> 00:25:28,670 Jag ser inga nollor och ettor, men detta är 624 00:25:28,670 --> 00:25:30,780 eftersom a.out är ett program. 625 00:25:30,780 --> 00:25:33,540 Nollor och ettor - men Textredigeraren, som namnet antyder, är det 626 00:25:33,540 --> 00:25:37,130 precis som Anteckningar i Windows är bara en textredigerare, så det är 627 00:25:37,130 --> 00:25:39,730 förvirrande alla dessa nollor och ettor som 628 00:25:39,730 --> 00:25:41,870 om de vore, vad? 629 00:25:41,870 --> 00:25:43,380 ASCII-tecken. 630 00:25:43,380 --> 00:25:45,020 >> Så minns på onsdag, kom vi bara upp med detta 631 00:25:45,020 --> 00:25:48,740 godtycklig kartläggning av siffror, eller bitar, för bokstäverna i 632 00:25:48,740 --> 00:25:51,690 alfabetet och symboler skiljetecken och liknande. 633 00:25:51,690 --> 00:25:54,920 Så Textredigerare, att det är en textredigerare som misstolkar 634 00:25:54,920 --> 00:25:57,270 de mönster av ettor och nollor som är tänkta att vara 635 00:25:57,270 --> 00:25:59,990 utskrift ord, som "Hej, världen." Det är att visa dem 636 00:25:59,990 --> 00:26:02,150 som ASCII, och det är därför det ser lite rörigt. 637 00:26:02,150 --> 00:26:04,910 Nu finns det några inslag av korrekthet i här. 638 00:26:04,910 --> 00:26:08,090 Märka om jag lyfta, det finns en antydan till faktiskt "Hej, 639 00:26:08,090 --> 00:26:10,810 värld ", så någonstans i programmet är 640 00:26:10,810 --> 00:26:12,120 meningen jag skrev. 641 00:26:12,120 --> 00:26:14,610 Men låt oss gå vidare och nu ser med ett annat program. 642 00:26:14,610 --> 00:26:17,420 Detta är inte något vi kommer att använda så ofta, men det också kommer med 643 00:26:17,420 --> 00:26:19,970 en Mac och kommer att vara inne i CS50 apparaten. 644 00:26:19,970 --> 00:26:23,940 Låt mig gå vidare och öppna med ett program som heter XXD. 645 00:26:23,940 --> 00:26:26,530 >> Tillbaka i dag, var de flesta program som heter ganska kryptiskt, 646 00:26:26,530 --> 00:26:28,200 och så trenden fortsätter. 647 00:26:28,200 --> 00:26:31,160 Men-b betyder spotta programmet ut som binär. 648 00:26:31,160 --> 00:26:32,330 Kör inte det. 649 00:26:32,330 --> 00:26:35,770 Visa det för mig som nollor och ettor, och det är C 650 00:26:35,770 --> 00:26:37,190 programmera vi bara skrev. 651 00:26:37,190 --> 00:26:39,920 Nu har jag, som en mänsklig här, jag har ärligt talat ingen aning om vad 652 00:26:39,920 --> 00:26:42,230 dessa olika mönster av nollor och ettor representerar. 653 00:26:42,230 --> 00:26:45,320 Tillbaka i dag, jag med mina hålkort eller liknande, skulle 654 00:26:45,320 --> 00:26:48,080 faktiskt måste se upp vad dessa olika mönster för 655 00:26:48,080 --> 00:26:51,560 01111000, faktiskt representerar. 656 00:26:51,560 --> 00:26:54,390 Eller ännu värre, skulle jag behöva göra stansning eller skapande 657 00:26:54,390 --> 00:26:56,130 av dessa mönster av nollor och ettor. 658 00:26:56,130 --> 00:27:00,410 Men nu, ta på tron ​​att en CPU, Intel Inside, så 659 00:27:00,410 --> 00:27:03,440 att tala, inuti alla våra datorer i dessa dagar, vet 660 00:27:03,440 --> 00:27:05,100 hur man ska tolka dessa nollor och ettor. 661 00:27:05,100 --> 00:27:07,010 Och vissa nollor och ettor betyder tryck. 662 00:27:07,010 --> 00:27:09,040 Vissa nollor och ettor innebär spela ett ljud. 663 00:27:09,040 --> 00:27:13,630 Vissa nollor och ettor betyder ta indata från ett tangentbord. 664 00:27:13,630 --> 00:27:15,960 Det finns alla möjliga olika mönster, men vi tack och lov, 665 00:27:15,960 --> 00:27:19,680 som människor, bara i allmänhet behöver oroa programmering 666 00:27:19,680 --> 00:27:21,270 detta ganska högre nivå. 667 00:27:21,270 --> 00:27:24,320 Och i andra CS klasser kan du gräva ner djupare och titta 668 00:27:24,320 --> 00:27:26,820 på saker som de nollor och ettor, eller ännu 669 00:27:26,820 --> 00:27:28,000 andra saker fortfarande. 670 00:27:28,000 --> 00:27:29,210 >> Så nu ska vi omvandla detta. 671 00:27:29,210 --> 00:27:32,550 Låt oss gå mycket snabbt bort från C och flytta till något 672 00:27:32,550 --> 00:27:36,390 lite mer tröstande, lite mer spännande, eftersom 673 00:27:36,390 --> 00:27:39,340 vi kan få tillbaka våra animationer och ljud och liknande som 674 00:27:39,340 --> 00:27:40,940 tydligt undgått oss i detta 675 00:27:40,940 --> 00:27:42,480 ganska primitiv gränssnitt. 676 00:27:42,480 --> 00:27:46,430 Så detta samma program i C kan representeras nu i detta 677 00:27:46,430 --> 00:27:50,060 programmeringsspråk som kallas Scratch enligt följande. 678 00:27:50,060 --> 00:27:54,230 Detta motsvarar detta hallå världen program skrivet i 679 00:27:54,230 --> 00:27:57,370 denna pusselbit stil språk kallas Scratch. 680 00:27:57,370 --> 00:28:00,600 Så låt mig gå vidare och öppna upp denna mycket program. 681 00:28:00,600 --> 00:28:01,850 Det åter kallas Scratch. 682 00:28:01,850 --> 00:28:03,880 Det är fritt tillgängliga, och det är samma sak som vi 683 00:28:03,880 --> 00:28:05,120 igång idag på. 684 00:28:05,120 --> 00:28:07,790 >> Så detta är här Scratch, och det är delas upp i ett fåtal 685 00:28:07,790 --> 00:28:09,700 olika delar. 686 00:28:09,700 --> 00:28:12,690 På högst upp till höger, har vi sk fas, och 687 00:28:12,690 --> 00:28:13,670 faktiskt, det är där kakorna 688 00:28:13,670 --> 00:28:15,440 utförs bara lite sedan. 689 00:28:15,440 --> 00:28:19,660 Och på detta stadium är saker kallas sprites, tecken eller 690 00:28:19,660 --> 00:28:21,030 föremål eller enheter. 691 00:28:21,030 --> 00:28:23,320 Det spelar egentligen ingen roll hur du tänker på dem, men de 692 00:28:23,320 --> 00:28:26,740 är programmerbara, rörliga ting, och i detta fall, detta 693 00:28:26,740 --> 00:28:30,730 program som våra studenter skrev har ett par pepparkaka 694 00:28:30,730 --> 00:28:32,990 kakor, ett par cirkulära kakor, en hel massa 695 00:28:32,990 --> 00:28:35,430 hjärtan, en hel massa glasögon. 696 00:28:38,170 --> 00:28:42,420 På grund av detta, är han eller hon kan programmera varje av dessa 697 00:28:42,420 --> 00:28:44,720 enskilda tecken separat. 698 00:28:44,720 --> 00:28:46,480 >> Nu vad betyder det att programmera dessa tecken? 699 00:28:46,480 --> 00:28:49,440 Nåväl, låt mig gå vidare och klicka på denna vänster cookien 700 00:28:49,440 --> 00:28:51,830 och bläddra över till det övre vänstra här. 701 00:28:51,830 --> 00:28:53,670 I den övre vänstra min skärm nu är det 702 00:28:53,670 --> 00:28:55,280 så kallade skript området. 703 00:28:55,280 --> 00:28:58,790 Detta är en slags oskrivet blad inledningsvis på vilken jag kan 704 00:28:58,790 --> 00:29:01,540 dra och släpp pusselbitar som, uppriktigt sagt, gör 705 00:29:01,540 --> 00:29:03,020 exakt vad de säger. 706 00:29:03,020 --> 00:29:05,820 Längst upp på denna bunt pusselbitar är ordet 707 00:29:05,820 --> 00:29:09,340 När Grön Flagg klickning, och om du inte märker innan, 708 00:29:09,340 --> 00:29:12,300 hur jag började att cookies låten klicka, bokstavligen, 709 00:29:12,300 --> 00:29:13,320 en grön flagga. 710 00:29:13,320 --> 00:29:16,590 Så att pusselbit uppe till vänster där medel när 711 00:29:16,590 --> 00:29:19,780 mänskliga klick den gröna flaggan, fortsatte att göra 712 00:29:19,780 --> 00:29:21,110 följande saker. 713 00:29:21,110 --> 00:29:23,330 >> Nu gjorde vad de cookies fortsätta att göra? 714 00:29:23,330 --> 00:29:25,810 Jag vet inte riktigt hur man ska tolka detta ännu, men 715 00:29:25,810 --> 00:29:29,220 Cookien tydligen satt sitt spår till noll, då det väntade 716 00:29:29,220 --> 00:29:31,740 tre sekunder, sedan bytte grupp till en, då det 717 00:29:31,740 --> 00:29:33,590 väntade en sekund, sedan bytte 718 00:29:33,590 --> 00:29:35,100 spår tillbaka till en. 719 00:29:35,100 --> 00:29:37,373 Och då detta ser faktiskt ut som en bit av en bugg, bör inte 720 00:29:37,373 --> 00:29:39,440 måste ändra sitt spår och om igen om det inte är 721 00:29:39,440 --> 00:29:43,380 ändras någon annanstans, men denna serie av steg är vad som är 722 00:29:43,380 --> 00:29:46,800 dikterar beteende denna kaka. 723 00:29:46,800 --> 00:29:49,180 Så låt oss faktiskt bläddra tillbaka och inte titta på något 724 00:29:49,180 --> 00:29:50,430 ganska så komplicerad än. 725 00:29:50,430 --> 00:29:52,260 Låt mig gå vidare och gå till Arkiv, Nytt, 726 00:29:52,260 --> 00:29:53,560 och få en kula. 727 00:29:53,560 --> 00:29:56,590 >> Så nu har jag verkligen ett tomt skript område, en tom scen, 728 00:29:56,590 --> 00:29:59,380 med vår standard sprite Scratch och längst upp till vänster 729 00:29:59,380 --> 00:30:01,670 på min skärm har jag pallen i alla sina 730 00:30:01,670 --> 00:30:03,400 tillgängliga pusselbitar. 731 00:30:03,400 --> 00:30:06,300 Och vi kommer inte att gå igenom nästan att många av dessa saker 732 00:30:06,300 --> 00:30:09,470 dag eftersom, återigen, de flesta är självförklarande, men vi kommer 733 00:30:09,470 --> 00:30:12,370 försöka kategorisera dem och påpeka likheterna 734 00:30:12,370 --> 00:30:15,380 med dessa framtida språk som vi kommer att dyka. 735 00:30:15,380 --> 00:30:19,180 Och uppe till vänster här är den första När Grön Flagg klickning, 736 00:30:19,180 --> 00:30:22,170 så låt mig dra det här, zooma ut lite. 737 00:30:22,170 --> 00:30:25,780 Och om jag klickar på den gröna flaggan, händer ingenting verkligen eftersom 738 00:30:25,780 --> 00:30:29,360 Jag har inte fäst någon logik, eventuella uttalanden så att säga, att 739 00:30:29,360 --> 00:30:31,040 den gröna flaggan, så låt mig gå upp till 740 00:30:31,040 --> 00:30:32,500 kategorier där borta. 741 00:30:32,500 --> 00:30:34,840 Jag är för närvarande i Control kategorin. 742 00:30:34,840 --> 00:30:37,630 Jag stället att gå ner till utseende kategori och 743 00:30:37,630 --> 00:30:39,970 Det finns en hel massa saker här som säger Säg, 744 00:30:39,970 --> 00:30:43,110 Tänk, ändra färg, Switch Kostym. 745 00:30:43,110 --> 00:30:44,860 >> Så du kan göra dumma saker med kostymer och 746 00:30:44,860 --> 00:30:45,870 ljud och liknande. 747 00:30:45,870 --> 00:30:49,970 Låt mig gå vidare och bara säga Säg, och nu märker när jag drar 748 00:30:49,970 --> 00:30:52,940 och släppa denna pusselbit, det kommer att vilja låsa 749 00:30:52,940 --> 00:30:55,010 till motsvarande form. 750 00:30:55,010 --> 00:30:58,020 Så när jag går vidare och släppa min mus, låsa de 751 00:30:58,020 --> 00:31:01,770 tillsammans, och nu om jag går hit och klicka på den gröna flaggan, 752 00:31:01,770 --> 00:31:05,910 katten säger faktiskt hej eftersom det är vad som finns inuti 753 00:31:05,910 --> 00:31:06,980 detta vita rutan. 754 00:31:06,980 --> 00:31:08,900 Vi kommer snart att se att detta vita rutan är vad som kallas en 755 00:31:08,900 --> 00:31:10,250 argument eller en parameter. 756 00:31:10,250 --> 00:31:12,560 Det är ett sätt att förändra beteendet hos, i detta fall, en 757 00:31:12,560 --> 00:31:15,070 pusselbit, men om jag vill säga exakt vad jag sa 758 00:31:15,070 --> 00:31:18,610 tidigare, säga hej, värld, kan jag gå nu tillbaka hit, 759 00:31:18,610 --> 00:31:21,990 Klicka spela och "Hello, world" är vad som är sagt. 760 00:31:21,990 --> 00:31:24,340 >> Så vi bokstavligen programmering nu. 761 00:31:24,340 --> 00:31:27,540 Det är inte så övertygande av ett program, men åtminstone 762 00:31:27,540 --> 00:31:30,140 det är lite mer övertygande än något som ser på 763 00:31:30,140 --> 00:31:31,300 första anblicken, så här. 764 00:31:31,300 --> 00:31:34,190 Och vi kan mycket snabbt få alla mer uttrycksfullt 765 00:31:34,190 --> 00:31:36,600 eftersom Scratch, liksom på andra språk, det finns allt 766 00:31:36,600 --> 00:31:40,010 typer av uttalanden, inte bara säga eller skriva något, men 767 00:31:40,010 --> 00:31:42,650 Du kan göra saker som väntar, som vi bara såg med 768 00:31:42,650 --> 00:31:44,240 cookie, visst antal sekunder. 769 00:31:44,240 --> 00:31:46,440 Du kan spela upp ljud i omgivningen av Scratch bara 770 00:31:46,440 --> 00:31:49,050 som du kan i en normal dator programmerad uppspelning ljud. 771 00:31:49,050 --> 00:31:52,440 Du kan kontrollera vad som kallas booleska uttryck. 772 00:31:52,440 --> 00:31:55,630 Så nu, låt oss börja att lägga till vår verktygslåda några terminologi 773 00:31:55,630 --> 00:31:58,840 som faktiskt avser exempel som Josef och jag gjorde 774 00:31:58,840 --> 00:32:00,080 här med strumpor. 775 00:32:00,080 --> 00:32:03,040 Så uttalanden är bara uttalanden faktiskt. 776 00:32:03,040 --> 00:32:04,160 Gör så här. 777 00:32:04,160 --> 00:32:07,370 Ett direktiv för spriten, eller jag människan, att göra något. 778 00:32:07,370 --> 00:32:10,420 Ett booleskt uttryck är något som har ett värde, en 779 00:32:10,420 --> 00:32:14,580 sk sanning värde, det är antingen en nolla eller en, felaktiga eller 780 00:32:14,580 --> 00:32:17,890 sant, av eller på, Nej eller Ja. 781 00:32:17,890 --> 00:32:19,730 Spelar egentligen ingen roll hur du tänker på det, men det är en 782 00:32:19,730 --> 00:32:20,700 binär tillstånd. 783 00:32:20,700 --> 00:32:22,610 Som Nate diskuteras i onsdagens video, två 784 00:32:22,610 --> 00:32:23,570 olika saker. 785 00:32:23,570 --> 00:32:25,740 >> Så i Scratch, booleska uttryck råkar titta 786 00:32:25,740 --> 00:32:28,910 som dessa blå föremål här, och i detta fall, frågan 787 00:32:28,910 --> 00:32:30,960 märke innebär att du ställer en fråga. 788 00:32:30,960 --> 00:32:34,250 Är katten eller spriten, röra muspekaren? 789 00:32:34,250 --> 00:32:36,580 Så detta är bara ett exempel på en repa block som händer 790 00:32:36,580 --> 00:32:39,950 att tillåta oss att kontrollera ja eller nej, är musen vidrör 791 00:32:39,950 --> 00:32:40,790 sprite på skärmen? 792 00:32:40,790 --> 00:32:42,840 Och detta kan vara användbart om du verkligen vill göra saker 793 00:32:42,840 --> 00:32:43,820 med musen. 794 00:32:43,820 --> 00:32:46,470 Förutom booleska uttryck har vi saker 795 00:32:46,470 --> 00:32:49,110 Liksom är musen ner, så att du kan upptäcka denna typ av 796 00:32:49,110 --> 00:32:50,200 fråga också. 797 00:32:50,200 --> 00:32:52,590 Vi kan göra matematik om du verkligen vill, och det finns 798 00:32:52,590 --> 00:32:55,170 faktiskt mer övertygande användningsområden för detta än bara ren om 799 00:32:55,170 --> 00:32:56,400 aritmetik, som vi får se. 800 00:32:56,400 --> 00:32:59,690 Pseudo slumpmässighet och göra ditt program verkar tro 801 00:32:59,690 --> 00:33:03,490 eller bete sig annorlunda baserat på några till synes slumpmässiga värden, 802 00:33:03,490 --> 00:33:06,610 och sedan har vi saker som booleska uttryck som AND. 803 00:33:06,610 --> 00:33:08,830 Så om du verkligen vill kontrollera två värden, vi ser i 804 00:33:08,830 --> 00:33:11,110 Scratch att vi faktiskt kan testa om det är 805 00:33:11,110 --> 00:33:13,190 sant och det är sant. 806 00:33:13,190 --> 00:33:15,300 Till exempel i fallet med mina strumpor, kunde jag har på 807 00:33:15,300 --> 00:33:19,045 slutet ställde frågan om de lämnas strumpa är på och höger strumpa 808 00:33:19,045 --> 00:33:20,610 är på, avsluta. 809 00:33:20,610 --> 00:33:22,710 Du är klar för dagen, så det skulle vara en 810 00:33:22,710 --> 00:33:24,300 möjlighet för det. 811 00:33:24,300 --> 00:33:27,740 >> Så låt oss gå vidare och försöka pussla några av dessa tillsammans 812 00:33:27,740 --> 00:33:31,570 och gå in i ett par exempel mer 813 00:33:31,570 --> 00:33:32,610 övertygande än denna. 814 00:33:32,610 --> 00:33:35,770 Så låt mig gå vidare här och öppna upp några exempel 815 00:33:35,770 --> 00:33:38,350 som alltid kommer att finnas på kursens hemsida också, och 816 00:33:38,350 --> 00:33:39,870 öppna hello2. 817 00:33:39,870 --> 00:33:42,910 Så hello2 här har vi ett program som gör några 818 00:33:42,910 --> 00:33:46,290 saker, men det är inte att göra det så effektivt som vi skulle kunna. 819 00:33:46,290 --> 00:33:48,900 Så här står det "Hello, world" i en sekund och sedan väntar 820 00:33:48,900 --> 00:33:49,450 för en sekund. 821 00:33:49,450 --> 00:33:51,720 Och sedan gör det igen, och sedan gör det igen. 822 00:33:51,720 --> 00:33:55,530 Så om jag klickar på den gröna flaggan, Scratch säger "Hej, världen. 823 00:33:55,530 --> 00:33:57,160 Hej, världen. 824 00:33:57,160 --> 00:34:00,080 Hallå, världen. "Och detta är naturligtvis kandidat nu 825 00:34:00,080 --> 00:34:00,860 förbättring. 826 00:34:00,860 --> 00:34:03,070 >> Vad är marginell förbättring, förhoppningsvis, kan vi 827 00:34:03,070 --> 00:34:07,610 nu gör om Scratch stöder tanken? 828 00:34:07,610 --> 00:34:08,310 Någon form av slingan. 829 00:34:08,310 --> 00:34:10,960 Någon form av upprepning, nu skulle vara trevligt, så låt mig 830 00:34:10,960 --> 00:34:11,920 faktiskt prova det. 831 00:34:11,920 --> 00:34:13,870 Låt mig faktiskt gå och flytta det. 832 00:34:13,870 --> 00:34:16,449 Så varsel kan ta bort block så lätt som du kan lägga till 833 00:34:16,449 --> 00:34:17,420 bifoga dem. 834 00:34:17,420 --> 00:34:20,730 Låt mig gå under kontroll, rulla ner här, och faktiskt, 835 00:34:20,730 --> 00:34:24,000 Det är detta pusselbit här, Upprepa och för evigt och 836 00:34:24,000 --> 00:34:24,870 Evigt om. 837 00:34:24,870 --> 00:34:28,500 Så det finns ett antal sätt att uttrycka looping konstruktioner 838 00:34:28,500 --> 00:34:29,340 i Scratch. 839 00:34:29,340 --> 00:34:31,730 Det enda jag vill förmodligen här är inte för evigt eftersom jag bara 840 00:34:31,730 --> 00:34:34,639 vill att detta ska hända tre gånger, men förmodligen Upprepa. 841 00:34:34,639 --> 00:34:38,449 Så låt mig dra Upprepa hit, dra och släpp den, och 842 00:34:38,449 --> 00:34:42,530 nu i stället för att säga "Hej, världen" tre separata gånger, 843 00:34:42,530 --> 00:34:44,230 Låt mig dra denna pusselbit här. 844 00:34:44,230 --> 00:34:46,610 Och även om det inte verkar passa, är programmet smarta 845 00:34:46,610 --> 00:34:48,920 nog att inse det kommer att växa för att fylla, så det är den 846 00:34:48,920 --> 00:34:51,270 former som materia och inte den absoluta storleken. 847 00:34:51,270 --> 00:34:54,030 Låt mig ändra upprepning till tre, och nu vill jag gå 848 00:34:54,030 --> 00:34:56,560 framåt och dra vänta en sekund där liksom. 849 00:34:56,560 --> 00:34:59,220 Det kommer att knäppa i också, och så nu ska jag dra 850 00:34:59,220 --> 00:35:01,370 dessa killar hit och bara kasta bort dem eftersom jag 851 00:35:01,370 --> 00:35:02,710 inte behöver dem längre. 852 00:35:02,710 --> 00:35:05,920 Låt mig zooma ut och klicka på den gröna flaggan nu, och vi har 853 00:35:05,920 --> 00:35:09,600 samma program men som jag förutspådde tidigare, bättre 854 00:35:09,600 --> 00:35:12,200 utformade för att ni kan föreställa er hur illa det här programmet 855 00:35:12,200 --> 00:35:14,410 skulle få, säkert estetiskt, om du var tvungen att 856 00:35:14,410 --> 00:35:16,640 börja kopiera och klistra, kopiera och klistra in, eller 857 00:35:16,640 --> 00:35:20,020 dra och släppa samma darn saker om och om igen. 858 00:35:20,020 --> 00:35:22,260 >> Nu bara säga saker på skärmen, skriva ut till 859 00:35:22,260 --> 00:35:25,350 skärmen, verkligen allt inte så spännande, så låt oss öppna en 860 00:35:25,350 --> 00:35:26,580 3. varians här. 861 00:35:26,580 --> 00:35:29,810 Och nu, som ni ser, det här snabbt få irriterande - 862 00:35:29,810 --> 00:35:30,850 [MEOW] 863 00:35:30,850 --> 00:35:31,940 DAVID MALAN: - men det är också rätt söt. 864 00:35:31,940 --> 00:35:35,244 [MEOW] 865 00:35:35,244 --> 00:35:37,460 DAVID MALAN: Okej, så bättre, och vi kan verkligen använda det 866 00:35:37,460 --> 00:35:41,060 Samma övergång spaltning upp detta i en looping 867 00:35:41,060 --> 00:35:43,520 struktur, men låt oss göra det mer intressant ändå. 868 00:35:43,520 --> 00:35:47,480 >> Låt mig gå vidare och öppna upp kvart varians här, där jag 869 00:35:47,480 --> 00:35:50,020 ta saker ett steg längre. 870 00:35:50,020 --> 00:35:54,450 Så enligt detta, dum om detta är först 871 00:35:54,450 --> 00:35:58,530 blick, vad detta program kommer att göra? 872 00:35:58,530 --> 00:35:59,790 Det kommer att jamar gång. 873 00:35:59,790 --> 00:36:00,160 Varför? 874 00:36:00,160 --> 00:36:03,340 Tja, en är, såvitt jag vet, alltid mindre än två. 875 00:36:03,340 --> 00:36:04,890 Det finns ingen uppfattning av slumpmässighet här. 876 00:36:04,890 --> 00:36:07,240 Jag har bokstavligen hårdkodad en och två, men detta är ett 877 00:36:07,240 --> 00:36:10,370 exempel nu på att faktiskt använda ett booleskt uttryck. 878 00:36:10,370 --> 00:36:13,650 Mycket vill som Josef gjorde i sitt pseudokod, fördjupningen IF 879 00:36:13,650 --> 00:36:17,170 du hitta matchande strumpor gör följande, här har vi 880 00:36:17,170 --> 00:36:19,750 ett uttryck om man är mindre än två då - 881 00:36:19,750 --> 00:36:21,820 och i själva verket har vi även en liten bit av indrag, 882 00:36:21,820 --> 00:36:24,480 där den lila är något indragen till höger - 883 00:36:24,480 --> 00:36:26,600 Då du kommer att spela upp ljudet mjau. 884 00:36:26,600 --> 00:36:30,060 Nu, i detta fall, är att man alltid är mindre än två, så detta 885 00:36:30,060 --> 00:36:31,970 är typ av slöseri av ett tillstånd. 886 00:36:31,970 --> 00:36:34,890 Men vi kommer att kunna, som vi ska se, att ansluta andra saker i 887 00:36:34,890 --> 00:36:37,420 Dessa platshållare där ett och två nu är. 888 00:36:37,420 --> 00:36:41,340 Så låt oss nu gå vidare till exempel fem av dessa flera 889 00:36:41,340 --> 00:36:45,850 hellos och titta på vad det här programmet kommer att göra. 890 00:36:45,850 --> 00:36:48,710 >> Så nu, i en engelsk mening, hur det 891 00:36:48,710 --> 00:36:51,460 Programmet beter sig? 892 00:36:51,460 --> 00:36:52,950 PUBLIK: meows halva tiden. 893 00:36:52,950 --> 00:36:55,380 DAVID MALAN: Mjau har hälften av tiden, så detta är ett sätt att 894 00:36:55,380 --> 00:36:56,700 förmedla en mycket enkel idé. 895 00:36:56,700 --> 00:36:59,400 Även om vi råkar använda vissa ojämlikheter här 896 00:36:59,400 --> 00:37:01,860 I vissa siffror, det är egentligen bara en programmatical 897 00:37:01,860 --> 00:37:09,490 sätt, ett exakt sätt, att säga om myntet kommer upp huvuden, gå 898 00:37:09,490 --> 00:37:10,270 framåt och jamar. 899 00:37:10,270 --> 00:37:13,540 Eller omvänt, om myntet kommer upp svansar, inte mjau. 900 00:37:13,540 --> 00:37:15,110 Och i detta fall, hur vi uttrycker det? 901 00:37:15,110 --> 00:37:17,950 Vi hämtar ett slumptal från 1 till 10, och om det 902 00:37:17,950 --> 00:37:21,110 nummer är mindre än 6, gå vidare och jamar. 903 00:37:21,110 --> 00:37:22,260 Och hur gick det in? 904 00:37:22,260 --> 00:37:24,620 Bra igen, märker bara att dra och släppa och 905 00:37:24,620 --> 00:37:26,190 Saker spärrarna på plats. 906 00:37:26,190 --> 00:37:28,020 >> Så nu ska vi se om denna slumpmässighet fungerar. 907 00:37:28,020 --> 00:37:29,845 Låt mig gå vidare och klicka på den gröna flaggan. 908 00:37:29,845 --> 00:37:31,120 [MEOW] 909 00:37:31,120 --> 00:37:32,000 DAVID MALAN: Okej. 910 00:37:32,000 --> 00:37:33,430 [MEOW] 911 00:37:33,430 --> 00:37:35,260 DAVID MALAN: Okej. 912 00:37:35,260 --> 00:37:38,510 Okej, bra, så vi fick huvuden, huvuden, svansar effektivt. 913 00:37:38,510 --> 00:37:39,295 Svansar. 914 00:37:39,295 --> 00:37:39,590 [MEOW] 915 00:37:39,590 --> 00:37:41,829 DAVID MALAN: Heads. 916 00:37:41,829 --> 00:37:43,220 [MEOW] 917 00:37:43,220 --> 00:37:44,040 DAVID MALAN: Utmärkt. 918 00:37:44,040 --> 00:37:46,220 Det är alltid besvärligt när bara statistiskt får du en dålig 919 00:37:46,220 --> 00:37:48,510 springa, och det är alla huvuden, och programmet faktiskt inte 920 00:37:48,510 --> 00:37:49,230 arbete som du skulle hoppas. 921 00:37:49,230 --> 00:37:51,210 Men den här gången, det fungerade, och vi verkar ha, om vi gjorde 922 00:37:51,210 --> 00:37:53,830 detta ett oändligt antal gånger, 50% odds. 923 00:37:53,830 --> 00:37:56,950 Nu igen, inte så intressant, bara göra katter 924 00:37:56,950 --> 00:37:59,840 mjau, så låt oss se om vi inte kan gå detta lite längre 925 00:37:59,840 --> 00:38:01,820 här i version sex. 926 00:38:01,820 --> 00:38:05,620 Så nu har vi verkligen irriterande version - 927 00:38:05,620 --> 00:38:08,215 [Meows några sekunders] 928 00:38:08,215 --> 00:38:10,640 DAVID MALAN: - och detta är vad som kallas, allmänt som en 929 00:38:10,640 --> 00:38:11,670 oändlig loop. 930 00:38:11,670 --> 00:38:14,190 >> Så oändlig slinga i det här fallet känns dåligt. 931 00:38:14,190 --> 00:38:16,970 Det kommer definitivt att börja låta dåligt, men ändå oändligt 932 00:38:16,970 --> 00:38:18,740 slingor är inte alltid dåligt. 933 00:38:18,740 --> 00:38:20,910 Kan du komma på sammanhang i datorprogram där du skulle 934 00:38:20,910 --> 00:38:22,910 faktiskt vill ha en oändlig loop? 935 00:38:22,910 --> 00:38:23,691 Ja? 936 00:38:23,691 --> 00:38:26,520 PUBLIK: När du vill kontrollera ett villkor. 937 00:38:26,520 --> 00:38:28,240 DAVID MALAN: Okej, när du vill fortsätta att söka ett tillstånd? 938 00:38:28,240 --> 00:38:29,190 Som vad? 939 00:38:29,190 --> 00:38:30,440 PUBLIK: [OHÖRBAR] 940 00:38:36,060 --> 00:38:38,170 DAVID MALAN: Okej, bra, så om du hade några program, vissa 941 00:38:38,170 --> 00:38:40,440 typ av hemautomation sak, där du vill hela tiden 942 00:38:40,440 --> 00:38:41,980 bildskärm är något fallet. 943 00:38:41,980 --> 00:38:42,850 Är belysningen? 944 00:38:42,850 --> 00:38:45,020 Är belysningen på eftersom du kanske har en timer, och 945 00:38:45,020 --> 00:38:47,360 du vill att de ska gå ut, kan du behöva göra något 946 00:38:47,360 --> 00:38:48,290 och om igen. 947 00:38:48,290 --> 00:38:50,540 Och i själva verket talar om timers, som har någon av er 948 00:38:50,540 --> 00:38:53,100 klockor på datorn eller digitala klockor, det är en 949 00:38:53,100 --> 00:38:54,210 oändlig loop. 950 00:38:54,210 --> 00:38:56,980 Det fortsätter att uppdatera tiden eftersom det är ständigt 951 00:38:56,980 --> 00:38:59,750 kontroll och kontroll och kontroll har tid ändrats, 952 00:38:59,750 --> 00:39:01,000 och i så fall Herregud. 953 00:39:03,670 --> 00:39:04,740 Klockan har äntligen förändrats. 954 00:39:04,740 --> 00:39:07,020 Det behöver visa att värde för dig. 955 00:39:07,020 --> 00:39:10,880 Så medan de flesta av tiden oändliga slingor är ett misstag, 956 00:39:10,880 --> 00:39:13,950 eller åtminstone ett dåligt beslut konstruktion, ibland gör 957 00:39:13,950 --> 00:39:14,785 har sitt värde. 958 00:39:14,785 --> 00:39:18,170 >> Nåväl, låt oss gå vidare här hello7. 959 00:39:18,170 --> 00:39:20,410 Så nu kommer programmet att bli lite mer interaktiv. 960 00:39:20,410 --> 00:39:23,120 Låt mig zooma in här, och igen, det är vad som är bra 961 00:39:23,120 --> 00:39:23,640 om Scratch. 962 00:39:23,640 --> 00:39:26,760 Och vi kommer att använda den för att vara tydlig, Scratch, bara idag och i 963 00:39:26,760 --> 00:39:27,780 nästa veckas problem in. 964 00:39:27,780 --> 00:39:31,920 Men på måndag, dyka vi in ​​C. I detta program här, det gör det, 965 00:39:31,920 --> 00:39:33,190 evigt, följande. 966 00:39:33,190 --> 00:39:35,890 OM röra muspekaren - nu, vem 967 00:39:35,890 --> 00:39:36,420 sammanhang här? 968 00:39:36,420 --> 00:39:39,670 Tja, och märker att vem valt här nere på botten 969 00:39:39,670 --> 00:39:43,060 höger är katten, sprite en, så dessa skript, detta 970 00:39:43,060 --> 00:39:45,720 Programmet gäller för honom specifikt. 971 00:39:45,720 --> 00:39:48,950 Så om det katten vidrör muspekaren, så kommer 972 00:39:48,950 --> 00:39:51,350 att spela detta ner och vänta två sekunder och 973 00:39:51,350 --> 00:39:53,030 upprepa sedan annons nauseum. 974 00:39:53,030 --> 00:39:55,360 >> Så låt oss gå vidare och träffa spela. 975 00:39:55,360 --> 00:39:57,580 Ingenting händer, men om jag vill klappa 976 00:39:57,580 --> 00:39:59,310 katt nu kan jag helt enkelt. 977 00:39:59,310 --> 00:40:01,130 [MEOW] 978 00:40:01,130 --> 00:40:02,244 DAVID MALAN: Adorable. 979 00:40:02,244 --> 00:40:05,956 [MEOW] 980 00:40:05,956 --> 00:40:08,750 DAVID MALAN: Okej, mindre irriterande, men blir också tråkig, 981 00:40:08,750 --> 00:40:11,480 så låt oss gå vidare och se om vi inte kan injicera 982 00:40:11,480 --> 00:40:12,460 lite mer logik. 983 00:40:12,460 --> 00:40:14,300 Det var exempel sju. 984 00:40:14,300 --> 00:40:16,090 >> Här i exempel åtta, vi ska 985 00:40:16,090 --> 00:40:18,670 införa en ANNARS tillstånd. 986 00:40:18,670 --> 00:40:21,440 Så mycket som en bokstavlig vägskäl, där du kan gå 987 00:40:21,440 --> 00:40:24,260 vänster eller så kan du gå till höger, ett tillstånd i ett program 988 00:40:24,260 --> 00:40:28,120 språk som Scratch, eller som vi får se C kan tillåta dig att 989 00:40:28,120 --> 00:40:32,230 gå i en riktning eller en annan via en IF ELSE konstruera. 990 00:40:32,230 --> 00:40:35,160 Så bokstavligen OM röra muspekaren, detta 991 00:40:35,160 --> 00:40:38,680 kommer att spela vissa ljud, annars kommer att spela denna andra 992 00:40:38,680 --> 00:40:39,800 ljud, mjau. 993 00:40:39,800 --> 00:40:42,510 Nu, om du kan dra slutsatsen att namnet på dessa ljud kan du 994 00:40:42,510 --> 00:40:45,310 förmodligen gissa vad det här programmet är tänkt att trolla fram 995 00:40:45,310 --> 00:40:46,250 idén om. 996 00:40:46,250 --> 00:40:48,742 Denna katt jamar lyckligt. 997 00:40:48,742 --> 00:40:49,230 [MEOW] 998 00:40:49,230 --> 00:40:51,410 DAVID MALAN: Lyckligtvis, men inte 999 00:40:51,410 --> 00:40:52,926 ganska vilja att bli rörd. 1000 00:40:52,926 --> 00:40:54,550 [Vrålar] 1001 00:40:54,550 --> 00:40:57,500 DAVID MALAN: Så nu har vi en katt som kommer skrika på dig. 1002 00:40:57,500 --> 00:41:00,570 >> Okej, en sista exempel med katter här, och 1003 00:41:00,570 --> 00:41:02,920 låt oss öppen version nio av detta här. 1004 00:41:02,920 --> 00:41:06,190 Så nu har vi den näst irriterande ljud som jag kunde 1005 00:41:06,190 --> 00:41:11,630 hitta, så vi har en valross eller sjölejon här som kommer att 1006 00:41:11,630 --> 00:41:13,222 gör följande. 1007 00:41:13,222 --> 00:41:20,870 [SEAL BARK] 1008 00:41:20,870 --> 00:41:23,310 DAVID MALAN: Okej, så detta kommer att fortsätta tills du räkna ut hur 1009 00:41:23,310 --> 00:41:24,640 Programmet fungerar. 1010 00:41:24,640 --> 00:41:28,560 Så den här gången har detta djur två manus, och vad 1011 00:41:28,560 --> 00:41:31,050 intressant här är att dessa skript kommer att utföra 1012 00:41:31,050 --> 00:41:32,260 parallellt. 1013 00:41:32,260 --> 00:41:35,340 Så eftersom de båda börjar med en grön flagga klickade, 1014 00:41:35,340 --> 00:41:38,080 Det är som att gå ut så här, och båda programmen börjar visas den 1015 00:41:38,080 --> 00:41:41,370 gång även om de är looping evigt. 1016 00:41:41,370 --> 00:41:44,420 Så i den övre manus, jag har en viss logik. 1017 00:41:44,420 --> 00:41:49,275 Vilka funktioner ger upp det där? 1018 00:41:49,275 --> 00:41:50,740 [SEAL BARK] 1019 00:41:50,740 --> 00:41:51,670 PUBLIK: [OHÖRBAR] 1020 00:41:51,670 --> 00:41:53,295 DAVID MALAN: Om det är vad? 1021 00:41:53,295 --> 00:41:53,760 [SEAL BARK] 1022 00:41:53,760 --> 00:41:55,852 PUBLIK: Om avstängt noll, det kommer att fortsätta spela 1023 00:41:55,852 --> 00:41:58,410 ljuda. [SEAL BARK] 1024 00:41:58,410 --> 00:41:58,940 DAVID MALAN: Okej, bra. 1025 00:41:58,940 --> 00:42:01,960 Så OM avstängt, oavsett detta är, denna orange sak är noll, 1026 00:42:01,960 --> 00:42:05,370 Sedan spela sjölejon ljud och tänker "Åh, 1027 00:42:05,370 --> 00:42:06,770 Hej, "i två sekunder. 1028 00:42:06,770 --> 00:42:09,380 Nu vet jag inte vad avstängt är, men noll frammanar den 1029 00:42:09,380 --> 00:42:11,230 idén om falsk eller av. 1030 00:42:11,230 --> 00:42:14,490 Så om avstängt är falsk, så om inte är avstängd, 1031 00:42:14,490 --> 00:42:15,660 fortsätta spela ljudet. 1032 00:42:15,660 --> 00:42:17,350 Okej, hur ska vi stänga av denna sak? 1033 00:42:17,350 --> 00:42:19,310 >> Nåväl, låt oss titta på den andra skriptet nere. 1034 00:42:19,310 --> 00:42:22,130 Det andra skriptet säger satt dämpad till noll. 1035 00:42:22,130 --> 00:42:25,180 Notera det är också orange, så vad Scratch gör är det färger 1036 00:42:25,180 --> 00:42:27,400 block i samma nyans om det är typ 1037 00:42:27,400 --> 00:42:28,850 av logiskt relaterade. 1038 00:42:28,850 --> 00:42:32,850 Så lika dämpad uppe var orange, så dämpas här nere 1039 00:42:32,850 --> 00:42:34,060 nämns i orange blocket. 1040 00:42:34,060 --> 00:42:36,170 Men detta är en variabel uppdrag, så precis som i 1041 00:42:36,170 --> 00:42:39,170 algebra, du x och y och z, i programmering har du 1042 00:42:39,170 --> 00:42:41,440 variabler, men de är i allmänhet - 1043 00:42:41,440 --> 00:42:42,580 låt oss stanna upp en stund och figur hur 1044 00:42:42,580 --> 00:42:44,280 att stoppa denna skällande. 1045 00:42:44,280 --> 00:42:45,480 Hur gör jag det? 1046 00:42:45,480 --> 00:42:46,480 [SEAL BARK] 1047 00:42:46,480 --> 00:42:47,920 DAVID MALAN: Okej. 1048 00:42:47,920 --> 00:42:49,490 Det slutade. Okej. 1049 00:42:49,490 --> 00:42:52,230 >> Så precis som i algebra har variablerna x, y, och z, men i 1050 00:42:52,230 --> 00:42:55,260 programmering, med variabler som x, y och z är i allmänhet 1051 00:42:55,260 --> 00:42:57,330 ogillat eftersom de är inte alls uttrycksfull. 1052 00:42:57,330 --> 00:43:00,070 De har ingen semantisk innebörd som helst, så i de flesta 1053 00:43:00,070 --> 00:43:02,110 programmeringsspråk, kan variabler ha full 1054 00:43:02,110 --> 00:43:05,270 utvecklad namn eller ord eller fraser, gillar dämpad, säga 1055 00:43:05,270 --> 00:43:06,030 vad de gör. 1056 00:43:06,030 --> 00:43:09,380 Så denna andra skriptet också lyssnade alltid, och det sade 1057 00:43:09,380 --> 00:43:12,100 om nyckeln, tangenten Space är 1058 00:43:12,100 --> 00:43:13,370 trycks frågetecken. 1059 00:43:13,370 --> 00:43:16,300 Så det finns ett tillstånd med ett booleskt uttryck som är 1060 00:43:16,300 --> 00:43:19,010 kommer att svara på en fråga antingen sanningsenligt eller falskt, 1061 00:43:19,010 --> 00:43:22,880 så har jag inne i det om mellanslagstangenten trycks ned och 1062 00:43:22,880 --> 00:43:28,020 OM avstängt är noll, ställ dämpad till en, annan har dämpad till noll. 1063 00:43:28,020 --> 00:43:30,510 Så denna andra vägskäl, och märker hur jag har 1064 00:43:30,510 --> 00:43:33,500 kapslade de två om villkoren är ett sätt att kontrollera den 1065 00:43:33,500 --> 00:43:36,610 Space Bar tryckte för om så är fallet, jag antingen vill gå här 1066 00:43:36,610 --> 00:43:38,000 sätt eller så. 1067 00:43:38,000 --> 00:43:40,210 Och hur jag vända värdet av avstängt? 1068 00:43:40,210 --> 00:43:41,410 Jag måste kolla det noll? 1069 00:43:41,410 --> 00:43:45,890 Om så är fallet, gör det en, annars gör det noll till därför växla 1070 00:43:45,890 --> 00:43:47,670 de två stater. 1071 00:43:47,670 --> 00:43:50,030 >> Okej, så vi har sedan några av dessa grundläggande 1072 00:43:50,030 --> 00:43:50,540 konstruktioner. 1073 00:43:50,540 --> 00:43:52,810 Vi har booleska uttryck, och inse, även dessa är 1074 00:43:52,810 --> 00:43:54,050 inte så främmande. 1075 00:43:54,050 --> 00:43:56,730 I själva verket är här en snabb skärmdump av Harvard kursens CS50 1076 00:43:56,730 --> 00:43:59,740 shoppa verktyg och en webbplats där ute som har kryssrutor 1077 00:43:59,740 --> 00:44:02,420 och släpp nedskrivningar har verkligen, hela tiden, använt 1078 00:44:02,420 --> 00:44:03,430 Booleska uttryck. 1079 00:44:03,430 --> 00:44:05,760 I detta fall här, om du klickar på kryssrutan bredvid 1080 00:44:05,760 --> 00:44:08,620 Naturligtvis är större än eller lika med 4,5, eller samma bredvid 1081 00:44:08,620 --> 00:44:11,200 fakultet, du anger ett booleskt uttryck. 1082 00:44:11,200 --> 00:44:14,780 Visa mig kurser för vilka uttrycket är sant. 1083 00:44:14,780 --> 00:44:17,080 Eller till höger, inte strider mot kurser jag är 1084 00:44:17,080 --> 00:44:20,440 tar, om det är markerat, så ja, du vill kontrollera 1085 00:44:20,440 --> 00:44:22,890 detta villkor, annars du vill ignorera det. 1086 00:44:22,890 --> 00:44:25,170 Så booleska uttryck är typ av runt, men när 1087 00:44:25,170 --> 00:44:28,080 Vi satte dem i förhållanden, vare sig om villkoren, OM 1088 00:44:28,080 --> 00:44:30,480 Annans, eller vi kan även simulera djupare 1089 00:44:30,480 --> 00:44:32,830 nivåer, om annat om ELSE - 1090 00:44:32,830 --> 00:44:34,430 så det är typ av en ternär stat. 1091 00:44:34,430 --> 00:44:36,920 Du kan gå på detta sätt eller på detta sätt eller så. 1092 00:44:36,920 --> 00:44:39,680 Vi kan hålla häckande saker att gå i olika riktningar. 1093 00:44:39,680 --> 00:44:41,800 >> Så Scratch har dessa slingor, som alltid. 1094 00:44:41,800 --> 00:44:44,750 Den har dessa funktioner som Repetera 10, några 1095 00:44:44,750 --> 00:44:46,260 ändligt antal gånger. 1096 00:44:46,260 --> 00:44:49,040 Vi har förmågan nu att sätta variabler, så i det här fallet 1097 00:44:49,040 --> 00:44:51,810 Jag har deklarerats, exempelvis, en variabel som heter strumpor. 1098 00:44:51,810 --> 00:44:54,340 Jag har initieras till 0, och det är ännu en riktning 1099 00:44:54,340 --> 00:44:56,940 Vi kunde ha tagit upp här med Josef, där jag kanske 1100 00:44:56,940 --> 00:45:00,150 bara hålla koll på hur många strumpor jag har på och avsluta 1101 00:45:00,150 --> 00:45:03,490 programmet när det variabelns värde är 2. 1102 00:45:03,490 --> 00:45:05,660 Det skulle vara ett annat sätt att sorts generalisera det 1103 00:45:05,660 --> 00:45:08,820 problem och göra något och om igen. 1104 00:45:08,820 --> 00:45:12,080 Nåväl, låt oss gå vidare och nu introducerar ett par nya saker. 1105 00:45:12,080 --> 00:45:14,100 Så de av er med tidigare programmering erfarenhet kommer 1106 00:45:14,100 --> 00:45:17,120 vet att många språk har matriser eller vektorer eller 1107 00:45:17,120 --> 00:45:19,970 listor, och faktiskt har Scratch något sådant också. 1108 00:45:19,970 --> 00:45:22,510 Så låt oss se om vi inte kan ta det till nästa nivå här. 1109 00:45:22,510 --> 00:45:24,920 Om jag har möjlighet, nu med dessa pusselbitar till 1110 00:45:24,920 --> 00:45:29,080 lägga till något, som ett ord eller nummer, till en variabel, kan jag 1111 00:45:29,080 --> 00:45:30,550 börjar ackumulera saker. 1112 00:45:30,550 --> 00:45:33,630 Och det är faktiskt ganska apropos för saker som spel, 1113 00:45:33,630 --> 00:45:35,810 rollspel där du är typ att gå runt 1114 00:45:35,810 --> 00:45:38,600 några fantasivärld samla saker, plocka upp saker, 1115 00:45:38,600 --> 00:45:39,900 tjäna poäng, eller liknande. 1116 00:45:39,900 --> 00:45:42,310 Du kanske vill hålla reda på någon form av lager och 1117 00:45:42,310 --> 00:45:45,180 faktiskt det är vad en av våra tidigare studenter här gjorde med 1118 00:45:45,180 --> 00:45:47,750 något som kallas Fruitcraft RPG. 1119 00:45:47,750 --> 00:45:51,820 >> Så låt mig gå vidare och öppna upp denna sak här, och i 1120 00:45:51,820 --> 00:45:56,260 Fruitcraft har vi den här världen upp på toppen. 1121 00:45:56,260 --> 00:45:58,820 Så låt mig gå vidare och klicka på den gröna flaggan. 1122 00:45:58,820 --> 00:46:01,040 Meddelande uppe till vänster är någon form av inventering. 1123 00:46:01,040 --> 00:46:04,110 Det är genomfört i Scratch som vad vi ska kalla en matris eller 1124 00:46:04,110 --> 00:46:06,890 en lista och nu har vi denna lilla animation. 1125 00:46:06,890 --> 00:46:10,440 Så precis som vi började tidigare med den här cookien kärlekshistoria, 1126 00:46:10,440 --> 00:46:13,320 och då vi avancerade till katter och sjölejon, nu kan vi ha 1127 00:46:13,320 --> 00:46:15,100 saker som är ännu mer interaktiv. 1128 00:46:15,100 --> 00:46:18,250 Och den här lilla blå kille, kan jag börja att flytta runt sina 1129 00:46:18,250 --> 00:46:19,500 lilla hem här. 1130 00:46:19,500 --> 00:46:22,570 Så det ser ut som han har en utgång här nere, så jag använder 1131 00:46:22,570 --> 00:46:25,260 piltangenterna, upp, ner, vänster, höger. 1132 00:46:25,260 --> 00:46:28,370 Och nu är jag utanför, så låt är vad jag har här. 1133 00:46:28,370 --> 00:46:30,920 Ser ut som en apelsin, och faktiskt, så fort jag rör vid 1134 00:46:30,920 --> 00:46:33,110 apelsin, det blir plopped i min inventering. 1135 00:46:33,110 --> 00:46:35,640 Om jag går hit till körsbär, nu har jag något 1136 00:46:35,640 --> 00:46:36,760 annat i mitt lager. 1137 00:46:36,760 --> 00:46:39,100 Och detta är alla trevliga och söt, men fundera på hur, nu detta 1138 00:46:39,100 --> 00:46:39,840 genomförs. 1139 00:46:39,840 --> 00:46:42,490 Tja, vi har denna föreställning om en lista, och det är uppenbarligen en 1140 00:46:42,490 --> 00:46:45,470 pusselbit som du bara säga vad du vill lägga till det, lägga 1141 00:46:45,470 --> 00:46:46,950 apelsin, körsbär lägg. 1142 00:46:46,950 --> 00:46:48,540 Nu, vad detta lilla blå killen gör? 1143 00:46:48,540 --> 00:46:49,810 Jo, han är en sprite. 1144 00:46:49,810 --> 00:46:52,190 Och förmodligen är orange och körsbär - 1145 00:46:52,190 --> 00:46:54,140 de själva var separata sprites. 1146 00:46:54,140 --> 00:46:56,980 Och med hjälp av förhållandena i booleska uttryck, de 1147 00:46:56,980 --> 00:47:00,530 elev var förmodligen kunna uttrycka IF blå killen är 1148 00:47:00,530 --> 00:47:04,590 röra körsbär sedan lägga ordet körsbär till hans 1149 00:47:04,590 --> 00:47:07,890 inventering och sedan också dölja körsbär spriten. 1150 00:47:07,890 --> 00:47:10,600 Så under huven, är det antagligen fortfarande är ett körsbär 1151 00:47:10,600 --> 00:47:11,350 sprite där. 1152 00:47:11,350 --> 00:47:14,160 Vi har precis sagt att det blir effektivt osynlig. 1153 00:47:14,160 --> 00:47:16,340 >> Nu, om jag hålla promenader hit, kan vi också göra det 1154 00:47:16,340 --> 00:47:19,150 proximala sak, där jag kan gå och läsa skylten. 1155 00:47:19,150 --> 00:47:23,170 Så om blå kille röra tecken, kan vi ha denna Say blocket 1156 00:47:23,170 --> 00:47:26,455 precis som katten talade till oss i ord, hej, tidigare "Got 1157 00:47:26,455 --> 00:47:26,880 lite frukt? 1158 00:47:26,880 --> 00:47:29,290 Ta med den till frukten plats. "Okej, så nu, tydligen, 1159 00:47:29,290 --> 00:47:30,550 Jag har mina riktningar. 1160 00:47:30,550 --> 00:47:33,050 Jag kan gå hit till frukten platsen, Line mig upp 1161 00:47:33,050 --> 00:47:33,740 med dörren. 1162 00:47:33,740 --> 00:47:35,390 Nu är jag här. 1163 00:47:35,390 --> 00:47:38,120 Jag kan gå upp till mannen vid disken. 1164 00:47:38,120 --> 00:47:40,330 Han upptäcker att jag är nära honom, så det behöver inte vara 1165 00:47:40,330 --> 00:47:46,780 helt identiskt röra, och jag har vunnit spelet. 1166 00:47:46,780 --> 00:47:49,890 Så där har vi Fruitcraft RPG. 1167 00:47:49,890 --> 00:47:52,200 >> Så vi kan göra saker och ting ännu mer avancerade än så. 1168 00:47:52,200 --> 00:47:53,200 Vi kan lägga till ljud. 1169 00:47:53,200 --> 00:47:54,610 Vi kan lägga till pseudo slumpmässighet. 1170 00:47:54,610 --> 00:47:56,260 Vi kan lägga komplexitet. 1171 00:47:56,260 --> 00:47:58,490 Låt mig gå vidare här, och i stället göra det själv, 1172 00:47:58,490 --> 00:48:01,240 Låt mig visa dig en av de mer sofistikerade bidrag 1173 00:48:01,240 --> 00:48:06,640 vi fick förra året från en viss person som heter Blake. 1174 00:48:06,640 --> 00:48:08,910 Kan vi få en volontär som är bekväm visas på 1175 00:48:08,910 --> 00:48:12,600 kameran och är upp för att spela ett spel? 1176 00:48:12,600 --> 00:48:13,450 Vad sägs om där? 1177 00:48:13,450 --> 00:48:15,380 Kom upp. 1178 00:48:15,380 --> 00:48:19,680 Okej, så spelet som du just har omedvetet 1179 00:48:19,680 --> 00:48:20,780 frivilligt att spela - 1180 00:48:20,780 --> 00:48:25,910 [Applåder] 1181 00:48:25,910 --> 00:48:28,610 DAVID MALAN: - är något från förr kallades 1182 00:48:28,610 --> 00:48:30,100 "Frogger". Vad heter du? 1183 00:48:30,100 --> 00:48:30,730 Renda: Renda. 1184 00:48:30,730 --> 00:48:31,050 DAVID MALAN: Redna? 1185 00:48:31,050 --> 00:48:32,530 Renda: Det är som Brenda med en B. 1186 00:48:32,530 --> 00:48:33,190 DAVID MALAN: Okej, Renda. 1187 00:48:33,190 --> 00:48:33,590 David. 1188 00:48:33,590 --> 00:48:34,580 TREVLIGT ATT TRÄFFAS. 1189 00:48:34,580 --> 00:48:38,690 >> Så här i "Frogger", och om vi kunde öka volymen bara 1190 00:48:38,690 --> 00:48:39,780 lite, är du här lilla 1191 00:48:39,780 --> 00:48:41,010 grön groda på botten. 1192 00:48:41,010 --> 00:48:43,940 Du kan använda vänster, höger, upp och ner, och ditt mål är att 1193 00:48:43,940 --> 00:48:46,510 korsa gatan, över floden, och tryck på lilja vadderar 1194 00:48:46,510 --> 00:48:47,760 upptill. 1195 00:48:52,090 --> 00:48:53,440 Aw. 1196 00:48:53,440 --> 00:48:54,630 One More t - 1197 00:48:54,630 --> 00:48:56,400 gör om, okej? 1198 00:48:56,400 --> 00:48:58,890 Låt oss hit stopp. 1199 00:48:58,890 --> 00:49:00,140 Ingen såg det. 1200 00:49:10,470 --> 00:49:12,930 [Applåder] 1201 00:49:17,023 --> 00:49:17,850 [Applåder] 1202 00:49:17,850 --> 00:49:19,341 DAVID MALAN: Ja. 1203 00:49:19,341 --> 00:49:20,832 Mycket bra gjort. 1204 00:49:20,832 --> 00:49:22,082 Utmärkt, tack. 1205 00:49:27,300 --> 00:49:29,430 >> Så att det var Frogger. Nu när du vet vad du har 1206 00:49:29,430 --> 00:49:32,170 fått er till, en mer frivillig för en annan 1207 00:49:32,170 --> 00:49:34,910 spel som lagts fram av en annan student. 1208 00:49:34,910 --> 00:49:35,560 Vill du komma på upp? 1209 00:49:35,560 --> 00:49:36,576 Vad heter du? 1210 00:49:36,576 --> 00:49:37,000 RICHARD: Richard. 1211 00:49:37,000 --> 00:49:37,420 DAVID MALAN: Richard. 1212 00:49:37,420 --> 00:49:39,732 Okej, Richard, kom upp. 1213 00:49:39,732 --> 00:49:42,187 [Applåder] 1214 00:49:45,140 --> 00:49:47,030 DAVID MALAN: Du har något som kommer att låta 1215 00:49:47,030 --> 00:49:54,180 bekant snart, så här är dina instruktioner. 1216 00:49:54,180 --> 00:49:56,580 Så i ett ögonblick, är några pusselbitar kommer att rulla uppåt 1217 00:49:56,580 --> 00:49:58,150 från skärmen som antingen ser kvar 1218 00:49:58,150 --> 00:49:59,450 eller höger upp eller ned. 1219 00:49:59,450 --> 00:50:01,230 Du kommer att få träffa piltangenterna på ett sådant sätt 1220 00:50:01,230 --> 00:50:04,540 att det motsvarar de pusselbitar kö med 1221 00:50:04,540 --> 00:50:05,720 platshållarna upptill. 1222 00:50:05,720 --> 00:50:07,500 Så när du ser en vänsterpil, och det är i linje med vänster 1223 00:50:07,500 --> 00:50:09,260 pil, slog på vänsterpilen. 1224 00:50:09,260 --> 00:50:10,866 Du kan börja. 1225 00:50:10,866 --> 00:50:13,674 [MUSIK - "starkare" Kayne WEST] 1226 00:51:21,222 --> 00:51:23,470 DAVID MALAN: Okej, stor applåd för Richard. 1227 00:51:23,470 --> 00:51:26,082 [Applåder] 1228 00:51:32,426 --> 00:51:33,720 DAVID MALAN: Mycket bra gjort. 1229 00:51:33,720 --> 00:51:34,110 Tack. 1230 00:51:34,110 --> 00:51:37,104 [Applåder] 1231 00:51:41,600 --> 00:51:44,330 >> DAVID MALAN: Så kul och, till synes, typ av 1232 00:51:44,330 --> 00:51:46,590 skrämmande som det kan vara att genomföra något så 1233 00:51:46,590 --> 00:51:49,550 synes sofistikerad som denna, inser att den studerande 1234 00:51:49,550 --> 00:51:51,450 inte anges, och bara skriva detta på en gång. 1235 00:51:51,450 --> 00:51:54,200 Snarare kan man bryta ner ett problem som till synes komplexa 1236 00:51:54,200 --> 00:51:56,840 eftersom detta i mycket mindre bitar, och detta är också 1237 00:51:56,840 --> 00:51:57,560 kommer att bli ett tema. 1238 00:51:57,560 --> 00:52:00,490 Det värsta du kan göra i att skriva ett program i de flesta någon 1239 00:52:00,490 --> 00:52:03,480 språk är att sitta ner, bli riktigt upphetsad, skriver 1240 00:52:03,480 --> 00:52:07,200 hela jävla sak, och sedan bara hoppas att det fungerar med 1241 00:52:07,200 --> 00:52:08,510 tid du är klar skriver. 1242 00:52:08,510 --> 00:52:10,920 Snarare programplaneringsprocessen bör generellt 1243 00:52:10,920 --> 00:52:13,440 vara mycket medvetet, mycket iterativ, där du bara 1244 00:52:13,440 --> 00:52:16,955 ställa mycket små steg för er själva, lagom stora bitar 1245 00:52:16,955 --> 00:52:20,070 vill du bita av, och så att du har dessa förstånd 1246 00:52:20,070 --> 00:52:21,740 kontroller, lite milstolpar du kan möta. 1247 00:52:21,740 --> 00:52:24,170 Och sedan bygga ovanpå dem att skapa mer 1248 00:52:24,170 --> 00:52:25,400 sofistikerade saker fortfarande. 1249 00:52:25,400 --> 00:52:26,820 >> Så till exempel, hur skulle vi gå 1250 00:52:26,820 --> 00:52:28,380 genomföra ett spel som detta? 1251 00:52:28,380 --> 00:52:30,160 Tja, ärligt talat, skulle jag börja verkligen med bara 1252 00:52:30,160 --> 00:52:32,260 stödja en tangent i taget. 1253 00:52:32,260 --> 00:52:34,840 Låt oss bara genomföra stöd för vänster pil. 1254 00:52:34,840 --> 00:52:37,610 Så att studenten hade något skapa i Photoshop, eller 1255 00:52:37,610 --> 00:52:40,340 Repa sig med den lilla grafisk editor, en 1256 00:52:40,340 --> 00:52:42,680 pil som ser ut som en uppe till vänster där, bara 1257 00:52:42,680 --> 00:52:43,910 den grå platshållaren. 1258 00:52:43,910 --> 00:52:46,610 Sedan studenten var tvungen att räkna ut vad x, y-koordinat till 1259 00:52:46,610 --> 00:52:48,380 uttryckte det, var att sätta den i fönstret. 1260 00:52:48,380 --> 00:52:50,730 0, 0 är här uppe, så du måste räkna ut hur många 1261 00:52:50,730 --> 00:52:53,690 bildpunkter eller prickar, för att kompensera den pil från 1262 00:52:53,690 --> 00:52:54,800 överst på skärmen. 1263 00:52:54,800 --> 00:52:57,040 Och sedan en gång som är på plats, inte ditt program egentligen inte 1264 00:52:57,040 --> 00:53:00,380 göra något ännu, så du sedan behöver en andra sprite, för 1265 00:53:00,380 --> 00:53:04,470 exempel en grön pil som också är som pekar åt vänster, och du 1266 00:53:04,470 --> 00:53:06,710 då måste börja skriva några skript för det. 1267 00:53:06,710 --> 00:53:09,310 >> Och du märker kanske att dessa saker började komma på 1268 00:53:09,310 --> 00:53:11,470 olika hastigheter, och färgerna var olika 1269 00:53:11,470 --> 00:53:13,750 platser, och det beror på eleven använt lite 1270 00:53:13,750 --> 00:53:14,990 pseudo slumpmässighet. 1271 00:53:14,990 --> 00:53:17,440 Och med pseudo slumpmässighet, menar jag bara plocka ett nummer 1272 00:53:17,440 --> 00:53:20,230 mellan något och något eftersom du kan 1273 00:53:20,230 --> 00:53:22,890 börjar på saker, som om antalet är mellan en och 1274 00:53:22,890 --> 00:53:24,940 fem, ja, låt oss göra saken grönt. 1275 00:53:24,940 --> 00:53:28,290 Om det är mellan 6 och 10, låt oss göra pusselbiten 1276 00:53:28,290 --> 00:53:29,730 röd istället. 1277 00:53:29,730 --> 00:53:31,840 Så länge du har ett sätt att generera någon form av 1278 00:53:31,840 --> 00:53:34,730 slumpmässighet kan du göra sedan beslut bygger på att 1279 00:53:34,730 --> 00:53:35,260 slumpmässighet. 1280 00:53:35,260 --> 00:53:37,490 Och jag fortsätter att säga pseudoslumptal eftersom det finns en 1281 00:53:37,490 --> 00:53:38,390 lite smutsiga hemlighet. 1282 00:53:38,390 --> 00:53:41,130 Datorer kan inte komma med slumptal. 1283 00:53:41,130 --> 00:53:42,800 De kan bara göra vad de blir tillsagda att 1284 00:53:42,800 --> 00:53:44,110 de är konstgjorda enheter. 1285 00:53:44,110 --> 00:53:45,880 De kan inte bara gissa ett nummer som vi människor 1286 00:53:45,880 --> 00:53:46,960 känns som vi kan. 1287 00:53:46,960 --> 00:53:50,970 En dator har att göra något matematiskt att trolla fram 1288 00:53:50,970 --> 00:53:53,970 illusion av matematiska tal, ibland med hjälp av 1289 00:53:53,970 --> 00:53:57,420 aktuell dag tid som en ingång till räkna ut vad 1290 00:53:57,420 --> 00:53:59,570 nummer att återvända, men mer om det en annan gång. 1291 00:53:59,570 --> 00:54:02,060 För nu, vet bara att vi kan generera pseudo slumpmässighet. 1292 00:54:02,060 --> 00:54:04,610 >> Så när jag har möjlighet för den vänstra pilen för att starta 1293 00:54:04,610 --> 00:54:07,990 uppträder vid olika tidpunkter och med olika hastigheter, sedan 1294 00:54:07,990 --> 00:54:10,230 Jag kan gå tillbaka och lägga till några av dessa om villkoren. 1295 00:54:10,230 --> 00:54:14,950 OM denna sprite vidrör den andra, och vänsterpilen 1296 00:54:14,950 --> 00:54:16,330 har tryckts - 1297 00:54:16,330 --> 00:54:17,900 så tre villkor i det fallet. 1298 00:54:17,900 --> 00:54:20,750 Jag kan använda det och blockera kanske i så fall - 1299 00:54:20,750 --> 00:54:23,210 Då vill jag gå vidare och öka poängen. 1300 00:54:23,210 --> 00:54:25,130 Och på toppen har vi en poäng, vi har Awesome, 1301 00:54:25,130 --> 00:54:26,510 Cool, bra, och Boo. 1302 00:54:26,510 --> 00:54:29,810 Så det finns tydligen fem variabler som denna elev 1303 00:54:29,810 --> 00:54:32,220 används för att hålla reda på dessa olika mått. 1304 00:54:32,220 --> 00:54:34,180 Så kort sagt, är slutresultatet häpnadsväckande. 1305 00:54:34,180 --> 00:54:37,320 Det är kul, det är kul att spela, det engagerande, men det är inte 1306 00:54:37,320 --> 00:54:38,380 där studenten började. 1307 00:54:38,380 --> 00:54:42,210 Han eller hon började på ett mycket mindre antal steg. 1308 00:54:42,210 --> 00:54:44,470 >> Så vad är några andra byggstenar som vi kan 1309 00:54:44,470 --> 00:54:45,760 väva in dessa program? 1310 00:54:45,760 --> 00:54:48,750 Tja, det finns det andra begrepp i de flesta språk, 1311 00:54:48,750 --> 00:54:50,730 Scratch bland dem, som kallas trådar. 1312 00:54:50,730 --> 00:54:54,660 Så en dator kan faktiskt inte riktigt göra flera saker på en 1313 00:54:54,660 --> 00:54:56,730 tid, åtminstone inte vanligtvis. 1314 00:54:56,730 --> 00:54:59,930 Snarare, har en dator i allmänhet bara en CPU, och även 1315 00:54:59,930 --> 00:55:02,230 Men datorer är supersnabbt och kan därför 1316 00:55:02,230 --> 00:55:04,740 skapa en illusion av att göra flera saker samtidigt - 1317 00:55:04,740 --> 00:55:06,180 kontrollera din e-post, få en omedelbar 1318 00:55:06,180 --> 00:55:07,770 meddelande, skriva ut ett dokument - 1319 00:55:07,770 --> 00:55:11,530 verkligen är en dator hoppar bara från utskrift till IMing 1320 00:55:11,530 --> 00:55:15,160 att skicka e-post, tillbaka och tillbaka och fram och tillbaka så snabbt att vi 1321 00:55:15,160 --> 00:55:18,170 långsamma witted människor bara inte inser att det faktiskt är 1322 00:55:18,170 --> 00:55:21,240 kör dessa program en liten bit i taget. 1323 00:55:21,240 --> 00:55:23,960 Nu, detta lite av en vit lögn dessa dagar eftersom numera 1324 00:55:23,960 --> 00:55:26,740 många våra datorer är så kallade multi-core, så att du 1325 00:55:26,740 --> 00:55:29,760 ha en processor men flera kärnor, vilket är ungefär som 1326 00:55:29,760 --> 00:55:31,760 har flera processorer. 1327 00:55:31,760 --> 00:55:35,020 >> Och så ibland kan datorer göra riktigt många saker 1328 00:55:35,020 --> 00:55:38,500 vid en tidpunkt, men vanligen inom ett program, program 1329 00:55:38,500 --> 00:55:40,200 förlita sig på dessa saker som kallas trådar. 1330 00:55:40,200 --> 00:55:43,160 Så en tråd är ungefär som en miniatyr program som kan 1331 00:55:43,160 --> 00:55:46,540 samexistera med annan miniatyr program och kan köras 1332 00:55:46,540 --> 00:55:51,250 parallellt, eller åtminstone kan köras under illusionen att 1333 00:55:51,250 --> 00:55:52,990 De kör samtidigt. 1334 00:55:52,990 --> 00:55:55,060 Så Scratch stöder dessa saker som kallas trådar. 1335 00:55:55,060 --> 00:55:57,580 Du kan ha flera skript exekverar på en gång, precis som vi 1336 00:55:57,580 --> 00:56:00,220 gjorde med sjölejon, och detta gör att vi kan faktiskt 1337 00:56:00,220 --> 00:56:03,620 sedan har samspelet mellan dessa sprites. 1338 00:56:03,620 --> 00:56:09,910 Låt mig gå vidare här och dra upp, låt oss säga, trådar och 1339 00:56:09,910 --> 00:56:11,870 spela detta på följande sätt. 1340 00:56:11,870 --> 00:56:13,950 Vi har två sprites, var som vi får se 1341 00:56:13,950 --> 00:56:15,720 har bara en skript. 1342 00:56:15,720 --> 00:56:18,000 Och du märker att det verkar finnas en viss intelligens i 1343 00:56:18,000 --> 00:56:21,335 katt i detta eftersom han närmar - 1344 00:56:21,335 --> 00:56:21,730 [Vrålar] 1345 00:56:21,730 --> 00:56:24,540 DAVID MALAN: - och närmare den lilla fågeln. 1346 00:56:24,540 --> 00:56:26,570 >> Så hur är fågeln drift? 1347 00:56:26,570 --> 00:56:28,200 Nåväl, låt oss ta en titt på fågeln först. 1348 00:56:28,200 --> 00:56:31,220 Fågeln manus sa när den gröna flaggan klickas, gå till X 1349 00:56:31,220 --> 00:56:34,020 lika negativ 115 och y är lika med 150. 1350 00:56:34,020 --> 00:56:37,010 Så jag tänkte bara ut en slumpmässig plats där jag ville 1351 00:56:37,010 --> 00:56:39,580 fågel att starta, och jag bara plopped honom där som standard. 1352 00:56:39,580 --> 00:56:42,800 Då evigt om inte röra katt, så det här är en annan 1353 00:56:42,800 --> 00:56:45,080 typ av looping konstruktion, men samma idé, göra det igen och 1354 00:56:45,080 --> 00:56:45,780 och om igen. 1355 00:56:45,780 --> 00:56:49,410 Så länge du inte röra katten, flytta tre steg, och 1356 00:56:49,410 --> 00:56:51,680 om du är på kanten, studsa, där det är en slags 1357 00:56:51,680 --> 00:56:53,320 reflektion i biljard mening. 1358 00:56:53,320 --> 00:56:56,140 Så det är hur fågeln rör sig runt typ av 1359 00:56:56,140 --> 00:56:58,890 synes slumpmässigt, men det är bara för att det är studsar 1360 00:56:58,890 --> 00:57:00,170 väggarna i detta fall. 1361 00:57:00,170 --> 00:57:03,170 >> Nu katten, under tiden, är typ av fusk. 1362 00:57:03,170 --> 00:57:05,520 Katten, när den gröna flaggan klickas, ja, startar i 1363 00:57:05,520 --> 00:57:07,390 någon plats, en slumpmässig position - 1364 00:57:07,390 --> 00:57:09,590 åtminstone delvis enligt hackan 1365 00:57:09,590 --> 00:57:11,430 slumpmässiga gröna blocket där - 1366 00:57:11,430 --> 00:57:14,660 och sedan för evigt om att röra fågeln, spela lejonet ljud, 1367 00:57:14,660 --> 00:57:15,790 och sedan stoppa script. 1368 00:57:15,790 --> 00:57:18,560 Så när jag sa avsluta, eller avsluta tidigare, det finns ett pussel 1369 00:57:18,560 --> 00:57:20,600 bit i Scratch som bara kommer att döda programmet på den 1370 00:57:20,600 --> 00:57:22,900 punkt eftersom det är typ av logiskt gjort. 1371 00:57:22,900 --> 00:57:25,030 Men annars, här, ser vad som kommer att hända. 1372 00:57:25,030 --> 00:57:28,470 Pekar mot fågeln och flytta ett steg. 1373 00:57:28,470 --> 00:57:31,390 Så denna punkt mot fågel är typ en fördel katten 1374 00:57:31,390 --> 00:57:34,640 har i att det är målsökande in på den rörliga fågel, och vi kan 1375 00:57:34,640 --> 00:57:37,370 nu göra detta program ännu mer intressant. 1376 00:57:37,370 --> 00:57:41,520 Istället för att flytta ett steg i taget per CPU cykel, per 1377 00:57:41,520 --> 00:57:44,280 slå Toll på klockan, så att säga, låt mig gå vidare och 1378 00:57:44,280 --> 00:57:47,350 flytta, låt oss säga, fem steg i taget som katten. 1379 00:57:47,350 --> 00:57:51,120 Klicka på Kör, och nu är han verkligen finner honom snabbt. 1380 00:57:51,120 --> 00:57:55,620 Om vi ​​fördubbla detta ytterligare till 10 steg, det slags går 1381 00:57:55,620 --> 00:57:56,370 rätt för honom. 1382 00:57:56,370 --> 00:57:57,750 Nu kan vi ge fågeln, 1383 00:57:57,750 --> 00:57:59,540 kanske lite av en fördel. 1384 00:57:59,540 --> 00:58:02,370 Låt oss gå till fågeln och säga i stället för att flytta tre steg, 1385 00:58:02,370 --> 00:58:07,140 låt oss gå honom 30 steg. 1386 00:58:07,140 --> 00:58:08,700 Men han fastnade till slut. 1387 00:58:08,700 --> 00:58:10,430 >> Så här har vi två trådar. 1388 00:58:10,430 --> 00:58:13,230 Det är inspärrade i Scratch med två skript och två 1389 00:58:13,230 --> 00:58:16,150 sprites, men tanken på andra språk är att man kan 1390 00:58:16,150 --> 00:58:19,220 skriva i huvudsak för många program som detta och har 1391 00:58:19,220 --> 00:58:22,950 dem springa riktigt, eller imaginärt, parallellt. 1392 00:58:22,950 --> 00:58:25,280 >> Nu finns det även detta koncept inom programmering kallas 1393 00:58:25,280 --> 00:58:28,010 händelser, och detta är något vi inte kommer att se i C, de 1394 00:58:28,010 --> 00:58:30,500 språk som kallas C. Vi kommer att se den mot termin slut 1395 00:58:30,500 --> 00:58:33,240 i webbprogrammering, när vi introducerar JavaScript och 1396 00:58:33,240 --> 00:58:36,970 begreppet sidor bygga webbsidor som är dynamisk och interagerar 1397 00:58:36,970 --> 00:58:37,710 med användare. 1398 00:58:37,710 --> 00:58:40,430 Så i det här fallet har vi ett mycket enkelt exempel på två 1399 00:58:40,430 --> 00:58:43,860 älvor, pojke och flicka, som var och har sina respektive 1400 00:58:43,860 --> 00:58:48,040 trådar, men på något sätt dessa två hänger kommunicerar genom 1401 00:58:48,040 --> 00:58:49,490 av något som kallas händelser. 1402 00:58:49,490 --> 00:58:52,750 Så låt mig gå vidare här och zooma in på pojkens manus, 1403 00:58:52,750 --> 00:58:54,050 som ser ut så här. 1404 00:58:54,050 --> 00:58:57,510 När gröna flaggan klickar alltid göra följande. 1405 00:58:57,510 --> 00:59:01,510 Om nyckeln Space eller mellanslagstangenten, trycks säga 1406 00:59:01,510 --> 00:59:03,900 Marco för två sekunder, det är rent estetiskt på 1407 00:59:03,900 --> 00:59:06,860 skärm, lite pratbubbla, men sedan sända. 1408 00:59:06,860 --> 00:59:09,240 >> Så sändning är en annan Scratch pjäs som är 1409 00:59:09,240 --> 00:59:12,050 representant för en klass av funktionalitet i programmering 1410 00:59:12,050 --> 00:59:15,080 som gör att olika program, olika trådar, 1411 00:59:15,080 --> 00:59:17,120 till mellan kommunicera, att på något sätt skicka 1412 00:59:17,120 --> 00:59:18,520 meddelanden, ett till en annan. 1413 00:59:18,520 --> 00:59:21,930 Förbi ett papper i klassen är ganska låg tech 1414 00:59:21,930 --> 00:59:22,700 motsvarande. 1415 00:59:22,700 --> 00:59:24,300 Så sänder händelsen. 1416 00:59:24,300 --> 00:59:26,210 Jag kan skicka det här meddelandet och ordet händelsen 1417 00:59:26,210 --> 00:59:27,270 är helt godtycklig. 1418 00:59:27,270 --> 00:59:30,000 Scratch har ibland dessa drop downs, så jag bara kom upp 1419 00:59:30,000 --> 00:59:33,230 med ett slumpmässigt ord som händelse eftersom nu, vad pojken gör 1420 00:59:33,230 --> 00:59:36,600 när jag trycker på knappen är han sänder denna händelse. 1421 00:59:36,600 --> 00:59:39,270 Och om jag nu titta på flickans manus, är hennes manus 1422 00:59:39,270 --> 00:59:42,690 super enkelt eftersom allt hon behöver göra är inte agera när 1423 00:59:42,690 --> 00:59:44,100 den gröna flaggan klickas. 1424 00:59:44,100 --> 00:59:47,910 Hon är utformad för att agera när hon får offert, unquote, 1425 00:59:47,910 --> 00:59:51,210 "Händelse", och vid den tidpunkten, hon lyssnar därför 1426 00:59:51,210 --> 00:59:52,960 den så kallade händelse och om igen. 1427 00:59:52,960 --> 00:59:55,790 Så fort hon får denna händelse, hon kommer att skrika 1428 00:59:55,790 --> 00:59:57,680 Polo i två sekunder. 1429 00:59:57,680 --> 01:00:01,090 >> Och så kan du kanske sluta från detta exakt vad 1430 01:00:01,090 --> 01:00:03,190 nästa resultat kommer att bli. 1431 01:00:03,190 --> 01:00:04,910 Låt mig klicka på den gröna flaggan. 1432 01:00:04,910 --> 01:00:06,610 Ingenting händer att jag behöver göra det? 1433 01:00:06,610 --> 01:00:07,310 Publiken: Mellanslag. 1434 01:00:07,310 --> 01:00:08,630 DAVID MALAN: Space Bar. 1435 01:00:08,630 --> 01:00:11,990 Pojke säger Marco, säger flickan Polo. 1436 01:00:11,990 --> 01:00:13,670 Men det är inte svårt kodad i sig. 1437 01:00:13,670 --> 01:00:16,740 Det är mellan kommunikation mellan skript, så nu har vi 1438 01:00:16,740 --> 01:00:19,240 har förmågan att göra ännu mer komplexa program där 1439 01:00:19,240 --> 01:00:22,830 Dessa två är något mellan kommunikation. 1440 01:00:22,830 --> 01:00:25,260 >> Så vad riktningar kan vi ta detta? 1441 01:00:25,260 --> 01:00:28,260 Tja, i problembild 0, egentligen, är målet att 1442 01:00:28,260 --> 01:00:29,830 ha kul med Scratch. 1443 01:00:29,830 --> 01:00:32,440 För hacker utgåvan får du istället kul med en mer 1444 01:00:32,440 --> 01:00:35,850 sofistikerad version av Scratch kallas BYOB, Bygg 1445 01:00:35,850 --> 01:00:38,040 Dina egna block, men idén är densamma. 1446 01:00:38,040 --> 01:00:38,780 Du kommer att kunna - 1447 01:00:38,780 --> 01:00:39,710 Ja, det var avsiktligt. 1448 01:00:39,710 --> 01:00:42,450 Det kom från Berkeley. 1449 01:00:42,450 --> 01:00:45,200 BYOB är hacker utgåvan av denna, men båda 1450 01:00:45,200 --> 01:00:48,180 demografi, Standard Edition och hackare upplaga både den 1451 01:00:48,180 --> 01:00:50,940 Målet till hands för den kommande veckan är egentligen bara att dyka i 1452 01:00:50,940 --> 01:00:53,050 djup, få händerna smutsiga med programmering, och göra 1453 01:00:53,050 --> 01:00:55,240 något intressant, göra något interaktivt, gör 1454 01:00:55,240 --> 01:00:58,020 något konstnärligt, göra något roligt att faktiskt 1455 01:00:58,020 --> 01:01:01,020 visa, så att genom veckans slut, har du ett projekt, 1456 01:01:01,020 --> 01:01:03,770 inte bara för din första CS50 pset, men du har en 1457 01:01:03,770 --> 01:01:05,620 liten sak som du kan visa upp i Annenberg till 1458 01:01:05,620 --> 01:01:08,830 vänner eller ens familj genom att överföra den till MIT: s webbplats. 1459 01:01:08,830 --> 01:01:11,760 Och så som jag sa på onsdagen räknar vi 90% av klassen, 1460 01:01:11,760 --> 01:01:13,970 allmänt att göra de vanliga utgåvorna. 1461 01:01:13,970 --> 01:01:16,660 Inse att det finns också här utlopp för dig som 1462 01:01:16,660 --> 01:01:18,990 annars hitta dig själv lite uttråkad med grunderna 1463 01:01:18,990 --> 01:01:21,650 och verkligen vill dyka in och hantverk en vision som du redan 1464 01:01:21,650 --> 01:01:25,380 har med tidigare bakgrund i detta mer vänligt 1465 01:01:25,380 --> 01:01:26,240 miljö. 1466 01:01:26,240 --> 01:01:29,030 >> Så låt mig dra upp en annan exempel som en av våra tidigare 1467 01:01:29,030 --> 01:01:33,830 eleverna gjorde här och berätta lite något genom sång. 1468 01:01:33,830 --> 01:01:37,430 Det samma sätt, eftersom detta spelar, tänk på hur du går om 1469 01:01:37,430 --> 01:01:40,520 genomförandet av detta program med just dessa samma 1470 01:01:40,520 --> 01:01:44,180 byggstenar, lite av pseudo slumpmässighet, och en 1471 01:01:44,180 --> 01:01:46,010 lite bekant sång. 1472 01:01:46,010 --> 01:01:47,910 Om vi ​​kunde öka volymen bara lite? 1473 01:01:47,910 --> 01:01:49,160 [MUSIK - "Det regnar MÄN" Vädret FLICKOR] 1474 01:03:02,261 --> 01:03:03,930 >> DAVID MALAN: Det är det för CS50. 1475 01:03:03,930 --> 01:03:05,860 Vi kommer att se dig på måndag. 1476 01:03:05,860 --> 01:03:21,152 [Applåder]