1 00:00:08,483 --> 00:00:11,477 [Powered by Google Translate] [ROCK MUSIC] 2 00:00:32,435 --> 00:00:35,429 [MUSIC - "Happy Together" THE TURTLES] 3 00:01:27,330 --> 00:01:30,170 DAVID MALAN: I dag begynner vi vår utforskning av 4 00:01:30,170 --> 00:01:32,710 Grunnlaget for informatikk og vår introduksjon, 5 00:01:32,710 --> 00:01:35,070 nå, til kunsten programmering, hvorav det er 6 00:01:35,070 --> 00:01:36,260 bare ett eksempel. 7 00:01:36,260 --> 00:01:39,600 Men i samme ånd av problemløsning, vet at 8 00:01:39,600 --> 00:01:42,080 CS50 tradisjonelle Puzzle Day er i morgen. 9 00:01:42,080 --> 00:01:45,190 Hvis du ennå ikke har RSVPed for denne hendelsen, kan du gå til 10 00:01:45,190 --> 00:01:47,510 cs50.net/rsvp. 11 00:01:47,510 --> 00:01:50,940 Du kan ta med grupper på to eller tre eller fire. 12 00:01:50,940 --> 00:01:53,080 Du vil bli utfordret med problemer som den du så 13 00:01:53,080 --> 00:01:54,190 oppe i begynnelsen. 14 00:01:54,190 --> 00:01:57,000 Alle nye problemer i år hvis du spiste i fjor, og du 15 00:01:57,000 --> 00:01:59,680 vil ha en sjanse da å vinne noen flotte premier. 16 00:01:59,680 --> 00:02:02,750 Blant dem, en Wii og noen gavekort og lignende, 17 00:02:02,750 --> 00:02:05,650 alle henger ut med CS50 studenter og klassekamerater 18 00:02:05,650 --> 00:02:07,720 og pizza og Facebook. 19 00:02:07,720 --> 00:02:10,430 Så mer om det i morgen hvis du ønsker. 20 00:02:10,430 --> 00:02:13,330 >> Dette er da CS50, for de av dere bli med oss ​​for 21 00:02:13,330 --> 00:02:14,510 første gang. 22 00:02:14,510 --> 00:02:18,030 Og vet at dette kurset er spesielt bestemt på å få 23 00:02:18,030 --> 00:02:22,605 deg gjennom dette kurset til dens slutt, og da du 24 00:02:22,605 --> 00:02:24,270 vil ha ikke bare en forståelse av disse 25 00:02:24,270 --> 00:02:26,450 Grunnlaget for informatikk, men du vil ha 26 00:02:26,450 --> 00:02:29,120 dette svært praktisk ferdighet sett som du deretter kan ta med tilbake til 27 00:02:29,120 --> 00:02:31,370 din egen avdeling, enten det er tekniske fag, 28 00:02:31,370 --> 00:02:33,570 anvendt matematikk, naturvitenskap, naturlige 29 00:02:33,570 --> 00:02:34,780 vitenskap eller lignende. 30 00:02:34,780 --> 00:02:37,030 Ja, hva er så spennende om informatikk disse 31 00:02:37,030 --> 00:02:39,900 dager er at det er bare så gjelder 32 00:02:39,900 --> 00:02:40,990 alle slags felt. 33 00:02:40,990 --> 00:02:46,210 Og selv om i dag, vil vi bare skraper i overflaten av en 34 00:02:46,210 --> 00:02:49,020 svært tradisjonelle programmeringsspråk kjent som C, vil vi 35 00:02:49,020 --> 00:02:51,040 i stedet se på noe som kalles Scratch, noe med 36 00:02:51,040 --> 00:02:53,420 som at cookie kjærlighetshistorie ble gjennomført av en av dine 37 00:02:53,420 --> 00:02:57,020 forgjengere i tidligere år, å fortelle historier, å lage spill, 38 00:02:57,020 --> 00:03:00,060 å skape interaktiv kunst, og å faktisk begynne å pakke våre 39 00:03:00,060 --> 00:03:02,240 sinn rundt noen av de grunnleggende konstruksjoner som 40 00:03:02,240 --> 00:03:05,390 ligger til grunn programmering, men i en sammenheng, som du vil se, er at 41 00:03:05,390 --> 00:03:09,140 mye mindre skummelt, er at mye mindre uforståelige, enn du vil se 42 00:03:09,140 --> 00:03:10,140 før lenge. 43 00:03:10,140 --> 00:03:12,410 Og realisere, også, for de av dere bare med oss ​​denne 44 00:03:12,410 --> 00:03:16,170 semester, setninger som vi endte onsdagens foredrag, 45 00:03:16,170 --> 00:03:20,260 det er ikke så viktig hvor du ender opp i forhold til din 46 00:03:20,260 --> 00:03:22,950 klassekamerater i denne klassen, men hvor du, etter semesters slutt 47 00:03:22,950 --> 00:03:27,190 i uke 11, ender opp i forhold til deg selv rett i dag. 48 00:03:27,190 --> 00:03:32,000 >> Så uten videre, dette er også verdt å merke seg at 49 00:03:32,000 --> 00:03:34,450 de mindre komfortable, de et sted i mellom, er 50 00:03:34,450 --> 00:03:36,825 også, ved utformingen av dette kurset, ikke på noen ulempe 51 00:03:36,825 --> 00:03:38,760 vis-a-vis de mer komfortable 52 00:03:38,760 --> 00:03:39,920 kommer inn i denne klassen. 53 00:03:39,920 --> 00:03:41,810 Som du ser over ukene som kommer, har vi forskjellig 54 00:03:41,810 --> 00:03:44,600 spor for vesensforskjellig tilbake bakgrunn, seksjoner for de 55 00:03:44,600 --> 00:03:46,500 mindre komfortable, mer komfortabel, de sted 56 00:03:46,500 --> 00:03:47,250 i mellom. 57 00:03:47,250 --> 00:03:49,520 Som du vil se denne helgen og neste uke, to versjoner av 58 00:03:49,520 --> 00:03:52,410 de fleste oppgavesett i både standard og hacker utgave så 59 00:03:52,410 --> 00:03:55,390 som dere alle kan selv velge nedover stien som du 60 00:03:55,390 --> 00:03:56,615 er mest komfortabel. 61 00:03:56,615 --> 00:03:58,770 >> Så i dag, dykke vi inn i dette programmering 62 00:03:58,770 --> 00:04:00,060 språk kalt Scratch. 63 00:04:00,060 --> 00:04:02,250 Det er en grafisk programmeringsspråk, og ennå har den 64 00:04:02,250 --> 00:04:04,500 samme funksjoner i noen av de høyere nivå språk vi vil 65 00:04:04,500 --> 00:04:07,050 utforske senere i semesteret, blant dem C og 66 00:04:07,050 --> 00:04:08,670 JavaScript og PHP. 67 00:04:08,670 --> 00:04:11,890 Men det kommer til å tillate oss å unngå noen av distraksjoner 68 00:04:11,890 --> 00:04:14,890 tidlig på syntaks, ting som semikolon, parenteser, 69 00:04:14,890 --> 00:04:17,720 og andre uforståelige detaljene som, ved første øyekast, er bare ikke 70 00:04:17,720 --> 00:04:19,916 i det hele tatt intellektuelt interessant og har en tendens til å komme i 71 00:04:19,916 --> 00:04:22,310 vei fra noen fundamental forståelse. 72 00:04:22,310 --> 00:04:24,870 I form av nå bærekonstruksjonen fremover, skjønte dette 73 00:04:24,870 --> 00:04:27,570 verktøy, CS50 Diskuter, som vil bli knyttet til kursets 74 00:04:27,570 --> 00:04:30,320 nettside senere i dag, er den elektroniske diskusjonsforum i 75 00:04:30,320 --> 00:04:32,480 som du vil kunne stille spørsmål til hverandre og 76 00:04:32,480 --> 00:04:35,020 ansatte, og det er også et verktøy, som vi skal se i neste uke, 77 00:04:35,020 --> 00:04:37,240 at vi skal bruke ganske integratedly i 78 00:04:37,240 --> 00:04:38,780 kontortid også. 79 00:04:38,780 --> 00:04:41,670 Faktisk, kontortid begynner på mandag, og ærlig, den første 80 00:04:41,670 --> 00:04:43,930 uke kontortid er ganske lav nøkkel. 81 00:04:43,930 --> 00:04:46,820 >> Jeg tror ikke du finner Scratch alt som utilgjengelig. 82 00:04:46,820 --> 00:04:48,930 Det er heller selvforklarende, som vi skal se, og så hva 83 00:04:48,930 --> 00:04:51,380 vi vil bruke det for i dag er å hente ut noe av 84 00:04:51,380 --> 00:04:53,990 grunnleggende ideer som vil da, vedvarer gjennom hele 85 00:04:53,990 --> 00:04:54,900 Resten av semesteret. 86 00:04:54,900 --> 00:04:57,980 Men starter mandag, kl 20:00 gjennom 23:00 vil være 87 00:04:57,980 --> 00:05:01,530 kontortid i Annenberg over hjernen pause. 88 00:05:01,530 --> 00:05:04,490 Seksjonering to vil begynne denne kvelden, så en gang dette 89 00:05:04,490 --> 00:05:07,260 helg, gå til cs50.net/section, og du vil 90 00:05:07,260 --> 00:05:08,530 bli spurt en rekke spørsmål. 91 00:05:08,530 --> 00:05:10,290 Blant dem, hvordan vil du beskrive din 92 00:05:10,290 --> 00:05:12,040 komfortnivå som i dag? 93 00:05:12,040 --> 00:05:14,450 Det er ingen hard, rask regelen om hvem som er der bøtte. 94 00:05:14,450 --> 00:05:17,170 Det er bare den slags ting som du sikkert vet om du 95 00:05:17,170 --> 00:05:20,280 er blant de mindre komfortable eller ellers. 96 00:05:20,280 --> 00:05:21,350 >> Og nå, gjennomgang. 97 00:05:21,350 --> 00:05:24,020 Oppgavesettet spesifikasjonen for denne uken, både standard 98 00:05:24,020 --> 00:05:28,560 og hacker utgave alike, er online på cs50.net som nå. 99 00:05:28,560 --> 00:05:31,500 Og du vil se at den første av disse utgavene, den 100 00:05:31,500 --> 00:05:33,940 standardutgave hver uke, er ledsaget av noe vi 101 00:05:33,940 --> 00:05:36,550 kaller en kode gjennomgang, ledet en sesjon med en av 102 00:05:36,550 --> 00:05:39,100 Kursets undervisning stipendiater til å veilede deg gjennom, gir 103 00:05:39,100 --> 00:05:42,290 tips om, og få deg ned en bestemt bane når det gjelder 104 00:05:42,290 --> 00:05:44,150 å starte disse oppgavesett. 105 00:05:44,150 --> 00:05:46,790 Så med hver av disse problem sett, hvis du noen gang ønsker 106 00:05:46,790 --> 00:05:50,250 selv hvor skal jeg begynne, begynner du med disse 107 00:05:50,250 --> 00:05:50,890 walkthroughs. 108 00:05:50,890 --> 00:05:53,450 Og faktisk, la meg introdusere Zamyla Chan, dette 109 00:05:53,450 --> 00:05:55,870 Årets undervisning fyr som skal lede hver 110 00:05:55,870 --> 00:05:56,910 en av disse walkthroughs. 111 00:05:56,910 --> 00:05:57,961 Zamyla? 112 00:05:57,961 --> 00:06:03,370 >> [Applaus] 113 00:06:03,370 --> 00:06:03,975 ZAMYLA CHAN: Åh, hei, alle sammen. 114 00:06:03,975 --> 00:06:05,130 Mitt navn er Zamyla. 115 00:06:05,130 --> 00:06:08,250 Jeg er en junior ingeniørutdanningen i Winthrop House. 116 00:06:08,250 --> 00:06:10,890 Men jeg prøve og passe på så mange informatikk kurs som jeg 117 00:06:10,890 --> 00:06:13,350 kan, det er derfor jeg er veldig spent på å være ledende dette 118 00:06:13,350 --> 00:06:14,590 Årets walkthroughs. 119 00:06:14,590 --> 00:06:16,950 Walkthroughs, for meg, var en viktig del av CS50 min 120 00:06:16,950 --> 00:06:17,910 erfaring. 121 00:06:17,910 --> 00:06:22,710 Under gjennomgang, for hver p-set, vil vi gå gjennom 122 00:06:22,710 --> 00:06:25,580 problemet satt sammen, se over problemene, type 123 00:06:25,580 --> 00:06:27,360 dele dem opp i håndterbare biter. 124 00:06:27,360 --> 00:06:28,990 Jeg skal gi deg tips, teknikker, for å få 125 00:06:28,990 --> 00:06:30,820 gjennom og komme i gang. 126 00:06:30,820 --> 00:06:33,510 Jeg håper å se dere alle på walkthroughs. 127 00:06:33,510 --> 00:06:34,720 Hvis du ikke kan gjøre det selv, så 128 00:06:34,720 --> 00:06:36,580 vennligst tune i nettet. 129 00:06:36,580 --> 00:06:36,840 >> DAVID MALAN: Excellent. 130 00:06:36,840 --> 00:06:37,950 Takk, Zamyla. 131 00:06:37,950 --> 00:06:40,870 Så skjønner at walkthroughs er faktisk på en fredag 132 00:06:40,870 --> 00:06:43,110 ettermiddag, men dette er hensikt ved design slik at 133 00:06:43,110 --> 00:06:45,750 selv om du ikke ønsker å delta i klassen på en fredag 134 00:06:45,750 --> 00:06:48,490 ettermiddag, vil videoene bli opp alle raskere enn 135 00:06:48,490 --> 00:06:48,990 helgen. 136 00:06:48,990 --> 00:06:51,880 Så innser at cs50.net vil være alle Zamyla er 137 00:06:51,880 --> 00:06:53,130 walkthroughs. 138 00:06:54,800 --> 00:06:56,890 Og at det er dagens dato og klokkeslett, 03:00, 139 00:06:56,890 --> 00:06:58,370 Harberd Hall, 104. 140 00:06:58,370 --> 00:07:00,080 Og noen av de pedagogiske stipendiatene har også utarbeidet 141 00:07:00,080 --> 00:07:03,250 noen merknader for deg i absentia for å gi deg litt av 142 00:07:03,250 --> 00:07:06,760 perspektiv på hva deres erfaring kommer inn og 143 00:07:06,760 --> 00:07:08,990 går ut av CS50 var. 144 00:07:08,990 --> 00:07:11,250 Så hvis vi kunne dempe lysene for bare et øyeblikk, gir jeg deg 145 00:07:11,250 --> 00:07:18,100 noen av CS50 ansatte. 146 00:07:18,100 --> 00:07:20,440 >> JACKSON Steinkamp: Jeg tok CS50 fjor som en førsteårsstudent i 147 00:07:20,440 --> 00:07:22,880 falle, og det absolutt blåste hodet mitt. 148 00:07:22,880 --> 00:07:25,090 Jeg hadde aldri tatt noen programmering klasser før, 149 00:07:25,090 --> 00:07:26,380 og aldri kom med noen informatikk 150 00:07:26,380 --> 00:07:27,320 oppleve det hele tatt. 151 00:07:27,320 --> 00:07:29,240 Og rettferdig, hørte jeg buzz om klassen og 152 00:07:29,240 --> 00:07:30,050 besluttet å ta den. 153 00:07:30,050 --> 00:07:31,780 >> JULIA MITELMAN: Det var virkelig moro, virkelig engasjerende. 154 00:07:31,780 --> 00:07:33,480 Jeg fortsatt til denne dag - 155 00:07:33,480 --> 00:07:36,560 Jeg har nettopp så jeg har diskett som David ga oss 156 00:07:36,560 --> 00:07:38,140 på vår første dag av forelesning. 157 00:07:38,140 --> 00:07:40,020 Jeg hadde hengt det på veggen min. 158 00:07:40,020 --> 00:07:42,410 Dette er trolig litt nerdete, men jeg hang på min 159 00:07:42,410 --> 00:07:46,930 veggen i løpet av klassen som en påminnelse om hvor kult det var. 160 00:07:46,930 --> 00:07:49,240 >> TRAVIS DOWNS: Det er så flaut. 161 00:07:49,240 --> 00:07:50,770 >> JACKSON Steinkamp: Informatikk er noe du 162 00:07:50,770 --> 00:07:52,370 bør prøve selv om du ikke er en for 163 00:07:52,370 --> 00:07:54,980 de tradisjonelle vitenskaper. 164 00:07:54,980 --> 00:07:58,510 Det er en egen opplevelse, og CS50 vil sørge for at du er 165 00:07:58,510 --> 00:08:01,520 støttet godt gjennom det med sin veritabel hær av TFS. 166 00:08:01,520 --> 00:08:03,700 >> ALI Nahm: Jeg tok det som en førsteårsstudent, og slik jeg har gjort mye 167 00:08:03,700 --> 00:08:04,215 av nye venner. 168 00:08:04,215 --> 00:08:07,170 Jeg fikk også introdusert til hele denne konsentrasjon og 169 00:08:07,170 --> 00:08:10,770 Hele School of Engineering, og så jeg anbefaler det 170 00:08:10,770 --> 00:08:14,360 og ønsker deg velkommen til vår CS50 familie. 171 00:08:14,360 --> 00:08:17,510 >> Yaniv YACOBY: CS50 lærer bare deg hvordan du bruker verktøy 172 00:08:17,510 --> 00:08:19,210 som er allment tilgjengelig. 173 00:08:19,210 --> 00:08:21,840 Du trenger bare en laptop, trenger du en nettleser, og du 174 00:08:21,840 --> 00:08:26,030 trenger å lære å skrive noen kode, og du kan virkelig bygge 175 00:08:26,030 --> 00:08:27,400 fiks ting. 176 00:08:27,400 --> 00:08:31,660 >> KAREN XIAO: Det er bare så kult å være i stand til å gjøre noe 177 00:08:31,660 --> 00:08:34,580 og har folk bruke det og ha folk ser det, og det er 178 00:08:34,580 --> 00:08:35,900 hva jeg virkelig elsker det. 179 00:08:35,900 --> 00:08:37,429 >> TIM McLaughlin: - en følelse av fellesskap, tror jeg, i dette 180 00:08:37,429 --> 00:08:39,470 Selvfølgelig mer enn noen annen kurs jeg har tatt så langt. 181 00:08:39,470 --> 00:08:41,350 Du er ikke bare å ta en annen - 182 00:08:41,350 --> 00:08:42,740 du ikke å fylle et annet krav. 183 00:08:42,740 --> 00:08:45,310 Du er ikke bare kommer til forelesninger og kommer til delen. 184 00:08:45,310 --> 00:08:49,630 Men du gjør tonnevis av ting som er alt om 185 00:08:49,630 --> 00:08:51,560 programmering og alt om teknologi, men det gjør ikke 186 00:08:51,560 --> 00:08:53,090 virkelig føler en klasse mesteparten av tiden. 187 00:08:53,090 --> 00:08:55,012 >> Travis DOWNS: Og på den første dagen, ga de ut kake, og 188 00:08:55,012 --> 00:08:56,215 Jeg ble umiddelbart solgt. 189 00:08:56,215 --> 00:08:57,822 >> JACOB PRITT: Gratis godteri og pizza. 190 00:08:57,822 --> 00:08:59,820 >> ZAMYLA CHAN: - uavhengig av rentenivå, tror jeg 191 00:08:59,820 --> 00:09:05,170 at CS50, vil du ha det gøy, og du vil være intellektuelt 192 00:09:05,170 --> 00:09:06,070 stimulert. 193 00:09:06,070 --> 00:09:07,926 >> MARK GROZEN-SMITH: Det er alltid en fest i klassen, og det er en 194 00:09:07,926 --> 00:09:09,990 fest hver kveld arbeider på p-set. 195 00:09:09,990 --> 00:09:11,880 >> JACKSON Steinkamp: Hver gang du fullfører et problem sett, du 196 00:09:11,880 --> 00:09:13,710 vil føle at du er ferdig med et prosjekt. 197 00:09:13,710 --> 00:09:16,580 >> MELISSA NIU: Det var freshman år, og jeg var ferdig shopping. 198 00:09:16,580 --> 00:09:19,030 Jeg hadde mine fire klasser klar, og jeg var i Annenberg. 199 00:09:19,030 --> 00:09:21,670 Og jeg borti en venn, og han sier hei, jeg handler 200 00:09:21,670 --> 00:09:24,330 denne klassen heter CS50, og du bør bli med meg. 201 00:09:24,330 --> 00:09:28,150 Endte opp med å ta det som faller, og etter at klassen, jeg 202 00:09:28,150 --> 00:09:30,510 tenkte kanskje jeg kommer til å mindre i CS. 203 00:09:30,510 --> 00:09:33,760 Men her er jeg, tre år senere, fortsatt studerer datamaskin 204 00:09:33,760 --> 00:09:36,680 vitenskap og faktisk gjør det som en stor, og jeg elsket hvert 205 00:09:36,680 --> 00:09:37,780 øyeblikk av det. 206 00:09:37,780 --> 00:09:39,030 >> Rob Bowden: Jeg har ingen anelse. 207 00:09:46,408 --> 00:09:48,060 >> ALI Nahm: La oss se. 208 00:09:48,060 --> 00:09:49,200 >> MELISSA NIU: Craziness. 209 00:09:49,200 --> 00:09:50,610 >> SPEAKER 1: Jeg føler at jeg vil bli veldig klisjé. 210 00:09:50,610 --> 00:09:52,530 Jeg vil bare si, liker, awesome. 211 00:09:52,530 --> 00:09:53,540 >> Yaniv YACOBY: Tilgjengelighet. 212 00:09:53,540 --> 00:09:55,080 >> JACOB PRITT: Gratis godteri og pizza. 213 00:09:55,080 --> 00:09:57,310 >> TRAVIS DOWNS: Kan ikke slå ned en klasse som deler ut kake. 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: La meg tenke på et svar. 217 00:10:02,636 --> 00:10:04,480 Jeg tror jeg har noe. 218 00:10:04,480 --> 00:10:07,092 Herregud. 219 00:10:07,092 --> 00:10:13,370 Ja, mitt navn er Rob Bowden, og dette CS50. 220 00:10:13,370 --> 00:10:16,340 >> [Applaus] 221 00:10:20,810 --> 00:10:23,390 DAVID MALAN: All right, så la oss begynne å male et bilde 222 00:10:23,390 --> 00:10:26,230 av hvilken retning vi kan gå, og la oss introdusere 223 00:10:26,230 --> 00:10:28,190 dette konseptet her kjent som pseudokode. 224 00:10:28,190 --> 00:10:29,560 Så pseudokode er ikke et programmeringsspråk 225 00:10:29,560 --> 00:10:30,810 språk for seg selv. 226 00:10:30,810 --> 00:10:33,250 Det er ikke noe teknisk per se, men det er bare en slags 227 00:10:33,250 --> 00:10:36,490 generell måte å uttrykke deg selv ganske presist, 228 00:10:36,490 --> 00:10:39,730 ganske algoritmer, ganske prosedyregenerert, men uten 229 00:10:39,730 --> 00:10:42,570 å måtte bekymre deg hvilket språk du uttrykker 230 00:10:42,570 --> 00:10:43,150 deg i. 231 00:10:43,150 --> 00:10:46,280 Det er noen modell av engelsk og programmeringsspråk med 232 00:10:46,280 --> 00:10:48,790 som du tilfeldigvis være kjent, slik at vi kan starte 233 00:10:48,790 --> 00:10:50,600 skrive denne typen ting som vi går. 234 00:10:50,600 --> 00:10:54,450 Og faktisk, Joseph, kunne jeg låne deg opp på scenen for å være 235 00:10:54,450 --> 00:10:55,490 skriftlærd her? 236 00:10:55,490 --> 00:11:00,130 Jeg har gått foran her på forhånd og glemt å sette 237 00:11:00,130 --> 00:11:02,920 på noen sokker i dag, og dette vil være blant våre mer 238 00:11:02,920 --> 00:11:03,780 latterlige eksempler. 239 00:11:03,780 --> 00:11:04,580 >> Nå, jeg trenger deg over her. 240 00:11:04,580 --> 00:11:05,630 Jeg skal gjøre det sokker del. 241 00:11:05,630 --> 00:11:08,040 Så her har vi en liten ripe pad. 242 00:11:08,040 --> 00:11:09,940 Dette er bokstavelig talt bare TextEdit i en Mac. 243 00:11:09,940 --> 00:11:12,270 Vi er ikke egentlig tenkt å skrive et kjørbart program, men 244 00:11:12,270 --> 00:11:14,220 vi bare kommer til å begynne å skissere ut pseudokode basert 245 00:11:14,220 --> 00:11:17,830 på noen av rådene du gir meg her. 246 00:11:17,830 --> 00:11:20,760 Så her er min haug av sokker hjemme. 247 00:11:20,760 --> 00:11:23,320 Jeg har ingen sokker på når jeg våkner om morgenen, og vi har nå 248 00:11:23,320 --> 00:11:26,280 trenger å skrive et program, en algoritme av former, som 249 00:11:26,280 --> 00:11:27,900 å få disse sokkene på føttene. 250 00:11:27,900 --> 00:11:30,860 Og langs veien, la oss se om vi turen over, eller støter, 251 00:11:30,860 --> 00:11:32,860 noen av de ideer som du nødt til å starte 252 00:11:32,860 --> 00:11:35,470 tenker mye mer på alvor når du programmerer 253 00:11:35,470 --> 00:11:37,950 lest programmene ikke oppfører seg helt som tiltenkt. 254 00:11:37,950 --> 00:11:39,580 >> Så jeg sitter her nede. 255 00:11:39,580 --> 00:11:41,180 Jeg har fått min haug av sokker. 256 00:11:41,180 --> 00:11:43,780 Hva er det første en fornuftig menneske ville 257 00:11:43,780 --> 00:11:46,600 gjøre når målet er å sette på et par sokker? 258 00:11:46,600 --> 00:11:49,190 Noen gi meg ett skritt, og bare ett trinn. 259 00:11:49,190 --> 00:11:49,796 Ja? 260 00:11:49,796 --> 00:11:50,690 PUBLIKUM: Bøy ned. 261 00:11:50,690 --> 00:11:54,290 DAVID MALAN: Bøy ned, Okay. 262 00:11:54,290 --> 00:11:55,540 Trinn to. 263 00:11:59,975 --> 00:12:00,645 Trinn to. 264 00:12:00,645 --> 00:12:01,840 PUBLIKUM: Plukk opp sokk. 265 00:12:01,840 --> 00:12:03,220 DAVID MALAN: Plukk opp sokk. 266 00:12:03,220 --> 00:12:07,610 Ok, er så liten tvetydighet her, og dette er en av de første 267 00:12:07,610 --> 00:12:09,380 anstøtsstener at vi skal bevisst 268 00:12:09,380 --> 00:12:10,290 møter her. 269 00:12:10,290 --> 00:12:14,110 Det er litt tvetydig, så plukke opp sokk. 270 00:12:14,110 --> 00:12:17,425 Greit, jeg tar denne, men en datamaskin, innser i bare en 271 00:12:17,425 --> 00:12:20,420 bit, ikke kommer til å ha den slags menneskelig instinkt å bare 272 00:12:20,420 --> 00:12:21,490 plukke den nærmeste. 273 00:12:21,490 --> 00:12:23,590 Vi kommer til å ha for å starte, før lang, uttrykker 274 00:12:23,590 --> 00:12:24,610 oss mer presist. 275 00:12:24,610 --> 00:12:26,600 >> All right, så trinn to er å plukke opp din sokk. 276 00:12:26,600 --> 00:12:27,520 Vi tar det. 277 00:12:27,520 --> 00:12:28,620 Trinn tre. 278 00:12:28,620 --> 00:12:29,532 I ryggen. 279 00:12:29,532 --> 00:12:30,900 PUBLIKUM: Finn et passende par. 280 00:12:30,900 --> 00:12:32,060 DAVID MALAN: finne matchende par. 281 00:12:32,060 --> 00:12:34,740 Ok, så dette er bra. 282 00:12:34,740 --> 00:12:35,650 Jeg måtte velge denne sokken. 283 00:12:35,650 --> 00:12:39,200 Så målet er å finne en matchende sokk nå, men hva 284 00:12:39,200 --> 00:12:39,990 betyr det? 285 00:12:39,990 --> 00:12:42,130 En fornuftig menneske, mye som på onsdag når jeg bare 286 00:12:42,130 --> 00:12:44,700 visste hvordan å finne Mike Smith i en telefonbok, bare slags 287 00:12:44,700 --> 00:12:45,640 gikk med instinkt deres. 288 00:12:45,640 --> 00:12:49,220 Men her er det tydeligvis denne sokken her, men en datamaskin 289 00:12:49,220 --> 00:12:51,350 ikke kommer til å være så instinktiv. 290 00:12:51,350 --> 00:12:53,830 En datamaskin er kommer til å ha en samling av biter, som vi 291 00:12:53,830 --> 00:12:55,380 diskutert på onsdag, og de er 292 00:12:55,380 --> 00:12:56,710 organisert måte i minnet. 293 00:12:56,710 --> 00:13:00,400 Men poenget er at en datamaskin har bare evnen 294 00:13:00,400 --> 00:13:03,390 å se på ting en om gangen, og faktisk, enda vi 295 00:13:03,390 --> 00:13:05,980 mennesker - selv om det føles som om jeg kikket ned og delt 296 00:13:05,980 --> 00:13:08,900 sekund senere jeg vet hvor sokken er, hjernen min og mine øyne 297 00:13:08,900 --> 00:13:12,000 antagelig gjorde en rask skumme av disse sokkene, og deretter låst 298 00:13:12,000 --> 00:13:13,400 på til en i spørsmålet. 299 00:13:13,400 --> 00:13:15,780 >> Så hvis vi være enda mer bevisste nå som en datamaskin, 300 00:13:15,780 --> 00:13:17,780 hvordan finner jeg denne matchende pair? 301 00:13:17,780 --> 00:13:18,890 Vel, vi må iterate. 302 00:13:18,890 --> 00:13:21,440 Vi må kanskje sløyfe over dette rotet av sokker på 303 00:13:21,440 --> 00:13:25,760 etasje der jeg sier noe sånt som FOR HVER sokk, plukke den 304 00:13:25,760 --> 00:13:30,195 opp, og hvis samme form og størrelse som den andre, SÅ 305 00:13:30,195 --> 00:13:32,150 dot, dot, dot, vil vi fortsette historien. 306 00:13:32,150 --> 00:13:34,430 Så for hver sokk, så jeg plukke opp dette. 307 00:13:34,430 --> 00:13:36,520 Jeg sjekke er denne lik denne. 308 00:13:36,520 --> 00:13:38,250 Det er ikke, så jeg legger til side side. 309 00:13:38,250 --> 00:13:39,220 Så jeg iterate igjen. 310 00:13:39,220 --> 00:13:40,340 Er dette en like? 311 00:13:40,340 --> 00:13:42,010 Nei, det er ikke, så jeg satte den til side. 312 00:13:42,010 --> 00:13:42,710 Er dette en? 313 00:13:42,710 --> 00:13:43,200 Nei. 314 00:13:43,200 --> 00:13:43,670 Denne? 315 00:13:43,670 --> 00:13:44,520 Nei, og så videre. 316 00:13:44,520 --> 00:13:48,730 Og så til slutt, forhåpentligvis vil jeg møte denne sokken her. 317 00:13:48,730 --> 00:13:51,350 Så hvis det er samme form, størrelse, ta den. 318 00:13:51,350 --> 00:13:53,980 >> Og nå, hva ville være vår neste skritt her? 319 00:13:53,980 --> 00:13:54,402 Ja? 320 00:13:54,402 --> 00:13:56,090 PUBLIKUM: Identifiser rett fra venstre. 321 00:13:56,090 --> 00:13:58,980 DAVID MALAN: Ok, identifisere høyre og venstre, så 322 00:13:58,980 --> 00:14:01,870 heldigvis, den slags fungerer. 323 00:14:01,870 --> 00:14:04,020 En liten symmetrisk, eller jeg har bare slitt dem på den måten. 324 00:14:04,020 --> 00:14:07,020 All right, så jeg har identifisert høyre. 325 00:14:07,020 --> 00:14:09,980 Og nå, før vi går videre, la meg påpeke hva Josefs 326 00:14:09,980 --> 00:14:12,890 gjort her som en slags bevandret programmerer. 327 00:14:12,890 --> 00:14:15,800 Så igjen, det er ingen måte å gjøre dette, men utover bare 328 00:14:15,800 --> 00:14:18,480 nummerering linjene, har Joseph allerede begynt å gjøre dette 329 00:14:18,480 --> 00:14:19,460 slags innrykk. 330 00:14:19,460 --> 00:14:21,950 Faktisk er dette en svært vanlig konvensjon i programmering, 331 00:14:21,950 --> 00:14:26,110 slik at når du noe iterativ, looping stil, som 332 00:14:26,110 --> 00:14:28,480 vi antyde med den engelske uttrykket "for hver 333 00:14:28,480 --> 00:14:31,090 sokk, "konvensjonen i pseudokode, og som vi skal se, 334 00:14:31,090 --> 00:14:33,410 normale programmeringsspråk, er å bare innrykk. 335 00:14:33,410 --> 00:14:36,240 Hit mellomromstasten et par ganger, traff Tab-tasten eller lignende, 336 00:14:36,240 --> 00:14:40,660 slik at nestet under "FOR HVER sokk" er del av 337 00:14:40,660 --> 00:14:43,430 ting som du trenger å gjøre som et resultat av at loop. 338 00:14:43,430 --> 00:14:45,940 Så det er alt som er å formidle semantisk. 339 00:14:45,940 --> 00:14:48,620 Nå i mellomtiden, den "Hvis det er den samme form og størrelse," den 340 00:14:48,620 --> 00:14:51,590 At "Take it" er innrykket videre bare betyr 341 00:14:51,590 --> 00:14:54,370 det er det eneste du bør gjøre hvis den tilstanden, 342 00:14:54,370 --> 00:14:59,770 hvis den grenen, som gaffel i veien, er faktisk sant. 343 00:14:59,770 --> 00:15:02,130 >> Så nå her, vi er på trinn fire, identifisere høyre og venstre. 344 00:15:02,130 --> 00:15:03,410 Jeg har identifisert riktig. 345 00:15:03,410 --> 00:15:05,150 Gi meg trinn fem. 346 00:15:05,150 --> 00:15:07,880 Og teknisk, kunne vi virkelig kalle 347 00:15:07,880 --> 00:15:09,510 det for hver ting - 348 00:15:09,510 --> 00:15:11,450 du bør nok telle alle linjene hvis 349 00:15:11,450 --> 00:15:12,190 vi kommer til å gjøre dette. 350 00:15:12,190 --> 00:15:14,006 JOSEPH: [uhørlig] 351 00:15:14,006 --> 00:15:14,610 DAVID MALAN: [uhørlig]? 352 00:15:14,610 --> 00:15:16,070 Ok, greit, greit, vi gjør det på din måte. 353 00:15:16,070 --> 00:15:19,590 All right, så trinn fem, hvordan gjør vi det riktige sokken? 354 00:15:19,590 --> 00:15:22,310 Hvordan går vi neste, her? 355 00:15:22,310 --> 00:15:22,730 Ja? 356 00:15:22,730 --> 00:15:24,300 PUBLIKUM: Løft opp høyre ben. 357 00:15:24,300 --> 00:15:27,100 DAVID MALAN: Løft opp høyre ben, Okay. 358 00:15:27,100 --> 00:15:29,330 Trinn seks? 359 00:15:29,330 --> 00:15:30,728 Raskt. 360 00:15:30,728 --> 00:15:31,202 Ja. 361 00:15:31,202 --> 00:15:33,100 PUBLIKUM: Finn en åpen ende av sokken. 362 00:15:33,100 --> 00:15:34,440 DAVID MALAN: Ok, finn den åpne enden av sokken. 363 00:15:34,440 --> 00:15:34,840 Så bra. 364 00:15:34,840 --> 00:15:37,180 Så her, ærlig, ville en svært vanlig instinkt bare være 365 00:15:37,180 --> 00:15:39,880 satt på høyre sokk, men som også er ganske tvetydig. 366 00:15:39,880 --> 00:15:42,750 Hvis ikke datamaskinen eller menneskelig vet nøyaktig hva det betyr, 367 00:15:42,750 --> 00:15:45,160 det er ikke til å være å utføre det, så her har jeg 368 00:15:45,160 --> 00:15:46,520 syntes åpningen av lager. 369 00:15:46,520 --> 00:15:48,222 Trinn sju? 370 00:15:48,222 --> 00:15:49,700 PUBLIKUM: Trykk tærne. 371 00:15:49,700 --> 00:15:51,070 DAVID MALAN: Touch tær. 372 00:15:51,070 --> 00:15:53,546 Ok, så nå går vi - 373 00:15:53,546 --> 00:15:56,480 Greit, jeg kommer til å ta noen friheter her. 374 00:15:56,480 --> 00:15:57,110 Takk. 375 00:15:57,110 --> 00:15:59,210 Trinn åtte? 376 00:15:59,210 --> 00:16:00,060 Sett på sokken. 377 00:16:00,060 --> 00:16:02,060 Ok, så nå har jeg, tror vi nær nok til å sortere av ta 378 00:16:02,060 --> 00:16:03,480 dette hjemme. 379 00:16:03,480 --> 00:16:05,980 Greit, så dette går opp. 380 00:16:05,980 --> 00:16:07,950 Jeg skal ta noen friheter med hva det betyr, faktisk. 381 00:16:07,950 --> 00:16:08,920 Sett sokk på. 382 00:16:08,920 --> 00:16:10,853 Greit, nå trinn ni? 383 00:16:10,853 --> 00:16:11,740 PUBLIKUM: Sett foten ned. 384 00:16:11,740 --> 00:16:12,510 DAVID MALAN: Takk. 385 00:16:12,510 --> 00:16:15,610 Trinn ni, satte foten ned, og nå kan vi gjenta. 386 00:16:15,610 --> 00:16:19,540 Så antagelig kan vi nå gå i takt 10 og si identifisere 387 00:16:19,540 --> 00:16:21,960 venstre sokk, men det er antagelig allerede har gjort. 388 00:16:21,960 --> 00:16:24,100 >> Og så da, kan jeg liksom gjenta disse trinnene. 389 00:16:24,100 --> 00:16:25,260 Men denne typen ber spørsmålet. 390 00:16:25,260 --> 00:16:28,100 Før, siste gang vi ønsket å gjenta noe, vi 391 00:16:28,100 --> 00:16:30,730 gjorde det iterativt, igjen og igjen, en FOR 392 00:16:30,730 --> 00:16:32,660 Hver loop så å si. 393 00:16:32,660 --> 00:16:36,420 Vil det være fornuftig å bruke en løkke for å håndtere både 394 00:16:36,420 --> 00:16:38,470 venstre og høyre sokk? 395 00:16:38,470 --> 00:16:40,460 Fordi det føles som disse operasjonene er ganske mye 396 00:16:40,460 --> 00:16:43,090 identiske med unntak av det faktum at en starter her og en 397 00:16:43,090 --> 00:16:44,850 starter her? 398 00:16:44,850 --> 00:16:47,400 Har vi loop, eller må vi bare holde skrive trinn 399 00:16:47,400 --> 00:16:48,745 10 og 11 og 12? 400 00:16:48,745 --> 00:16:50,540 PUBLIKUM: Loop. 401 00:16:50,540 --> 00:16:52,240 >> DAVID MALAN: Ok, så loop. 402 00:16:52,240 --> 00:16:54,730 Jeg har faktisk kunne ha sagt bare fortsette. 403 00:16:54,730 --> 00:16:55,720 Så hvorfor er det slik? 404 00:16:55,720 --> 00:16:57,940 Vel, dette er faktisk den første av våre ikke-åpenbare 405 00:16:57,940 --> 00:17:01,210 design beslutninger, og faktisk en av de beregninger som 406 00:17:01,210 --> 00:17:03,990 Vi vil begynne å vurdere, for oss selv og for deg som 407 00:17:03,990 --> 00:17:06,780 Kvaliteten på et program er bare hvor godt utviklet den er. 408 00:17:06,780 --> 00:17:09,619 Har du gjort minimalt med arbeid er nødvendig for å 409 00:17:09,619 --> 00:17:12,480 få jobben gjort mest raskt, enten i form av 410 00:17:12,480 --> 00:17:15,430 din tid eller i form av datamaskinens kjøretiden? 411 00:17:15,430 --> 00:17:17,589 Hvor mange operasjoner det tar å utføre? 412 00:17:17,589 --> 00:17:20,180 Så kanskje er dette en mulighet for en løkke fordi 413 00:17:20,180 --> 00:17:22,829 så snart jeg begynner å kopiere og lime inn, slik Joseph effektivt 414 00:17:22,829 --> 00:17:25,010 ville begynne å gjøre i et øyeblikk, er du snill for å kaste bort 415 00:17:25,010 --> 00:17:27,140 tid, og du blir dobbelt uttrykksfulle. 416 00:17:27,140 --> 00:17:30,260 >> Men på samme tid, dette er egentlig bare to spesielle 417 00:17:30,260 --> 00:17:31,890 tilfeller, venstre og høyre. 418 00:17:31,890 --> 00:17:34,930 Og mens før, kan jeg ha 10 eller 20 eller flere sokker i 419 00:17:34,930 --> 00:17:37,960 en haug, er det definitivt fornuftig ikke å ha 50 linjer med 420 00:17:37,960 --> 00:17:40,180 kode si sjekk denne sokken, så den neste, 421 00:17:40,180 --> 00:17:41,300 deretter den neste. 422 00:17:41,300 --> 00:17:43,450 Her er det litt mindre opplagt, og jeg ville foreslått 423 00:17:43,450 --> 00:17:44,390 at vi kunne gå begge veier. 424 00:17:44,390 --> 00:17:46,720 Vi kan enten ha som loop, selv om det bare looper 425 00:17:46,720 --> 00:17:50,620 to ganger, eller vi kan ganske enkelt kopiere og lime bare litt 426 00:17:50,620 --> 00:17:53,270 her for å få jobben gjort. 427 00:17:53,270 --> 00:17:55,210 Men dette programmet er buggy, så å si. 428 00:17:55,210 --> 00:17:59,120 Det kan ha noen feil, feil eller hjørne tilfeller, så å 429 00:17:59,120 --> 00:18:00,860 si, at vi virkelig ikke forutse. 430 00:18:00,860 --> 00:18:03,400 Ingenting gikk galt denne gangen, men hva kunne ha gått galt 431 00:18:03,400 --> 00:18:06,100 mens utføring dette programmet? 432 00:18:06,100 --> 00:18:07,040 PUBLIKUM: Du har ikke noen sokker. 433 00:18:07,040 --> 00:18:08,980 >> DAVID MALAN: Så det kan ikke være noen sokker der overhodet. 434 00:18:08,980 --> 00:18:10,380 Så la oss vurdere det hjørnet tilfelle. 435 00:18:10,380 --> 00:18:14,670 Så hvis vi kunne bla tilbake til steg en, så gå en var 436 00:18:14,670 --> 00:18:16,540 bøye seg ned, slik at sjekker ut. 437 00:18:16,540 --> 00:18:21,250 Trinn to, plukke opp sokk, men deretter finne matchende sokk, 438 00:18:21,250 --> 00:18:22,420 identifisere rett. 439 00:18:22,420 --> 00:18:25,050 Vi slags gjort en hel haug med forutsetninger, og dette er, 440 00:18:25,050 --> 00:18:27,720 ærlig, hvorfor programmet noen ganger krasjer. 441 00:18:27,720 --> 00:18:30,240 Hvis du, programmerer, har gjort visse forutsetninger, som 442 00:18:30,240 --> 00:18:33,000 sikkert det kommer til å bli sokker eller sikkert det kommer 443 00:18:33,000 --> 00:18:35,310 å være minne i datamaskinen, sikkert det kommer 444 00:18:35,310 --> 00:18:37,420 å være diskplass igjen på harddisken - 445 00:18:37,420 --> 00:18:39,040 Vel, hvis du gjør disse forutsetningene, og det er ikke, 446 00:18:39,040 --> 00:18:41,880 faktisk virkeligheten, hvem vet noen ganger hva datamaskinens 447 00:18:41,880 --> 00:18:42,520 kommer til å gjøre? 448 00:18:42,520 --> 00:18:44,450 Og noen ganger, når du får den spinnende badeball eller 449 00:18:44,450 --> 00:18:47,750 frossen Windows eller lignende, som er nettopp fordi noen 450 00:18:47,750 --> 00:18:50,980 programmerer forutså ikke de såkalte hjørne tilfeller. 451 00:18:50,980 --> 00:18:53,050 Hva annet kunne ha gått galt i dette programmet? 452 00:18:53,050 --> 00:18:53,330 Ja? 453 00:18:53,330 --> 00:18:55,950 >> PUBLIKUM: Du har ikke en høyre ben og en venstre ben. 454 00:18:55,950 --> 00:18:58,920 DAVID MALAN: Ok, kanskje ikke ha både en høyre ben og en 455 00:18:58,920 --> 00:19:01,940 venstre ben, og så dette programmet ikke kan være universelt 456 00:19:01,940 --> 00:19:02,590 aktuelt. 457 00:19:02,590 --> 00:19:03,658 Andre? 458 00:19:03,658 --> 00:19:05,650 PUBLIKUM: Du kan ha plukket opp en foreldreløs sokk. 459 00:19:05,650 --> 00:19:07,970 DAVID MALAN: Jeg kan ha plukket opp en foreldreløs sokk, så en 460 00:19:07,970 --> 00:19:11,250 ikke-samsvarende sokk som bare har noen søsken fordi jeg har 461 00:19:11,250 --> 00:19:13,650 mistet det, er det revet, er det i vask fortsatt, eller lignende. 462 00:19:13,650 --> 00:19:15,550 Slik at også ikke har virkelig blitt håndtert. 463 00:19:15,550 --> 00:19:15,790 Ja? 464 00:19:15,790 --> 00:19:17,510 PUBLIKUM: Du har kanskje allerede sokker på. 465 00:19:17,510 --> 00:19:19,050 DAVID MALAN: Jeg kan allerede ha sokker på. 466 00:19:19,050 --> 00:19:20,080 Jeg hadde faktisk ikke sjekke. 467 00:19:20,080 --> 00:19:23,350 HVIS du ikke har sokker på, og deretter fortsette å gjøre 468 00:19:23,350 --> 00:19:24,330 linje en og to. 469 00:19:24,330 --> 00:19:24,980 Og det kan skje. 470 00:19:24,980 --> 00:19:26,880 Du sovner med sokker på og lignende, så 471 00:19:26,880 --> 00:19:28,860 det også, en svært rimelig hjørne tilfelle. 472 00:19:28,860 --> 00:19:29,630 Og kanskje en annen? 473 00:19:29,630 --> 00:19:31,310 PUBLIKUM: Sokken er innsiden ut. 474 00:19:31,310 --> 00:19:34,000 DAVID MALAN: Så sokk er innsiden ut, så vi gjorde ingen feil 475 00:19:34,000 --> 00:19:35,330 sjekker, kort sagt. 476 00:19:35,330 --> 00:19:38,550 Vi gjorde ikke sjekke om tilstanden i verden er som vi forventer. 477 00:19:38,550 --> 00:19:41,310 Vi gjorde ikke sjekk hvis vi faktisk funnet det vi leter etter. 478 00:19:41,310 --> 00:19:43,310 >> Og selv om dette er liksom en latterlig eksempel 479 00:19:43,310 --> 00:19:46,110 involverer sokker, på slutten av dagen, er dette nøyaktig det 480 00:19:46,110 --> 00:19:48,740 slags tankesett må du ha når du skriver programmer, 481 00:19:48,740 --> 00:19:51,740 selv i Scratch samt i C, i JavaScript, i PHP, 482 00:19:51,740 --> 00:19:53,920 fordi ellers vil dine programmer fremvise den 483 00:19:53,920 --> 00:19:56,980 tilsvarende at spinning badeball eller bare gi 484 00:19:56,980 --> 00:19:58,210 unøyaktige resultater. 485 00:19:58,210 --> 00:20:00,250 Så mange takk her til våre skriftlærde Joseph. 486 00:20:00,250 --> 00:20:05,060 [Applaus] 487 00:20:05,060 --> 00:20:06,850 >> DAVID MALAN: All right, så hva er, i 488 00:20:06,850 --> 00:20:08,230 Faktisk et dataprogram? 489 00:20:08,230 --> 00:20:09,670 Vel, la oss ta et raskt blikk på en 490 00:20:09,670 --> 00:20:11,100 representant en her. 491 00:20:11,100 --> 00:20:15,260 Så dette er et program skrevet i et språk som heter C. C er 492 00:20:15,260 --> 00:20:17,830 ganske gamle i disse dager, men mange nyere språk er bygget 493 00:20:17,830 --> 00:20:18,460 på toppen av det. 494 00:20:18,460 --> 00:20:21,180 Faktisk, PHP, en av de web-sentriske språk vi vil 495 00:20:21,180 --> 00:20:24,050 bruke mot begrepet slutt, har selv det som kalles en 496 00:20:24,050 --> 00:20:27,550 tolk, et program som er skrevet i C, men mer om det 497 00:20:27,550 --> 00:20:28,690 i mange uker fra nå. 498 00:20:28,690 --> 00:20:30,840 Men dette programmet, og dette er hva det vil si å skrive en 499 00:20:30,840 --> 00:20:32,880 program, om enn en svært enkel en. 500 00:20:32,880 --> 00:20:35,540 Vi har noen ganske kryptisk syntaks her, men du kan 501 00:20:35,540 --> 00:20:38,340 sikkert gjette, selv om du aldri har programmert før, hva 502 00:20:38,340 --> 00:20:39,750 dette programmet gjør. 503 00:20:39,750 --> 00:20:43,640 Faktisk, jeg vet ikke hva printf er, men ut sikkert 504 00:20:43,640 --> 00:20:45,700 maner frem ideen om å skrive ut noe. 505 00:20:45,700 --> 00:20:48,590 Og så ja, er dette programmet slutt kommer til å skrive ut 506 00:20:48,590 --> 00:20:50,250 ordene "Hello, World." 507 00:20:50,250 --> 00:20:53,390 >> Nå, om du har en Mac eller en PC eller en Linux-datamaskin, odds 508 00:20:53,390 --> 00:20:55,550 er, i hvert fall hvis du lastet ned noen fritt 509 00:20:55,550 --> 00:20:58,000 tilgjengelig programvare, kan du ha vært å skrive programmer på 510 00:20:58,000 --> 00:21:00,310 din egen laptop for en stund nå. 511 00:21:00,310 --> 00:21:03,040 På Mac OS, for eksempel, er det dette programmet som heter 512 00:21:03,040 --> 00:21:05,340 Terminal som kommer med en Mac, det er vanligvis i 513 00:21:05,340 --> 00:21:07,550 Verktøy-mappen, og det åpner som regel en svart og 514 00:21:07,550 --> 00:21:09,820 hvitt eller hvitt og svart vindu der du har en 515 00:21:09,820 --> 00:21:11,410 spør hvor du kan skrive kommandoer. 516 00:21:11,410 --> 00:21:13,060 Så dette er faktisk minner om hva datamaskiner 517 00:21:13,060 --> 00:21:15,100 pleide å være før grafisk brukergrensesnitt 518 00:21:15,100 --> 00:21:16,710 grensesnitt, GUI, kom. 519 00:21:16,710 --> 00:21:19,200 Nå, i Windows, har du en lignende mekanisme i form 520 00:21:19,200 --> 00:21:20,130 av ledeteksten. 521 00:21:20,130 --> 00:21:23,430 >> Men hva jeg skal gjøre her er å åpne opp, la oss si, 522 00:21:23,430 --> 00:21:26,580 TextEdit igjen, så det samme programmet vi bruker for 523 00:21:26,580 --> 00:21:28,870 pseudokode et øyeblikk siden, og jeg kommer til å gå videre og 524 00:21:28,870 --> 00:21:30,080 skrive min første program. 525 00:21:30,080 --> 00:21:34,030 Inkluder stdio.h, uansett hva det betyr, int main 526 00:21:34,030 --> 00:21:36,880 ugyldig, uansett hva det betyr, og deretter i midten her, 527 00:21:36,880 --> 00:21:40,560 printf ("Hei, verden."). Og så tett sitat, 528 00:21:40,560 --> 00:21:42,340 lukk paren, semikolon. 529 00:21:42,340 --> 00:21:44,460 Nå skal jeg gå videre og bare trykke Kommando-S. Jeg skal 530 00:21:44,460 --> 00:21:47,650 å gå videre og lagre dette som hallo.c, så konvensjonen i 531 00:21:47,650 --> 00:21:50,530 verden av C-programmering er navnet på filen dot c. 532 00:21:50,530 --> 00:21:52,880 Jeg kommer til å bare sette i John Harvard hjemmekatalog, 533 00:21:52,880 --> 00:21:56,370 her, klikker du Lagre, og nå er jeg kommer til å gå over til denne 534 00:21:56,370 --> 00:21:59,110 terminal-vinduet, som igjen er svart og hvit spørsmål 535 00:21:59,110 --> 00:22:00,860 hvor jeg kan kjøre kommandoer. 536 00:22:00,860 --> 00:22:04,550 >> Jeg kan kjøre programmer ved å skrive navnet deres, ikke av 537 00:22:04,550 --> 00:22:06,710 dobbeltklikke ikoner i vanlig forstand. 538 00:22:06,710 --> 00:22:10,590 Men tingen er om C er at et språk som C første 539 00:22:10,590 --> 00:22:13,150 kommer i denne formen, som heter noe kildekode. 540 00:22:13,150 --> 00:22:15,400 Noe som ser litt ut som engelsk, men er 541 00:22:15,400 --> 00:22:17,980 definitivt mindre som engelsk enn Josefs pseudokode en 542 00:22:17,980 --> 00:22:18,930 øyeblikk siden. 543 00:22:18,930 --> 00:22:20,560 Det er litt mer uforståelige. 544 00:22:20,560 --> 00:22:22,830 Det synes å følge noen mønstre eller regler. 545 00:22:22,830 --> 00:22:25,300 Det faktum at jeg har klammeparentes, semikolon, sitater, 546 00:22:25,300 --> 00:22:28,240 vinkel bukseseler, føles som en datamaskin kom opp med dette 547 00:22:28,240 --> 00:22:29,250 slags språk. 548 00:22:29,250 --> 00:22:32,010 Men hvis jeg går nå, til denne terminalen vinduet, kan jeg kjøre en 549 00:22:32,010 --> 00:22:35,250 kommando som kommer til å konvertere kildekoden er 550 00:22:35,250 --> 00:22:36,610 noe som kalles objektkode. 551 00:22:36,610 --> 00:22:39,690 Det kommer til å konvertere engelsk-lignende syntaks til nuller 552 00:22:39,690 --> 00:22:41,760 og de, de samme slags nuller og enere vi 553 00:22:41,760 --> 00:22:42,820 snakket om onsdag. 554 00:22:42,820 --> 00:22:44,810 Nå kommer jeg til å kjøre en kommando som heter Clang. 555 00:22:44,810 --> 00:22:47,750 Mer om dette i ukene som kommer, men det er et program med 556 00:22:47,750 --> 00:22:52,330 som jeg kan konvertere hallo.c inn en hel haug 557 00:22:52,330 --> 00:22:53,640 av nuller og enere. 558 00:22:53,640 --> 00:22:54,950 >> Nå har jeg kjørt denne kommandoen. 559 00:22:54,950 --> 00:22:57,940 Jeg har kjørt Clang, og så sa jeg kjøre selv på denne filen 560 00:22:57,940 --> 00:23:00,630 kalt hallo.c, som jeg laget for et øyeblikk siden, og 561 00:23:00,630 --> 00:23:02,090 ingenting synes å skje. 562 00:23:02,090 --> 00:23:05,550 Men faktisk, hvis jeg stakk rundt mitt hjem katalog, ville jeg se 563 00:23:05,550 --> 00:23:09,620 at dette stupidly navngitte programmet a.out eksisterer nå. 564 00:23:09,620 --> 00:23:12,250 Dette er bare standardnavn for et program når du skriver i 565 00:23:12,250 --> 00:23:15,140 C. Vi kan overstyre dette til slutt, men a.out er 566 00:23:15,140 --> 00:23:18,340 Navnet på programmet jeg nettopp konvertert til nuller og enere. 567 00:23:18,340 --> 00:23:21,490 Og nå som det er nuller og enere, min Mac, i dette tilfellet, eller 568 00:23:21,490 --> 00:23:24,670 Windows-PC, kan forstå de bitene, de 569 00:23:24,670 --> 00:23:25,410 nuller og enere. 570 00:23:25,410 --> 00:23:29,130 Og så når jeg trykker på Enter, ser jeg "Hei, verden!" 571 00:23:29,130 --> 00:23:31,270 >> Men det er litt buggy. 572 00:23:31,270 --> 00:23:34,110 Jeg skjønte ikke helt si "Hei, verden: air: - jharvard." Air er 573 00:23:34,110 --> 00:23:35,020 navnet på datamaskinen min. 574 00:23:35,020 --> 00:23:37,730 Jharvard er navnet på kontoen, så hva gjorde jeg klart 575 00:23:37,730 --> 00:23:41,070 utelate fra programmet? 576 00:23:41,070 --> 00:23:42,480 En slags linjeskift. 577 00:23:42,480 --> 00:23:45,150 Jeg slo ikke tilsvarende Enter eller linjeskift, 578 00:23:45,150 --> 00:23:47,760 og dette er, igjen, testament til det faktum at datamaskiner kan 579 00:23:47,760 --> 00:23:49,800 bare gjøre det du ber dem om å gjøre. 580 00:23:49,800 --> 00:23:52,400 Og det faktum at jeg ikke fortelle datamaskinen flytte 581 00:23:52,400 --> 00:23:53,860 markøren til neste linje - 582 00:23:53,860 --> 00:23:55,200 vel, det er sikkert ikke kommer til å bare gjøre det 583 00:23:55,200 --> 00:23:56,750 dristet for meg. 584 00:23:56,750 --> 00:24:00,860 Så hvis jeg går tilbake til mitt program, og jeg sier \ n - 585 00:24:00,860 --> 00:24:03,180 Så \ n, som vi vil snart se, er veien for 586 00:24:03,180 --> 00:24:06,910 representerer rare ting som nye linje tegn, ting 587 00:24:06,910 --> 00:24:08,840 som ellers ville være resultatet av 588 00:24:08,840 --> 00:24:09,940 trykke Enter. 589 00:24:09,940 --> 00:24:11,730 Men for nå, bare vet at å trykke Enter ville 590 00:24:11,730 --> 00:24:14,170 bare gjøre vår kode ser merkelig, så verden besluttet, vet du 591 00:24:14,170 --> 00:24:16,580 hva, å holde ting penere, for å holde det på en linje, la oss 592 00:24:16,580 --> 00:24:19,070 bare si \ n representerer en ny linje. 593 00:24:19,070 --> 00:24:22,260 La meg resave filen min, gå tilbake til terminalen vinduet, og 594 00:24:22,260 --> 00:24:25,290 re-run a.out, Enter. 595 00:24:25,290 --> 00:24:28,374 Fortsatt buggy, men hvorfor? 596 00:24:28,374 --> 00:24:29,750 >> PUBLIKUM: [uhørlig] 597 00:24:29,750 --> 00:24:31,540 DAVID MALAN: Ja, så jeg trenger å rekompilere det. 598 00:24:31,540 --> 00:24:34,610 Så for å kompilere et program betyr bare konvertere den fra kilden 599 00:24:34,610 --> 00:24:37,660 kode for å objekt kode, kildekode til nuller og enere. 600 00:24:37,660 --> 00:24:40,830 Nå har det faktum at jeg traff Lagre i denne TextEdit no 601 00:24:40,830 --> 00:24:43,450 peiling på disse nuller og enere fordi jeg må først 602 00:24:43,450 --> 00:24:48,260 fortelle Clang hei, jeg har endret disse linjer med kode, 603 00:24:48,260 --> 00:24:49,040 kildekode. 604 00:24:49,040 --> 00:24:51,010 Du må regenerere a.out. 605 00:24:51,010 --> 00:24:52,990 Ingenting ser ut til å ha skjedd, men i en datamaskin, 606 00:24:52,990 --> 00:24:55,820 på en kommandolinje, så å si, når ingenting skjer, 607 00:24:55,820 --> 00:24:57,510 som vanligvis betyr alt er vel. 608 00:24:57,510 --> 00:24:59,040 Når noe skjer, betyr det 609 00:24:59,040 --> 00:25:00,420 du søl opp, generelt. 610 00:25:00,420 --> 00:25:04,020 >> Så la oss nå gå til a.out, og faktisk nå har jeg "Hei, 611 00:25:04,020 --> 00:25:04,440 verden. " 612 00:25:04,440 --> 00:25:05,990 Og nå, hva om disse nuller og enere? 613 00:25:05,990 --> 00:25:07,520 Hvor, faktisk er de? 614 00:25:07,520 --> 00:25:10,710 Vel, jeg kan egentlig ikke bare slags rote rundt svært 615 00:25:10,710 --> 00:25:11,210 effektivt. 616 00:25:11,210 --> 00:25:12,650 La meg åpne opp TextEdit. 617 00:25:12,650 --> 00:25:14,060 Her er a.out. 618 00:25:14,060 --> 00:25:17,390 La meg gå videre og åpne denne, og dette er tydeligvis hva min 619 00:25:17,390 --> 00:25:19,080 Programmet ser ut. 620 00:25:19,080 --> 00:25:21,570 Så jeg har åpnet, ikke hallo.c, men a.out. 621 00:25:21,570 --> 00:25:23,960 Men dette er faktisk ikke hva mitt program egentlig er. 622 00:25:23,960 --> 00:25:26,450 Åpenbart er dette en slags alfabetiske tegn. 623 00:25:26,450 --> 00:25:28,670 Jeg ser ingen nuller og enere, men dette er 624 00:25:28,670 --> 00:25:30,780 fordi a.out er et program. 625 00:25:30,780 --> 00:25:33,540 Nuller og enere - men TextEdit, som navnet antyder, er det 626 00:25:33,540 --> 00:25:37,130 akkurat som Notisblokk i Windows, er bare en tekst editor, så det er 627 00:25:37,130 --> 00:25:39,730 forvirrende alle disse nuller og enere som 628 00:25:39,730 --> 00:25:41,870 om de var, hva? 629 00:25:41,870 --> 00:25:43,380 ASCII-tegn. 630 00:25:43,380 --> 00:25:45,020 >> Så husker på onsdag, vi bare kom opp med denne 631 00:25:45,020 --> 00:25:48,740 vilkårlig kartlegging av tall, eller biter, til bokstavene i 632 00:25:48,740 --> 00:25:51,690 alfabet og tegnsetting symboler og lignende. 633 00:25:51,690 --> 00:25:54,920 Så TextEdit, at det er en tekst editor er mistolking 634 00:25:54,920 --> 00:25:57,270 disse mønstrene av nuller og enere som er ment å være 635 00:25:57,270 --> 00:25:59,990 utskrift ord, som "Hei, verden." Det er å vise dem 636 00:25:59,990 --> 00:26:02,150 som ASCII, og det er derfor det ser litt rotete. 637 00:26:02,150 --> 00:26:04,910 Nå er det noen hint av riktigheten i her. 638 00:26:04,910 --> 00:26:08,090 Legg merke til om jeg fremheve, det er et snev av faktisk "Hei, 639 00:26:08,090 --> 00:26:10,810 verden ", så et sted i dette programmet er 640 00:26:10,810 --> 00:26:12,120 setningen jeg skrev. 641 00:26:12,120 --> 00:26:14,610 Men la oss gå videre og ser nå med et annet program. 642 00:26:14,610 --> 00:26:17,420 Dette er ikke en vi vil bruke så ofte, men det kommer også med 643 00:26:17,420 --> 00:26:19,970 en Mac og vil være inne i CS50 apparatet. 644 00:26:19,970 --> 00:26:23,940 La meg gå videre og åpne med et program som heter XXD. 645 00:26:23,940 --> 00:26:26,530 >> Tilbake i dag, var de fleste programmer som heter ganske kryptisk, 646 00:26:26,530 --> 00:26:28,200 og så trenden fortsetter. 647 00:26:28,200 --> 00:26:31,160 Men-b betyr spytte dette programmet ut binært. 648 00:26:31,160 --> 00:26:32,330 Ikke kjøre den. 649 00:26:32,330 --> 00:26:35,770 Vise det til meg som nuller og enere, og dette er C 650 00:26:35,770 --> 00:26:37,190 programmere vi bare skrev. 651 00:26:37,190 --> 00:26:39,920 Nå, jeg, som et menneske her, jeg ærlig har ingen anelse om hva 652 00:26:39,920 --> 00:26:42,230 disse ulike mønstre av nuller og enere representerer. 653 00:26:42,230 --> 00:26:45,320 Tilbake i dag, jeg, med mine hullkort eller lignende, ville 654 00:26:45,320 --> 00:26:48,080 faktisk nødt til å slå opp hva disse ulike mønstre av 655 00:26:48,080 --> 00:26:51,560 01111000, faktisk representerer. 656 00:26:51,560 --> 00:26:54,390 Eller verre, ville jeg trenger å gjøre punching eller etablering 657 00:26:54,390 --> 00:26:56,130 av disse mønstrene av nuller og enere. 658 00:26:56,130 --> 00:27:00,410 Men for nå, ta på tro at en CPU, Intel inne, så 659 00:27:00,410 --> 00:27:03,440 å snakke, på innsiden av alle våre datamaskiner i disse dager, vet 660 00:27:03,440 --> 00:27:05,100 hvordan man skal tolke disse nuller og enere. 661 00:27:05,100 --> 00:27:07,010 Og noen nuller og enere betyr print. 662 00:27:07,010 --> 00:27:09,040 Noen nuller og enere betyr spille av en lyd. 663 00:27:09,040 --> 00:27:13,630 Noen nuller og enere betyr ta brukerens input fra et tastatur. 664 00:27:13,630 --> 00:27:15,960 Det er alle slags forskjellige mønstre, men vi heldigvis, 665 00:27:15,960 --> 00:27:19,680 som mennesker, bare generelt trenger å bekymre deg programmering på 666 00:27:19,680 --> 00:27:21,270 dette ganske høyere nivå. 667 00:27:21,270 --> 00:27:24,320 Og i andre CS klasser kan du fordype deg ned dypere og se 668 00:27:24,320 --> 00:27:26,820 på ting som de nuller og enere, eller enda 669 00:27:26,820 --> 00:27:28,000 andre ting fortsatt. 670 00:27:28,000 --> 00:27:29,210 >> Så la oss nå konvertere dette. 671 00:27:29,210 --> 00:27:32,550 La oss bevege seg svært raskt bort fra C og flytte til noe 672 00:27:32,550 --> 00:27:36,390 litt mer trøstende, litt mer spennende ved at 673 00:27:36,390 --> 00:27:39,340 vi kan få tilbake våre animasjoner og lyder og sånn 674 00:27:39,340 --> 00:27:40,940 klart har rømt oss i denne 675 00:27:40,940 --> 00:27:42,480 ganske primitive grensesnitt. 676 00:27:42,480 --> 00:27:46,430 Så denne samme programmet i C kan representeres nå i denne 677 00:27:46,430 --> 00:27:50,060 programmeringsspråk kalt Scratch som følger. 678 00:27:50,060 --> 00:27:54,230 Dette tilsvarer dette hello world program skrevet i 679 00:27:54,230 --> 00:27:57,370 dette puslespillet stykke stil språk kalt Scratch. 680 00:27:57,370 --> 00:28:00,600 Så la meg gå videre og åpne opp dette veldig programmet. 681 00:28:00,600 --> 00:28:01,850 Det er igjen kalt Scratch. 682 00:28:01,850 --> 00:28:03,880 Det er fritt tilgjengelig, og dette er det samme vi 683 00:28:03,880 --> 00:28:05,120 startet i dag på. 684 00:28:05,120 --> 00:28:07,790 >> Så dette her er Scratch, og det er brutt opp i noen 685 00:28:07,790 --> 00:28:09,700 forskjellige stykker. 686 00:28:09,700 --> 00:28:12,690 På toppen til høyre, har vi den såkalte scenen, og 687 00:28:12,690 --> 00:28:13,670 faktisk, det er der cookies 688 00:28:13,670 --> 00:28:15,440 utført bare litt siden. 689 00:28:15,440 --> 00:28:19,660 Og på det stadiet er ting som kalles sprites, tegn eller 690 00:28:19,660 --> 00:28:21,030 gjenstander eller enheter. 691 00:28:21,030 --> 00:28:23,320 Det spiller egentlig ingen rolle hvor du tenker på dem, men de 692 00:28:23,320 --> 00:28:26,740 er programmerbare, bevegelige ting, og i dette tilfellet er dette 693 00:28:26,740 --> 00:28:30,730 program som vår student skrev har et par pepperkaker 694 00:28:30,730 --> 00:28:32,990 cookies, et par sirkulære informasjonskapsler, en hel haug av 695 00:28:32,990 --> 00:28:35,430 hjerter, en hel haug av briller. 696 00:28:38,170 --> 00:28:42,420 På grunn av dette, er han eller hun i stand til å programmere hver av dem 697 00:28:42,420 --> 00:28:44,720 individuelle tegn for seg. 698 00:28:44,720 --> 00:28:46,480 >> Nå hva betyr det å programmere disse tegnene? 699 00:28:46,480 --> 00:28:49,440 Vel, la meg gå videre og klikk på denne venstre cookie 700 00:28:49,440 --> 00:28:51,830 og blar over til venstre her. 701 00:28:51,830 --> 00:28:53,670 I øvre venstre av skjermen min er nå 702 00:28:53,670 --> 00:28:55,280 såkalte skript området. 703 00:28:55,280 --> 00:28:58,790 Dette er liksom en blank tavle, i utgangspunktet, hvorpå jeg kan 704 00:28:58,790 --> 00:29:01,540 dra og slipp brikkene som, ærlig, 705 00:29:01,540 --> 00:29:03,020 nøyaktig hva de sier. 706 00:29:03,020 --> 00:29:05,820 På toppen av denne bunken av brikkene er ordet 707 00:29:05,820 --> 00:29:09,340 Når Grønt Flagg Clicked, og hvis du ikke merke før, 708 00:29:09,340 --> 00:29:12,300 måten jeg startet som cookie sangen ble klikke, bokstavelig talt, 709 00:29:12,300 --> 00:29:13,320 et grønt flagg. 710 00:29:13,320 --> 00:29:16,590 Slik at puslespillbit øverst til venstre der betyr når 711 00:29:16,590 --> 00:29:19,780 menneskelige klikk den grønne flagg, fortsatte å gjøre 712 00:29:19,780 --> 00:29:21,110 følgende ting. 713 00:29:21,110 --> 00:29:23,330 >> Nå, hva gjorde de cookie fortsette å gjøre? 714 00:29:23,330 --> 00:29:25,810 Jeg vet egentlig ikke hvordan du skal tolke dette ennå, men det 715 00:29:25,810 --> 00:29:29,220 cookie tilsynelatende satt sin groove til null, så det ventet 716 00:29:29,220 --> 00:29:31,740 tre sekunder, deretter skiftet gruppe til en, så det 717 00:29:31,740 --> 00:29:33,590 ventet et sekund, så det skiftet 718 00:29:33,590 --> 00:29:35,100 groove tilbake til en. 719 00:29:35,100 --> 00:29:37,373 Og så dette ser faktisk ut som en bit av en bug, bør ikke 720 00:29:37,373 --> 00:29:39,440 må endre sin groove igjen og igjen med mindre det er 721 00:29:39,440 --> 00:29:43,380 endres andre steder, men disse trinnene er det som er 722 00:29:43,380 --> 00:29:46,800 dikterer atferden til denne spesielle cookie. 723 00:29:46,800 --> 00:29:49,180 Så la oss faktisk bla tilbake og ikke se på noe 724 00:29:49,180 --> 00:29:50,430 ganske så komplisert ennå. 725 00:29:50,430 --> 00:29:52,260 La meg gå videre og gå til File, New, 726 00:29:52,260 --> 00:29:53,560 og få et rent rulleblad. 727 00:29:53,560 --> 00:29:56,590 >> Så nå, jeg faktisk har en tom script område, en tom scene, 728 00:29:56,590 --> 00:29:59,380 med vår standard sprite Scratch, og øverst til venstre 729 00:29:59,380 --> 00:30:01,670 på skjermen min har jeg pallen av alle sine 730 00:30:01,670 --> 00:30:03,400 tilgjengelige brikkene. 731 00:30:03,400 --> 00:30:06,300 Og vi vil ikke gå gjennom nesten at mange av disse tingene 732 00:30:06,300 --> 00:30:09,470 i dag fordi, igjen, de fleste er selvforklarende, men vi vil 733 00:30:09,470 --> 00:30:12,370 forsøker å kategorisere dem og påpeke likhetene 734 00:30:12,370 --> 00:30:15,380 med disse fremtidige språk som vi vil dykke. 735 00:30:15,380 --> 00:30:19,180 Og øverst til venstre her er den første Når Grønt Flagg Clicked, 736 00:30:19,180 --> 00:30:22,170 så la meg dra dette over her, zoome ut litt. 737 00:30:22,170 --> 00:30:25,780 Og hvis jeg klikker på den grønne flagg, skjer det ingenting egentlig fordi 738 00:30:25,780 --> 00:30:29,360 Jeg har ikke festet noen logikk, noen uttalelse så å si, til 739 00:30:29,360 --> 00:30:31,040 at grønt flagg, så la meg gå opp til 740 00:30:31,040 --> 00:30:32,500 kategoriene over her. 741 00:30:32,500 --> 00:30:34,840 Jeg er for tiden i Control kategorien. 742 00:30:34,840 --> 00:30:37,630 Jeg istedenfor kommer til å gå ned til Looks kategori, og 743 00:30:37,630 --> 00:30:39,970 det er en hel haug med ting her som sier Say, 744 00:30:39,970 --> 00:30:43,110 Tenk, endre farge, Switch Costume. 745 00:30:43,110 --> 00:30:44,860 >> Så du kan gjøre dumme ting med kostymer og 746 00:30:44,860 --> 00:30:45,870 lyder og lignende. 747 00:30:45,870 --> 00:30:49,970 La meg gå videre og bare si si, og nå merker som jeg drar 748 00:30:49,970 --> 00:30:52,940 og slippe dette puslespillet stykke, det kommer til å ønske å klinke 749 00:30:52,940 --> 00:30:55,010 inn i den tilsvarende form. 750 00:30:55,010 --> 00:30:58,020 Så når jeg går videre og gi slipp på musen min, låse de 751 00:30:58,020 --> 00:31:01,770 sammen, og nå hvis jeg går over her og klikk på den grønne flagg, 752 00:31:01,770 --> 00:31:05,910 katten sier faktisk hei fordi det er hva som er inni 753 00:31:05,910 --> 00:31:06,980 av denne hvite boksen. 754 00:31:06,980 --> 00:31:08,900 Vi vil snart se at denne hvite boksen er det som kalles en 755 00:31:08,900 --> 00:31:10,250 argument, eller en parameter. 756 00:31:10,250 --> 00:31:12,560 Det er en måte for å endre virkemåten av, i dette tilfellet, en 757 00:31:12,560 --> 00:31:15,070 puslespill brikke, men hvis jeg ønsker å si nøyaktig hva jeg sa 758 00:31:15,070 --> 00:31:18,610 før, si hei, verden, kan jeg nå gå tilbake over her, 759 00:31:18,610 --> 00:31:21,990 Klikk play, og "Hello, World" er hva som er sagt. 760 00:31:21,990 --> 00:31:24,340 >> Så vi er bokstavelig talt programmering nå. 761 00:31:24,340 --> 00:31:27,540 Det er ikke alle som overbevisende av et program, men minst 762 00:31:27,540 --> 00:31:30,140 det er litt mer overbevisende enn noe som ser, på 763 00:31:30,140 --> 00:31:31,300 første øyekast, som dette. 764 00:31:31,300 --> 00:31:34,190 Og vi kan raskt få enda mer uttrykksfulle 765 00:31:34,190 --> 00:31:36,600 fordi i Scratch, som i andre språk, er det all 766 00:31:36,600 --> 00:31:40,010 slags setninger, ikke bare si eller skrive noe, men 767 00:31:40,010 --> 00:31:42,650 du kan gjøre ting som venter, som vi nettopp så med 768 00:31:42,650 --> 00:31:44,240 informasjonskapselen, noen flere sekunder. 769 00:31:44,240 --> 00:31:46,440 Du kan spille av lyder i miljøet av Scratch bare 770 00:31:46,440 --> 00:31:49,050 som du kan i et vanlig dataprogram spille lyd. 771 00:31:49,050 --> 00:31:52,440 Du kan sjekke det som kalles boolske uttrykk. 772 00:31:52,440 --> 00:31:55,630 Så nå, la oss begynne å legge til vår verktøykasse noen terminologi 773 00:31:55,630 --> 00:31:58,840 som relaterer faktisk med det eksemplaret som Josef og jeg gjorde 774 00:31:58,840 --> 00:32:00,080 her med sokker. 775 00:32:00,080 --> 00:32:03,040 Så uttalelser er bare faktaopplysninger. 776 00:32:03,040 --> 00:32:04,160 Gjør dette. 777 00:32:04,160 --> 00:32:07,370 Et direktiv for sprite, eller meg menneskelig, å gjøre noe. 778 00:32:07,370 --> 00:32:10,420 Et boolsk uttrykk er noe som har en verdi, en 779 00:32:10,420 --> 00:32:14,580 såkalte sannheten verdi, det er enten en null eller en, falske eller 780 00:32:14,580 --> 00:32:17,890 sant, av eller på, eller ingen ja. 781 00:32:17,890 --> 00:32:19,730 Spiller egentlig ingen rolle hvordan du tenker på dette, men det er en 782 00:32:19,730 --> 00:32:20,700 binær tilstand. 783 00:32:20,700 --> 00:32:22,610 Som Nate diskutert i onsdagens video, to 784 00:32:22,610 --> 00:32:23,570 forskjellige ting. 785 00:32:23,570 --> 00:32:25,740 >> Så i Scratch, boolske uttrykk tilfeldigvis se 786 00:32:25,740 --> 00:32:28,910 som disse blå gjenstander her, og i dette tilfellet, er spørsmålet 787 00:32:28,910 --> 00:32:30,960 mark innebærer at du spør et spørsmål. 788 00:32:30,960 --> 00:32:34,250 Er katten, eller sprite, rørende musepekeren? 789 00:32:34,250 --> 00:32:36,580 Så dette er bare ett eksempel på en Scratch blokk som kommer 790 00:32:36,580 --> 00:32:39,950 å tillate oss å sjekke ja eller nei, er musen berøre 791 00:32:39,950 --> 00:32:40,790 sprite på skjermen? 792 00:32:40,790 --> 00:32:42,840 Og dette kan være nyttig hvis du faktisk ønsker å gjøre ting 793 00:32:42,840 --> 00:32:43,820 med musen. 794 00:32:43,820 --> 00:32:46,470 I tillegg til boolske uttrykk, har vi ting 795 00:32:46,470 --> 00:32:49,110 som er musen ned, slik at du kan oppdage den slags 796 00:32:49,110 --> 00:32:50,200 spørsmålet også. 797 00:32:50,200 --> 00:32:52,590 Vi kan gjøre matematikk hvis du faktisk ønsker, og det er 798 00:32:52,590 --> 00:32:55,170 faktisk mer overbevisende bruksområder for denne enn bare ren av 799 00:32:55,170 --> 00:32:56,400 aritmetikk, som vi skal se. 800 00:32:56,400 --> 00:32:59,690 Pseudo tilfeldigheten og gjør programmet ser ut til å tenke 801 00:32:59,690 --> 00:33:03,490 eller oppfører seg annerledes basert på noen tilsynelatende tilfeldige verdier, 802 00:33:03,490 --> 00:33:06,610 og da har vi ting som boolske uttrykk som AND. 803 00:33:06,610 --> 00:33:08,830 Så hvis du faktisk ønsker å sjekke to verdier, vil vi se på 804 00:33:08,830 --> 00:33:11,110 Skrap at vi faktisk kan teste om dette er 805 00:33:11,110 --> 00:33:13,190 sant, og dette er sant. 806 00:33:13,190 --> 00:33:15,300 For eksempel, i tilfelle av mine sokker, jeg kunne har på 807 00:33:15,300 --> 00:33:19,045 Helt til slutt stilte spørsmålet om venstre sokk er på og rett sokk 808 00:33:19,045 --> 00:33:20,610 er på, sluttet. 809 00:33:20,610 --> 00:33:22,710 Du er ferdig for dagen, så det ville være en 810 00:33:22,710 --> 00:33:24,300 mulighet for det. 811 00:33:24,300 --> 00:33:27,740 >> Så la oss gå videre og prøve å sette noen av disse sammen 812 00:33:27,740 --> 00:33:31,570 og gå inn i et par eksempler mer 813 00:33:31,570 --> 00:33:32,610 overbevisende enn dette. 814 00:33:32,610 --> 00:33:35,770 Så la meg gå videre her og åpne opp noen av eksemplene 815 00:33:35,770 --> 00:33:38,350 som alltid vil være på kursets hjemmeside også, og 816 00:33:38,350 --> 00:33:39,870 åpne opp hello2. 817 00:33:39,870 --> 00:33:42,910 Så i hello2 her har vi et program som gjør noen 818 00:33:42,910 --> 00:33:46,290 ting, men det er ikke å gjøre det så effektivt som vi kan. 819 00:33:46,290 --> 00:33:48,900 Så her står det "Hei, verden" i ett sekund, og deretter venter 820 00:33:48,900 --> 00:33:49,450 et sekund. 821 00:33:49,450 --> 00:33:51,720 Og gjør da det igjen, og deretter gjør det igjen. 822 00:33:51,720 --> 00:33:55,530 Så hvis jeg klikker på den grønne flagget, sier Scratch "Hello, world. 823 00:33:55,530 --> 00:33:57,160 Hei, verden. 824 00:33:57,160 --> 00:34:00,080 Hei, verden. "Og dette er åpenbart kandidat nå 825 00:34:00,080 --> 00:34:00,860 forbedring. 826 00:34:00,860 --> 00:34:03,070 >> Hva er marginal forbedring, forhåpentligvis, kan vi 827 00:34:03,070 --> 00:34:07,610 nå gjøre hvis Scratch støtter konseptet? 828 00:34:07,610 --> 00:34:08,310 En slags loop. 829 00:34:08,310 --> 00:34:10,960 En slags repetisjon, nå, ville være hyggelig, så la meg 830 00:34:10,960 --> 00:34:11,920 faktisk prøve det. 831 00:34:11,920 --> 00:34:13,870 La meg faktisk gå og flytte denne. 832 00:34:13,870 --> 00:34:16,449 Så varsel kan koble blokker like enkelt som du kan legge til 833 00:34:16,449 --> 00:34:17,420 feste dem. 834 00:34:17,420 --> 00:34:20,730 La meg gå under kontroll, bla nedover her, og ja, 835 00:34:20,730 --> 00:34:24,000 Det er dette puslespillet stykke her, Gjenta og Forever and 836 00:34:24,000 --> 00:34:24,870 Alltid If. 837 00:34:24,870 --> 00:34:28,500 Så det er en rekke måter å uttrykke looping konstruksjoner 838 00:34:28,500 --> 00:34:29,340 i Scratch. 839 00:34:29,340 --> 00:34:31,730 Den jeg sannsynligvis vil her er ikke alltid fordi jeg bare 840 00:34:31,730 --> 00:34:34,639 ønsker at dette skal skje tre ganger, men sannsynligvis Gjenta. 841 00:34:34,639 --> 00:34:38,449 Så la meg dra Gjenta over her, dra og slipp den, og 842 00:34:38,449 --> 00:34:42,530 nå i stedet for å si "Hei, verden" tre ganger, 843 00:34:42,530 --> 00:34:44,230 la meg dra dette puslespillet stykke her. 844 00:34:44,230 --> 00:34:46,610 Og selv om det ikke synes å passe, er programmet smart 845 00:34:46,610 --> 00:34:48,920 nok til å innse det vil vokse til å fylle, så det er det 846 00:34:48,920 --> 00:34:51,270 figurer som materie og ikke den absolutte størrelse. 847 00:34:51,270 --> 00:34:54,030 La meg endre repetisjon til tre, og nå la meg gå 848 00:34:54,030 --> 00:34:56,560 fremover og dra vente ett sekund i der også. 849 00:34:56,560 --> 00:34:59,220 Det kommer til å knipse i så vel, og så nå skal jeg dra 850 00:34:59,220 --> 00:35:01,370 disse gutta over her og bare kaste dem bort fordi jeg 851 00:35:01,370 --> 00:35:02,710 trenger dem ikke lenger. 852 00:35:02,710 --> 00:35:05,920 La meg zoome ut og klikk på den grønne flagget nå, og vi har 853 00:35:05,920 --> 00:35:09,600 samme program, men som jeg spådde før, bedre 854 00:35:09,600 --> 00:35:12,200 designet fordi du kan forestille deg hvor ille dette programmet 855 00:35:12,200 --> 00:35:14,410 ville komme, sikkert estetisk, hvis du måtte 856 00:35:14,410 --> 00:35:16,640 begynner å kopiere og lime inn, kopiere og lime inn, eller 857 00:35:16,640 --> 00:35:20,020 dra og slippe de samme darn ting igjen og igjen. 858 00:35:20,020 --> 00:35:22,260 >> Nå, bare si ting på skjermen, skrive til 859 00:35:22,260 --> 00:35:25,350 skjermen, egentlig alt ikke så spennende, så la oss åpne en 860 00:35:25,350 --> 00:35:26,580 tredje avviket her. 861 00:35:26,580 --> 00:35:29,810 Og nå, som du ser, vil dette raskt bli irriterende - 862 00:35:29,810 --> 00:35:30,850 [MEOW] 863 00:35:30,850 --> 00:35:31,940 DAVID MALAN: - men det er også litt søt. 864 00:35:31,940 --> 00:35:35,244 [MEOW] 865 00:35:35,244 --> 00:35:37,460 DAVID MALAN: Ok, så bedre, og vi kan sikkert bruke det 866 00:35:37,460 --> 00:35:41,060 samme overgangen chunking dette opp i en loop 867 00:35:41,060 --> 00:35:43,520 struktur, men la oss gjøre det mer interessant likevel. 868 00:35:43,520 --> 00:35:47,480 >> La meg gå videre og åpne opp kvart varians her, hvor jeg 869 00:35:47,480 --> 00:35:50,020 ta ting et skritt videre. 870 00:35:50,020 --> 00:35:54,450 Så ifølge dette, dum om dette er først 871 00:35:54,450 --> 00:35:58,530 øyekast, er hva dette programmet kommer til å gjøre? 872 00:35:58,530 --> 00:35:59,790 Det kommer til å meow gang. 873 00:35:59,790 --> 00:36:00,160 Hvorfor? 874 00:36:00,160 --> 00:36:03,340 Vel, man er, så vidt jeg vet, alltid mindre enn to. 875 00:36:03,340 --> 00:36:04,890 Det er ingen forestilling om tilfeldigheter her. 876 00:36:04,890 --> 00:36:07,240 Jeg har bokstavelig hardkodet en og to, men dette er et 877 00:36:07,240 --> 00:36:10,370 eksempel nå for å faktisk bruke en boolsk uttrykk. 878 00:36:10,370 --> 00:36:13,650 Mye som som Josef gjorde i pseudokode hans innrykket IF 879 00:36:13,650 --> 00:36:17,170 du finne matchende sokker gjør deretter følgende, her har vi 880 00:36:17,170 --> 00:36:19,750 et uttrykk hvis man er mindre enn to DERETTER - 881 00:36:19,750 --> 00:36:21,820 og faktisk enda vi har en liten bit av innrykk, 882 00:36:21,820 --> 00:36:24,480 hvor den lilla er litt innrykket til høyre - 883 00:36:24,480 --> 00:36:26,600 Da er du kommer til å spille av lyden meow. 884 00:36:26,600 --> 00:36:30,060 Nå, i dette tilfellet, er at man alltid er mindre enn to, så dette 885 00:36:30,060 --> 00:36:31,970 er slag av en sløsing med en betingelse. 886 00:36:31,970 --> 00:36:34,890 Men vi vil være i stand til, som vi skal se, å plugge andre ting i 887 00:36:34,890 --> 00:36:37,420 disse plassholderne der en og to nå er. 888 00:36:37,420 --> 00:36:41,340 Så la oss nå gå videre til eksempel fem av disse flere 889 00:36:41,340 --> 00:36:45,850 hellos og se på hva dette programmet kommer til å gjøre. 890 00:36:45,850 --> 00:36:48,710 >> Så nå, i en engelsk setning, hvordan fungerer dette 891 00:36:48,710 --> 00:36:51,460 Programmet oppfører seg? 892 00:36:51,460 --> 00:36:52,950 PUBLIKUM: meows halve tiden. 893 00:36:52,950 --> 00:36:55,380 DAVID MALAN: Meow er halvparten av tiden, så dette er en måte å 894 00:36:55,380 --> 00:36:56,700 formidle en veldig enkel idé. 895 00:36:56,700 --> 00:36:59,400 Selv om vi måtte bruke noen ulikheter her 896 00:36:59,400 --> 00:37:01,860 i noen tall, er dette egentlig bare en programmatical 897 00:37:01,860 --> 00:37:09,490 måte, en presis måte, sier hvis mynten kommer opp hoder, går 898 00:37:09,490 --> 00:37:10,270 fremover og meow. 899 00:37:10,270 --> 00:37:13,540 Eller omvendt, hvis mynten kommer opp haler, ikke meow. 900 00:37:13,540 --> 00:37:15,110 Og i dette tilfellet, hvordan vi uttrykker det? 901 00:37:15,110 --> 00:37:17,950 Vi vil plukke et tilfeldig tall fra 1 til 10, og hvis det 902 00:37:17,950 --> 00:37:21,110 tallet er mindre enn 6, gå videre og meow. 903 00:37:21,110 --> 00:37:22,260 Og hvordan kom dette her? 904 00:37:22,260 --> 00:37:24,620 Vel igjen, merker bare å dra og slippe og 905 00:37:24,620 --> 00:37:26,190 ting låses på plass. 906 00:37:26,190 --> 00:37:28,020 >> Så la oss nå se om denne tilfeldigheten fungerer. 907 00:37:28,020 --> 00:37:29,845 La meg gå videre og klikk på den grønne flagg. 908 00:37:29,845 --> 00:37:31,120 [MEOW] 909 00:37:31,120 --> 00:37:32,000 DAVID MALAN: Ok. 910 00:37:32,000 --> 00:37:33,430 [MEOW] 911 00:37:33,430 --> 00:37:35,260 DAVID MALAN: Ok. 912 00:37:35,260 --> 00:37:38,510 Ok, bra, så vi fikk hoder, hoder, haler effektivt. 913 00:37:38,510 --> 00:37:39,295 Haler. 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: Excellent. 918 00:37:44,040 --> 00:37:46,220 Det er alltid vanskelig når bare statistisk du får en dårlig 919 00:37:46,220 --> 00:37:48,510 kjøre, og det er alle hoder, og programmet faktisk ikke 920 00:37:48,510 --> 00:37:49,230 fungere som du ville håpe. 921 00:37:49,230 --> 00:37:51,210 Men denne gangen, det virket, og vi synes å ha, hvis vi gjorde 922 00:37:51,210 --> 00:37:53,830 dette et uendelig antall ganger, 50% sjanser. 923 00:37:53,830 --> 00:37:56,950 Nå igjen, ikke alle som interessant, bare gjør katter 924 00:37:56,950 --> 00:37:59,840 meow, så la oss se om vi ikke kan fremme dette litt lenger 925 00:37:59,840 --> 00:38:01,820 her i versjon seks. 926 00:38:01,820 --> 00:38:05,620 Så nå har vi virkelig irriterende versjon - 927 00:38:05,620 --> 00:38:08,215 [Meows med noen sekunders] 928 00:38:08,215 --> 00:38:10,640 DAVID MALAN: - og dette er det som kalles, generelt, som en 929 00:38:10,640 --> 00:38:11,670 uendelig loop. 930 00:38:11,670 --> 00:38:14,190 >> Så uendelig loop i dette tilfellet føler seg dårlig. 931 00:38:14,190 --> 00:38:16,970 Det er definitivt kommer til å begynne å høres dårlig, og likevel uendelig 932 00:38:16,970 --> 00:38:18,740 løkker er ikke alltid dårlig. 933 00:38:18,740 --> 00:38:20,910 Kan du tenke deg konteksten dataprogrammer der du vil 934 00:38:20,910 --> 00:38:22,910 faktisk ønsker en uendelig loop? 935 00:38:22,910 --> 00:38:23,691 Ja? 936 00:38:23,691 --> 00:38:26,520 PUBLIKUM: Når du vil sjekke en tilstand. 937 00:38:26,520 --> 00:38:28,240 DAVID MALAN: Ok, når du vil fortsette å se en tilstand? 938 00:38:28,240 --> 00:38:29,190 Som hva da? 939 00:38:29,190 --> 00:38:30,440 PUBLIKUM: [uhørlig] 940 00:38:36,060 --> 00:38:38,170 DAVID MALAN: Ok, bra, så hvis du hadde noen program, noen 941 00:38:38,170 --> 00:38:40,440 slags hjemme automasjon ting, der du vil hele tiden 942 00:38:40,440 --> 00:38:41,980 skjermen er noe tilfelle. 943 00:38:41,980 --> 00:38:42,850 Er lysene på? 944 00:38:42,850 --> 00:38:45,020 Er lysene på fordi kanskje du har en timer, og 945 00:38:45,020 --> 00:38:47,360 du vil ha dem til å gå av, må du kanskje gjøre noe 946 00:38:47,360 --> 00:38:48,290 igjen og igjen. 947 00:38:48,290 --> 00:38:50,540 Og faktisk, snakker om tidtakere, som har noen av dere 948 00:38:50,540 --> 00:38:53,100 klokker på datamaskinen eller digitale klokker, er at en 949 00:38:53,100 --> 00:38:54,210 uendelig loop. 950 00:38:54,210 --> 00:38:56,980 Det fortsetter å oppdatere tid fordi det er stadig 951 00:38:56,980 --> 00:38:59,750 sjekke og sjekke og sjekke har tid endret, 952 00:38:59,750 --> 00:39:01,000 og hvis så, oh, min gud. 953 00:39:03,670 --> 00:39:04,740 Klokken er endelig endret. 954 00:39:04,740 --> 00:39:07,020 Den trenger vise at verdi for deg. 955 00:39:07,020 --> 00:39:10,880 Så mens de fleste av tiden uendelige løkker er en feil, 956 00:39:10,880 --> 00:39:13,950 eller minst en dårlig design beslutning, noen ganger gjør de 957 00:39:13,950 --> 00:39:14,785 har sin verdi. 958 00:39:14,785 --> 00:39:18,170 >> Vel, la oss avansere videre her hello7. 959 00:39:18,170 --> 00:39:20,410 Så nå vil programmet bli litt mer interaktiv. 960 00:39:20,410 --> 00:39:23,120 La meg zoome inn her, og igjen, dette er hva som er fint 961 00:39:23,120 --> 00:39:23,640 om Scratch. 962 00:39:23,640 --> 00:39:26,760 Og vi vil bruke den til å være klar, Scratch, bare i dag og i 963 00:39:26,760 --> 00:39:27,780 neste ukes problem satt. 964 00:39:27,780 --> 00:39:31,920 Men på mandag, dykke vi inn C. I dette programmet her, det gjør det, 965 00:39:31,920 --> 00:39:33,190 evig, følgende. 966 00:39:33,190 --> 00:39:35,890 HVIS berøre musepekeren - nå, hvem 967 00:39:35,890 --> 00:39:36,420 sammenheng her? 968 00:39:36,420 --> 00:39:39,670 Vel, og merker at hvem som velges her nede på bunnen 969 00:39:39,670 --> 00:39:43,060 høyre er katten, en sprite, så disse skriptene, dette 970 00:39:43,060 --> 00:39:45,720 Programmet gjelder for ham spesielt. 971 00:39:45,720 --> 00:39:48,950 Så hvis det katt berører musepekeren, så det kommer 972 00:39:48,950 --> 00:39:51,350 å spille dette ned og vent to sekunder, og 973 00:39:51,350 --> 00:39:53,030 Deretter gjentar ad nauseum. 974 00:39:53,030 --> 00:39:55,360 >> Så la oss gå videre og trykke play. 975 00:39:55,360 --> 00:39:57,580 Ingenting skjer, men hvis jeg ønsker å pet 976 00:39:57,580 --> 00:39:59,310 cat nå, kan jeg bare. 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: Okay, mindre irriterende, men får også kjedelig, 981 00:40:08,750 --> 00:40:11,480 så la oss gå videre og se om vi ikke kan injisere 982 00:40:11,480 --> 00:40:12,460 litt mer logikk. 983 00:40:12,460 --> 00:40:14,300 Det var f.eks sju. 984 00:40:14,300 --> 00:40:16,090 >> Her i eksempel åtte, skal vi 985 00:40:16,090 --> 00:40:18,670 innføre en ELSE tilstand. 986 00:40:18,670 --> 00:40:21,440 Så mye som en bokstavelig veiskille, der du kan gå 987 00:40:21,440 --> 00:40:24,260 venstre, eller du kan gå rett, en tilstand i et programmeringsspråk 988 00:40:24,260 --> 00:40:28,120 språk som Scratch, eller som vi vil se C, kan tillate deg å 989 00:40:28,120 --> 00:40:32,230 gå i en eller annen retning via en IF ELSE konstruere. 990 00:40:32,230 --> 00:40:35,160 Så bokstavelig talt, IF berøre musepekeren, dette 991 00:40:35,160 --> 00:40:38,680 vil spille noen lyd, ELSE det kommer til å spille denne andre 992 00:40:38,680 --> 00:40:39,800 lyd, meow. 993 00:40:39,800 --> 00:40:42,510 Nå, hvis du kan slutte fra navnet på disse lydene, kan du 994 00:40:42,510 --> 00:40:45,310 sikkert gjette hva dette programmet er ment å trylle frem 995 00:40:45,310 --> 00:40:46,250 ideen. 996 00:40:46,250 --> 00:40:48,742 Denne katten er meowing lykkelig. 997 00:40:48,742 --> 00:40:49,230 [MEOW] 998 00:40:49,230 --> 00:40:51,410 DAVID MALAN: Lykkelig, men ikke 999 00:40:51,410 --> 00:40:52,926 ganske liker å bli berørt. 1000 00:40:52,926 --> 00:40:54,550 [Brøler] 1001 00:40:54,550 --> 00:40:57,500 DAVID MALAN: Så nå har vi en katt som vil kjefte på deg. 1002 00:40:57,500 --> 00:41:00,570 >> Greit, vel, en siste eksempel med katter her, og 1003 00:41:00,570 --> 00:41:02,920 la oss åpne versjonen ni av dette her. 1004 00:41:02,920 --> 00:41:06,190 Så nå har vi den nest mest irriterende lyd som jeg kunne 1005 00:41:06,190 --> 00:41:11,630 finne, så vi har en hvalross eller sjø løve her som kommer til å 1006 00:41:11,630 --> 00:41:13,222 gjør følgende. 1007 00:41:13,222 --> 00:41:20,870 [SEAL BARK] 1008 00:41:20,870 --> 00:41:23,310 DAVID MALAN: Ok, så dette vil gå på før du finne ut hvordan 1009 00:41:23,310 --> 00:41:24,640 Dette programmet fungerer. 1010 00:41:24,640 --> 00:41:28,560 Så denne gangen har dette dyret to skript, og hva som er 1011 00:41:28,560 --> 00:41:31,050 interessant her er at disse skriptene kommer til å utføre 1012 00:41:31,050 --> 00:41:32,260 parallelt. 1013 00:41:32,260 --> 00:41:35,340 Så fordi de begge starter med en grønn flagg klikket, 1014 00:41:35,340 --> 00:41:38,080 det er som å gå som dette, og begge programmene å kjøre det 1015 00:41:38,080 --> 00:41:41,370 gang selv om de er looping evig. 1016 00:41:41,370 --> 00:41:44,420 Så i den øverste script, jeg har noen logikk. 1017 00:41:44,420 --> 00:41:49,275 Hvilke funksjoner gir det der oppe? 1018 00:41:49,275 --> 00:41:50,740 [SEAL BARK] 1019 00:41:50,740 --> 00:41:51,670 PUBLIKUM: [uhørlig] 1020 00:41:51,670 --> 00:41:53,295 DAVID MALAN: Hvis det er hva? 1021 00:41:53,295 --> 00:41:53,760 [SEAL BARK] 1022 00:41:53,760 --> 00:41:55,852 PUBLIKUM: Hvis dempet til null, det kommer til å fortsette å spille 1023 00:41:55,852 --> 00:41:58,410 høres. [SEAL BARK] 1024 00:41:58,410 --> 00:41:58,940 DAVID MALAN: Ok, bra. 1025 00:41:58,940 --> 00:42:01,960 Så hvis dempet, uansett hva dette er, dette oransje ting er null, 1026 00:42:01,960 --> 00:42:05,370 Deretter spille Sjøløve lyd og tenke "Åh, 1027 00:42:05,370 --> 00:42:06,770 hei, "for to sekunder. 1028 00:42:06,770 --> 00:42:09,380 Nå vet jeg ikke hva dempet er, men null maner opp 1029 00:42:09,380 --> 00:42:11,230 ideen om falsk eller av. 1030 00:42:11,230 --> 00:42:14,490 Så hvis dempet er falsk, så hvis ikke er dempet, 1031 00:42:14,490 --> 00:42:15,660 fortsette å spille lyden. 1032 00:42:15,660 --> 00:42:17,350 Greit, vel, hvordan vi deaktivere denne tingen? 1033 00:42:17,350 --> 00:42:19,310 >> Vel, la oss se på den andre script der nede. 1034 00:42:19,310 --> 00:42:22,130 Det andre skriptet sier satt dempet til null. 1035 00:42:22,130 --> 00:42:25,180 Legg merke til det er også oransje, så hva Scratch gjør er det farger 1036 00:42:25,180 --> 00:42:27,400 blokker i samme nyanse hvis det er liksom 1037 00:42:27,400 --> 00:42:28,850 av logisk sammenheng. 1038 00:42:28,850 --> 00:42:32,850 Så akkurat som dempet opp toppen var oransje, så dempet ned her 1039 00:42:32,850 --> 00:42:34,060 nevnt i oransje blokk. 1040 00:42:34,060 --> 00:42:36,170 Men dette er en variabel oppdrag, så akkurat som i 1041 00:42:36,170 --> 00:42:39,170 algebra, har du x og y og z, i programmering du har 1042 00:42:39,170 --> 00:42:41,440 variabler, men de er generelt - 1043 00:42:41,440 --> 00:42:42,580 la oss stoppe et øyeblikk og figur hvordan 1044 00:42:42,580 --> 00:42:44,280 å stoppe dette bjeffing. 1045 00:42:44,280 --> 00:42:45,480 Hvordan gjør jeg dette? 1046 00:42:45,480 --> 00:42:46,480 [SEAL BARK] 1047 00:42:46,480 --> 00:42:47,920 DAVID MALAN: Ok. 1048 00:42:47,920 --> 00:42:49,490 Det stoppet. Okay. 1049 00:42:49,490 --> 00:42:52,230 >> Så akkurat som i algebra du har variablene x, y og z, men i 1050 00:42:52,230 --> 00:42:55,260 programmering, ha variabler som x, y, og z er vanligvis 1051 00:42:55,260 --> 00:42:57,330 mislikt fordi de ikke er i det hele tatt uttrykksfulle. 1052 00:42:57,330 --> 00:43:00,070 De har ingen semantiske betydning overhodet, så i de fleste 1053 00:43:00,070 --> 00:43:02,110 programmeringsspråk, kan variabler ha full 1054 00:43:02,110 --> 00:43:05,270 fledged navn eller ord eller setninger, liker dempet, for å si 1055 00:43:05,270 --> 00:43:06,030 hva de gjør. 1056 00:43:06,030 --> 00:43:09,380 Så denne andre script også lyttet alltid, og det sa 1057 00:43:09,380 --> 00:43:12,100 Hvis nøkkelen, tast på tastaturet Space, er 1058 00:43:12,100 --> 00:43:13,370 trykket, spørsmålstegn. 1059 00:43:13,370 --> 00:43:16,300 Så det er en tilstand med en boolsk uttrykk som er 1060 00:43:16,300 --> 00:43:19,010 kommer til å svare på et spørsmål enten sannferdig eller falsk, 1061 00:43:19,010 --> 00:43:22,880 da har jeg på innsiden av det hvis plassen trykkes OG 1062 00:43:22,880 --> 00:43:28,020 HVIS dempet er null, sett dempet til en, andre satt dempet til null. 1063 00:43:28,020 --> 00:43:30,510 Så denne andre veiskille, og legg merke til hvordan jeg har 1064 00:43:30,510 --> 00:43:33,500 nestede to hvis betingelser, er en metode for å kontrollere er 1065 00:43:33,500 --> 00:43:36,610 Space Bar trykket fordi hvis så, jeg enten ønsker å gå denne 1066 00:43:36,610 --> 00:43:38,000 måte eller på den måten. 1067 00:43:38,000 --> 00:43:40,210 Og hvordan invertere jeg verdien av dempet? 1068 00:43:40,210 --> 00:43:41,410 Jeg må sjekke er det null? 1069 00:43:41,410 --> 00:43:45,890 Hvis ja, gjør det en, andre gjør det null å derfor veksle 1070 00:43:45,890 --> 00:43:47,670 sine to stater. 1071 00:43:47,670 --> 00:43:50,030 >> All right, så vi har da noen av disse grunnleggende 1072 00:43:50,030 --> 00:43:50,540 konstruksjoner. 1073 00:43:50,540 --> 00:43:52,810 Vi har boolske uttrykk, og innse, også, disse er 1074 00:43:52,810 --> 00:43:54,050 ikke alle som ukjente. 1075 00:43:54,050 --> 00:43:56,730 Faktisk, her er en rask skjermbilde av Harvard kursets CS50 1076 00:43:56,730 --> 00:43:59,740 shopping verktøy, og hvilken som helst nettside der ute som har avkrysningsbokser 1077 00:43:59,740 --> 00:44:02,420 og drop downs har virkelig, hele tiden, brukt 1078 00:44:02,420 --> 00:44:03,430 Boolske uttrykk. 1079 00:44:03,430 --> 00:44:05,760 I dette tilfellet her, hvis du klikker på boksen ved siden av 1080 00:44:05,760 --> 00:44:08,620 kurs større enn eller lik 4,5, eller den samme ved siden 1081 00:44:08,620 --> 00:44:11,200 fakultetet, du angi en boolsk uttrykk. 1082 00:44:11,200 --> 00:44:14,780 Vis meg kurs som det uttrykket er sant. 1083 00:44:14,780 --> 00:44:17,080 Eller til høyre, ikke er i strid med kurs jeg er 1084 00:44:17,080 --> 00:44:20,440 tar, hvis det er merket av, så ja, du vil sjekke 1085 00:44:20,440 --> 00:44:22,890 den tilstanden, annet du ønsker å ignorere det. 1086 00:44:22,890 --> 00:44:25,170 Så boolske uttrykk er liksom alt rundt, men når 1087 00:44:25,170 --> 00:44:28,080 vi setter dem i forhold, enten IF forhold, IF 1088 00:44:28,080 --> 00:44:30,480 Andens, eller vi kan selv simulere dypere 1089 00:44:30,480 --> 00:44:32,830 nivåer, IF ELSE IF ELSE - 1090 00:44:32,830 --> 00:44:34,430 så det er liksom et trefoldig tilstand. 1091 00:44:34,430 --> 00:44:36,920 Du kan gå på denne måten eller denne måten eller på denne måten. 1092 00:44:36,920 --> 00:44:39,680 Vi kan holde hekkende ting å gå i forskjellige retninger. 1093 00:44:39,680 --> 00:44:41,800 >> Så Scratch har disse loopene, som alltid. 1094 00:44:41,800 --> 00:44:44,750 Den har disse funksjonene som Repeat 10, noen 1095 00:44:44,750 --> 00:44:46,260 endelig antall ganger. 1096 00:44:46,260 --> 00:44:49,040 Vi har muligheten på å konfigurere variabler, så i dette tilfellet 1097 00:44:49,040 --> 00:44:51,810 Jeg har erklært, for eksempel en variabel kalt sokker. 1098 00:44:51,810 --> 00:44:54,340 Jeg har initialisert til 0, og det er enda en retning 1099 00:44:54,340 --> 00:44:56,940 vi kunne ha tatt opp her med Joseph, der kanskje jeg 1100 00:44:56,940 --> 00:45:00,150 bare holde rede på hvor mange sokker jeg har på og avslutte 1101 00:45:00,150 --> 00:45:03,490 programmet når den variabelen verdi er 2. 1102 00:45:03,490 --> 00:45:05,660 Det ville være en annen måte å slags generalisere at 1103 00:45:05,660 --> 00:45:08,820 problemet og gjør noe igjen og igjen. 1104 00:45:08,820 --> 00:45:12,080 Vel, la oss gå videre og introduserer nå et par nye ting. 1105 00:45:12,080 --> 00:45:14,100 Så de av dere med tidligere programing erfaring vil 1106 00:45:14,100 --> 00:45:17,120 vet at mange språk har matriser, eller vektorer eller 1107 00:45:17,120 --> 00:45:19,970 lister, og faktisk har Scratch noe som dette, også. 1108 00:45:19,970 --> 00:45:22,510 Så la oss se om vi ikke kan ta ting til neste nivå her. 1109 00:45:22,510 --> 00:45:24,920 Hvis jeg har muligheten nå, med disse brikkene til 1110 00:45:24,920 --> 00:45:29,080 legge til noe, som et ord eller tall, til en variabel, kan jeg 1111 00:45:29,080 --> 00:45:30,550 begynne å samle ting. 1112 00:45:30,550 --> 00:45:33,630 Og dette er faktisk ganske apropos for ting som spill, 1113 00:45:33,630 --> 00:45:35,810 rollespill der du er slags vandre rundt 1114 00:45:35,810 --> 00:45:38,600 noen fantasiverden samle ting, plukke opp ting, 1115 00:45:38,600 --> 00:45:39,900 tjene poeng, eller lignende. 1116 00:45:39,900 --> 00:45:42,310 Du ønsker kanskje å holde styr på en slags inventar, og 1117 00:45:42,310 --> 00:45:45,180 faktisk, det er hva en av våre tidligere studenter her gjorde med 1118 00:45:45,180 --> 00:45:47,750 noe som kalles Fruitcraft RPG. 1119 00:45:47,750 --> 00:45:51,820 >> Så la meg gå videre og åpne opp denne tingen her, og i 1120 00:45:51,820 --> 00:45:56,260 Fruitcraft, har vi denne verden opp på toppen. 1121 00:45:56,260 --> 00:45:58,820 Så la meg gå videre og klikk på den grønne flagg. 1122 00:45:58,820 --> 00:46:01,040 Varsel øverst til venstre er en slags inventar. 1123 00:46:01,040 --> 00:46:04,110 Det er implementert i Scratch som det vi kaller en matrise eller 1124 00:46:04,110 --> 00:46:06,890 en liste, og nå har vi denne lille animasjonen. 1125 00:46:06,890 --> 00:46:10,440 Så akkurat som vi startet tidligere med denne informasjonskapselen kjærlighetshistorie, 1126 00:46:10,440 --> 00:46:13,320 og vi avanserte til katter og sjøløver, nå kan vi ha 1127 00:46:13,320 --> 00:46:15,100 ting som er enda mer interaktiv. 1128 00:46:15,100 --> 00:46:18,250 Og denne lille blå fyren, kan jeg begynne å flytte rundt hans 1129 00:46:18,250 --> 00:46:19,500 lite hjemme her. 1130 00:46:19,500 --> 00:46:22,570 Så det ser ut som han har en avkjøring her nede, så jeg bruker 1131 00:46:22,570 --> 00:46:25,260 piltastene, opp, ned, venstre høyre. 1132 00:46:25,260 --> 00:46:28,370 Og nå er jeg ute, så la det jeg har her. 1133 00:46:28,370 --> 00:46:30,920 Ser ut som en appelsin, og faktisk, så snart jeg berører 1134 00:46:30,920 --> 00:46:33,110 orange, blir det plopped i lagerbeholdningen min. 1135 00:46:33,110 --> 00:46:35,640 Hvis jeg går over her til kirsebær, nå har jeg noe 1136 00:46:35,640 --> 00:46:36,760 annet i utvalget mitt. 1137 00:46:36,760 --> 00:46:39,100 Og dette er alt fint og søt, men tenk på hvor nå, dette 1138 00:46:39,100 --> 00:46:39,840 er implementert. 1139 00:46:39,840 --> 00:46:42,490 Vel, vi har denne oppfatningen av en liste, og det er tilsynelatende en 1140 00:46:42,490 --> 00:46:45,470 puslespill brikke som du bare si hva du vil legge til det, legger 1141 00:46:45,470 --> 00:46:46,950 orange, legge kirsebær. 1142 00:46:46,950 --> 00:46:48,540 Nå er det denne lille blå fyren gjør? 1143 00:46:48,540 --> 00:46:49,810 Vel, han er en sprite. 1144 00:46:49,810 --> 00:46:52,190 Og antagelig den oransje og kirsebær - 1145 00:46:52,190 --> 00:46:54,140 de selv var separate sprites. 1146 00:46:54,140 --> 00:46:56,980 Og bruker forholdene i boolske uttrykk, de 1147 00:46:56,980 --> 00:47:00,530 student var trolig i stand til å uttrykke IF blå fyren er 1148 00:47:00,530 --> 00:47:04,590 rørende kirsebær deretter legge ordet kirsebær til hans 1149 00:47:04,590 --> 00:47:07,890 inventar, og deretter også skjule kirsebær sprite. 1150 00:47:07,890 --> 00:47:10,600 Så under panseret, er det trolig fortsatt et kirsebær 1151 00:47:10,600 --> 00:47:11,350 sprite der. 1152 00:47:11,350 --> 00:47:14,160 Vi har bare fortalt det til å bli effektivt usynlig. 1153 00:47:14,160 --> 00:47:16,340 >> Nå, hvis jeg fortsett å gå over her, kan vi også gjøre dette 1154 00:47:16,340 --> 00:47:19,150 proksimale ting, hvor jeg kan gå og lese skiltet. 1155 00:47:19,150 --> 00:47:23,170 Så hvis blå fyr rørende tegn, kan vi ha denne Say blokk 1156 00:47:23,170 --> 00:47:26,455 akkurat som katten snakket til oss i ord, hallo, tidligere, "Got 1157 00:47:26,455 --> 00:47:26,880 litt frukt? 1158 00:47:26,880 --> 00:47:29,290 Bringe den til frukt sted. "All right, så nå, tilsynelatende, 1159 00:47:29,290 --> 00:47:30,550 Jeg har mine retninger. 1160 00:47:30,550 --> 00:47:33,050 Jeg kan gå over her til frukt sted, stille meg opp 1161 00:47:33,050 --> 00:47:33,740 med døren. 1162 00:47:33,740 --> 00:47:35,390 Nå er jeg her. 1163 00:47:35,390 --> 00:47:38,120 Jeg kan gå opp til mannen på telleren. 1164 00:47:38,120 --> 00:47:40,330 Han oppdager at jeg er nær ham, så det trenger ikke å være 1165 00:47:40,330 --> 00:47:46,780 ganske likt rørende, og jeg har vunnet spillet. 1166 00:47:46,780 --> 00:47:49,890 Så det har vi Fruitcraft RPG. 1167 00:47:49,890 --> 00:47:52,200 >> Så vi kan gjøre ting enda mer avanserte enn dette. 1168 00:47:52,200 --> 00:47:53,200 Vi kan legge til lyder. 1169 00:47:53,200 --> 00:47:54,610 Vi kan legge til pseudo tilfeldigheter. 1170 00:47:54,610 --> 00:47:56,260 Vi kan legge til kompleksitet. 1171 00:47:56,260 --> 00:47:58,490 La meg gå videre her, og i stedet gjøre dette selv, 1172 00:47:58,490 --> 00:48:01,240 la meg vise deg en av de mer avanserte innleveringer 1173 00:48:01,240 --> 00:48:06,640 vi fikk i fjor fra et visst noen som heter Blake. 1174 00:48:06,640 --> 00:48:08,910 Kan vi ha en frivillig som er behagelig vises på 1175 00:48:08,910 --> 00:48:12,600 kamera og er opp for å spille et spill? 1176 00:48:12,600 --> 00:48:13,450 Hva med der? 1177 00:48:13,450 --> 00:48:15,380 Kom opp. 1178 00:48:15,380 --> 00:48:19,680 All right, så spillet som du nettopp har uvitende 1179 00:48:19,680 --> 00:48:20,780 frivillig å spille - 1180 00:48:20,780 --> 00:48:25,910 [Applaus] 1181 00:48:25,910 --> 00:48:28,610 DAVID MALAN: - er noe fra yesteryear kalles 1182 00:48:28,610 --> 00:48:30,100 "Frogger". Hva er ditt navn? 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 er som Brenda med en b. 1186 00:48:32,530 --> 00:48:33,190 DAVID MALAN: Ok, Renda. 1187 00:48:33,190 --> 00:48:33,590 David. 1188 00:48:33,590 --> 00:48:34,580 Hyggelig å treffe deg. 1189 00:48:34,580 --> 00:48:38,690 >> Så her i "Frogger", og hvis vi kunne øke volumet bare 1190 00:48:38,690 --> 00:48:39,780 litt, er du denne lille 1191 00:48:39,780 --> 00:48:41,010 grønn frosk på bunnen. 1192 00:48:41,010 --> 00:48:43,940 Du kan bruke venstre, høyre, opp og ned, og målet ditt er å 1193 00:48:43,940 --> 00:48:46,510 krysse gata, krysse elven, og berør lilje pads 1194 00:48:46,510 --> 00:48:47,760 øverst. 1195 00:48:52,090 --> 00:48:53,440 Aw. 1196 00:48:53,440 --> 00:48:54,630 En mer t - 1197 00:48:54,630 --> 00:48:56,400 redo, ok? 1198 00:48:56,400 --> 00:48:58,890 La oss hit stopp. 1199 00:48:58,890 --> 00:49:00,140 Ingen så det. 1200 00:49:10,470 --> 00:49:12,930 [Applaus] 1201 00:49:17,023 --> 00:49:17,850 [Applaus] 1202 00:49:17,850 --> 00:49:19,341 DAVID MALAN: Yeah. 1203 00:49:19,341 --> 00:49:20,832 Veldig godt gjort. 1204 00:49:20,832 --> 00:49:22,082 Utmerket, takk. 1205 00:49:27,300 --> 00:49:29,430 >> Slik at det var Frogger. Nå som du vet hva du har 1206 00:49:29,430 --> 00:49:32,170 fått dere inn, en mer frivillig for en annen 1207 00:49:32,170 --> 00:49:34,910 Spillet presentert av en annen student. 1208 00:49:34,910 --> 00:49:35,560 Du ønsker å komme på opp? 1209 00:49:35,560 --> 00:49:36,576 Hva 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 Greit, Richard, kom opp. 1213 00:49:39,732 --> 00:49:42,187 [Applaus] 1214 00:49:45,140 --> 00:49:47,030 DAVID MALAN: Du har noe som vil høres 1215 00:49:47,030 --> 00:49:54,180 kjent snart, så her er dine instruksjoner. 1216 00:49:54,180 --> 00:49:56,580 Så i et øyeblikk, er noen brikkene kommer til å bla opp 1217 00:49:56,580 --> 00:49:58,150 fra skjermen som ser enten venstre 1218 00:49:58,150 --> 00:49:59,450 eller rett opp eller ned. 1219 00:49:59,450 --> 00:50:01,230 Du kommer til å måtte treffe piltastene på en slik måte 1220 00:50:01,230 --> 00:50:04,540 at det tilsvarer de brikkene kø med 1221 00:50:04,540 --> 00:50:05,720 plassholderne på toppen. 1222 00:50:05,720 --> 00:50:07,500 Så når du ser en pil venstre, og det er på linje med den venstre 1223 00:50:07,500 --> 00:50:09,260 pil traff den venstre pilen. 1224 00:50:09,260 --> 00:50:10,866 Du kan begynne. 1225 00:50:10,866 --> 00:50:13,674 [MUSIC - "sterkere" Kayne West] 1226 00:51:21,222 --> 00:51:23,470 DAVID MALAN: All right, stor applaus for Richard. 1227 00:51:23,470 --> 00:51:26,082 [Applaus] 1228 00:51:32,426 --> 00:51:33,720 DAVID MALAN: Veldig godt gjort. 1229 00:51:33,720 --> 00:51:34,110 Takk. 1230 00:51:34,110 --> 00:51:37,104 [Applaus] 1231 00:51:41,600 --> 00:51:44,330 >> DAVID MALAN: Så moro og, tilsynelatende, liksom 1232 00:51:44,330 --> 00:51:46,590 skremmende som det kan være å implementere noe som 1233 00:51:46,590 --> 00:51:49,550 tilsynelatende sofistikert som dette, innser at studenten 1234 00:51:49,550 --> 00:51:51,450 ikke satt ut og bare skrive alt dette på en gang. 1235 00:51:51,450 --> 00:51:54,200 Snarere kan du bryte ned et problem som tilsynelatende komplekse 1236 00:51:54,200 --> 00:51:56,840 som dette i mye mindre biter, og også dette er 1237 00:51:56,840 --> 00:51:57,560 kommer til å bli et tema. 1238 00:51:57,560 --> 00:52:00,490 Det verste du kan gjøre i å skrive et program i de fleste helst 1239 00:52:00,490 --> 00:52:03,480 språket er å sitte ned, få virkelig begeistret, skriver 1240 00:52:03,480 --> 00:52:07,200 Hele greia, og så bare håpe at det fungerer ved 1241 00:52:07,200 --> 00:52:08,510 gang du er ferdig med å skrive. 1242 00:52:08,510 --> 00:52:10,920 Snarere prosessen med programmering bør generelt 1243 00:52:10,920 --> 00:52:13,440 være svært bevisst, preget av gjentakelser, der du bare 1244 00:52:13,440 --> 00:52:16,955 satt veldig små skritt for dere selv, bite-size stykker 1245 00:52:16,955 --> 00:52:20,070 vil du bite av, og slik at du har disse forstanden 1246 00:52:20,070 --> 00:52:21,740 sjekker, små milepæler du kan møtes. 1247 00:52:21,740 --> 00:52:24,170 Og så kan du bygge på toppen av dem å skape mer 1248 00:52:24,170 --> 00:52:25,400 sofistikerte ting fortsatt. 1249 00:52:25,400 --> 00:52:26,820 >> Så for eksempel, hvordan kunne vi gå om 1250 00:52:26,820 --> 00:52:28,380 implementere et spill som dette? 1251 00:52:28,380 --> 00:52:30,160 Vel, ærlig, ville jeg absolutt starte med bare 1252 00:52:30,160 --> 00:52:32,260 støtter én tast av gangen. 1253 00:52:32,260 --> 00:52:34,840 La oss bare implementere støtte for venstre pilen. 1254 00:52:34,840 --> 00:52:37,610 Slik at studenten måtte liksom lage i Photoshop, eller i 1255 00:52:37,610 --> 00:52:40,340 Klø seg selv ved hjelp av den lille grafisk editor, en 1256 00:52:40,340 --> 00:52:42,680 piltasten som ser ut som den på toppen igjen der, bare 1257 00:52:42,680 --> 00:52:43,910 den grå plassholder. 1258 00:52:43,910 --> 00:52:46,610 Da studenten måtte finne ut hva x, y koordinere til 1259 00:52:46,610 --> 00:52:48,380 si det, hvor du skal sette den i vinduet. 1260 00:52:48,380 --> 00:52:50,730 0, 0 er her oppe, så du må finne ut hvor mange 1261 00:52:50,730 --> 00:52:53,690 piksler eller punkter, for å oppveie at pil fra 1262 00:52:53,690 --> 00:52:54,800 toppen av skjermen. 1263 00:52:54,800 --> 00:52:57,040 Og deretter en gang det er på plass, gjør ikke programmet faktisk 1264 00:52:57,040 --> 00:53:00,380 gjøre noe ennå, så du må deretter en andre sprite, for 1265 00:53:00,380 --> 00:53:04,470 eksempel en grønn pil som også peker til venstre, og du 1266 00:53:04,470 --> 00:53:06,710 Deretter må du begynne å skrive noen skript for det. 1267 00:53:06,710 --> 00:53:09,310 >> Og du merker kanskje at disse tingene begynte å komme på 1268 00:53:09,310 --> 00:53:11,470 ulike hastigheter, og fargene var i forskjellige 1269 00:53:11,470 --> 00:53:13,750 steder, og det er fordi studenten brukte en bit av 1270 00:53:13,750 --> 00:53:14,990 pseudo tilfeldigheter. 1271 00:53:14,990 --> 00:53:17,440 Og ved pseudo tilfeldigheter, jeg mener bare plukke et tall 1272 00:53:17,440 --> 00:53:20,230 mellom noe og noe fordi du kan 1273 00:53:20,230 --> 00:53:22,890 begynne å kartlegge ting, som hvis tallet er mellom ett og 1274 00:53:22,890 --> 00:53:24,940 fem, vel, la oss gjøre ting grønt. 1275 00:53:24,940 --> 00:53:28,290 Hvis det er mellom 6 og 10, la oss gjøre det puslespillbit 1276 00:53:28,290 --> 00:53:29,730 rødt i stedet. 1277 00:53:29,730 --> 00:53:31,840 Så lenge du har en måte å generere noen form for 1278 00:53:31,840 --> 00:53:34,730 tilfeldigheten, kan du ta avgjørelser basert på det 1279 00:53:34,730 --> 00:53:35,260 tilfeldigheter. 1280 00:53:35,260 --> 00:53:37,490 Og jeg fortsetter å si pseudo tilfeldig fordi det er en 1281 00:53:37,490 --> 00:53:38,390 litt skitten hemmelighet. 1282 00:53:38,390 --> 00:53:41,130 Datamaskiner kan ikke komme opp med tilfeldige tall. 1283 00:53:41,130 --> 00:53:42,800 De kan bare gjøre som de får beskjed fordi 1284 00:53:42,800 --> 00:53:44,110 de er menneskeskapte enheter. 1285 00:53:44,110 --> 00:53:45,880 De kan ikke bare gjette et tall som vi mennesker 1286 00:53:45,880 --> 00:53:46,960 føler at vi kan. 1287 00:53:46,960 --> 00:53:50,970 En datamaskin har å gjøre noe matematisk å trylle opp 1288 00:53:50,970 --> 00:53:53,970 illusjon av matematisk nummer, noen ganger med 1289 00:53:53,970 --> 00:53:57,420 gjeldende dag av tid som en inngang til å finne ut hva 1290 00:53:57,420 --> 00:53:59,570 for å gå tilbake, men mer om det en annen gang. 1291 00:53:59,570 --> 00:54:02,060 For nå, bare vet at vi kan generere pseudo tilfeldigheter. 1292 00:54:02,060 --> 00:54:04,610 >> Så når jeg har muligheten til venstre pilen for å starte 1293 00:54:04,610 --> 00:54:07,990 vises til forskjellige tider og ved forskjellige hastigheter, da 1294 00:54:07,990 --> 00:54:10,230 Jeg kan gå tilbake og legge noen av disse hvis forholdene. 1295 00:54:10,230 --> 00:54:14,950 HVIS dette sprite berører den andre, og pil venstre 1296 00:54:14,950 --> 00:54:16,330 har trykket - 1297 00:54:16,330 --> 00:54:17,900 så tre forhold i denne saken. 1298 00:54:17,900 --> 00:54:20,750 Jeg kan bruke den og blokkere kanskje, i så fall - 1299 00:54:20,750 --> 00:54:23,210 SÅ jeg ønsker å gå videre og øke poengsummen. 1300 00:54:23,210 --> 00:54:25,130 Og på toppen, vi har en score, vi har Awesome, 1301 00:54:25,130 --> 00:54:26,510 Cool, God og Boo. 1302 00:54:26,510 --> 00:54:29,810 Så det er tydeligvis fem variabler som denne studenten 1303 00:54:29,810 --> 00:54:32,220 brukes til å holde styr på disse ulike beregninger. 1304 00:54:32,220 --> 00:54:34,180 Så kort sagt, er sluttresultatet fantastisk. 1305 00:54:34,180 --> 00:54:37,320 Det er morsomt, det er gøy å spille, er det engasjerende, men dette er ikke 1306 00:54:37,320 --> 00:54:38,380 der studenten begynte. 1307 00:54:38,380 --> 00:54:42,210 Han eller hun begynte på en mye mindre sett med trinn. 1308 00:54:42,210 --> 00:54:44,470 >> Så hva er noen andre byggesteiner som vi kan 1309 00:54:44,470 --> 00:54:45,760 veve inn i disse programmene? 1310 00:54:45,760 --> 00:54:48,750 Vel, det er denne andre begrep i de fleste språk, 1311 00:54:48,750 --> 00:54:50,730 Skrap blant dem, kjent som tråder. 1312 00:54:50,730 --> 00:54:54,660 Så en datamaskin kan faktisk ikke gjøre flere ting på en 1313 00:54:54,660 --> 00:54:56,730 tid, i det minste ikke vanligvis. 1314 00:54:56,730 --> 00:54:59,930 Snarere, har en datamaskin vanligvis bare en CPU, og selv 1315 00:54:59,930 --> 00:55:02,230 skjønt datamaskiner er super rask og kan, derfor, 1316 00:55:02,230 --> 00:55:04,740 skape illusjonen av å gjøre flere ting på en gang - 1317 00:55:04,740 --> 00:55:06,180 sjekke e-posten din, få en umiddelbar 1318 00:55:06,180 --> 00:55:07,770 melding, skrive ut et dokument - 1319 00:55:07,770 --> 00:55:11,530 egentlig er en datamaskin bare hoppe fra utskrift til IMing 1320 00:55:11,530 --> 00:55:15,160 til e-post, tilbake og tilbake og frem og tilbake så fort at vi 1321 00:55:15,160 --> 00:55:18,170 langsomme tenkende mennesker bare ikke innse at det er faktisk 1322 00:55:18,170 --> 00:55:21,240 kjører disse programmene litt om gangen. 1323 00:55:21,240 --> 00:55:23,960 Nå, dette er litt av en hvit løgn i disse dager fordi, i dag, 1324 00:55:23,960 --> 00:55:26,740 mange våre datamaskiner er det som kalles multi-core, så du 1325 00:55:26,740 --> 00:55:29,760 har en CPU, men flere kjerner, noe som er ganske like 1326 00:55:29,760 --> 00:55:31,760 ha flere prosessorer. 1327 00:55:31,760 --> 00:55:35,020 >> Og så noen ganger kan datamaskiner virkelig gjøre flere ting 1328 00:55:35,020 --> 00:55:38,500 gangen, men generelt innenfor et program, programmer 1329 00:55:38,500 --> 00:55:40,200 stole på disse tingene kalles tråder. 1330 00:55:40,200 --> 00:55:43,160 Så en tråd er liksom som en miniatyr program som kan 1331 00:55:43,160 --> 00:55:46,540 eksistere sammen med en annen miniatyr program og kan kjøre 1332 00:55:46,540 --> 00:55:51,250 parallelt, eller i det minste kan kjøre under illusjonen om at 1333 00:55:51,250 --> 00:55:52,990 de kjører samtidig. 1334 00:55:52,990 --> 00:55:55,060 Så Scratch støtter disse tingene kalles tråder. 1335 00:55:55,060 --> 00:55:57,580 Du kan ha flere skript som utfører på en gang, akkurat som vi 1336 00:55:57,580 --> 00:56:00,220 gjorde med sjøløver og dette gir oss mulighet til faktisk 1337 00:56:00,220 --> 00:56:03,620 deretter har samspill mellom disse sprites. 1338 00:56:03,620 --> 00:56:09,910 La meg gå videre her og trekke opp, la oss si, tråder, og 1339 00:56:09,910 --> 00:56:11,870 spille dette som følger. 1340 00:56:11,870 --> 00:56:13,950 Vi har to sprites, hver av dem vi vil se 1341 00:56:13,950 --> 00:56:15,720 har bare ett skript. 1342 00:56:15,720 --> 00:56:18,000 Og du merker det synes å være noen intelligens i 1343 00:56:18,000 --> 00:56:21,335 katt i dette fordi han får nærmere - 1344 00:56:21,335 --> 00:56:21,730 [Brøler] 1345 00:56:21,730 --> 00:56:24,540 DAVID MALAN: - og nærmere den lille fuglen. 1346 00:56:24,540 --> 00:56:26,570 >> Så hvordan er fuglen fløyet? 1347 00:56:26,570 --> 00:56:28,200 Vel, la oss ta en titt på fuglen først. 1348 00:56:28,200 --> 00:56:31,220 Fuglen script sa når den grønne flagget er klikket, gå til x 1349 00:56:31,220 --> 00:56:34,020 lik negative 115 og y er lik 150. 1350 00:56:34,020 --> 00:56:37,010 Så jeg bare funnet ut en tilfeldig sted hvor jeg ville 1351 00:56:37,010 --> 00:56:39,580 fugl å starte, og jeg bare plopped ham der som standard. 1352 00:56:39,580 --> 00:56:42,800 Så Alltid IF ikke berøre katt, så dette er en annen 1353 00:56:42,800 --> 00:56:45,080 slags looping konstruksjon, men samme idé, gjøre dette igjen og 1354 00:56:45,080 --> 00:56:45,780 igjen og igjen. 1355 00:56:45,780 --> 00:56:49,410 Så lenge du ikke berører katten, flytte tre trinn, og 1356 00:56:49,410 --> 00:56:51,680 hvis du er på kanten, sprett, hvor det er liksom en 1357 00:56:51,680 --> 00:56:53,320 refleksjon i biljard forstand. 1358 00:56:53,320 --> 00:56:56,140 Så det er slik fuglen beveger seg rundt slags 1359 00:56:56,140 --> 00:56:58,890 tilsynelatende tilfeldig, men det er bare fordi det er retur av 1360 00:56:58,890 --> 00:57:00,170 veggene i dette tilfellet. 1361 00:57:00,170 --> 00:57:03,170 >> Nå katten, i mellomtiden, er slags juks. 1362 00:57:03,170 --> 00:57:05,520 Katten, når den grønne flagget er klikket, ja, starter i 1363 00:57:05,520 --> 00:57:07,390 noen plassering, et tilfeldig sted - 1364 00:57:07,390 --> 00:57:09,590 i det minste delvis som per pick 1365 00:57:09,590 --> 00:57:11,430 tilfeldig grønn blokk der - 1366 00:57:11,430 --> 00:57:14,660 og deretter Alltid IF berøre fugl, spille løven lyd, 1367 00:57:14,660 --> 00:57:15,790 og deretter stoppe skriptet. 1368 00:57:15,790 --> 00:57:18,560 Så når jeg sa avslutte, eller avslutte før, det er et puslespill 1369 00:57:18,560 --> 00:57:20,600 brikke i Scratch som bare vil drepe programmet på det 1370 00:57:20,600 --> 00:57:22,900 peke fordi det er slags logisk gjort. 1371 00:57:22,900 --> 00:57:25,030 Men ellers, her merke til hva som kommer til å skje. 1372 00:57:25,030 --> 00:57:28,470 Peker mot fugl og flytte ett trinn. 1373 00:57:28,470 --> 00:57:31,390 Så dette peker mot fugl er slags en fordel katten 1374 00:57:31,390 --> 00:57:34,640 har i at det er homing på bevegelige fugl, og vi kan 1375 00:57:34,640 --> 00:57:37,370 nå gjøre dette programmet enda mer interessant. 1376 00:57:37,370 --> 00:57:41,520 Istedenfor å flytte ett skritt om gangen per CPU syklus, per 1377 00:57:41,520 --> 00:57:44,280 streik toll av gongongen, så å si, la meg gå videre og 1378 00:57:44,280 --> 00:57:47,350 flytte, la oss si, fem skritt om gangen, så katten. 1379 00:57:47,350 --> 00:57:51,120 Klikk Kjør, og nå er han virkelig finner ham raskt. 1380 00:57:51,120 --> 00:57:55,620 Hvis vi dobler dette videre til 10 trinn, den slags går 1381 00:57:55,620 --> 00:57:56,370 riktig for ham. 1382 00:57:56,370 --> 00:57:57,750 Nå kan vi gi fuglen, 1383 00:57:57,750 --> 00:57:59,540 kanskje litt av en fordel. 1384 00:57:59,540 --> 00:58:02,370 La oss gå til fugl og sier i stedet for å flytte tre trinn, 1385 00:58:02,370 --> 00:58:07,140 la oss flytte ham 30 trinn. 1386 00:58:07,140 --> 00:58:08,700 Men han fortsatt fikk fanget til slutt. 1387 00:58:08,700 --> 00:58:10,430 >> Så her har vi to tråder. 1388 00:58:10,430 --> 00:58:13,230 Det er fengslet i Scratch med to skript og to 1389 00:58:13,230 --> 00:58:16,150 sprites, men ideen på andre språk er at du kan 1390 00:58:16,150 --> 00:58:19,220 skrive, i hovedsak, for mange programmer som dette og har 1391 00:58:19,220 --> 00:58:22,950 dem kjøre virkelig, eller imaginarily, parallelt. 1392 00:58:22,950 --> 00:58:25,280 >> Nå er det også dette konseptet i programmering kjent som 1393 00:58:25,280 --> 00:58:28,010 hendelser, og dette er noe vi ikke vil se i C, de 1394 00:58:28,010 --> 00:58:30,500 språk kjent som C. Vi vil se det mot semesters slutt 1395 00:58:30,500 --> 00:58:33,240 i web-programmering, når vi introduserer JavaScript og 1396 00:58:33,240 --> 00:58:36,970 oppfatningen av bygge websider som er dynamisk og samhandle 1397 00:58:36,970 --> 00:58:37,710 med brukerne. 1398 00:58:37,710 --> 00:58:40,430 Så i dette tilfellet, har vi et veldig enkelt eksempel av to 1399 00:58:40,430 --> 00:58:43,860 sprites, gutt og jente, hver av dem har sine respektive 1400 00:58:43,860 --> 00:58:48,040 tråder, men noe disse to er inter-kommunikasjon ved hjelp 1401 00:58:48,040 --> 00:58:49,490 av noe som kalles hendelser. 1402 00:58:49,490 --> 00:58:52,750 Så la meg gå videre her og zoome inn på gutten manus, 1403 00:58:52,750 --> 00:58:54,050 som ser ut som dette. 1404 00:58:54,050 --> 00:58:57,510 Når grønt flagg klikket, alltid gjøre følgende. 1405 00:58:57,510 --> 00:59:01,510 Dersom nøkkelen Space, eller mellomromstasten, trykkes, sier 1406 00:59:01,510 --> 00:59:03,900 Marco for to sekunder, det er rent estetisk på 1407 00:59:03,900 --> 00:59:06,860 skjerm, en liten tale boble, men så kringkastes. 1408 00:59:06,860 --> 00:59:09,240 >> Så kringkasting er en annen Scratch stykke som er 1409 00:59:09,240 --> 00:59:12,050 representerer en klasse av funksjonalitet i programmering 1410 00:59:12,050 --> 00:59:15,080 som gjør at ulike programmer, ulike tråder, 1411 00:59:15,080 --> 00:59:17,120 til inter-kommunisere, å liksom sende 1412 00:59:17,120 --> 00:59:18,520 meldinger, en til en annen. 1413 00:59:18,520 --> 00:59:21,930 Passerer et stykke papir i klassen er liksom den lave tech 1414 00:59:21,930 --> 00:59:22,700 tilsvarende. 1415 00:59:22,700 --> 00:59:24,300 Så kringkaste arrangementet. 1416 00:59:24,300 --> 00:59:26,210 Jeg kan sende denne meldingen, og ordet hendelsen 1417 00:59:26,210 --> 00:59:27,270 er helt vilkårlig. 1418 00:59:27,270 --> 00:59:30,000 Scratch har noen ganger disse drop downs, så jeg bare kom opp 1419 00:59:30,000 --> 00:59:33,230 med en tilfeldig ord som hendelse fordi nå, hva gutten gjør 1420 00:59:33,230 --> 00:59:36,600 når jeg trykker på nøkkelen er han sender denne hendelsen. 1421 00:59:36,600 --> 00:59:39,270 Og hvis jeg ser nå på jenta manus, er hennes script 1422 00:59:39,270 --> 00:59:42,690 super enkelt fordi alt hun trenger å gjøre er ikke handle når 1423 00:59:42,690 --> 00:59:44,100 grønt flagg klikkes. 1424 00:59:44,100 --> 00:59:47,910 Hun er utformet til handling når hun mottar sitat, unquote, 1425 00:59:47,910 --> 00:59:51,210 "Hendelse", og på det punktet, hun lytter derfor for 1426 00:59:51,210 --> 00:59:52,960 den såkalte hendelse igjen og igjen. 1427 00:59:52,960 --> 00:59:55,790 Så snart hun får så fall hun kommer til å rope 1428 00:59:55,790 --> 00:59:57,680 Polo i to sekunder. 1429 00:59:57,680 --> 01:00:01,090 >> Og så kan du kanskje slutte fra dette nøyaktig hva 1430 01:00:01,090 --> 01:00:03,190 neste resultatet kommer til å bli. 1431 01:00:03,190 --> 01:00:04,910 La meg klikker det grønne flagget. 1432 01:00:04,910 --> 01:00:06,610 Ingenting skjer fordi jeg trenger å gjøre hva? 1433 01:00:06,610 --> 01:00:07,310 PUBLIKUM: Space Bar. 1434 01:00:07,310 --> 01:00:08,630 DAVID MALAN: Space Bar. 1435 01:00:08,630 --> 01:00:11,990 Boy sier Marco, sier jenta Polo. 1436 01:00:11,990 --> 01:00:13,670 Men det er ikke vanskelig kodet per se. 1437 01:00:13,670 --> 01:00:16,740 Det er inter-kommunikasjon mellom skript, så nå er vi 1438 01:00:16,740 --> 01:00:19,240 har muligheten til å gjøre enda mer komplekse programmer hvor 1439 01:00:19,240 --> 01:00:22,830 disse to er liksom inter-kommunikasjon. 1440 01:00:22,830 --> 01:00:25,260 >> Så i hvilke retninger kan vi ta dette? 1441 01:00:25,260 --> 01:00:28,260 Vel, i oppgavesettet 0, egentlig, er målet å 1442 01:00:28,260 --> 01:00:29,830 ha det gøy med Scratch. 1443 01:00:29,830 --> 01:00:32,440 For hacker utgave, vil du i stedet ha det gøy med en mer 1444 01:00:32,440 --> 01:00:35,850 sofistikert versjon av Scratch kalt BYOB, Bygg 1445 01:00:35,850 --> 01:00:38,040 Din egen blokker, men ideen er den samme. 1446 01:00:38,040 --> 01:00:38,780 Du vil kunne - 1447 01:00:38,780 --> 01:00:39,710 Ja, det var bevisst. 1448 01:00:39,710 --> 01:00:42,450 Det kom fra Berkeley. 1449 01:00:42,450 --> 01:00:45,200 BYOB er hacker utgave versjon av denne, men begge 1450 01:00:45,200 --> 01:00:48,180 demografi, standard utgave og hacker utgave alike, den 1451 01:00:48,180 --> 01:00:50,940 målet på hånden for den kommende uken er egentlig bare å dykke i 1452 01:00:50,940 --> 01:00:53,050 dyp, få hendene skitne med programmering, og gjøre 1453 01:00:53,050 --> 01:00:55,240 noe interessant, gjøre noe interaktivt, gjør 1454 01:00:55,240 --> 01:00:58,020 noe kunstnerisk, gjør noe gøy å faktisk 1455 01:00:58,020 --> 01:01:01,020 demonstrere, slik at ved ukens slutt, vil du ha et prosjekt, 1456 01:01:01,020 --> 01:01:03,770 ikke bare for den første CS50 pset, men du vil ha en 1457 01:01:03,770 --> 01:01:05,620 Noe som du kan vise frem i Annenberg til 1458 01:01:05,620 --> 01:01:08,830 venner eller familie ved å laste den opp til MIT hjemmeside. 1459 01:01:08,830 --> 01:01:11,760 Og så som jeg sa på onsdag, forventer vi 90% av klassen, 1460 01:01:11,760 --> 01:01:13,970 generelt, for å gjøre de vanlige utgavene. 1461 01:01:13,970 --> 01:01:16,660 Innse at det er også dette uttaket for de av dere som 1462 01:01:16,660 --> 01:01:18,990 ellers finne deg selv litt lei med det grunnleggende 1463 01:01:18,990 --> 01:01:21,650 og virkelig ønsker å dykke i og lage en visjon du allerede 1464 01:01:21,650 --> 01:01:25,380 har med tidligere bakgrunn i dette mer vennlig 1465 01:01:25,380 --> 01:01:26,240 miljø. 1466 01:01:26,240 --> 01:01:29,030 >> Så la meg trekke opp en annen eksempel at en av våre tidligere 1467 01:01:29,030 --> 01:01:33,830 studenter her gjorde og fortelle litt noe gjennom sang. 1468 01:01:33,830 --> 01:01:37,430 Det samme som dette spiller, tenk på hvordan du går om 1469 01:01:37,430 --> 01:01:40,520 implementere dette programmet ved hjelp av nettopp disse samme 1470 01:01:40,520 --> 01:01:44,180 byggeklosser, en liten bit av pseudo tilfeldigheten, og en 1471 01:01:44,180 --> 01:01:46,010 litt kjent sang. 1472 01:01:46,010 --> 01:01:47,910 Hvis vi kunne øke volumet bare litt? 1473 01:01:47,910 --> 01:01:49,160 [MUSIC - "Det regner menn" The Weather Girls] 1474 01:03:02,261 --> 01:03:03,930 >> DAVID MALAN: Det er nok for CS50. 1475 01:03:03,930 --> 01:03:05,860 Vi vil se deg på mandag. 1476 01:03:05,860 --> 01:03:21,152 [Applaus]