1 00:00:00,000 --> 00:00:15,059 >> [MUSIKK] 2 00:00:15,059 --> 00:00:19,170 >> Dette er CS50-- Harvard Universitetet introduksjon 3 00:00:19,170 --> 00:00:22,070 til den intellektuelle foretak av informatikk 4 00:00:22,070 --> 00:00:23,800 og kunsten programmering. 5 00:00:23,800 --> 00:00:27,020 Og mitt navn er David Malan, og Jeg bare tenkte i morges, 6 00:00:27,020 --> 00:00:33,120 det har vært utrolig 20 år i dag siden sist jeg satt der dere gjør nå. 7 00:00:33,120 --> 00:00:33,840 >> Det var 1996. 8 00:00:33,840 --> 00:00:37,550 Jeg var en sophomore, og jeg tok CS50 for aller første gang. 9 00:00:37,550 --> 00:00:40,890 Og jeg hadde ikke engang fått opp nerve å ta det selv freshman året, 10 00:00:40,890 --> 00:00:42,500 dels på grunn av tiden. 11 00:00:42,500 --> 00:00:44,782 Informatikk til meg var typen som, meh. 12 00:00:44,782 --> 00:00:46,990 Jeg var litt av en geek voksende opp, men jeg gjorde egentlig ikke 13 00:00:46,990 --> 00:00:49,180 har noen intellektuell interesse i hva som syntes 14 00:00:49,180 --> 00:00:51,920 å bare være en hel haug med folk programmering hele tiden. 15 00:00:51,920 --> 00:00:53,904 >> Og jeg var redd for å være ærlig. 16 00:00:53,904 --> 00:00:56,820 Kurset og informatikk mer generelt har hatt, og i noen grad 17 00:00:56,820 --> 00:01:01,230 fortsatt har dette ryktet fra et felt til pass på, hvis bare fordi så mange av oss 18 00:01:01,230 --> 00:01:04,410 er kjent med det, og usikker på det. 19 00:01:04,410 --> 00:01:08,480 Og det var ikke før jeg handlet denne klassen som sophomore fall-- 20 00:01:08,480 --> 00:01:10,880 og selv da, jeg bare registrert fordi professor-- 21 00:01:10,880 --> 00:01:13,950 en av mine første mentorer, Brian Kernighan nå på Princeton-- 22 00:01:13,950 --> 00:01:15,700 tillatt meg å ta klassen pass mislykkes. 23 00:01:15,700 --> 00:01:18,020 Og ja, det er derfor i dag vi tillate og oppmuntre 24 00:01:18,020 --> 00:01:20,030 studenter til å ta denne klassen satt / unsat. 25 00:01:20,030 --> 00:01:22,040 >> Og bare da, ved de slutten av semesteret 26 00:01:22,040 --> 00:01:24,870 gjorde jeg innser at, wow, dette var ikke slik et ukjent felt. 27 00:01:24,870 --> 00:01:26,850 Dette var faktisk en veldig myndig feltet, 28 00:01:26,850 --> 00:01:28,970 og mer spennende, spesielt senere, 29 00:01:28,970 --> 00:01:32,809 så jeg tok kurs i Dramatiske Arts 101 og Latin-A 30 00:01:32,809 --> 00:01:34,600 og så til slutt grad skolen arkeologi, 31 00:01:34,600 --> 00:01:37,860 gjorde jeg virkelig begynne å se skjæringene mellom dette felt, datamaskin 32 00:01:37,860 --> 00:01:41,979 vitenskap, med humaniora, naturfag, kunst, medisin, 33 00:01:41,979 --> 00:01:42,520 o.l. 34 00:01:42,520 --> 00:01:44,420 Og så det er det er bare så ryddig om informatikk 35 00:01:44,420 --> 00:01:46,930 slutt, som vi håper du vil see-- er dens anvendbarhet 36 00:01:46,930 --> 00:01:50,280 til disse andre felt, og hvordan du kan ta noen av dagens og semesterets 37 00:01:50,280 --> 00:01:53,070 ideer og praktiske ferdigheter tilbake til ditt eget domene, 38 00:01:53,070 --> 00:01:58,200 og faktisk utforske dette krysset av de liberale kunst og vitenskap. 39 00:01:58,200 --> 00:02:02,690 >> Så 73% av dere, hvis siste Året er noen indikasjon, 40 00:02:02,690 --> 00:02:04,390 har aldri tatt en CS kurs før. 41 00:02:04,390 --> 00:02:06,389 Så hvis du, som meg, er du følelsen litt 42 00:02:06,389 --> 00:02:09,190 redd, eller ærlig du ikke helt sikker på hvorfor du selv her. 43 00:02:09,190 --> 00:02:11,510 Kanskje du bare fulgte noen venner over til Sanders akkurat nå. 44 00:02:11,510 --> 00:02:12,490 Det er helt greit. 45 00:02:12,490 --> 00:02:15,059 Målet her er å koble du og for å forsikre deg 46 00:02:15,059 --> 00:02:17,100 at hvis du ser på venstre og til høyre, 47 00:02:17,100 --> 00:02:21,480 du kommer til å se klassekamerater med så lite eller så mye erfaring 48 00:02:21,480 --> 00:02:22,890 at du selv måtte ha. 49 00:02:22,890 --> 00:02:25,280 Og ja, vil vi dele noen statistikk senere i dag 50 00:02:25,280 --> 00:02:28,120 Når det gjelder hva den demografiske sammensetningen av klassen typisk se ut. 51 00:02:28,120 --> 00:02:31,440 >> Og som ekstra reassurance-- og dette vi mener siden jeg tok i løpet 52 00:02:31,440 --> 00:02:33,252 noen år ago-- i kursets pensum 53 00:02:33,252 --> 00:02:35,460 er dette-- at det som til slutt saker i dette kurset 54 00:02:35,460 --> 00:02:38,040 er ikke så mye hvor du ender opp i forhold til klassekameratene dine, 55 00:02:38,040 --> 00:02:43,110 men hvor man i uke 11, enden av semester, ender opp i forhold til deg selv 56 00:02:43,110 --> 00:02:46,280 i uke 0, som er hvor vi er her i dag. 57 00:02:46,280 --> 00:02:48,704 Og dette er hva jeg innså alle disse år siden. 58 00:02:48,704 --> 00:02:50,620 Og jeg kjenner mange klasser si dette, men det er 59 00:02:50,620 --> 00:02:52,450 særlig i informatikk. 60 00:02:52,450 --> 00:02:55,320 På slutten av dagen, dette feltet er kjent som det var for meg 61 00:02:55,320 --> 00:02:58,590 og kan være for deg, er egentlig bare om problemløsning. 62 00:02:58,590 --> 00:03:01,324 Og som sådan, har den denne anvendelighet for å få andre felt. 63 00:03:01,324 --> 00:03:03,490 Og faktisk, hvis vi forsøkt å destillere hva dette betyr, 64 00:03:03,490 --> 00:03:06,897 dette er problemløsning i sin essens, daresay jeg. 65 00:03:06,897 --> 00:03:09,480 Det er input-- så hva det er at du prøver å løse. 66 00:03:09,480 --> 00:03:12,264 Det er utgang, som er forhåpentligvis løsningen på det problemet. 67 00:03:12,264 --> 00:03:14,180 Og så, som vi ville si i informatikk, 68 00:03:14,180 --> 00:03:17,310 det er denne svarte boksen i midten at du ikke nødvendigvis 69 00:03:17,310 --> 00:03:19,450 å bry seg om hvordan det fungerer. 70 00:03:19,450 --> 00:03:22,230 Du selv etterhvert kanskje implementere hva som er inni den boksen. 71 00:03:22,230 --> 00:03:25,194 Men for dagens formål og flere generelt i livet, bryr alt du om 72 00:03:25,194 --> 00:03:26,610 er at disse problemene bli løst. 73 00:03:26,610 --> 00:03:29,340 >> Og hva dette kurset er syvende og sist om er å utforske 74 00:03:29,340 --> 00:03:31,700 krysset av Disse innganger og utganger, 75 00:03:31,700 --> 00:03:34,410 og disse såkalte algoritmer, som vi snart se, 76 00:03:34,410 --> 00:03:37,450 som implementerer det som er under der, panseret. 77 00:03:37,450 --> 00:03:40,487 Men disse innganger og disse outputs-- hva betyr egentlig det? 78 00:03:40,487 --> 00:03:43,570 Vel, på slutten av dagen, må vi noen måte å representere informasjon. 79 00:03:43,570 --> 00:03:46,660 Dette gjelder spesielt i en datamaskin, som så fancy og komplisert som det 80 00:03:46,660 --> 00:03:48,160 kan virke, er en ganske dum enhet. 81 00:03:48,160 --> 00:03:52,240 Det tar electricity-- enten fra en kabel eller et batteri som input-- 82 00:03:52,240 --> 00:03:55,820 og da er det produserer noen preprogramed svarene på skjermen. 83 00:03:55,820 --> 00:03:57,970 >> Men hvordan får vi fra begynne å fullføre det? 84 00:03:57,970 --> 00:03:59,470 Vel, hva som er et problem som må løses? 85 00:03:59,470 --> 00:04:01,050 Vel, kanskje vi kan, på starten på noen semester, 86 00:04:01,050 --> 00:04:02,841 prøv å ta frammøte i et rom som dette. 87 00:04:02,841 --> 00:04:04,750 Så jeg kan gjøre som en, to, tre. 88 00:04:04,750 --> 00:04:07,060 Eller kanskje, hvis jeg gjorde det å liksom holde styr 89 00:04:07,060 --> 00:04:10,560 av myself-- å holde styr på things-- Jeg kunne raskt kjøre ut av fingrene. 90 00:04:10,560 --> 00:04:14,650 Så jeg kan bare gjøre hash marks-- en person, to, tre, fire, fem, seks, 91 00:04:14,650 --> 00:04:15,431 syv, åtte. 92 00:04:15,431 --> 00:04:17,930 Og alle av oss har trolig gjort dette, enten på hendene 93 00:04:17,930 --> 00:04:19,680 eller på et stykke papir. 94 00:04:19,680 --> 00:04:22,140 Og dette er faktisk bare noe som kalles enhetlige notation-- 95 00:04:22,140 --> 00:04:26,130 der hvis du bare har én bokstav i alfabetet, en eller hash 96 00:04:26,130 --> 00:04:29,440 merke i dette tilfellet, for hvert innspill du ønsker å telle, 97 00:04:29,440 --> 00:04:32,330 du trenger å legge ned en av disse letters-- ett av disse merkene. 98 00:04:32,330 --> 00:04:32,510 >> Greit. 99 00:04:32,510 --> 00:04:34,790 Det er alt fint og bra og ikke så komplisert. 100 00:04:34,790 --> 00:04:37,800 Men datamaskiner er ikke alt så mye mer komplisert. 101 00:04:37,800 --> 00:04:40,770 Faktisk, de fleste av dere sikkert vet selv om du har virkelig ikke 102 00:04:40,770 --> 00:04:44,080 vurderes hva dette betyr, at datamaskiner bare forstår nuller 103 00:04:44,080 --> 00:04:45,870 og ones-- den såkalte binære systemet. 104 00:04:45,870 --> 00:04:49,390 Vi mennesker, derimot, er så mye mer sofistikert i den utstrekning 105 00:04:49,390 --> 00:04:51,770 som vi forstår nuller gjennom niere. 106 00:04:51,770 --> 00:04:55,740 >> Men selv om binære er, først blikk, ikke alt som er kjent, 107 00:04:55,740 --> 00:05:00,330 det viser seg at det er akkurat som systemene og ideer som vi allerede vet. 108 00:05:00,330 --> 00:05:02,420 Så for eksempel, bør du vurdere dette. 109 00:05:02,420 --> 00:05:03,896 Dette er bare en sekvens av symboler. 110 00:05:03,896 --> 00:05:05,770 Og alle dere, når skotter på det, sannsynligvis 111 00:05:05,770 --> 00:05:09,380 tror 123-- ingenting veldig interessant der. 112 00:05:09,380 --> 00:05:11,940 Men hvorfor er det dette nummeret, 123? 113 00:05:11,940 --> 00:05:14,440 Dette er bare innskrifter på den screen-- bare mønstre 114 00:05:14,440 --> 00:05:16,387 at noen kanskje har tegnet eller skrevet. 115 00:05:16,387 --> 00:05:18,970 Men hvis du er som meg, du sikkert husker fra grunnskolen 116 00:05:18,970 --> 00:05:21,610 at det er liksom kolonner eller steder her. 117 00:05:21,610 --> 00:05:25,340 Det er en plass og tierplassen og hundre plass. 118 00:05:25,340 --> 00:05:29,820 Og grunnen til at dette er 123 og ikke bare et mønster av tre symboler 119 00:05:29,820 --> 00:05:33,090 er fordi, selvfølgelig, hvis vi har en i hundrevis sted, 120 00:05:33,090 --> 00:05:36,610 du gjør regnestykket over 100 ganger én, og deretter to i tierplassen. 121 00:05:36,610 --> 00:05:41,390 Så det er 10 ganger 2, og deretter tre i ett sted og det er 1 ganger 3. 122 00:05:41,390 --> 00:05:45,670 Og når du legger alle disse opp, for Selvfølgelig får du 100 pluss 20 pluss tre. 123 00:05:45,670 --> 00:05:48,220 >> Så vi startet med bare et mønster av symbols-- en alphabet-- 124 00:05:48,220 --> 00:05:51,670 men da vi kartlagt betydning på det ved hjelp av disse kolonnene. 125 00:05:51,670 --> 00:05:54,450 Vel, det viser seg at datamaskiner er egentlig ikke 126 00:05:54,450 --> 00:05:56,300 så forskjellig fra deg og meg. 127 00:05:56,300 --> 00:06:01,840 Men i stedet for å bruke krefter på 10, så til speak-- 1, 10, 100, 1000, 128 00:06:01,840 --> 00:06:04,330 10000 sted og så forth-- de faktisk 129 00:06:04,330 --> 00:06:08,930 bare bruke krefter 2-- slik at en, to, fire, og deretter 130 00:06:08,930 --> 00:06:12,810 hvis vi legger flere sifre, 8, 16, 32, 64, 128, og så videre. 131 00:06:12,810 --> 00:06:16,050 Og så dette er hvordan en datamaskin ville representere tallet 0, 132 00:06:16,050 --> 00:06:17,300 akkurat som vi mennesker. 133 00:06:17,300 --> 00:06:21,660 >> 0, 0, 0-- og du kan sikkert gjette hva mønster av nuller og enere, 134 00:06:21,660 --> 00:06:24,610 Hvis en datamaskin kan bare snakke 0 eller 1-- hva 135 00:06:24,610 --> 00:06:29,110 mønster kommer til å representere tall vi mennesker kjenner som en? 136 00:06:29,110 --> 00:06:30,590 Yeah-- 0, 0, 1. 137 00:06:30,590 --> 00:06:31,090 Greit. 138 00:06:31,090 --> 00:06:35,900 Så 0, 0, 1 er hvordan vi representerer 1, slik at du kan være tilbøyelig deretter 139 00:06:35,900 --> 00:06:39,510 til å representere nummer to, hvis du har de fire plass og de to plass 140 00:06:39,510 --> 00:06:48,290 som ett sted, kan du si, vel, hvis vi hadde en 1 i ett sted, 141 00:06:48,290 --> 00:06:50,430 og nå ønsker vi å telle opp til to, kanskje du 142 00:06:50,430 --> 00:06:53,310 gjøre dette og la dette være et null. 143 00:06:53,310 --> 00:06:56,397 Men dette er selvsagt ikke hvordan desimalsystemet fungerer heller. 144 00:06:56,397 --> 00:06:58,230 Hvis du putter et tall begge disse kolonner, 145 00:06:58,230 --> 00:06:59,563 du er nødt til å gjøre det aritmetiske. 146 00:06:59,563 --> 00:07:01,930 Så hva nummer gjorde jeg tilfeldigvis bare representerer? 147 00:07:01,930 --> 00:07:06,710 >> Så det er tre, fordi 2 ganger 1 pluss 1 ganger 1, selvfølgelig, gir oss tre. 148 00:07:06,710 --> 00:07:08,340 Så dette ville være to. 149 00:07:08,340 --> 00:07:12,730 Den litt sånn knipser, så å si, som 0 blir en one, mye som en 9 roller enn 150 00:07:12,730 --> 00:07:14,840 og blir en 0 når du bærer en. 151 00:07:14,840 --> 00:07:16,510 Dette vil da være tre av kurset. 152 00:07:16,510 --> 00:07:20,170 Four-- annen interessant ting skjer, og hvor de ruller over 153 00:07:20,170 --> 00:07:21,750 og du bærer en, så å si. 154 00:07:21,750 --> 00:07:23,320 Så dette, selvfølgelig, er 4. 155 00:07:23,320 --> 00:07:25,160 >> Men hvis du spole fremover nå, Hva er det største antallet kommer 156 00:07:25,160 --> 00:07:26,660 å være at en datamaskin kan representere? 157 00:07:26,660 --> 00:07:30,420 158 00:07:30,420 --> 00:07:32,380 Så det er bare sju i dette tilfellet, ikke sant? 159 00:07:32,380 --> 00:07:35,570 Fordi du har en i de fire, en en i to, ett i den ene. 160 00:07:35,570 --> 00:07:36,900 Så det er fire pluss to pluss en. 161 00:07:36,900 --> 00:07:37,972 Slik som gir deg sju. 162 00:07:37,972 --> 00:07:39,680 Og ja, det ville virke ved første øyekast 163 00:07:39,680 --> 00:07:43,750 at datamaskiner kan telle ikke er høyere enn dette. 164 00:07:43,750 --> 00:07:45,210 >> Men dette er selvfølgelig ikke sant. 165 00:07:45,210 --> 00:07:48,243 Hva gjør vi mennesker gjør når vi ønsker å telle høyere enn som 999? 166 00:07:48,243 --> 00:07:51,000 167 00:07:51,000 --> 00:07:53,900 Bare bære en og bare legge til en fjerde sifferet til venstre. 168 00:07:53,900 --> 00:07:55,070 Og så faktisk vi kunne. 169 00:07:55,070 --> 00:07:57,900 Vi kunne ha en åtte s plassere og en 16. plass, 170 00:07:57,900 --> 00:08:02,000 og en 32 plass, 64, 128-- og du kan bare fortsette videre opp til uendelig. 171 00:08:02,000 --> 00:08:04,640 Så disse nuller og ones-- den såkalte binære system-- 172 00:08:04,640 --> 00:08:10,290 er det en datamaskin vitenskapsmann ville vanligvis kaller en bit, eller binære siffer. 173 00:08:10,290 --> 00:08:13,590 >> Men nå, hvordan vi får fra konsept eller grafikken på disse tingene 174 00:08:13,590 --> 00:08:14,620 til en faktisk datamaskin? 175 00:08:14,620 --> 00:08:17,170 Vi ser ut til å hoppe over et trinn her. 176 00:08:17,170 --> 00:08:20,210 Vel, det eneste inngang på slutten av dagen, til min laptop her 177 00:08:20,210 --> 00:08:22,060 er denne flyten av strøm. 178 00:08:22,060 --> 00:08:24,560 Selv om det har vært en lang siden du tenkte på 179 00:08:24,560 --> 00:08:26,580 eller aldri tenkt på hvordan elektrisitet fungerer, 180 00:08:26,580 --> 00:08:30,909 det er elektroner flyter i eller ut, og det er min form for innspill. 181 00:08:30,909 --> 00:08:34,659 >> Så hvis det er alt som vi er får som input her, 182 00:08:34,659 --> 00:08:36,830 hva kan vi gjøre med denne informasjonen? 183 00:08:36,830 --> 00:08:40,040 Vel, vi kan tenke på en null som bare et fravær av elektrisitet. 184 00:08:40,040 --> 00:08:42,540 Ingenting er flowinw, er ingenting flytting, ingenting skjer. 185 00:08:42,540 --> 00:08:44,690 Det er bare standard state-- null. 186 00:08:44,690 --> 00:08:48,200 Men hvis det er strøm flyter, hvorfor gjør vi ikke bare vilkårlig, men globalt 187 00:08:48,200 --> 00:08:50,250 konsekvent, kaller dette en en. 188 00:08:50,250 --> 00:08:54,760 >> Så bare ved å ha ingen makt, vi har en null, ja makt, 189 00:08:54,760 --> 00:08:57,520 vi har en one-- ingen makt, ja makt. 190 00:08:57,520 --> 00:09:01,520 Og på den måten, ved hjelp av noe mer fysisk eller elektronisk 191 00:09:01,520 --> 00:09:05,340 vi begynner å implementere denne oppfatningen av noe enten være en eller en null. 192 00:09:05,340 --> 00:09:07,230 Ja, vi kan bare gjøre det over her. 193 00:09:07,230 --> 00:09:10,590 Så her har jeg ikke tre, men åtte lyspærer, som hver 194 00:09:10,590 --> 00:09:11,810 har sin egen bryter. 195 00:09:11,810 --> 00:09:15,760 >> Og så hvis jeg ønsket å representere nummer syv her, 196 00:09:15,760 --> 00:09:18,510 Jeg kan slå på disse tre lyspærer. 197 00:09:18,510 --> 00:09:21,470 Og ja, på innsiden av datamaskinen min er millioner, 198 00:09:21,470 --> 00:09:25,650 milliarder av ting som er bare mindre enn det, som kalles transistorer 199 00:09:25,650 --> 00:09:27,330 brytere, som du bare slå av og på. 200 00:09:27,330 --> 00:09:30,420 Så disse er big-- relativt big-- brytere inni min laptop-- 201 00:09:30,420 --> 00:09:32,150 er mange, mange, mange, mange flere brytere. 202 00:09:32,150 --> 00:09:35,160 Men alt de gjør er nøyaktig at-- slå noe på, slår noe av. 203 00:09:35,160 --> 00:09:38,076 Og som sådan, kan en datamaskin representere, med de millioner eller milliarder 204 00:09:38,076 --> 00:09:40,480 av transistorer, masse og mange nuller og enere. 205 00:09:40,480 --> 00:09:43,160 Og det er annen maskinvare likevel at kan du lagre informasjon på lang sikt, 206 00:09:43,160 --> 00:09:45,243 slik at når du trekker plugg, trenger du ikke mister den. 207 00:09:45,243 --> 00:09:46,900 Men det er en historie for en annen dag. 208 00:09:46,900 --> 00:09:51,170 >> Så hva kan vi gjøre med disse bitene? 209 00:09:51,170 --> 00:09:54,309 Kan vi bare ta presset ut av me-- 210 00:09:54,309 --> 00:09:56,600 kanskje noen ønsker å komme opp her og gi opp en demo? 211 00:09:56,600 --> 00:09:57,516 Jeg så denne hånden først. 212 00:09:57,516 --> 00:09:58,709 Hva heter du? 213 00:09:58,709 --> 00:09:59,250 Maday: Maday. 214 00:09:59,250 --> 00:10:00,542 DAVID MALAN: Maday, kom opp. 215 00:10:00,542 --> 00:10:01,250 Hyggelig å møte deg. 216 00:10:01,250 --> 00:10:02,390 Maday: Hyggelig å møte deg. 217 00:10:02,390 --> 00:10:02,930 >> DAVID MALAN: Kom på denne måten. 218 00:10:02,930 --> 00:10:04,182 Jeg trenger ikke å leppe deg opp. 219 00:10:04,182 --> 00:10:04,682 Greit. 220 00:10:04,682 --> 00:10:11,090 Så her har vi, notice-- en, two-- vi vil redigere out-- en, to, fire, 221 00:10:11,090 --> 00:10:13,350 åtte, 16, 32, 64, 128. 222 00:10:13,350 --> 00:10:14,220 Dette er bevisst. 223 00:10:14,220 --> 00:10:17,370 Det er åtte biter her-- binære digits-- nuller og enere. 224 00:10:17,370 --> 00:10:21,460 Og en bit er en nyttig enhet av measure-- ikke så nyttig en måleenhet 225 00:10:21,460 --> 00:10:21,999 på seg selv. 226 00:10:21,999 --> 00:10:24,290 Vanligvis du vil ha minst åtte av disse tingene, også kjent som 227 00:10:24,290 --> 00:10:24,790 en byte. 228 00:10:24,790 --> 00:10:26,230 Så vi har en byte av biter her. 229 00:10:26,230 --> 00:10:31,130 >> Så hvis vi ønsket å utfordre deg med, for eksempel, å stave ut, i binær, 230 00:10:31,130 --> 00:10:33,230 denne verdien her-- 42. 231 00:10:33,230 --> 00:10:35,140 Ønsker du å ta en stikke på det? 232 00:10:35,140 --> 00:10:36,034 >> Maday: [hørbar]. 233 00:10:36,034 --> 00:10:38,700 DAVID MALAN: Ja, bare trykk på små hvite brytere i front. 234 00:10:38,700 --> 00:10:41,290 Og du ønsker å stave ut 42, og opp til tak 235 00:10:41,290 --> 00:10:44,061 er dette CS50 stresset ball hvis du får dette. 236 00:10:44,061 --> 00:10:44,560 Greit. 237 00:10:44,560 --> 00:10:46,420 Så har du 32. 238 00:10:46,420 --> 00:10:48,430 Vi kommer til å trenge 42. 239 00:10:48,430 --> 00:10:51,410 Så det er en åtte, så det er 40. 240 00:10:51,410 --> 00:10:54,160 Og excellent-- veldig pent gjort. 241 00:10:54,160 --> 00:10:55,186 Takk skal du ha. 242 00:10:55,186 --> 00:10:58,790 >> [BIFALL] 243 00:10:58,790 --> 00:10:59,290 Greit. 244 00:10:59,290 --> 00:11:00,623 Så vi har en mer stress ball. 245 00:11:00,623 --> 00:11:03,595 La oss gjøre dette på nytt hvis vi kan. 246 00:11:03,595 --> 00:11:05,368 En annen frivillig? 247 00:11:05,368 --> 00:11:07,970 Gratis stress ball, gratis stress ball. 248 00:11:07,970 --> 00:11:08,470 OK. 249 00:11:08,470 --> 00:11:11,640 Over her i midten, vil du komme ned? 250 00:11:11,640 --> 00:11:14,100 Greit. 251 00:11:14,100 --> 00:11:15,552 Jeg vet. 252 00:11:15,552 --> 00:11:16,360 Det vi går. 253 00:11:16,360 --> 00:11:20,818 >> Så tallene her-- komme ned. 254 00:11:20,818 --> 00:11:21,567 Hva heter du? 255 00:11:21,567 --> 00:11:21,984 >> DAVEY: Davey. 256 00:11:21,984 --> 00:11:22,820 >> DAVID MALAN: Davey. 257 00:11:22,820 --> 00:11:23,320 OK. 258 00:11:23,320 --> 00:11:24,810 Kom opp, Davey. 259 00:11:24,810 --> 00:11:25,890 Hyggelig å møte deg. 260 00:11:25,890 --> 00:11:28,639 Og hva vi kommer til å ha deg spell-- hvis du kunne somle det 261 00:11:28,639 --> 00:11:32,810 for bare én moment-- er nummer 50. 262 00:11:32,810 --> 00:11:36,293 Men, men, men men, men disse er grunnskolen magneter for en grunn. 263 00:11:36,293 --> 00:11:39,370 264 00:11:39,370 --> 00:11:43,327 Bare fikk litt hardere, ok? 265 00:11:43,327 --> 00:11:44,160 Det er fortsatt åtte. 266 00:11:44,160 --> 00:11:46,820 267 00:11:46,820 --> 00:11:47,320 Greit. 268 00:11:47,320 --> 00:11:48,486 Så hva har vi på det? 269 00:11:48,486 --> 00:11:51,356 Vi har 32. 270 00:11:51,356 --> 00:11:54,344 Hyggelig. 271 00:11:54,344 --> 00:11:58,610 32 pluss 16 gir oss 48-- så nær. 272 00:11:58,610 --> 00:12:00,390 Og flott. 273 00:12:00,390 --> 00:12:02,831 Gratulerer til Davey også. 274 00:12:02,831 --> 00:12:05,720 >> [BIFALL] 275 00:12:05,720 --> 00:12:06,516 >> Greit. 276 00:12:06,516 --> 00:12:09,390 Så vi kan gjøre dette hele dagen lang, og det blir ikke så mye mer 277 00:12:09,390 --> 00:12:10,800 interessant og mer utfordrende. 278 00:12:10,800 --> 00:12:13,250 Men det er egentlig den point-- Slik relativt enkel 279 00:12:13,250 --> 00:12:16,930 Det er, på slutten av dagen, hvilken Datamaskinen gjør for å lagre informasjon, 280 00:12:16,930 --> 00:12:21,740 til å lagre innganger og til slutt lagre eller representerer disse utgangene. 281 00:12:21,740 --> 00:12:23,750 Men tallene alene er ikke alt det interessante. 282 00:12:23,750 --> 00:12:26,069 >> Så mennesker, noen år siden, besluttet, vet du hva? 283 00:12:26,069 --> 00:12:27,860 Det ville være fint om datamaskiner var ikke bare 284 00:12:27,860 --> 00:12:31,030 kalkulatorer for aritmetikk operasjoner, men faktisk kunne 285 00:12:31,030 --> 00:12:35,209 gjøre ting som tekstbehandling, eller e-post, eller mer moderne inkarnasjoner 286 00:12:35,209 --> 00:12:36,500 av slike teknologier. 287 00:12:36,500 --> 00:12:40,680 Og så verden besluttet vilkårlig, men universelt, 288 00:12:40,680 --> 00:12:44,380 at hvis du ønsker å lagre hovedstaden bokstaven A i en datamaskin, vet du hva? 289 00:12:44,380 --> 00:12:47,730 La oss bare bli enige alle til å lagre noen mønster av nuller og ones-- 290 00:12:47,730 --> 00:12:52,422 bits-- som til slutt representerer desimaltallet 65. 291 00:12:52,422 --> 00:12:53,630 Vi får bare alle enige om det. 292 00:12:53,630 --> 00:12:56,620 >> 66 ville representere B, 67 ville representere C, 293 00:12:56,620 --> 00:13:00,210 og det er bunter av andre mønstre av nuller og enere, eller underliggende tall, 294 00:13:00,210 --> 00:13:02,224 som ville representere andre bokstaver fortsatt. 295 00:13:02,224 --> 00:13:04,390 Så hvis du slags mentalt absorbere dette for et øyeblikk, 296 00:13:04,390 --> 00:13:10,900 Jeg bevisst satt opp A til Jeg, hvor H en 72 og jeg er 73. 297 00:13:10,900 --> 00:13:15,830 Hvis en datamaskin og deretter, i sammenheng et tekstbehandlingsprogram eller en e-post, 298 00:13:15,830 --> 00:13:19,620 avdekket under panseret for å ha disse mønstrene av bits-- mønster 299 00:13:19,620 --> 00:13:22,500 bit som representerer 72, deretter 73, deretter 33-- 300 00:13:22,500 --> 00:13:26,640 hva kan dette stave på det programmet? 301 00:13:26,640 --> 00:13:28,150 >> Så hei, og deretter noe. 302 00:13:28,150 --> 00:13:31,460 Vi trenger ikke nødvendigvis vet, men faktisk 33-- ikke på kartet earlier-- 303 00:13:31,460 --> 00:13:33,170 var rett og slett et utropstegn. 304 00:13:33,170 --> 00:13:38,870 Så 72 var H, 73 er ​​jeg, 33 skjer å være et utropstegn fortsatt. 305 00:13:38,870 --> 00:13:41,719 Men det er alt fint og bra, og i virkeligheten i dag, i stedet for 306 00:13:41,719 --> 00:13:43,760 bare bruke syv eller åtte biter, takket være noe 307 00:13:43,760 --> 00:13:46,530 kalt Unicode motsetning til ASCII tilbake i dag, 308 00:13:46,530 --> 00:13:50,010 vi faktisk kan representere enda mer interessante karakterer enn bare 309 00:13:50,010 --> 00:13:52,980 disse originale engelske partisk bokstaver. 310 00:13:52,980 --> 00:13:56,030 Men vi kan også representere selv penere ting som farger. 311 00:13:56,030 --> 00:13:59,750 >> Hvis du noen gang har hørt forkortelsen RGB, rød, grønn, blå, at 312 00:13:59,750 --> 00:14:03,510 betyr bare at en datamaskin vanligvis bruker tre sett med bits-- 313 00:14:03,510 --> 00:14:06,760 et antall av biter som representerer et tall for hvor mye rødt du vil, 314 00:14:06,760 --> 00:14:08,940 et annet sett av biter for hvor mye grønt du vil, 315 00:14:08,940 --> 00:14:11,430 og et annet sett nummer for hvor mye blått du ønsker. 316 00:14:11,430 --> 00:14:14,457 Så et stort tall betyr mange rødt, lite antall betyr ingen rødt. 317 00:14:14,457 --> 00:14:16,290 Og så disse er snill middelverdier her. 318 00:14:16,290 --> 00:14:20,180 >> Så gi meg noen røde, gi meg litt grønn, og gi meg en liten bit av blått. 319 00:14:20,180 --> 00:14:24,260 Og hvis du blander disse tre nyanser av farge sammen, i dette tilfellet 320 00:14:24,260 --> 00:14:26,850 du får denne skummel skygge av gul eller brun. 321 00:14:26,850 --> 00:14:32,330 Men det mønsteret av åtte pluss åtte pluss eight-- så 24 bits-- 322 00:14:32,330 --> 00:14:36,550 venstre til høyre, er hvordan en datamaskin vil representere en bestemt farge. 323 00:14:36,550 --> 00:14:38,090 Nå er dette bare en prikk på en skjerm. 324 00:14:38,090 --> 00:14:42,230 Hvis du ser virkelig tett på TVen din datamaskin, vil du se prikker eller piksler. 325 00:14:42,230 --> 00:14:45,420 Og hvis du har en hel rutenett av piksler horisontalt og vertikalt, 326 00:14:45,420 --> 00:14:46,630 du har bilder. 327 00:14:46,630 --> 00:14:49,029 Og så hvis du tar et bilde og deretter vaske 328 00:14:49,029 --> 00:14:52,070 vis deg et annet bilde, en annen bilde, et annet bilde, et annet bilde, 329 00:14:52,070 --> 00:14:54,760 veldig fort, du selvsagt har filmer. 330 00:14:54,760 --> 00:14:56,109 >> Og så legge merke til hvor vi startet. 331 00:14:56,109 --> 00:14:57,650 Vi startet med disse nuller og enere. 332 00:14:57,650 --> 00:15:00,570 Vi jobbet derfra til desimal tall, hvordan vi representere dem. 333 00:15:00,570 --> 00:15:02,070 Nå har vi bokstavene i alfabetet. 334 00:15:02,070 --> 00:15:05,664 Men i andre sammenhenger vente, kan vi bruke noen flere biter og representerer farger. 335 00:15:05,664 --> 00:15:07,830 Så snart du har evne til å vise fargene, 336 00:15:07,830 --> 00:15:11,200 man har muligheten til å representere bilder og animerte gifs 337 00:15:11,200 --> 00:15:13,780 og andre slike tegn på skjermen. 338 00:15:13,780 --> 00:15:17,160 Og når du har en hel haug med bilder flyr av det menneskelige på en gang, 339 00:15:17,160 --> 00:15:21,480 det ser ut som levende bilder, og slik at du får videoer også. 340 00:15:21,480 --> 00:15:23,460 >> Så bruker disse svært enkle primitive gjør vi 341 00:15:23,460 --> 00:15:28,070 ha den måte å representere til slutt alle disse former for media. 342 00:15:28,070 --> 00:15:30,450 Og vi har abstrahert igjen og igjen og igjen, helt til vi 343 00:15:30,450 --> 00:15:33,467 få fra det laveste nivået til denne høyeste nivå. 344 00:15:33,467 --> 00:15:35,550 Så det gir oss denne generelt bilde av abstraksjon. 345 00:15:35,550 --> 00:15:36,990 Men vi startet her. 346 00:15:36,990 --> 00:15:38,790 >> Her Nå kan vi representerer i en datamaskin 347 00:15:38,790 --> 00:15:41,920 våre innganger med nuller og enere, våre utganger i nuller og enere, 348 00:15:41,920 --> 00:15:43,640 men hva som foregår inne i boksen? 349 00:15:43,640 --> 00:15:46,080 Det er der PC vitenskap blir interessant. 350 00:15:46,080 --> 00:15:49,770 Det er der du faktisk ta med eget sinn for å tåle å løse problemer. 351 00:15:49,770 --> 00:15:52,590 Vi kan nå fastsette, for Resten av semesteret, ja. 352 00:15:52,590 --> 00:15:53,870 Jeg vet hvordan binære fungerer. 353 00:15:53,870 --> 00:15:57,942 Jeg husker hvordan Ascii eller Unicode-- kartleggingen til letters-- fungerer. 354 00:15:57,942 --> 00:15:59,650 Og det absolutt står til grunn at vi 355 00:15:59,650 --> 00:16:03,470 kunne representere rødt og grønt og blå, og representerer multimedia i tillegg. 356 00:16:03,470 --> 00:16:05,390 Men dette er det interessante ting. 357 00:16:05,390 --> 00:16:09,790 Dette er hva som gjør noen stand til å løse problemer. 358 00:16:09,790 --> 00:16:11,980 >> Og et slikt problem vi liker å gjøre, ja, 359 00:16:11,980 --> 00:16:15,345 tar oppmøte, eller gjør dette algoritmer. 360 00:16:15,345 --> 00:16:16,470 Og igjen, kan jeg gjøre dette. 361 00:16:16,470 --> 00:16:19,580 Jeg kan gjøre en, to, tre, fire fem, seks, sju, åtte ni. 362 00:16:19,580 --> 00:16:21,520 Og jeg kunne skrive det ned for å holde styr på det. 363 00:16:21,520 --> 00:16:23,769 Men det er bare hvordan jeg ville representerer informasjonen. 364 00:16:23,769 --> 00:16:27,550 Eller jeg kunne gjøre dette faster-- to, fire, seks, åtte, ti, 12, 14, 16, 18, 20, 365 00:16:27,550 --> 00:16:30,380 22-- det føles som to ganger så fort, men det er fortsatt 366 00:16:30,380 --> 00:16:32,050 kommer til å ta en hel masse tid. 367 00:16:32,050 --> 00:16:35,990 >> Men det viser seg, hvis vi utnytter ennå en annen resource-- og faktisk datamaskiner 368 00:16:35,990 --> 00:16:38,940 disse dager har flere prosessorer eller hjerne. 369 00:16:38,940 --> 00:16:41,970 Det viser seg datamaskiner kan gjøre mange ting på en gang, 370 00:16:41,970 --> 00:16:44,460 og faktisk vi, i dette rommet, kan representere akkurat dette. 371 00:16:44,460 --> 00:16:47,130 >> Så det er litt sosialt vanskelig, men hvis du ville humor meg 372 00:16:47,130 --> 00:16:51,550 for bare en tre-trinns prosess, la meg spørre alle på plass er det bare 373 00:16:51,550 --> 00:16:54,640 å stå opp for et øyeblikk. 374 00:16:54,640 --> 00:16:57,380 Stå opp. 375 00:16:57,380 --> 00:17:01,580 Så tenk deg selv, nummer one-- slik at alle i dette rommet, 376 00:17:01,580 --> 00:17:05,010 bortsett fra folk som ikke gjorde det oblige, tenker nummer én. 377 00:17:05,010 --> 00:17:06,510 Så det er nummeret ditt akkurat nå. 378 00:17:06,510 --> 00:17:09,399 Det er det første skrittet, eller som en datamaskin vitenskapsmann eller en programmerer 379 00:17:09,399 --> 00:17:11,827 vanligvis ville gjøre, skal vi for å begynne å telle til null. 380 00:17:11,827 --> 00:17:14,410 Hvis minste tallet vi kan representerer med disse lyspærer 381 00:17:14,410 --> 00:17:17,410 er null, ved bare å forlate dem hele av, jeg kan like godt bare 382 00:17:17,410 --> 00:17:19,271 begynne å telle fra null er i stedet for en. 383 00:17:19,271 --> 00:17:21,020 Og så det er hva dataforskere gjør. 384 00:17:21,020 --> 00:17:23,750 Så steg null, stå opp og tenke på nummer én. 385 00:17:23,750 --> 00:17:26,339 Det neste trinnet er dette-- par med noen stående 386 00:17:26,339 --> 00:17:27,660 og legge tallene sammen. 387 00:17:27,660 --> 00:17:30,660 388 00:17:30,660 --> 00:17:32,850 Herlig. 389 00:17:32,850 --> 00:17:37,640 >> Så på dette tidspunkt, bokstavelig talt alle som deltar 390 00:17:37,640 --> 00:17:41,930 tenker på nummer 2, med unntak av for en merkelig person hvis vi har 391 00:17:41,930 --> 00:17:43,450 et ulikt antall personer i rommet. 392 00:17:43,450 --> 00:17:50,640 Og nå det tredje trinnet her kommer til å bli dette-- en av dere bør sette seg ned. 393 00:17:50,640 --> 00:17:54,490 En av dere bør sette seg ned, og hvis du fortsatt står oppreist, 394 00:17:54,490 --> 00:17:56,590 gå tilbake til trinn en. 395 00:17:56,590 --> 00:18:44,799 396 00:18:44,799 --> 00:18:45,790 Greit. 397 00:18:45,790 --> 00:19:00,760 398 00:19:00,760 --> 00:19:01,650 Greit. 399 00:19:01,650 --> 00:19:03,880 Slik at flere og flere mennesker bør bli sittende. 400 00:19:03,880 --> 00:19:08,280 Legg merke til at dette har indusert en loop-- en slags syklus. 401 00:19:08,280 --> 00:19:11,983 Noen av dere bør være klønete fast, går frem og tilbake mellom trinn en 402 00:19:11,983 --> 00:19:14,180 og to, en og to, en og to. 403 00:19:14,180 --> 00:19:21,190 404 00:19:21,190 --> 00:19:21,810 Det er greit. 405 00:19:21,810 --> 00:19:22,630 Vår første bug. 406 00:19:22,630 --> 00:19:24,740 Vi skal beskjeftige seg med. 407 00:19:24,740 --> 00:19:25,320 Greit. 408 00:19:25,320 --> 00:19:27,370 La meg prøve å anspore ting sammen. 409 00:19:27,370 --> 00:19:31,454 >> I teorien er det bare en person som står som alle fortsetter å pare seg. 410 00:19:31,454 --> 00:19:33,870 Men la meg få fart på sakene med folk som fremdeles står. 411 00:19:33,870 --> 00:19:35,480 Hvilket nummer er det du tenker på? 412 00:19:35,480 --> 00:19:36,070 46. 413 00:19:36,070 --> 00:19:36,570 OK. 414 00:19:36,570 --> 00:19:37,820 Gå videre og sette seg ned. 415 00:19:37,820 --> 00:19:39,190 Dere står fremdeles. 416 00:19:39,190 --> 00:19:42,130 Hvem er fortsatt stående? 417 00:19:42,130 --> 00:19:45,240 Hvilket nummer er det du tenker på? 418 00:19:45,240 --> 00:19:46,160 OK. 419 00:19:46,160 --> 00:19:47,900 >> Så vi vil komme tilbake til deg. 420 00:19:47,900 --> 00:19:49,630 I ryggen? 421 00:19:49,630 --> 00:19:50,790 Hva er det? 422 00:19:50,790 --> 00:19:53,100 22. 423 00:19:53,100 --> 00:19:56,540 OK noen andre opp top-- ja? 424 00:19:56,540 --> 00:19:57,720 34. 425 00:19:57,720 --> 00:19:58,300 OK. 426 00:19:58,300 --> 00:20:02,780 Over her på min right-- opp her? 427 00:20:02,780 --> 00:20:06,820 132, veldig hyggelig. 428 00:20:06,820 --> 00:20:08,380 22? 429 00:20:08,380 --> 00:20:08,990 >> OK. 430 00:20:08,990 --> 00:20:10,031 Og hvem som fremdeles står? 431 00:20:10,031 --> 00:20:11,000 Her borte? 432 00:20:11,000 --> 00:20:14,520 46, veldig hyggelig. 433 00:20:14,520 --> 00:20:16,890 72. 434 00:20:16,890 --> 00:20:18,220 Jeg kan ikke stoppe mye lenger. 435 00:20:18,220 --> 00:20:20,520 Ja? 436 00:20:20,520 --> 00:20:22,490 30, hyggelig. 437 00:20:22,490 --> 00:20:24,120 Her borte? 438 00:20:24,120 --> 00:20:26,200 23? 439 00:20:26,200 --> 00:20:27,270 23. 440 00:20:27,270 --> 00:20:30,920 >> Og jeg tror det er alle bortsett fra dere, ikke noe press. 441 00:20:30,920 --> 00:20:32,860 Å vent. 442 00:20:32,860 --> 00:20:33,360 28? 443 00:20:33,360 --> 00:20:37,500 444 00:20:37,500 --> 00:20:38,281 Bare åtte. 445 00:20:38,281 --> 00:20:38,780 OK. 446 00:20:38,780 --> 00:20:41,030 Bare åtte. 447 00:20:41,030 --> 00:20:42,580 Her nede? 448 00:20:42,580 --> 00:20:44,570 30. 449 00:20:44,570 --> 00:20:47,344 23. 450 00:20:47,344 --> 00:20:47,843 24. 451 00:20:47,843 --> 00:20:50,810 452 00:20:50,810 --> 00:20:52,310 18. 453 00:20:52,310 --> 00:20:54,690 Dette er det verst gjennomføring av denne algoritmen noensinne. 454 00:20:54,690 --> 00:20:55,190 OK. 455 00:20:55,190 --> 00:20:59,760 Så noen andre? 456 00:20:59,760 --> 00:21:00,421 Noen andre? 457 00:21:00,421 --> 00:21:00,920 OK. 458 00:21:00,920 --> 00:21:03,300 En til. 459 00:21:03,300 --> 00:21:04,400 16? 460 00:21:04,400 --> 00:21:04,900 OK. 461 00:21:04,900 --> 00:21:05,510 16. 462 00:21:05,510 --> 00:21:06,010 Greit. 463 00:21:06,010 --> 00:21:09,070 Så hvis jeg ikke har gått glipp av noen i blende her, når jeg trykker Enter, 464 00:21:09,070 --> 00:21:13,091 vi vil se, algoritmer, den Totalt antall personer i Sanders. 465 00:21:13,091 --> 00:21:16,340 Fordi igjen, det er som om alle som du satte seg, gikk antall bort 466 00:21:16,340 --> 00:21:19,215 til noen andre, til noen andre, til noen andre, slik at i teorien, 467 00:21:19,215 --> 00:21:22,304 til slutt, bare en klosset person bør overlates stående. 468 00:21:22,304 --> 00:21:22,970 Men det er fint. 469 00:21:22,970 --> 00:21:24,290 Vi sped ting opp manuelt. 470 00:21:24,290 --> 00:21:27,590 Det er spesielt vanskelig å se i denne bestemte plass. 471 00:21:27,590 --> 00:21:34,200 >> Og det totale antall personer vi tror det er her er 546. 472 00:21:34,200 --> 00:21:37,330 Det totale antallet jeg var hendt av undervisning stipendiater, 473 00:21:37,330 --> 00:21:40,660 som gjorde det den gamle skole treg måte, var 820. 474 00:21:40,660 --> 00:21:43,660 >> [Ler] 475 00:21:43,660 --> 00:21:47,170 >> [BIFALL] 476 00:21:47,170 --> 00:21:48,670 >> Det er greit. 477 00:21:48,670 --> 00:21:50,740 Så sikkert da, det er disse feilene. 478 00:21:50,740 --> 00:21:51,460 Og det er greit. 479 00:21:51,460 --> 00:21:53,810 Og så tenker tilbake på denne første gang noe 480 00:21:53,810 --> 00:21:55,420 du skriver ikke nødvendigvis fungere. 481 00:21:55,420 --> 00:21:57,620 Dette har skjedd med meg her også. 482 00:21:57,620 --> 00:22:00,844 Men la oss nå se på hvordan vi kan anvende denne samme idé til noe 483 00:22:00,844 --> 00:22:03,760 du kanskje har sett før, som er denne gammeldagse teknologien her-- 484 00:22:03,760 --> 00:22:05,130 en virkelig stor telefonbok. 485 00:22:05,130 --> 00:22:09,380 Og anta at denne telefonboken har 1000 sider og 1000 navn 486 00:22:09,380 --> 00:22:11,360 og tall alfabetisk innsiden av det. 487 00:22:11,360 --> 00:22:14,860 >> Vel, vi kan slags bruke en lignende Ideen til denne svært skadet, 488 00:22:14,860 --> 00:22:16,270 bare bruker meg. 489 00:22:16,270 --> 00:22:18,810 Jeg bare slags jukset ved å utnytte alle dere 490 00:22:18,810 --> 00:22:23,240 med mange og massevis av forskjellige CPUer eller hjernen utfører noen algoritme. 491 00:22:23,240 --> 00:22:25,440 Men hvis det er bare litt gamle meg, kan jeg fortsatt 492 00:22:25,440 --> 00:22:29,630 utnytte den samme essensen av en idé å dele og erobre det problemet 493 00:22:29,630 --> 00:22:32,970 igjen og igjen, hvor halvparten av dere, halvparten av dere, halvparten av dere, halvparten av dere, 494 00:22:32,970 --> 00:22:35,830 teoretisk holdt sitte ned, før vi igjen, teoretisk, 495 00:22:35,830 --> 00:22:36,990 med bare én person. 496 00:22:36,990 --> 00:22:39,810 >> Så i denne gamle skolen technology-- gjør vi ikke 497 00:22:39,810 --> 00:22:43,030 trenger denne map-- dette old school teknologi, 498 00:22:43,030 --> 00:22:47,300 vi kan begynne å lete etter noen liker Mike Smith, en side av gangen. 499 00:22:47,300 --> 00:22:49,410 Og jeg ser at nei, er ikke Mike her. 500 00:22:49,410 --> 00:22:51,110 Jeg er fortsatt i A-delen. 501 00:22:51,110 --> 00:22:53,900 Til slutt, jeg finner meg selv i B-delen. 502 00:22:53,900 --> 00:22:56,910 Og dette er en algorithm-- steg-for-steg instruksjoner. 503 00:22:56,910 --> 00:22:59,890 Begynn på begynnelsen og én side om gangen, se etter Mike Smith. 504 00:22:59,890 --> 00:23:03,410 Er dette correct-- dette algoritme eller tilnærming? 505 00:23:03,410 --> 00:23:04,550 >> Ja, det er riktig. 506 00:23:04,550 --> 00:23:06,840 Hvis Mike er her, til slutt Jeg får til ham. 507 00:23:06,840 --> 00:23:08,139 Men det er ikke effektiv. 508 00:23:08,139 --> 00:23:09,180 Det er tydeligvis veldig sakte. 509 00:23:09,180 --> 00:23:11,340 Så jeg kan utnytte samme twosies tilnærming. 510 00:23:11,340 --> 00:23:15,350 Jeg kan gjøre liksom to, fire, seks, åtte, ti, tolv. 511 00:23:15,350 --> 00:23:16,330 Det er dobbelt så rask. 512 00:23:16,330 --> 00:23:18,290 Jeg kommer til å komme til Mike raskere om han er der. 513 00:23:18,290 --> 00:23:20,770 Er det riktig? 514 00:23:20,770 --> 00:23:22,320 Ja, men jeg hørte en little-- nei. 515 00:23:22,320 --> 00:23:24,200 Nå hørte jeg et nei. 516 00:23:24,200 --> 00:23:24,700 Yeah. 517 00:23:24,700 --> 00:23:26,190 Det er en bug potensielt. 518 00:23:26,190 --> 00:23:29,374 Kanskje Mike bare tilfeldigvis blir klemt mellom to sider, 519 00:23:29,374 --> 00:23:31,290 fordi jeg flyr gjennom dette to om gangen. 520 00:23:31,290 --> 00:23:33,580 Så minst trenger vi noen slags betinget fix. 521 00:23:33,580 --> 00:23:35,330 Jeg trenger å si hei, hvis jeg treffer noen som 522 00:23:35,330 --> 00:23:39,190 navn som begynner med en T i stedet for S, Jeg bedre doble tilbake minst én side. 523 00:23:39,190 --> 00:23:40,767 Så buggy i starten, men fikses. 524 00:23:40,767 --> 00:23:43,850 Men ingen av oss kommer til å se etter Mike Smith gjennom en 1000 siders telefon 525 00:23:43,850 --> 00:23:45,290 bestille en side av gangen. 526 00:23:45,290 --> 00:23:48,486 Hva er en normal person skal gjøre? 527 00:23:48,486 --> 00:23:50,860 Du kommer til å gå til S ', hvis du visste hvor S-tallet. 528 00:23:50,860 --> 00:23:54,230 Du kan gå omtrent til midten eller litt skjevt mot slutten. 529 00:23:54,230 --> 00:23:56,850 Og jeg ser ned her og Jeg er i M-delen. 530 00:23:56,850 --> 00:23:58,952 Men hva vet du om dette problemet nå, 531 00:23:58,952 --> 00:24:02,160 at vi ikke nødvendigvis vet før med alle av oss bare å telle oss 532 00:24:02,160 --> 00:24:03,030 equivalently? 533 00:24:03,030 --> 00:24:06,010 Vel, Mike er helt klart kommer å være i denne halvdelen av boken 534 00:24:06,010 --> 00:24:07,920 hvis han er her i det hele tatt fordi det er sortert. 535 00:24:07,920 --> 00:24:10,160 >> Og så kan du veldig dramatically-- 536 00:24:10,160 --> 00:24:11,250 >> [Gisper] 537 00:24:11,250 --> 00:24:12,300 >> Jeg vet. 538 00:24:12,300 --> 00:24:16,940 >> [BIFALL] 539 00:24:16,940 --> 00:24:19,450 >> Det er faktisk veldig enkelt hvis du gjør det nedover ryggraden der. 540 00:24:19,450 --> 00:24:22,070 Men du kan da kaste halvparten av problemet bort. 541 00:24:22,070 --> 00:24:25,950 Nå er jeg igjen med det samme problem-- finne Mike Smith i en telefon book-- 542 00:24:25,950 --> 00:24:29,610 men nå telefonboken starter på M og går til Z, men det er halvparten så stor. 543 00:24:29,610 --> 00:24:30,890 >> Men dette er hva som er imponerende. 544 00:24:30,890 --> 00:24:34,170 Akkurat som i teorien, dere, når dere alle satte seg bare halvparten om gangen, 545 00:24:34,170 --> 00:24:37,150 problemet fikk halvparten så stor, halvparten så stor, igjen og igjen. 546 00:24:37,150 --> 00:24:40,260 Så har dette problemet blitt samme problem, men halvparten så stor. 547 00:24:40,260 --> 00:24:42,670 Nå er det en 250-side problem. 548 00:24:42,670 --> 00:24:45,340 Så snart jeg skjønner, oh, jeg er i T seksjon ved et uhell. 549 00:24:45,340 --> 00:24:46,590 Jeg har gått for langt. 550 00:24:46,590 --> 00:24:48,500 Jeg kan kaste at halvparten av telefonboken unna. 551 00:24:48,500 --> 00:24:50,410 Nå er jeg ned til en fjerdedel av problemet. 552 00:24:50,410 --> 00:24:53,910 >> Og du kan gjenta, gjenta, gjenta til, i teorien, er du 553 00:24:53,910 --> 00:24:55,460 igjen med bare én side. 554 00:24:55,460 --> 00:24:59,010 Og hvis Mike er på den siden, Jeg kan nå løse dette problemet. 555 00:24:59,010 --> 00:25:00,810 Men hvor fort jeg løse det? 556 00:25:00,810 --> 00:25:05,420 I det første tilfellet, tok det meg som kanskje 1.000 skritt for å finne Mike Smith. 557 00:25:05,420 --> 00:25:09,260 Det kan ha tatt me-- Jeg plukket opp telefonboken 558 00:25:09,260 --> 00:25:11,440 og jeg begynte å se en side om gangen, 559 00:25:11,440 --> 00:25:13,480 og Mike kanskje 1000 sider senere. 560 00:25:13,480 --> 00:25:16,020 >> Andre tilnærmingen kanskje tar meg 500 trinn, 561 00:25:16,020 --> 00:25:17,960 fordi jeg flyr gjennom to om gangen. 562 00:25:17,960 --> 00:25:21,082 Og den tredje tilnærming skjønt, det er spesielt kraftig. 563 00:25:21,082 --> 00:25:23,790 Men la oss vurdere hva vi faktisk gjorde med denne tredje tilnærmingen. 564 00:25:23,790 --> 00:25:27,590 Jeg har det jeg vil kalle nettopp disse uttalelser her, en av gangen. 565 00:25:27,590 --> 00:25:28,560 Plukk opp en telefonkatalog. 566 00:25:28,560 --> 00:25:30,130 Åpne til midten av telefonboken. 567 00:25:30,130 --> 00:25:31,419 Se på navnene. 568 00:25:31,419 --> 00:25:33,960 Og så ting blir litt mer intellektuelt interessant, 569 00:25:33,960 --> 00:25:35,170 hvis det fortsatt enkelt. 570 00:25:35,170 --> 00:25:38,350 Hvis Smith er blant navn på den gjeldende siden, 571 00:25:38,350 --> 00:25:40,170 deretter gjøre noe betinget. 572 00:25:40,170 --> 00:25:41,840 Det er som et veiskille. 573 00:25:41,840 --> 00:25:42,660 Ring Mike. 574 00:25:42,660 --> 00:25:44,930 Hvis Mike er blant navnene På den siden som heter Mike. 575 00:25:44,930 --> 00:25:49,720 Men bare gjøre linjen fire hvis linjen treet, om du vil, er sant. 576 00:25:49,720 --> 00:25:51,590 Svaret på det spørsmålet er ja. 577 00:25:51,590 --> 00:25:55,520 >> Else hvis Smith er tidligere i book-- med andre ord, hvis jeg er i M seksjon 578 00:25:55,520 --> 00:25:58,540 og jeg leter etter noen å venstre, så hva jeg skal gjøre 579 00:25:58,540 --> 00:26:00,300 er noe lignende. 580 00:26:00,300 --> 00:26:03,440 Da skal jeg åpne til midten av den venstre halvdelen av boken. 581 00:26:03,440 --> 00:26:07,930 Så går du til venstre, og deretter gå tilbake til trinn to. 582 00:26:07,930 --> 00:26:09,290 Se på navnene der. 583 00:26:09,290 --> 00:26:12,779 >> Så med andre ord, gjøre det samme, men på et problem som er blitt halvert. 584 00:26:12,779 --> 00:26:13,570 Du vet hva annet? 585 00:26:13,570 --> 00:26:16,470 Hvis Smith er senere i boken basert på den siden jeg ser på, 586 00:26:16,470 --> 00:26:18,790 åpen til midten av høyre halvdel av boken 587 00:26:18,790 --> 00:26:22,050 og deretter gå tilbake igjen til trinn to, else-- 588 00:26:22,050 --> 00:26:24,000 det er en fjerde mulighet her. 589 00:26:24,000 --> 00:26:28,830 Mike enten her eller til venstre eller til høyre eller ikke der. 590 00:26:28,830 --> 00:26:30,570 Og her er vi bedre vurdere dette. 591 00:26:30,570 --> 00:26:33,360 Og faktisk, hvis du noen gang har hatt datamaskinen bare krasje på deg, 592 00:26:33,360 --> 00:26:36,822 det er noen ganger, men ikke alltid, Resultatet av bare en human programmerer ikke 593 00:26:36,822 --> 00:26:39,280 realisere, oh skyte, det er faktisk denne fjerde scenario. 594 00:26:39,280 --> 00:26:41,650 Og hvis du ikke skrive kode å håndtere dette scenariet, 595 00:26:41,650 --> 00:26:43,220 noen ganger du ikke vet hva maskinen kan gjøre. 596 00:26:43,220 --> 00:26:44,770 Og faktisk et program kan krasje. 597 00:26:44,770 --> 00:26:47,550 >> Men i dette tilfellet, tenkte jeg om det, og jeg sa, ellers slutte, 598 00:26:47,550 --> 00:26:49,850 fordi det er den fjerde logisk mulig scenario. 599 00:26:49,850 --> 00:26:51,950 Nå, la oss bare legge noen vokabular så vi 600 00:26:51,950 --> 00:26:55,320 kan begynne å kaste rundt begreper som er ellers ganske intuitiv. 601 00:26:55,320 --> 00:26:57,870 Alle de tingene jeg har bare uthevet i gult her, 602 00:26:57,870 --> 00:27:00,140 Jeg skal bare til funksjoner eller prosedyrer. 603 00:27:00,140 --> 00:27:01,590 De er bare slags handlinger. 604 00:27:01,590 --> 00:27:04,900 Så plukker opp, åpen, se på, ring, åpne, åpne, 605 00:27:04,900 --> 00:27:09,170 quit-- disse er bare handlinger, eller vi vil kalle dem mer formelt, funksjoner. 606 00:27:09,170 --> 00:27:11,410 >> I mellomtiden, nå i gul, Jeg har uthevet ting 607 00:27:11,410 --> 00:27:14,084 at-- la oss bare begynne å ringe dem forhold eller grener. 608 00:27:14,084 --> 00:27:16,750 Dette er beslutningspunkter der du kan gå på denne måten, på denne måten, 609 00:27:16,750 --> 00:27:18,100 eller annen retning i ro. 610 00:27:18,100 --> 00:27:19,430 Så de som vil være forhold. 611 00:27:19,430 --> 00:27:20,930 Og nå er dette en er litt mer avansert. 612 00:27:20,930 --> 00:27:24,600 La oss kalle disse spørsmålene Boolske uttrykk, 613 00:27:24,600 --> 00:27:26,530 etter noen med et etternavn Bool. 614 00:27:26,530 --> 00:27:28,340 >> Og en boolsk uttrykk er bare noe 615 00:27:28,340 --> 00:27:30,290 det er enten sant eller usant, ja eller nei. 616 00:27:30,290 --> 00:27:35,870 Så det er spørsmålet som har svaret du bry seg om, slik at det i en betingelse 617 00:27:35,870 --> 00:27:39,210 lage en decision-- få tilbake et svar, og deretter gå til venstre eller høyre, eller noe 618 00:27:39,210 --> 00:27:40,450 helt annet. 619 00:27:40,450 --> 00:27:42,860 >> Og så til slutt, disse linjer her-- gå tilbake 620 00:27:42,860 --> 00:27:44,737 til trinn to, gå tilbake til trinn two-- vi kunne 621 00:27:44,737 --> 00:27:46,320 implementere denne ideen på forskjellige måter. 622 00:27:46,320 --> 00:27:49,028 Og så de av dere med programmeringserfaring kan ha gjort 623 00:27:49,028 --> 00:27:50,670 eller kan tenke deg å gjøre dette på en annen måte. 624 00:27:50,670 --> 00:27:53,170 Men for dagens formål, er det bare tanken som teller. 625 00:27:53,170 --> 00:27:55,400 Dette er induserende hva vi vanligvis kaller 626 00:27:55,400 --> 00:28:00,110 en loop-- en slags syklus, fordi det gjør meg til å gjøre noe nytt. 627 00:28:00,110 --> 00:28:03,340 >> Så nå, la oss bare vurdere hvor god denne algoritmen er. 628 00:28:03,340 --> 00:28:03,899 Det er riktig. 629 00:28:03,899 --> 00:28:06,940 Hvis Mike i boken, er det en av de fire scenarios-- igjen og igjen 630 00:28:06,940 --> 00:28:08,023 og igjen, vil vi finne ham. 631 00:28:08,023 --> 00:28:08,890 Men hvor bra er det? 632 00:28:08,890 --> 00:28:10,150 Vel, vi har ikke å være for formell her. 633 00:28:10,150 --> 00:28:12,066 Men la oss bare plotte noe, x og y, å komme 634 00:28:12,066 --> 00:28:14,470 en følelse av formen på dette problemet. 635 00:28:14,470 --> 00:28:17,160 >> På x-aksen er her størrelsen på mitt problem. 636 00:28:17,160 --> 00:28:20,256 Og de en y-akse her vil være tid til å løse. 637 00:28:20,256 --> 00:28:21,630 Så kanskje dette er antall sider. 638 00:28:21,630 --> 00:28:24,400 Kanskje dette er sekunder side turns-- uansett. 639 00:28:24,400 --> 00:28:27,290 Men du vil telle er hva dette bildet vil representere. 640 00:28:27,290 --> 00:28:30,630 Og det første algoritme, jeg kommer å beskrive som bare en rett linje. 641 00:28:30,630 --> 00:28:33,120 Hvis det er n sider telefonboken, så det 642 00:28:33,120 --> 00:28:36,010 kan ta meg så mange som n skritt for å finne Mike. 643 00:28:36,010 --> 00:28:38,930 Hvis Verizon eller telefonselskapet legger en mer side neste år, 644 00:28:38,930 --> 00:28:42,170 det kan ta meg en mer step-- en mer enhet av tid til å finne Mike. 645 00:28:42,170 --> 00:28:44,230 Så det er nettopp dette 12:59 forholdet. 646 00:28:44,230 --> 00:28:45,970 Det er en rett linje skråning. 647 00:28:45,970 --> 00:28:49,110 >> I mellomtiden, det andre algorithm-- hvis jeg er 648 00:28:49,110 --> 00:28:51,570 kommer to på en tid-- to, fire, seks, åtte eller double-- 649 00:28:51,570 --> 00:28:54,550 gå gjennom sidene to ganger på en gang, to om gangen, 650 00:28:54,550 --> 00:28:55,710 det er fortsatt rett linje. 651 00:28:55,710 --> 00:28:58,720 Det er nå ett til to forhold, men litt lavere. 652 00:28:58,720 --> 00:29:02,240 Så hvis det er så mange sider på kartet her i gult, 653 00:29:02,240 --> 00:29:04,800 som kan ta meg dette mange trinn eller sekunder, 654 00:29:04,800 --> 00:29:07,980 ellers kommer det til å ta meg dobbelt så mange på den røde linjen. 655 00:29:07,980 --> 00:29:10,190 >> Men den grønne linjen er den virkelige takeaway. 656 00:29:10,190 --> 00:29:12,290 Dette er hva vi vanligvis kalle en logorithm-- logg 657 00:29:12,290 --> 00:29:13,840 n, der n er antall sider. 658 00:29:13,840 --> 00:29:16,450 Men det er den formen som teller i dag, fordi vi ikke har 659 00:29:16,450 --> 00:29:17,950 å engang tenke på å plotte poeng. 660 00:29:17,950 --> 00:29:19,830 >> Tenk om en ekstrem situasjon. 661 00:29:19,830 --> 00:29:23,070 Anta at Verizon morgen dobler antall sider i denne telefonboken, 662 00:29:23,070 --> 00:29:24,900 fra 1000 til 2000. 663 00:29:24,900 --> 00:29:28,440 I den første algoritme, jeg kan kaste bort en ekstra 1000 664 00:29:28,440 --> 00:29:32,080 trinn leter etter Mike, bare fordi Verizon doblet størrelsen på boken. 665 00:29:32,080 --> 00:29:34,740 Den andre algorithm-- det kanskje ta meg en ekstra 500 trinn. 666 00:29:34,740 --> 00:29:38,370 1.000 flere sider, går jeg to på en tid-- 500 flere trinn for å finne Mike. 667 00:29:38,370 --> 00:29:41,020 >> Men det tredje algoritme er litt magisk. 668 00:29:41,020 --> 00:29:44,270 Verizon dobler antall sider fra 1000 til 2000, 669 00:29:44,270 --> 00:29:47,730 Men hvor mange flere trinn gjør det tar meg å lete etter Mike? 670 00:29:47,730 --> 00:29:51,220 Det er bare en, fordi jeg kan bare rive telefonboken en gang til 671 00:29:51,220 --> 00:29:55,280 fra en 2000-side problem til en 1000 side problem, og voila. 672 00:29:55,280 --> 00:29:57,030 Jeg har tatt en massiv bit av det. 673 00:29:57,030 --> 00:29:59,405 >> Og hvis du går virkelig ekstreme, anta at telefonboken 674 00:29:59,405 --> 00:30:03,600 Selskapet hadde noe gale som en 4 milliarder siden telefonboken. 675 00:30:03,600 --> 00:30:07,020 Vel hvor mange skritt kan det ta å finne Mike Smith i en 4 milliarder 676 00:30:07,020 --> 00:30:09,990 side telefonboken? 677 00:30:09,990 --> 00:30:16,450 Det er et stort tall, men bare 4 milliarder til 2-1 milliarder for å 500 millioner kroner, 678 00:30:16,450 --> 00:30:18,720 250 million-- fortsatt høres ut som store tall, 679 00:30:18,720 --> 00:30:20,980 men jeg er veldig fort bli mindre verdier. 680 00:30:20,980 --> 00:30:24,790 >> Og faktisk, hvis jeg gjør matte Greit, jeg kan bare dele 4000000000 681 00:30:24,790 --> 00:30:28,750 med om lag 32 ganger før Jeg kommer ned til bare én. 682 00:30:28,750 --> 00:30:31,640 Så hvis det telefonboken var 4 milliard sider lang, ingen big deal. 683 00:30:31,640 --> 00:30:35,270 I løpet av noen sekunder, kanskje 32 sekunder, jeg kunne dele den i to 684 00:30:35,270 --> 00:30:39,560 og til slutt finne Mike eller konkludere med at han ikke er der. 685 00:30:39,560 --> 00:30:42,219 Og det er essensen av en algorithm-- en god algoritme. 686 00:30:42,219 --> 00:30:44,260 Og det er en av de målene for en klasse som dette, 687 00:30:44,260 --> 00:30:47,350 prøver å finne ut hvordan jeg løse problemet ikke bare riktig, 688 00:30:47,350 --> 00:30:52,360 som jeg alltid visste hvordan du gjør det en side om tid-- men riktig og godt. 689 00:30:52,360 --> 00:30:55,034 Hvordan utforme jeg god løsninger på problemer? 690 00:30:55,034 --> 00:30:57,200 Så la oss ta et øyeblikk her og gi deg en følelse nå 691 00:30:57,200 --> 00:31:00,260 av CS50 kurset itself-- introdusere noen kurs medarbeidere. 692 00:31:00,260 --> 00:31:02,010 Like før 02:00, vil vi ta en kort pause 693 00:31:02,010 --> 00:31:03,520 slik at de av dere som kjøper kan 694 00:31:03,520 --> 00:31:05,130 dukke ut og ta en se på noen annen klasse 695 00:31:05,130 --> 00:31:06,580 og se resten av dette nettet. 696 00:31:06,580 --> 00:31:09,250 Men for nå, la meg introdusere CS50, klassen selv, 697 00:31:09,250 --> 00:31:11,330 og spesielt det som er nytt. 698 00:31:11,330 --> 00:31:13,960 >> Så fortiden vår, vi brukt ganske mye av tid-- 699 00:31:13,960 --> 00:31:17,911 kursets ansatte og I-- tenkning om hva det er vi ønsker CS50 å være, 700 00:31:17,911 --> 00:31:19,910 og gå tilbake til første prinsipper, så å si, 701 00:31:19,910 --> 00:31:22,760 å vurdere hva det er vi ønsker dette kurset for å se ut og være 702 00:31:22,760 --> 00:31:23,740 som for sine studenter. 703 00:31:23,740 --> 00:31:26,480 Og så vil du se i problemet satt null i tillegg, en invitasjon 704 00:31:26,480 --> 00:31:28,780 å ta en titt på det URL som oppsummerer 705 00:31:28,780 --> 00:31:33,270 noen av motivene bak følgende karakteristikk av høsten 2016. 706 00:31:33,270 --> 00:31:35,570 >> Så som du kanskje har sanket fra TL: DR handout, 707 00:31:35,570 --> 00:31:39,060 pensum i dag, samt fra kurskatalogen i år i CS50, 708 00:31:39,060 --> 00:31:42,540 du er bare forventet å delta today-- så jobben godt done-- 709 00:31:42,540 --> 00:31:45,960 og den siste forelesningen 21. november. 710 00:31:45,960 --> 00:31:49,150 Og du er velkommen, men ikke forventet å delta på disse foredragene i midten, 711 00:31:49,150 --> 00:31:51,180 fordi det vi gjør dette året, er skyting 712 00:31:51,180 --> 00:31:52,661 i sanntid kursets materiale. 713 00:31:52,661 --> 00:31:54,660 Så alt vil bli nåværende og innlemmet 714 00:31:54,660 --> 00:31:57,410 som best vi can-- aktuelle hendelser og samtaler som folk kan 715 00:31:57,410 --> 00:32:00,400 være å ha i industrien i verden, men gjør at materialet 716 00:32:00,400 --> 00:32:03,892 tilgjengelig, som et resultat, selv earlier-- komplett med fulltekst transkripsjoner 717 00:32:03,892 --> 00:32:05,850 og søkbarhet og lenker til andre ressurser. 718 00:32:05,850 --> 00:32:07,930 >> Og ja, vi har vært hevdet i noen tid 719 00:32:07,930 --> 00:32:10,830 og vi har nå tror dette, at vi kan skape, digitalt, 720 00:32:10,830 --> 00:32:15,170 en mer oppslukende, en mer overbevisende pedagogisk erfaring, i motsetning 721 00:32:15,170 --> 00:32:19,110 å samle her noen 23 ganger i person, høre noen liker meg 722 00:32:19,110 --> 00:32:22,925 bare snakke om informatikk, i motsetning til å engasjere mer aktivt. 723 00:32:22,925 --> 00:32:25,800 Så du vil se i kursets pensum en skisse av semesteret her, 724 00:32:25,800 --> 00:32:27,840 sammen med når forelesninger vil bli filmet, som du er 725 00:32:27,840 --> 00:32:29,710 velkommen, men ikke forventet, og når de vil 726 00:32:29,710 --> 00:32:31,640 bli utgitt på kursets hjemmeside. 727 00:32:31,640 --> 00:32:34,300 >> Og hva vi skal gjøre her på Onsdager starter neste uke, 728 00:32:34,300 --> 00:32:37,362 er mye mer intimt, med bare de folkene som ønsker å delta, 729 00:32:37,362 --> 00:32:39,820 er en såkalt vandring gjennom, der jeg og kursets hoder 730 00:32:39,820 --> 00:32:41,730 faktisk vil gjøre ting en litt mer intim 731 00:32:41,730 --> 00:32:44,313 ned her i orkesteret delen, fortsatt har noen teknologi 732 00:32:44,313 --> 00:32:46,365 og gå gjennom værende ukes problem sett, 733 00:32:46,365 --> 00:32:50,020 og tilbyr deg particularly-- om blant de mindre komfortabel-- alle mer 734 00:32:50,020 --> 00:32:52,790 veiledning som du kanskje ønsker eller trenger for ukens utfordring. 735 00:32:52,790 --> 00:32:55,820 Og på samme måte, for de som ikke kan tilfalle den i person, ingen big deal. 736 00:32:55,820 --> 00:32:58,486 Det skal likeledes ledet av en av kursets seniorer, 737 00:32:58,486 --> 00:33:02,650 Zamalya, den samme muligheten innebygd i problemet setter seg. 738 00:33:02,650 --> 00:33:04,960 >> Problem setter i år vil bli utgitt på fredager 739 00:33:04,960 --> 00:33:08,080 og ikke lenger gjøre syv dager senere, men 10 dager later-- bevisst 740 00:33:08,080 --> 00:33:10,910 overlappende med hvert problem satt, for derved å bedre plass, 741 00:33:10,910 --> 00:33:13,050 vi håper, flo og fjære i student tidsplaner, 742 00:33:13,050 --> 00:33:16,550 spesielt når midterms eller friidrett eller akademikere eller extracurriculars 743 00:33:16,550 --> 00:33:18,465 tendens til å komme og gå spesielt mid-semester. 744 00:33:18,465 --> 00:33:21,340 Det burde gi deg litt mer skjønn om hvorvidt du foran 745 00:33:21,340 --> 00:33:25,690 laste uke med CS50 eller returfrakt det på neste helg i stedet. 746 00:33:25,690 --> 00:33:28,817 Så se til kursets pensum her for planen om dette. 747 00:33:28,817 --> 00:33:30,900 Og du vil legge merke til også blant endringene i år, 748 00:33:30,900 --> 00:33:34,082 for de mer kjent med programmering i det siste, 749 00:33:34,082 --> 00:33:36,290 Vi starter semesteret som vi vil i dag i Scratch, 750 00:33:36,290 --> 00:33:39,730 fokusere spesielt på språk heter C, og deretter overgang ikke 751 00:33:39,730 --> 00:33:43,430 til PHP, men til et språk som heter Python mot slutten av semesteret 752 00:33:43,430 --> 00:33:46,565 i sammenheng med web-programmering, sammen med SQL og Javascript, 753 00:33:46,565 --> 00:33:48,930 HTML, CSS, og enda mer. 754 00:33:48,930 --> 00:33:51,790 >> Og som svar på et spørsmål, det er faktisk tilfelle 755 00:33:51,790 --> 00:33:55,520 at CS er ikke så skummelt som jeg en gang trodde det var, men det er så mye arbeid 756 00:33:55,520 --> 00:33:57,280 som jeg hadde hørt det kan være. 757 00:33:57,280 --> 00:34:03,210 Men dette er det å si at her er noen statistikk fra høsten 2015 studentmasse, 758 00:34:03,210 --> 00:34:06,460 der de horisontale blå linjer representerer gjennomsnittlig antall timer 759 00:34:06,460 --> 00:34:06,960 rapportert. 760 00:34:06,960 --> 00:34:10,570 Og du vil se et gjennomsnitt på seks til 10 til 12-- kanskje 16 761 00:34:10,570 --> 00:34:14,580 eller så og så videre, men med høy varians for å være klar. 762 00:34:14,580 --> 00:34:18,570 Og så innser at det er ikke bare studentene mer behagelig og mindre 763 00:34:18,570 --> 00:34:22,150 komfortabel i kurset, men en tilsvarende støtte 764 00:34:22,150 --> 00:34:25,699 struktur for å få de studentene gjennom semesteret vellykket. 765 00:34:25,699 --> 00:34:29,409 >> Faktisk, som svar på et spørsmål, bør du tar CS50 som et første året? 766 00:34:29,409 --> 00:34:30,139 Absolutt. 767 00:34:30,139 --> 00:34:32,690 Og faktisk, jeg angrer ikke ha funnet min vei 768 00:34:32,690 --> 00:34:35,170 eller funnet et nytt felt det første året også. 769 00:34:35,170 --> 00:34:39,149 Og skulle du ta CS50 med andre kurs, absolutt samt-- 770 00:34:39,149 --> 00:34:41,940 og generelle råd vi kan gi studentene, det er CS50 sannsynligvis 771 00:34:41,940 --> 00:34:44,929 ikke den slags klasse eller intro klasse at du bør ta med tre 772 00:34:44,929 --> 00:34:47,199 andre eller fire andre p-set klasser. 773 00:34:47,199 --> 00:34:50,583 Men hvis du tar to andre p-set klasser, noe annet, og CS50, 774 00:34:50,583 --> 00:34:51,499 absolutt overkommelig. 775 00:34:51,499 --> 00:34:54,900 Jeg har hatt mange studenter i tidligere gjort det ganske vellykket. 776 00:34:54,900 --> 00:34:57,490 >> Og for å få deg mot at Finish Line vellykket, 777 00:34:57,490 --> 00:35:00,260 har kurset har sections-- ulike spor for studenter 778 00:35:00,260 --> 00:35:03,100 mindre behagelig, mer komfortable, og et sted i mellom, 779 00:35:03,100 --> 00:35:04,850 hvor i kursets første problemet sett, 780 00:35:04,850 --> 00:35:06,360 du blir bedt om å beskrive deg selv. 781 00:35:06,360 --> 00:35:09,151 Og hvis du er blant de mindre komfortabel, det er den type ting 782 00:35:09,151 --> 00:35:10,420 som du bare heller vet. 783 00:35:10,420 --> 00:35:13,010 Og ja, det har vært det voksende demografisk i CS50 784 00:35:13,010 --> 00:35:14,090 for ganske mange år. 785 00:35:14,090 --> 00:35:17,680 >> Som i fjor høst for eksempel 58% av klassen 786 00:35:17,680 --> 00:35:20,560 beskrev seg selv som blant de mindre komfortable, 787 00:35:20,560 --> 00:35:23,210 med 9% blant de mer komfortabel, og deretter 788 00:35:23,210 --> 00:35:25,900 de andre elevene der i rød beskriver seg selv 789 00:35:25,900 --> 00:35:27,890 som et sted i mellom. 790 00:35:27,890 --> 00:35:31,980 Og du vil se her emnene generelle og tidsplan for seksjoner, som alle 791 00:35:31,980 --> 00:35:34,820 tilbys i person i sanntid, med kursets 792 00:35:34,820 --> 00:35:38,320 fantastisk stab av undervisning stipendiater og selvfølgelig assistenter, noen av dem 793 00:35:38,320 --> 00:35:39,660 du vil møte i løpet av et øyeblikk. 794 00:35:39,660 --> 00:35:42,993 >> Seksjoner seg selv, som du ser, vil være mandager og tirsdager og onsdager, 795 00:35:42,993 --> 00:35:45,910 slik som å tillate deg å dykke i etter engasjerende, om du så 796 00:35:45,910 --> 00:35:48,110 velge, i kursets foredrag tidligere denne uken. 797 00:35:48,110 --> 00:35:51,420 Og deretter kontortid, som absolutt, med hvert år som går, 798 00:35:51,420 --> 00:35:54,110 ha vært noen mindre av en utfordrer for kurset. 799 00:35:54,110 --> 00:35:57,040 Og i år, vi planlegger ikke bare for å holde kontoret timer-- en 800 00:35:57,040 --> 00:36:00,300 på ett muligheter for hjelp til studenter på onsdager tors 801 00:36:00,300 --> 00:36:03,790 og søndager, den siste av dem å være i ettermiddag ved design 802 00:36:03,790 --> 00:36:06,910 å redusere noen av stress som alltid oppstår med sen kveld 803 00:36:06,910 --> 00:36:10,180 p-settting med en frist looming-- men kontortid vil også bli tilbudt 804 00:36:10,180 --> 00:36:14,920 på mandager og tirsdager og Onsdager og fredager og lørdager, 805 00:36:14,920 --> 00:36:17,080 Takk til våre venner på HSA. 806 00:36:17,080 --> 00:36:20,330 >> CS50 har nå sin egen plass for studenter og CS50 ansatte, 807 00:36:20,330 --> 00:36:23,070 toppen 67 Mount Auburn Street, akkurat der i Harvard Square. 808 00:36:23,070 --> 00:36:26,340 Visjonen for dem er at CS50 er TFS og instanser i løpet av uken, 809 00:36:26,340 --> 00:36:29,052 ganske mye gjennom det meste dager, vil være der for støtte. 810 00:36:29,052 --> 00:36:30,760 Så hvis du har noen spørsmålet på en p-sett 811 00:36:30,760 --> 00:36:33,093 eller du føler deg litt blokkert eller litt forvirret, 812 00:36:33,093 --> 00:36:35,640 og pokker, du har en time eller en halv time mellom klasser, 813 00:36:35,640 --> 00:36:38,920 spesielt i square-- kan du sette inn og ta det spørsmålet besvart 814 00:36:38,920 --> 00:36:41,720 av har det forvirring clarified-- veldig mye i ånden, 815 00:36:41,720 --> 00:36:45,490 du er kjent, for regnestykket avdelingens egen matematiske spørsmål sentrum, 816 00:36:45,490 --> 00:36:49,300 men ganske mye døgnet per rundt [? Gcal?] At vi vil legge ut på nettet. 817 00:36:49,300 --> 00:36:52,400 >> Veiledning er også tilgjengelig for de studenter, fritt fra kursets 818 00:36:52,400 --> 00:36:54,750 egne ansatte hvis du ønsker mer intimt en mot en, 819 00:36:54,750 --> 00:36:58,940 eller to eller tre klassekamerater bare, arbeider med en av kursets ansatte. 820 00:36:58,940 --> 00:37:02,320 Og ja, er disse her bare noen av kursets ansatte, 821 00:37:02,320 --> 00:37:04,120 noen av dem vil du møte i løpet av et øyeblikk. 822 00:37:04,120 --> 00:37:07,440 Faktisk, CS50 egen hode undervisning stipendiat, 823 00:37:07,440 --> 00:37:09,790 og hodet kurs assistent, og veileder, 824 00:37:09,790 --> 00:37:12,998 kunne komme på opp, tillate dem til å si hei. 825 00:37:12,998 --> 00:37:22,498 >> [BIFALL] 826 00:37:22,498 --> 00:37:23,456 SPEAKER 1: [hørbar]. 827 00:37:23,456 --> 00:37:51,842 828 00:37:51,842 --> 00:37:57,856 >> [BIFALL] 829 00:37:57,856 --> 00:37:58,814 SPEAKER 2: [hørbar]. 830 00:37:58,814 --> 00:38:17,240 831 00:38:17,240 --> 00:38:27,238 >> [BIFALL] 832 00:38:27,238 --> 00:38:28,196 SPEAKER 3: [hørbar]. 833 00:38:28,196 --> 00:38:58,951 834 00:38:58,951 --> 00:39:03,120 >> [BIFALL] 835 00:39:03,120 --> 00:39:06,740 >> DAVID MALAN: Og la oss bringe ombord to av CS50 mest 836 00:39:06,740 --> 00:39:09,730 seniorer, Rob og Zamayla også. 837 00:39:09,730 --> 00:39:15,120 >> [BIFALL] 838 00:39:15,120 --> 00:39:17,226 >> Ja, både Rob og Zamayla har vært med oss 839 00:39:17,226 --> 00:39:19,940 så lenge, at jeg var i stand å gå inn i CS50 arkiver 840 00:39:19,940 --> 00:39:22,470 og finner dette svært SD opptakene av dem som deltar 841 00:39:22,470 --> 00:39:25,402 på scenen selv for noen år siden. 842 00:39:25,402 --> 00:39:26,110 ROB: [hørbar]. 843 00:39:26,110 --> 00:39:53,660 844 00:39:53,660 --> 00:39:59,247 >> [BIFALL] 845 00:39:59,247 --> 00:40:00,080 ZAMAYLA: [uhørbart] 846 00:40:00,080 --> 00:40:50,888 847 00:40:50,888 --> 00:40:52,467 >> [BIFALL] 848 00:40:52,467 --> 00:40:53,425 DAVID MALAN: Takk. 849 00:40:53,425 --> 00:40:56,160 850 00:40:56,160 --> 00:40:58,030 Så i tillegg til disse gruppemedlemmer her, 851 00:40:58,030 --> 00:41:01,662 CS50 har et team av nesten 100 ansatte, som alle 852 00:41:01,662 --> 00:41:04,370 vil være tilgjengelig for seksjoner og arbeidstid og så mye mer. 853 00:41:04,370 --> 00:41:06,920 Og som Rob sier også, er dette den mest signifikante overhaling 854 00:41:06,920 --> 00:41:09,534 av CS50 i de 10 årene som Jeg har vært i [hørbar]. 855 00:41:09,534 --> 00:41:12,200 [Hørbar] fokusert spesielt i å gi en støttestruktur, 856 00:41:12,200 --> 00:41:14,050 trimming bort mye bulk som har vært 857 00:41:14,050 --> 00:41:16,870 akkumulert i 10 år iterative utviklingen 858 00:41:16,870 --> 00:41:18,120 på kursets oppgavesett. 859 00:41:18,120 --> 00:41:21,470 >> Så dette året, ikke bare i klassen, men også i form av kursets problem 860 00:41:21,470 --> 00:41:24,800 sett, bør du finne ting til bli mer strømlinjeformet, trimmer, mye 861 00:41:24,800 --> 00:41:26,700 mer håndterlig enn i år tidligere, som vi 862 00:41:26,700 --> 00:41:31,330 felle noen av bagasjen som er utviklet av natur utviklende år 863 00:41:31,330 --> 00:41:32,970 etter år og itera. 864 00:41:32,970 --> 00:41:35,110 Så den nye og forbedrede begynner i dag. 865 00:41:35,110 --> 00:41:37,860 >> Du vil møte litt mer av kursets ansatte ut i [hørbar] 866 00:41:37,860 --> 00:41:40,186 på 2:30, hvor vi serverer, som en tradisjon, kake. 867 00:41:40,186 --> 00:41:42,060 Det er litt mer kake enn det, men du vil 868 00:41:42,060 --> 00:41:44,690 møte Erin og Tobias og andre fortsatt. 869 00:41:44,690 --> 00:41:46,470 Og la meg gi deg en tur før vi hører 870 00:41:46,470 --> 00:41:49,600 fra noen av de andre ansatte i klassen, av hva som venter i tillegg. 871 00:41:49,600 --> 00:41:52,730 Faktisk starter vi alltid CS50 s semester kommende lørdag, 872 00:41:52,730 --> 00:41:54,330 med det som kalles CS50 Puzzle Day. 873 00:41:54,330 --> 00:41:56,710 >> Det har ingenting å gjøre med informatikk per se, 874 00:41:56,710 --> 00:41:58,669 men med om problemet løse mer generelt. 875 00:41:58,669 --> 00:42:01,210 Og hvis du velger å delta, per noen av invitasjoner, 876 00:42:01,210 --> 00:42:03,460 du kanskje har sett dør droppet eller på scenen her, 877 00:42:03,460 --> 00:42:05,830 det er en mulighet i team av to eller tre eller fire, 878 00:42:05,830 --> 00:42:10,680 til å delta for gåter og pizza og premier og mer-- denne lørdagen, 879 00:42:10,680 --> 00:42:12,560 følg med for mer. 880 00:42:12,560 --> 00:42:15,082 >> Du finner også at hver Fredag, på Fire and Ice, 881 00:42:15,082 --> 00:42:16,790 gjør CS50 bringe en hel haug av studenter 882 00:42:16,790 --> 00:42:19,100 til lunsj, for å gjøre en stor klassen føler seg mer intimt, 883 00:42:19,100 --> 00:42:21,820 og generelt bringe sammen alumni og venner fra industrien 884 00:42:21,820 --> 00:42:24,710 å snakke om hva de har vært opp til siden han ble uteksaminert. 885 00:42:24,710 --> 00:42:27,820 På samme måte i år, vil vi innvie den første noensinne CS50 50 886 00:42:27,820 --> 00:42:31,390 koding contest-- en mid-semester mulighet til å tillate alle 887 00:42:31,390 --> 00:42:35,430 på en opt in basis, for å ha en Utfordringen med vettet mot klassekamerater, 888 00:42:35,430 --> 00:42:39,250 igjen i team på to eller tre eller fire, kun ved hjelp av at programmering 889 00:42:39,250 --> 00:42:41,920 kunnskapsrike at du da har under beltet etter bare seks eller syv 890 00:42:41,920 --> 00:42:44,710 uker med klassen, og deltar i denne type konkurranse 891 00:42:44,710 --> 00:42:50,261 online-- hvis du ønsker å finpusse din egen ferdigheter enda mer i denne utfordringen. 892 00:42:50,261 --> 00:42:52,760 På slutten av semesteret er den såkalte CS50 Hackathon-- 893 00:42:52,760 --> 00:42:56,970 en mulighet som begynner på 07:00 PM slutter kl 07:00, og underveis 894 00:42:56,970 --> 00:43:01,900 er 12 kveldstimene der å dykke i kursets siste project-- 895 00:43:01,900 --> 00:43:04,820 en mulighet til å designe og implementere de fleste noe av interesse 896 00:43:04,820 --> 00:43:06,980 til deg med undervisningen stipendiat veiledning. 897 00:43:06,980 --> 00:43:09,600 Rundt 09:00 gjør vi vanligvis serverer pizza, 01:00, 898 00:43:09,600 --> 00:43:13,210 Philippe-tallet, og noen av oss som fortsatt er våken på 05:00, 899 00:43:13,210 --> 00:43:16,310 er shuttle busset ned Veien til IHOP for frokost. 900 00:43:16,310 --> 00:43:19,340 >> Og så et par dager senere er den såkalte CS50 billettpris 901 00:43:19,340 --> 00:43:23,450 en slutten av semesteret utstillingen i feiring av hvor langt så mange 902 00:43:23,450 --> 00:43:28,200 av CS50 studenter har kommet fra uke null hele veien til uke, 903 00:43:28,200 --> 00:43:32,610 og husk at 73% av de klassekamerater og din dette året har 904 00:43:32,610 --> 00:43:34,840 aldri tatt en CS klasse før. 905 00:43:34,840 --> 00:43:39,226 Faktisk, for å reemphasize så mye, her er noen flere ansikter fra CS50 ansatte. 906 00:43:39,226 --> 00:43:40,184 SPEAKER 4: [hørbar]. 907 00:43:40,184 --> 00:43:45,909 908 00:43:45,909 --> 00:43:46,867 SPEAKER 5: [hørbar]. 909 00:43:46,867 --> 00:43:51,332 910 00:43:51,332 --> 00:43:52,290 SPEAKER 6: [hørbar]. 911 00:43:52,290 --> 00:43:55,276 912 00:43:55,276 --> 00:43:56,234 SPEAKER 7: [hørbar]. 913 00:43:56,234 --> 00:44:01,727 914 00:44:01,727 --> 00:44:02,643 SPEAKER 8: [uhørbart] 915 00:44:02,643 --> 00:44:10,066 916 00:44:10,066 --> 00:44:11,024 SPEAKER 9: [hørbar]. 917 00:44:11,024 --> 00:44:14,475 918 00:44:14,475 --> 00:44:15,461 >> SPEAKER 4: [hørbar]. 919 00:44:15,461 --> 00:44:16,461 >> SPEAKER 10: [hørbar]. 920 00:44:16,461 --> 00:44:21,456 921 00:44:21,456 --> 00:44:23,438 SPEAKER 11: [hørbar]. 922 00:44:23,438 --> 00:44:24,438 SPEAKER 12: [hørbar]. 923 00:44:24,438 --> 00:44:30,438 924 00:44:30,438 --> 00:44:31,396 SPEAKER 13: [uhørbart] 925 00:44:31,396 --> 00:44:37,360 926 00:44:37,360 --> 00:44:40,342 >> SPEAKER 14: [hørbar]. 927 00:44:40,342 --> 00:44:42,863 >> SPEAKER 13: [hørbar]. 928 00:44:42,863 --> 00:44:43,821 SPEAKER 15: [uhørbart] 929 00:44:43,821 --> 00:44:48,785 930 00:44:48,785 --> 00:44:49,785 SPEAKER 16: [hørbar]. 931 00:44:49,785 --> 00:44:53,761 932 00:44:53,761 --> 00:44:55,252 >> SPEAKER 11: [uhørbart] 933 00:44:55,252 --> 00:44:57,773 934 00:44:57,773 --> 00:44:58,731 SPEAKER 5: [hørbar]. 935 00:44:58,731 --> 00:45:11,250 936 00:45:11,250 --> 00:45:15,130 DAVID MALAN: Noen av teamet er selv handle klasser. 937 00:45:15,130 --> 00:45:17,760 Men hvis disse medlemmene av CS50 ansatte er her, 938 00:45:17,760 --> 00:45:19,230 kunne komme på opp for bare et øyeblikk. 939 00:45:19,230 --> 00:45:23,450 CS50 er TFS og instanser og [? ansatte?] Medlemmer her-- disse er bare noen få 940 00:45:23,450 --> 00:45:28,880 av faces-- hvorav du bare så, og noen other-- og noen få andre 941 00:45:28,880 --> 00:45:30,020 fortsatt. 942 00:45:30,020 --> 00:45:33,242 Hvorfor kan ikke vi gå videre og tillate dere en fem minutters pause. 943 00:45:33,242 --> 00:45:35,450 Hvis du trenger å dukke ut til butikk klasser, er det helt greit. 944 00:45:35,450 --> 00:45:38,900 Og i fem minutter, vil vi fortsette, ta en titt på Scratch-- første 945 00:45:38,900 --> 00:45:42,420 av vår programmeringsspråk, møte kursets ansatte her litt mer, 946 00:45:42,420 --> 00:45:45,020 og fokus slutt på oppgavesettet null. 947 00:45:45,020 --> 00:45:46,710 Så vi vil være tilbake i fem minutter. 1 00:45:46,864 --> 00:45:47,370 >> Greit. 2 00:45:47,370 --> 00:45:48,590 Så vi er tilbake. 3 00:45:48,590 --> 00:45:51,330 Og i våre rester tid i dag, målet 4 00:45:51,330 --> 00:45:54,320 er til nivået de spiller feltet i form av noen terminologi, 5 00:45:54,320 --> 00:45:55,297 i form av noen ideer. 6 00:45:55,297 --> 00:45:57,380 Fordi ja, som per noen av listene tidligere, 7 00:45:57,380 --> 00:46:00,130 det kommer til å være en rekke nivåer av erfaring i klassen, 8 00:46:00,130 --> 00:46:03,210 noen av som studentene har tatt noen programmering før, 9 00:46:03,210 --> 00:46:04,200 noen av dem har ikke det. 10 00:46:04,200 --> 00:46:07,430 Og så med dette første problemet set og med dette første språk 11 00:46:07,430 --> 00:46:10,830 har vi en mulighet til å starte å ta for gitt etter i dag 12 00:46:10,830 --> 00:46:12,960 noen felles vokabular og idé. 13 00:46:12,960 --> 00:46:15,590 >> Og vi vil gjøre dette ved hjelp av kursets første languages-- 14 00:46:15,590 --> 00:46:21,070 i tillegg til C og Python og Javascript og SQL og HTML og CSS, 15 00:46:21,070 --> 00:46:24,450 Vi skal fokusere utgangspunktet og bare for oppgavesettet null 16 00:46:24,450 --> 00:46:28,160 på dette grafisk språk, kalt Scratch, utviklet av MIT Media Lab 17 00:46:28,160 --> 00:46:30,880 nedover veien, for å hjelpe studenter og barn spesielt 18 00:46:30,880 --> 00:46:35,070 uttrykke seg algorithmically-- på en måte mer i samsvar med hva 19 00:46:35,070 --> 00:46:37,300 vi kan kalle beregnings tenkning. 20 00:46:37,300 --> 00:46:40,985 >> Og det er et nyttig språk fordi svært raskt neste uke i uke en, 21 00:46:40,985 --> 00:46:44,360 gjør overgangen vi til en mer tradisjonelle og uforståelige språket kalles 22 00:46:44,360 --> 00:46:46,370 C, som er en ren tekst. 23 00:46:46,370 --> 00:46:48,930 Du bruker bare tastaturet i For å skrive instruksjoner 24 00:46:48,930 --> 00:46:50,230 som disse på skjermen. 25 00:46:50,230 --> 00:46:52,840 Men selv om du aldri har sett et programmeringsspråk før, 26 00:46:52,840 --> 00:46:55,170 i bare skotter på dette, alle være det kryptisk, 27 00:46:55,170 --> 00:47:00,010 du kan sikkert gjette at sannsynligvis skriver Hello World. 28 00:47:00,010 --> 00:47:02,050 Men det er mye syntaktisk overhead der. 29 00:47:02,050 --> 00:47:05,770 Det er rart hash symbol eller hash tag opp toppen. 30 00:47:05,770 --> 00:47:08,900 Det er de vinkelparenteser, noen parentes, klammeparentes, semi-colon-- 31 00:47:08,900 --> 00:47:11,880 det er bare så mye visuell syntaks som kommer i veien. 32 00:47:11,880 --> 00:47:13,940 Vi starter kurset med Scratch, slik som å bli 33 00:47:13,940 --> 00:47:17,600 forbi alle de intellektuelt uinteressante distraksjoner, 34 00:47:17,600 --> 00:47:20,290 og fokuserer i stedet på ideene. 35 00:47:20,290 --> 00:47:22,540 >> Faktisk kan dette være før. 36 00:47:22,540 --> 00:47:24,830 Dette, for dette skal uke være etter. 37 00:47:24,830 --> 00:47:26,760 Dette, i denne grafiske språket Scratch, 38 00:47:26,760 --> 00:47:29,870 er hvordan du vil implementere det samme program-- et program som når det kjøres, 39 00:47:29,870 --> 00:47:31,340 bare sier hei verden. 40 00:47:31,340 --> 00:47:34,740 Og hva er fint om Scratch er at det er dette grafisk programmering 41 00:47:34,740 --> 00:47:38,780 miljø som bruker puslebiter eller blokker, som bare forrigling sammen 42 00:47:38,780 --> 00:47:40,440 om det er logisk fornuftig å gjøre det. 43 00:47:40,440 --> 00:47:43,810 Og med Scratch kan du utvikle animasjoner og interaktive spill 44 00:47:43,810 --> 00:47:47,270 og kunst, og en rekke ting som du kan forestille deg i ditt eget sinn, 45 00:47:47,270 --> 00:47:51,200 og implementere dem bare ved dra og slippe puslebiter. 46 00:47:51,200 --> 00:47:54,265 >> Og ja, vi har muligheten å uttrykke noen av de samme ideene 47 00:47:54,265 --> 00:47:56,890 som jeg nettopp nevnte et øyeblikk siden i sammenheng med Mike Smith 48 00:47:56,890 --> 00:48:00,670 og søker en telefon book-- ting som fungerer, bare handlinger, 49 00:48:00,670 --> 00:48:03,070 ting som sløyfer som gjør ting igjen og igjen, 50 00:48:03,070 --> 00:48:05,170 variabler, som er noe vi vil innføre, 51 00:48:05,170 --> 00:48:08,086 men det er kjent kanskje fra algebra-- bare en slags plassholder 52 00:48:08,086 --> 00:48:10,840 til å lagre noen verdi du kanskje trenger later-- boolske uttrykk, 53 00:48:10,840 --> 00:48:13,720 hvor de ja nei eller sann falske spørsmål fra før. 54 00:48:13,720 --> 00:48:17,117 Forholdene er de gafler i road-- disse grenene så å si. 55 00:48:17,117 --> 00:48:19,700 Og så er det noen mer avansert funksjonene vi vil se selv i dag, 56 00:48:19,700 --> 00:48:22,850 kalt arrays og tråder og hendelser, som vi vil da se i løpet av 57 00:48:22,850 --> 00:48:24,460 tid på forskjellige språk. 58 00:48:24,460 --> 00:48:26,790 Men Scratch tillater oss å utforske alle disse. 59 00:48:26,790 --> 00:48:30,779 Så her i Scratch, fiolett blokken er hva en funksjon er vanligvis 60 00:48:30,779 --> 00:48:31,570 kommer til å se ut. 61 00:48:31,570 --> 00:48:35,620 Denne lilla puslespill brikke som har noen ord som sier, som er handlingen, 62 00:48:35,620 --> 00:48:38,490 og da kan det ha en argument eller en parameter-- noen måte 63 00:48:38,490 --> 00:48:41,140 av typen tilpassing hva som blokkerer gjør 64 00:48:41,140 --> 00:48:45,182 slik at det ikke er forhåndsbestemt av MIT hva dette lilla blokken sier. 65 00:48:45,182 --> 00:48:47,390 Faktisk vil du se i en øyeblikk at jeg er i stand til å skrive 66 00:48:47,390 --> 00:48:49,931 ordene som hello world, eller Hei David, eller hallo Zamayla, 67 00:48:49,931 --> 00:48:53,750 eller hva jeg vil, i argumentet til at puslespillet piece-- den hvite boksen 68 00:48:53,750 --> 00:48:54,251 der. 69 00:48:54,251 --> 00:48:57,166 I mellomtiden, hvis jeg vil ha en løkke, vil vi se at det er puslebiter som 70 00:48:57,166 --> 00:48:58,640 ser litt oransje som dette. 71 00:48:58,640 --> 00:49:01,690 Og formen slags tyder på at noe skjer igjen og igjen 72 00:49:01,690 --> 00:49:02,680 i en syklus. 73 00:49:02,680 --> 00:49:06,800 >> Så hvis jeg vikle en si hei verden blokk med en evig blokk i Scratch, 74 00:49:06,800 --> 00:49:10,307 det bare kommer til å fortsette å si hei verden for alltid, bokstavelig talt. 75 00:49:10,307 --> 00:49:12,390 I mellomtiden, det er en annen type sløyfe i Scratch 76 00:49:12,390 --> 00:49:14,348 at vi vil see-- en gjentakelse block-- der, hvis du 77 00:49:14,348 --> 00:49:17,940 vite på forhånd hvor mange ganger du vil at loopen skal utføre 78 00:49:17,940 --> 00:49:21,850 et endelig antall ganger i fact-- deg kan spesifisere at ved å skrive inn et tall 79 00:49:21,850 --> 00:49:25,380 eller til og med koble til en variabel, som x eller y som vi får se. 80 00:49:25,380 --> 00:49:27,690 >> Faktisk, variabler som I I dette tilfellet, som 81 00:49:27,690 --> 00:49:30,109 er et vanlig navn på en heltall variabel som 82 00:49:30,109 --> 00:49:31,900 bare lagrer en number-- et helt tall kan være, 83 00:49:31,900 --> 00:49:35,470 å bruke denne oransje blokk her for å sette en variabel som jeg til null. 84 00:49:35,470 --> 00:49:38,900 Her er et eksempel på grønne av en Boolsk uttrykk i Scratch. 85 00:49:38,900 --> 00:49:43,700 Selv om dette ser ut som en matte formel, matematiske ulikheter som dette 86 00:49:43,700 --> 00:49:45,320 egentlig er boolske uttrykk. 87 00:49:45,320 --> 00:49:46,570 Dette er enten sant eller usant. 88 00:49:46,570 --> 00:49:48,300 I er mindre enn 50. 89 00:49:48,300 --> 00:49:51,815 Det er enten et ja eller nei svar eller sant eller usant svar. 90 00:49:51,815 --> 00:49:53,940 Og vi vil vanligvis kaller de boolske uttrykk. 91 00:49:53,940 --> 00:49:55,148 Og det trenger ikke å være 50. 92 00:49:55,148 --> 00:49:57,970 Det kan være x mindre enn y, er større enn y, lik Y- 93 00:49:57,970 --> 00:50:00,020 hvilket som helst antall annen spørsmål kan bli spurt. 94 00:50:00,020 --> 00:50:03,250 >> Nå, ved første øyekast kan dette se plutselig ganske dristig her, og det er. 95 00:50:03,250 --> 00:50:06,540 Men konseptet er lurt, det ganske kjent fra før. 96 00:50:06,540 --> 00:50:09,370 Dersom x er mindre enn y, enn si så mye. 97 00:50:09,370 --> 00:50:12,230 Else hvis x er større enn y, så si så mye. 98 00:50:12,230 --> 00:50:14,260 Else si x er lik y. 99 00:50:14,260 --> 00:50:17,220 Så vi har et eksempel det av en tredje scenario-- 100 00:50:17,220 --> 00:50:20,600 den eneste tredje possibility-- x er enten større enn, mindre enn, eller lik. 101 00:50:20,600 --> 00:50:22,420 Så vi har en treveis veiskille. 102 00:50:22,420 --> 00:50:26,290 >> Og legg merke til hva som er kult her-- Scratch, det ville virke, har bare en oppgave 103 00:50:26,290 --> 00:50:28,840 stykke, i dette tilfelle, i hvis annen blokk. 104 00:50:28,840 --> 00:50:32,090 Og likevel som synes å innebære at du kan bare har en toveis veiskille. 105 00:50:32,090 --> 00:50:34,631 Du kan gå til venstre eller høyre, men hva om det tredje scenariet? 106 00:50:34,631 --> 00:50:35,760 Hva hvis x er lik y? 107 00:50:35,760 --> 00:50:36,500 Ingen stor sak. 108 00:50:36,500 --> 00:50:39,640 Ta en puslespillbrikke, sette en annen en på innsiden av det 109 00:50:39,640 --> 00:50:45,759 for å lage den tilsvarende semantiske om hvis, annet hvis, else-- og nå 110 00:50:45,759 --> 00:50:47,300 har din treveis veiskille. 111 00:50:47,300 --> 00:50:49,091 Og så får vi se, det Scratch brikkene 112 00:50:49,091 --> 00:50:51,820 kan strekkes og vokser, så som å stappe flere ting i dem. 113 00:50:51,820 --> 00:50:54,420 Du trenger ikke å passe alt i standardstørrelse. 114 00:50:54,420 --> 00:50:56,690 >> Dette er noe vi vil snart se kalles en matrise. 115 00:50:56,690 --> 00:51:00,880 Det er som en list-- noen måte lagre flere opplysninger 116 00:51:00,880 --> 00:51:02,886 i en variabel, ikke bare et tall. 117 00:51:02,886 --> 00:51:05,760 Dette vil vi se en representant for noe som kalles multi-threading. 118 00:51:05,760 --> 00:51:08,280 Faktisk, alle dine Mac og PC i disse dager 119 00:51:08,280 --> 00:51:10,810 støtter multi-threading, noe som betyr at du kan bokstavelig talt 120 00:51:10,810 --> 00:51:12,390 gjøre flere ting på en gang. 121 00:51:12,390 --> 00:51:15,390 Du kan ha Microsoft Word opp i forgrunnen, arbeider på noen essay. 122 00:51:15,390 --> 00:51:17,160 Du har kanskje en nettleser i bakgrunnen åpningen 123 00:51:17,160 --> 00:51:18,720 G-post eller Facebook eller lignende. 124 00:51:18,720 --> 00:51:22,730 Datamaskinen kan gjøre flere ting i dag fordi det er multi-threaded, 125 00:51:22,730 --> 00:51:26,390 og programmene de er ii Spesielt er også multi-threaded. 126 00:51:26,390 --> 00:51:28,970 >> Det finnes ting som kalles hendelser som godt i verden av Scratch, 127 00:51:28,970 --> 00:51:32,640 og så er det en måte også, for å gjøre våre egne tilpassede brikkene hvis ting 128 00:51:32,640 --> 00:51:34,810 ikke faktisk eksisterer på forhånd. 129 00:51:34,810 --> 00:51:38,260 Så la oss motivere dette som følger. 130 00:51:38,260 --> 00:51:40,580 For noen år siden, da jeg først oppdaget Scratch, 131 00:51:40,580 --> 00:51:43,530 da jeg var faktisk en grad student ved MIT, vi 132 00:51:43,530 --> 00:51:45,640 selv fikk i oppdrag å gjøre lekser. 133 00:51:45,640 --> 00:51:47,614 Og jeg implemented-- som i ettertid 134 00:51:47,614 --> 00:51:50,780 var en veldig dårlig avgjørelse fordi det er den mest irriterende sangen i verden 135 00:51:50,780 --> 00:51:53,321 å høre på i åtte timer mens du arbeider på din homework-- 136 00:51:53,321 --> 00:51:57,180 men noe jeg hadde kalt Oscar Time, som er kanskje en kjent sang. 137 00:51:57,180 --> 00:51:59,820 >> CS50s eier Jordan Hayashi, en av våre mer senior medarbeidere, 138 00:51:59,820 --> 00:52:03,920 har oppgradert det for 2015 og nå 2016, siden tilbake i dag, 139 00:52:03,920 --> 00:52:06,610 Jeg hadde alt bare går i Oscars søppelbøtta. 140 00:52:06,610 --> 00:52:09,320 Nå støtter vi resirkulering og kompostering. 141 00:52:09,320 --> 00:52:12,050 >> Men for å male bildet av hva vi kan gjøre her 142 00:52:12,050 --> 00:52:14,130 og for å motivere noen av lavere nivå eksempler, 143 00:52:14,130 --> 00:52:16,400 kan vi få en annen frivillig å bare komme på opp 144 00:52:16,400 --> 00:52:18,331 og spille min første lekser oppdrag noensinne? 145 00:52:18,331 --> 00:52:18,830 Kom opp. 146 00:52:18,830 --> 00:52:19,250 Hva heter du? 147 00:52:19,250 --> 00:52:20,030 >> HENRY: Henry. 148 00:52:20,030 --> 00:52:22,660 >> DAVID MALAN: Henry, kom opp. 149 00:52:22,660 --> 00:52:24,190 Kom opp. 150 00:52:24,190 --> 00:52:27,070 Hodet uansett, og du vil se i et øyeblikk, 151 00:52:27,070 --> 00:52:29,870 Jeg kommer til å gå videre og traff grønt flagg i øverste høyre hånd 152 00:52:29,870 --> 00:52:31,100 hjørne, noe som betyr gå. 153 00:52:31,100 --> 00:52:33,320 Den lille stoppskiltet ikonet kommer til å si stopp, 154 00:52:33,320 --> 00:52:35,490 og det er da du begynner og stoppe programmet. 155 00:52:35,490 --> 00:52:36,450 Hyggelig å møte deg. 156 00:52:36,450 --> 00:52:36,950 Greit. 157 00:52:36,950 --> 00:52:39,100 Så vi kommer til å se instruksjonene på skjermen i bare et øyeblikk. 158 00:52:39,100 --> 00:52:41,450 Og bare ved å spille dette spillet for noen seconds-- stole på meg, 159 00:52:41,450 --> 00:52:43,670 vi kommer ikke til å ønske å spille hele veien til end-- du vil 160 00:52:43,670 --> 00:52:45,470 få en følelse av hva programmet gjør. 161 00:52:45,470 --> 00:52:49,170 Og mer enn bare fokusere på Henry være god eller dårlig i dette spillet, fokus 162 00:52:49,170 --> 00:52:52,600 og hvordan ble det iverksatt av meg opprinnelig og deretter ved Jordan. 163 00:52:52,600 --> 00:52:54,640 Med andre ord, der er variablene? 164 00:52:54,640 --> 00:52:55,520 Hvor er sløyfene? 165 00:52:55,520 --> 00:52:56,520 Hvor er de funksjonene? 166 00:52:56,520 --> 00:53:00,700 Og vi får se om vi ikke ser de under panseret. 167 00:53:00,700 --> 00:53:03,660 >> Bare klikk og dra søppel til riktig bin. 168 00:53:03,660 --> 00:54:02,100 >> [MUSIKK] 169 00:54:02,100 --> 00:54:02,600 Greit. 170 00:54:02,600 --> 00:54:03,160 Det er veldig bra. 171 00:54:03,160 --> 00:54:04,286 Hvorfor kan ikke vi stoppe det der. 172 00:54:04,286 --> 00:54:04,786 Takk skal du ha. 173 00:54:04,786 --> 00:54:05,830 Gratulerer til Henry. 174 00:54:05,830 --> 00:54:07,002 Takk skal du ha. 175 00:54:07,002 --> 00:54:10,690 >> [BIFALL] 176 00:54:10,690 --> 00:54:12,450 >> Tenk deg debugging det programmet. 177 00:54:12,450 --> 00:54:15,880 Hvis det er et problem to minutter inn i song-- men så 178 00:54:15,880 --> 00:54:17,430 hva som skjer her egentlig? 179 00:54:17,430 --> 00:54:20,900 Så komplisert som det kan begynner å virke for å komme over tid, 180 00:54:20,900 --> 00:54:22,910 faktisk mer og mer ting begynte å falle, 181 00:54:22,910 --> 00:54:25,370 hva som er interessant om denne typen example-- 182 00:54:25,370 --> 00:54:27,270 og vi får se noen others-- er at hvis du 183 00:54:27,270 --> 00:54:30,416 se forbi kompleksitet eller raffinement av spillet, 184 00:54:30,416 --> 00:54:33,040 det er en veldig enkel bygning blokker som spill slik: alle, 185 00:54:33,040 --> 00:54:35,840 hvis du destillere dem til de byggeklosser, er svært tilgjengelig 186 00:54:35,840 --> 00:54:37,401 og gjennomfør til seg selv. 187 00:54:37,401 --> 00:54:39,150 For eksempel er det vært en stund, men jeg er 188 00:54:39,150 --> 00:54:42,900 ganske sikker på hva jeg i utgangspunktet gjorde da noe som gjør dette spillet for første gang 189 00:54:42,900 --> 00:54:44,787 var jeg helt like utsatte. 190 00:54:44,787 --> 00:54:47,120 Jeg fokuserte ikke i det hele tatt på logikk eller brikkene, 191 00:54:47,120 --> 00:54:50,810 Jeg fokuserte på grafikk og funn gaten innlegg og søppelbøtta 192 00:54:50,810 --> 00:54:51,540 og alt dette. 193 00:54:51,540 --> 00:54:53,456 Men det var nødvendig ingrediensene først. 194 00:54:53,456 --> 00:54:57,220 Og når jeg er ferdig procrastinating og legge ut det overordnede rammeverket, 195 00:54:57,220 --> 00:55:00,337 Jeg bestemte meg, la meg bare gjøre en stykke søppel falle ned fra himmelen. 196 00:55:00,337 --> 00:55:02,170 Og vi får se Scratch støtter ting som kalles 197 00:55:02,170 --> 00:55:06,386 sprites-- tegn som kan har ulike kostymer på, slik at de 198 00:55:06,386 --> 00:55:07,010 se annerledes ut. 199 00:55:07,010 --> 00:55:09,660 >> Og så satte jeg en søppel drakt på en slik sprite. 200 00:55:09,660 --> 00:55:12,007 Og jeg trengte det å falle ned fra himmelen. 201 00:55:12,007 --> 00:55:14,590 Og så viser det seg, Scratch, som de fleste programmeringsspråk, 202 00:55:14,590 --> 00:55:18,099 støtter tilfeldige tall eller teknisk pseudo tilfeldige tall, 203 00:55:18,099 --> 00:55:20,390 slik at ved å dra og slippe enkelte brikkene, 204 00:55:20,390 --> 00:55:22,890 Jeg var i stand til å ha søppel kommer fra venstre først. 205 00:55:22,890 --> 00:55:25,580 Og så neste gang det falt, fra høyre og deretter fra midten. 206 00:55:25,580 --> 00:55:28,060 Og hele spillet gjorde var bare har søppel som faller fra himmelen. 207 00:55:28,060 --> 00:55:29,770 Du kan ikke peke på den, eller klikk på den. 208 00:55:29,770 --> 00:55:31,103 Du kan ikke åpne søppelbøtta. 209 00:55:31,103 --> 00:55:32,160 Du kunne ikke gjøre noe. 210 00:55:32,160 --> 00:55:34,450 Men det var en baby trinn mot min ultimate visjon. 211 00:55:34,450 --> 00:55:36,720 >> Og etter det, jeg faktisk implementert noen form 212 00:55:36,720 --> 00:55:41,230 av føle slik at hvis du klikket og dra på stykke søppel 213 00:55:41,230 --> 00:55:44,350 over søppelbøtta, Oscar Lokket vil åpne og lukke. 214 00:55:44,350 --> 00:55:47,650 Ingenting ville skje med søppel, men i det minste lokket vil åpne og lukke. 215 00:55:47,650 --> 00:55:49,642 Så sjekk, trinn to av to. 216 00:55:49,642 --> 00:55:52,100 Og dette er hva som kommer til å være nøkkelen i både oppgavesettet null 217 00:55:52,100 --> 00:55:55,970 og i programmerings mer generelt, skal ta disse svært bevisste baby trinn. 218 00:55:55,970 --> 00:55:59,390 Fordi ikke bare tillater det deg å føler ærlig oppnådd mye mer 219 00:55:59,390 --> 00:56:01,250 quickly-- det er verste i verden 220 00:56:01,250 --> 00:56:06,149 å prøve å gjennomføre alle Oscar Time, deretter timer senere traff den grønne flagg, 221 00:56:06,149 --> 00:56:08,440 og ingenting fungerer som forventet fordi der har du selv 222 00:56:08,440 --> 00:56:11,150 begynne å feilsøke eller til feilsøke dette programmet? 223 00:56:11,150 --> 00:56:12,470 Det er bare overveldende. 224 00:56:12,470 --> 00:56:16,792 >> Og så virkelig omfavnende denne ideen av å ta steps-- små steg igjen 225 00:56:16,792 --> 00:56:19,000 og igjen-- bygge opp noe som er, til slutt, 226 00:56:19,000 --> 00:56:23,672 virkelig imponerende og komplisert, men i begynnelsen, er ikke på langt nær så mye så. 227 00:56:23,672 --> 00:56:24,630 Faktisk, la oss gjøre dette. 228 00:56:24,630 --> 00:56:28,989 La meg gå videre og-- Skrap selv finnes på Internett på Scratch.MIT.edu, 229 00:56:28,989 --> 00:56:30,780 og du vil bli fortalt som mye igjen i problemet 230 00:56:30,780 --> 00:56:34,200 angi null, spesifikasjonen for som allerede er på CS50 hjemmeside. 231 00:56:34,200 --> 00:56:35,725 >> Men dette er hva Scratch selv er. 232 00:56:35,725 --> 00:56:38,210 Og det er egentlig bare tre hovedområder. 233 00:56:38,210 --> 00:56:40,980 Øverst til venstre der er den såkalte stadium. 234 00:56:40,980 --> 00:56:41,810 Dette er Scratch. 235 00:56:41,810 --> 00:56:43,710 Standard drakt er en katt. 236 00:56:43,710 --> 00:56:46,950 Og dette er den rektangulære verden som du kan move-- opp, ned, venstre, 237 00:56:46,950 --> 00:56:48,130 høyre og noen andre ting. 238 00:56:48,130 --> 00:56:51,839 I midten her er våre kategorier eller våre paller med puslespillbiter, 239 00:56:51,839 --> 00:56:53,630 og forskjellige farger bety forskjellige ting. 240 00:56:53,630 --> 00:56:56,520 Og hvis du rote rundt, vil du se ting som looper og vilkår 241 00:56:56,520 --> 00:56:58,160 og variabler og andre ingredienser. 242 00:56:58,160 --> 00:57:00,060 >> Og så over her er det skript området. 243 00:57:00,060 --> 00:57:03,020 Det er der jeg kan dra og slippe disse brikkene til å gjøre ting. 244 00:57:03,020 --> 00:57:04,690 Så la oss gjøre en slik ting. 245 00:57:04,690 --> 00:57:06,630 La meg gå videre og-- og jeg vet hvor det er. 246 00:57:06,630 --> 00:57:10,110 Så jeg kommer til å umiddelbart klikk på der jeg vet at ting er klar til å være, 247 00:57:10,110 --> 00:57:13,140 men å peke og klikke og poking rundt er uunngåelig. 248 00:57:13,140 --> 00:57:15,320 Så når grønne flagget klikket, hva jeg ønsker å gjøre? 249 00:57:15,320 --> 00:57:17,100 Jeg kommer til å gjøre dette. 250 00:57:17,100 --> 00:57:20,699 Jeg kommer til å dra denne lilla puslespill stykke, si hei i to sekunder, 251 00:57:20,699 --> 00:57:21,490 og la meg zoome inn. 252 00:57:21,490 --> 00:57:23,865 >> Og jeg kommer til å endre dette å være hva jeg vil den skal be-- 253 00:57:23,865 --> 00:57:26,471 hallo verden i to sekunder er greit. 254 00:57:26,471 --> 00:57:28,970 Nå kommer jeg til å klikke på grønt flagg, eller hvis jeg virkelig vil, 255 00:57:28,970 --> 00:57:31,820 Jeg kan fullskjerm det og deretter komme tilbake. 256 00:57:31,820 --> 00:57:34,060 Det vil bare fortsette alt i ett vindu. 257 00:57:34,060 --> 00:57:36,141 Grønn flag-- hello world. 258 00:57:36,141 --> 00:57:36,640 Greit. 259 00:57:36,640 --> 00:57:38,789 Ikke alle som interessant. 260 00:57:38,789 --> 00:57:40,080 Så la meg gå videre og gjøre dette. 261 00:57:40,080 --> 00:57:41,038 La meg prøve en annen. 262 00:57:41,038 --> 00:57:44,740 Når grønt flagg clicked-- la oss gjøre noe som en lyd. 263 00:57:44,740 --> 00:57:46,880 Og legg merke til at av boksen for gratis du får 264 00:57:46,880 --> 00:57:49,910 en katt lyd, er som standard sprite. 265 00:57:49,910 --> 00:57:52,380 Så nå la meg gå videre og treffer det grønne flagget nå. 266 00:57:52,380 --> 00:57:53,224 >> [Meowing] 267 00:57:53,224 --> 00:57:54,490 >> Aw. 268 00:57:54,490 --> 00:57:55,370 Det er søt. 269 00:57:55,370 --> 00:57:57,040 Jeg programmering. 270 00:57:57,040 --> 00:57:58,550 Så hva har jeg gjort? 271 00:57:58,550 --> 00:58:00,430 Dette tilsvarer et program. 272 00:58:00,430 --> 00:58:01,600 Det er åpenbart super enkelt. 273 00:58:01,600 --> 00:58:05,300 Det gjorde egentlig ikke ta så mye innsats og MIT gjorde mesteparten av arbeidet, 274 00:58:05,300 --> 00:58:07,890 men jeg har kalt en funksjon. 275 00:58:07,890 --> 00:58:08,940 Jeg har brukt en funksjon. 276 00:58:08,940 --> 00:58:12,480 Jeg har gjort litt action, med bare at en lilla puslespill brikke. 277 00:58:12,480 --> 00:58:15,960 >> Vel, hvis jeg ønsker å gjøre tre meows på rad? 278 00:58:15,960 --> 00:58:18,570 La meg gå videre og gjøre to og tre. 279 00:58:18,570 --> 00:58:20,910 Og legg merke til at når du sveve i nærheten en puslespillbrikke, 280 00:58:20,910 --> 00:58:22,970 en liten hvit linje vises slags magnetisk, 281 00:58:22,970 --> 00:58:25,190 og det vil knipse sammen når du la gå. 282 00:58:25,190 --> 00:58:26,600 La oss se hva som skjer her. 283 00:58:26,600 --> 00:58:27,920 >> [Meowing] 284 00:58:27,920 --> 00:58:32,390 285 00:58:32,390 --> 00:58:34,510 >> Det er en bug. 286 00:58:34,510 --> 00:58:35,650 Jeg hører bare ett meow. 287 00:58:35,650 --> 00:58:37,440 Hvorfor kan det være? 288 00:58:37,440 --> 00:58:39,001 Ja? 289 00:58:39,001 --> 00:58:39,500 Yeah. 290 00:58:39,500 --> 00:58:41,650 Vi har egentlig ikke høre det, men det er god intuisjon. 291 00:58:41,650 --> 00:58:43,400 De er alle spiller på samme tid. 292 00:58:43,400 --> 00:58:44,000 Hvorfor? 293 00:58:44,000 --> 00:58:46,587 Vel, er datamaskinen bare kommer å gjøre det du ber den om. 294 00:58:46,587 --> 00:58:48,670 Så hvis du sier, spille lyd, spille av lyd, spille av lyd, 295 00:58:48,670 --> 00:58:52,887 men du trenger ikke fortelle det å spille til du er ferdig, spille til du er ferdig, 296 00:58:52,887 --> 00:58:54,970 det kommer til å blåse gjennom programmet veldig fort 297 00:58:54,970 --> 00:58:56,830 og ikke bare det du ber den om. 298 00:58:56,830 --> 00:58:59,040 >> Så jeg faktisk trenger å fikse dette i et par måter. 299 00:58:59,040 --> 00:59:00,623 Jeg kunne bare gjøre dette, bli kvitt dette. 300 00:59:00,623 --> 00:59:04,180 La meg prøve denne andre pusle piece-- spille av lyd mjaue til ferdig, 301 00:59:04,180 --> 00:59:07,072 og deretter drar tre av disse og klikker Play. 302 00:59:07,072 --> 00:59:09,430 >> [Meowing] 303 00:59:09,430 --> 00:59:13,350 >> Det er egentlig ikke very-- takker you-- veldig naturlig. 304 00:59:13,350 --> 00:59:16,590 Så hvorfor ikke I-- la meg gå å styre her. 305 00:59:16,590 --> 00:59:17,090 Hyggelig. 306 00:59:17,090 --> 00:59:22,230 Vent ett sekund, og nå la meg gå tilbake til lyder og spill lyd til ferdig, 307 00:59:22,230 --> 00:59:24,620 og så la meg få vente ett sekund. 308 00:59:24,620 --> 00:59:28,692 Og så la meg gå og få en mer lyd, og her vi går. 309 00:59:28,692 --> 00:59:31,350 >> [Meowing] 310 00:59:31,350 --> 00:59:35,930 >> Litt mer naturlig, men dette er ikke veldig effektivt. 311 00:59:35,930 --> 00:59:39,830 Som jeg begynte å bli lei, alle være det kort, klikke frem og tilbake 312 00:59:39,830 --> 00:59:42,724 og virkelig duplisere min work-- ganske mye kopiere og lime inn. 313 00:59:42,724 --> 00:59:44,640 Faktisk, hvis jeg styre klikket eller høyre klikket, 314 00:59:44,640 --> 00:59:46,500 Jeg kunne bare ha kopiert og limt inn. 315 00:59:46,500 --> 00:59:49,870 Hva ville være en bedre konstruere å bruke? 316 00:59:49,870 --> 00:59:51,090 Hva idé fra før? 317 00:59:51,090 --> 00:59:51,990 >> Ja, så en loop. 318 00:59:51,990 --> 00:59:54,580 Og faktisk, hvis vi poked rundt, vi kan finne akkurat det. 319 00:59:54,580 --> 00:59:57,730 La meg gå til arrangementer eller snarere Control. 320 00:59:57,730 --> 00:59:59,650 Så repeat-- jeg ikke vil den skal være 10 ganger. 321 00:59:59,650 --> 01:00:01,370 Det kommer til å bli irriterende raskt. 322 01:00:01,370 --> 01:00:03,380 Men jeg vil gjenta tre ganger. 323 01:00:03,380 --> 01:00:06,355 La meg gå tilbake til lyd og spille av lyden før det er gjort. 324 01:00:06,355 --> 01:00:08,480 La meg gå tilbake til kontroll og bare vente ett sekund. 325 01:00:08,480 --> 01:00:10,271 Og legg merke til, kanskje du tror det ikke passer, 326 01:00:10,271 --> 01:00:13,520 men igjen hvis magnetisk du lar den snap på plass, vil det vokse til å fylle. 327 01:00:13,520 --> 01:00:14,971 Hvordan er det å spille nå? 328 01:00:14,971 --> 01:00:18,500 >> [Meowing] 329 01:00:18,500 --> 01:00:19,000 OK. 330 01:00:19,000 --> 01:00:19,660 Hyggelig. 331 01:00:19,660 --> 01:00:22,540 Og dette er hva som ville bli kalt et program som også er riktig. 332 01:00:22,540 --> 01:00:27,590 Det mjauet tre ganger ganske naturlig, men det er bedre utformet. 333 01:00:27,590 --> 01:00:29,580 Jeg bruker mindre redundans. 334 01:00:29,580 --> 01:00:30,970 Jeg hadde ikke kopiere og lime inn noe. 335 01:00:30,970 --> 01:00:32,470 Jeg bare brukt en bedre idé. 336 01:00:32,470 --> 01:00:35,340 >> Nå er dette fortsatt ikke alle som interessant med Scratch ikke gjør 337 01:00:35,340 --> 01:00:35,930 hva som helst. 338 01:00:35,930 --> 01:00:37,388 Så la oss gjøre noe annet i stedet. 339 01:00:37,388 --> 01:00:38,670 La oss gjøre noe for alltid. 340 01:00:38,670 --> 01:00:39,420 Og vet du hva? 341 01:00:39,420 --> 01:00:40,470 Motion virker interessant. 342 01:00:40,470 --> 01:00:45,760 La oss få ham flytte 10 trinn og trykke play nå. 343 01:00:45,760 --> 01:00:46,570 >> OK. 344 01:00:46,570 --> 01:00:49,300 Vel, vi kan slags drag ham tilbake, og han er fortsatt 345 01:00:49,300 --> 01:00:51,250 kjører fordi han gjør dette for alltid. 346 01:00:51,250 --> 01:00:53,150 Slik at sløyfen gjør hva det sier å gjøre, 347 01:00:53,150 --> 01:00:54,650 men dette er ikke alt som er interessant. 348 01:00:54,650 --> 01:00:55,310 La oss gjøre dette. 349 01:00:55,310 --> 01:00:59,870 La meg legge til et kontrollblokk, og bruke en av disse betingelser for første gang. 350 01:00:59,870 --> 01:01:03,119 >> Så det kommer til å flytte 10 steps-- 10 prikker, 10 piksler på screen-- 351 01:01:03,119 --> 01:01:04,660 så det kommer til å stille dette spørsmålet. 352 01:01:04,660 --> 01:01:09,340 Hvis noe er sant, så gjør noe inne i denne blokken. 353 01:01:09,340 --> 01:01:13,060 Så det viser seg sensing har en hel haug med boolsk expressions-- 354 01:01:13,060 --> 01:01:16,580 spørsmål av ja nei eller sann falsk form-- la meg gjøre dette. 355 01:01:16,580 --> 01:01:19,260 >> Hvis touching-- og så er det denne lille rullegardinmeny. 356 01:01:19,260 --> 01:01:20,410 Jeg kan parametrisere det. 357 01:01:20,410 --> 01:01:23,010 Hvis berøre edge-- la oss gjøre noe sånt. 358 01:01:23,010 --> 01:01:27,310 Så hvis berøre edge-- la meg gå tilbake til bevegelse. 359 01:01:27,310 --> 01:01:32,281 Og hvorfor gjør vi ikke bare snu 180 grader? 360 01:01:32,281 --> 01:01:32,780 Greit. 361 01:01:32,780 --> 01:01:35,070 Så evig, flytte 10 trinn. 362 01:01:35,070 --> 01:01:37,670 Hvis du berører den kanten, snu 180 grader. 363 01:01:37,670 --> 01:01:39,720 Og det er ikke slutten av programmet fordi du er i en evig blokkere, 364 01:01:39,720 --> 01:01:42,053 så det kommer til å gå igjen og igjen og igjen og igjen. 365 01:01:42,053 --> 01:01:43,980 Så la oss se hva som skjer. 366 01:01:43,980 --> 01:01:44,785 OK. 367 01:01:44,785 --> 01:01:48,270 Litt buggy, men litt kult. 368 01:01:48,270 --> 01:01:51,710 >> Og vi kan legge til denne noen dumme ting som ikke er alt som intellektuelt 369 01:01:51,710 --> 01:01:52,270 interessant. 370 01:01:52,270 --> 01:01:57,210 Men hvis vi traff denne lille mikrofon button-- au. 371 01:01:57,210 --> 01:01:58,480 La meg rydde opp dette. 372 01:01:58,480 --> 01:02:01,540 La meg forbedre dette som de ville si på TV. 373 01:02:01,540 --> 01:02:05,400 Rydde det opp, lagre og nå gå opp til skript. 374 01:02:05,400 --> 01:02:07,500 >> Og nå, la meg gå til lyd. 375 01:02:07,500 --> 01:02:09,002 La meg gi den et navn. 376 01:02:09,002 --> 01:02:12,440 Jeg vil kalle dette au. 377 01:02:12,440 --> 01:02:13,840 Og nå spille av lyd au. 378 01:02:13,840 --> 01:02:16,520 Legg merke til det vises i liten rullegardinmeny. 379 01:02:16,520 --> 01:02:17,612 La oss se. 380 01:02:17,612 --> 01:02:20,444 >> [AU] 381 01:02:20,444 --> 01:02:24,377 >> [Ler] 382 01:02:24,377 --> 01:02:25,835 Men vi kan endre t hans på fly. 383 01:02:25,835 --> 01:02:28,106 Vi kan være dobbelt så irriterende. 384 01:02:28,106 --> 01:02:31,760 >> [AU] 385 01:02:31,760 --> 01:02:35,332 >> Eller hvis vi gjør det som 1000 skritt på en tid-- 386 01:02:35,332 --> 01:02:39,900 387 01:02:39,900 --> 01:02:40,670 >> OK. 388 01:02:40,670 --> 01:02:42,295 Så vi kommer til å la den ene alene. 389 01:02:42,295 --> 01:02:45,290 Så igjen, bygge blocks-- jeg startet med noe super enkelt, 390 01:02:45,290 --> 01:02:47,930 og da jeg lagt til en funksjon, lagt til en funksjon, lagt til en funksjon. 391 01:02:47,930 --> 01:02:50,721 Og jeg trenger ikke lenger å bekymre deg for hvor den første av disse funksjoner 392 01:02:50,721 --> 01:02:53,690 ble gjennomført som jeg fortsetter til lag ting på toppen. 393 01:02:53,690 --> 01:02:55,430 Så faktisk, la meg gjøre en annen her. 394 01:02:55,430 --> 01:03:00,580 La meg gå videre og åpne en fil som Jeg tok på forhånd, heter Sheep. 395 01:03:00,580 --> 01:03:03,970 >> Slik at den har en litt annen tegn som ser ut som dette. 396 01:03:03,970 --> 01:03:07,370 Og la meg se om jeg ikke kan gjøre noe ved hjelp av en teller 397 01:03:07,370 --> 01:03:09,310 i dette case-- en såkalt variabel. 398 01:03:09,310 --> 01:03:15,540 Jeg kommer til å gå videre og under Events-- la meg få et grønt flagg klikket. 399 01:03:15,540 --> 01:03:19,030 Så la meg gå til Data, som jeg vet fra bare spille rundt før, 400 01:03:19,030 --> 01:03:20,214 er der variablene er. 401 01:03:20,214 --> 01:03:21,880 Og jeg kommer til å gå foran og dra dette. 402 01:03:21,880 --> 01:03:25,144 >> Så en variabel kalt teller, og Jeg kommer til å initialisere den til null. 403 01:03:25,144 --> 01:03:27,560 Jeg kan kalle det anything-- x eller y eller z-- men i programmering, 404 01:03:27,560 --> 01:03:30,410 kalle noe i en semantisk nyttig måte, som teller, 405 01:03:30,410 --> 01:03:34,540 som beskriver hva det er, det er en mye lettere å lese koden din senere. 406 01:03:34,540 --> 01:03:37,460 La meg gå videre og få en evig blokkere her. 407 01:03:37,460 --> 01:03:41,289 Og la meg gå til utseende side og gjøre en Say blokk. 408 01:03:41,289 --> 01:03:44,330 Men hva som er kult om variabler er jeg trenger ikke å bare skrive inn noe 409 01:03:44,330 --> 01:03:47,850 som hallo verden, som vi allerede har gjort, kan jeg i stedet gå til Data 410 01:03:47,850 --> 01:03:50,690 og dra min variabel, og selv selv om formen ikke helt 411 01:03:50,690 --> 01:03:53,000 ser ut som det skal passe, det vil vokse til å fylle. 412 01:03:53,000 --> 01:03:58,396 Og jeg vil bare si telleren for en second-- spoiler-- han kommer til å telle. 413 01:03:58,396 --> 01:04:00,380 Vi vil si det i ett sekund. 414 01:04:00,380 --> 01:04:02,840 Så jeg kommer til å gå og ha ham vente i ett sekund, 415 01:04:02,840 --> 01:04:04,650 så det teller ikke opp for fort. 416 01:04:04,650 --> 01:04:08,430 Og så til slutt, endre teller ved one-- med andre ord 417 01:04:08,430 --> 01:04:13,520 øke telleren med en merverdi og gjøre dette for alltid. 418 01:04:13,520 --> 01:04:16,129 >> Så sau også, som en programmerer, teller fra 0. 419 01:04:16,129 --> 01:04:20,350 420 01:04:20,350 --> 01:04:23,740 Og hvis vi venter lenge nok, han vil gjøre dette for alltid. 421 01:04:23,740 --> 01:04:27,740 Men det er ikke helt sant, fordi faktisk, som vi vil oppdage i uke en, 422 01:04:27,740 --> 01:04:31,871 heltall og datamaskiner mer generelt, teknisk har bare en finite-- godt, 423 01:04:31,871 --> 01:04:33,829 heller datamaskiner, når de representerer heltall, 424 01:04:33,829 --> 01:04:35,670 bare har et endelig antall biter. 425 01:04:35,670 --> 01:04:37,860 Disse lyspærer der kan bare telle så høyt 426 01:04:37,860 --> 01:04:39,239 før du er ute av lyspærer. 427 01:04:39,239 --> 01:04:41,590 Og en datamaskin også, bare har så mye minne, 428 01:04:41,590 --> 01:04:44,640 bare har så mange transistorer, slik at det bare kan telle så høy. 429 01:04:44,640 --> 01:04:47,409 >> Så det viser seg at sauene, Jeg tror, ​​kan telle til 2 milliarder 430 01:04:47,409 --> 01:04:48,409 eller noe ganske stort. 431 01:04:48,409 --> 01:04:50,325 Så vi ikke kommer til å vente på at dette skal skje. 432 01:04:50,325 --> 01:04:54,850 Men til slutt noen feil vil skje som kan ha noen svært virkelige verden 433 01:04:54,850 --> 01:04:55,970 ramifications. 434 01:04:55,970 --> 01:04:58,861 Men utover sauene, som bare innfører en variabel. 435 01:04:58,861 --> 01:05:01,110 La oss gå videre og åpne opp noe jeg har gjort på forhånd 436 01:05:01,110 --> 01:05:07,430 her kalt Pet den Cat-- Pet katten over her. 437 01:05:07,430 --> 01:05:10,420 Og legg merke til her er det noen blokker, men når grønne flagget 438 01:05:10,420 --> 01:05:12,474 klikket, for alltid å gjøre følgende. 439 01:05:12,474 --> 01:05:15,265 Hvis du berører musen pointer-- slik at markøren på skjermen, 440 01:05:15,265 --> 01:05:18,529 den arrow-- play sound meow og deretter vente i to sekunder. 441 01:05:18,529 --> 01:05:19,570 Og bare gjøre dette for alltid. 442 01:05:19,570 --> 01:05:22,619 Bare stadig vente for å se om den pointer-- 443 01:05:22,619 --> 01:05:24,710 hvis katten er rørende pekeren. 444 01:05:24,710 --> 01:05:26,060 >> Så jeg trykke play. 445 01:05:26,060 --> 01:05:26,920 Ingenting skjer. 446 01:05:26,920 --> 01:05:28,980 Men som jeg flytter markøren over katten, 447 01:05:28,980 --> 01:05:31,960 >> [Meowing] 448 01:05:31,960 --> 01:05:34,750 >> Og hvis jeg flytter den bort, ikke klappe katten lenger. 449 01:05:34,750 --> 01:05:38,090 Så noen betinget logikk nestet inne i en løkke. 450 01:05:38,090 --> 01:05:43,070 Hva med dette eksemplet, bevisst heter Ikke Pet katten? 451 01:05:43,070 --> 01:05:45,253 Hva er dette kommer til å gjøre? 452 01:05:45,253 --> 01:05:47,880 >> [Meowing] 453 01:05:47,880 --> 01:05:50,215 >> Hvorfor skulle du ikke klappe katten? 454 01:05:50,215 --> 01:05:59,440 >> [Meowing] 455 01:05:59,440 --> 01:06:00,699 >> OK. 456 01:06:00,699 --> 01:06:03,880 Slik at dette er et eksempel på en hvis annet. 457 01:06:03,880 --> 01:06:06,482 Det er et beslutningspunkt og fordi det er å sitte i loop, 458 01:06:06,482 --> 01:06:07,690 de er både å få sjekket. 459 01:06:07,690 --> 01:06:08,280 Er dette sant? 460 01:06:08,280 --> 01:06:08,760 Er dette sant? 461 01:06:08,760 --> 01:06:09,250 Er dette sant? 462 01:06:09,250 --> 01:06:09,791 Er dette sant? 463 01:06:09,791 --> 01:06:11,880 Og til slutt, en av de kommer til å søke 464 01:06:11,880 --> 01:06:16,480 og slik at du hører enten mjaue eller brølet av løven i så fall. 465 01:06:16,480 --> 01:06:21,400 >> Vel, la oss gjøre en litt mer fancy en som jeg har gjort på forhånd også-- tråder. 466 01:06:21,400 --> 01:06:25,210 Så en tråd er bare ett ting som en datamaskin kan gjøre. 467 01:06:25,210 --> 01:06:29,349 Så en multi-threaded program er et program som kan gjøre flere ting på en gang. 468 01:06:29,349 --> 01:06:31,140 Og alle disse eksemplene hittil har hatt 469 01:06:31,140 --> 01:06:35,980 bare ett skript, så å speak-- ett program som dette her oppe. 470 01:06:35,980 --> 01:06:38,810 Men legg merke til dette programmet har to sprites, to tegn. 471 01:06:38,810 --> 01:06:40,020 Den ene er en fugl. 472 01:06:40,020 --> 01:06:40,870 Den ene er en katt. 473 01:06:40,870 --> 01:06:45,080 >> Og legg merke til når jeg klikker på disse ned venstre, de har sine egne skript 474 01:06:45,080 --> 01:06:47,120 eller programmer som er knyttet til dem. 475 01:06:47,120 --> 01:06:49,420 Og begge disse programmer, varsel, start 476 01:06:49,420 --> 01:06:52,600 med når grønt flagg clicked-- La oss se på cat-- 477 01:06:52,600 --> 01:06:54,030 når grønt flagg klikket. 478 01:06:54,030 --> 01:06:58,220 Og så ja, når jeg trykker på play nå, to ting kommer til å skje på en gang. 479 01:06:58,220 --> 01:07:01,750 Katten og fuglen er begge kommer til å operere samtidig 480 01:07:01,750 --> 01:07:03,815 å skape denne effekten. 481 01:07:03,815 --> 01:07:05,440 Og du kan forestille deg hva som skjer. 482 01:07:05,440 --> 01:07:08,340 Det er en løkke og fuglen og katten er i en sløyfe. 483 01:07:08,340 --> 01:07:11,270 Fuglen er bare å sprette ut Jeg var før da jeg sa au. 484 01:07:11,270 --> 01:07:13,040 Men katten har helt klart en fordel. 485 01:07:13,040 --> 01:07:16,040 Det er en annen sensing blokk som peker katten med vilje 486 01:07:16,040 --> 01:07:19,836 til fuglen i dette tilfellet her. 487 01:07:19,836 --> 01:07:22,960 Så vi kan erte hverandre, ved å se gjennom disse blokkene, hva som skjer. 488 01:07:22,960 --> 01:07:25,460 Men hovedingrediensen her er ett. 489 01:07:25,460 --> 01:07:28,520 Fuglen, slik at dette spillet er ikke helt boring-- eller dette animation-- 490 01:07:28,520 --> 01:07:30,060 starter på et tilfeldig retning. 491 01:07:30,060 --> 01:07:32,890 Og datamaskinen er rørt et tall mellom 90 og 180 492 01:07:32,890 --> 01:07:36,110 hovedsak, slik at det er en litt forskjellig animasjon hver gang. 493 01:07:36,110 --> 01:07:39,480 >> Og så merker her, hvis katt berører fuglen, da 494 01:07:39,480 --> 01:07:42,030 spille løven fire sound-- brølet. 495 01:07:42,030 --> 01:07:46,330 Men i mellomtiden i fugle palett, har vi dette. 496 01:07:46,330 --> 01:07:49,229 For alltid, hvis ikke berører katten, bare holde flytte tre trinn. 497 01:07:49,229 --> 01:07:50,770 Og så her er en annen puslespill brikke. 498 01:07:50,770 --> 01:07:52,030 Hvis du er på kanten, sprette. 499 01:07:52,030 --> 01:07:54,840 Så fuglen er bare slags minding sin egen virksomhet, 500 01:07:54,840 --> 01:07:57,330 bare flyr rundt og spretter, og det er virkelig 501 01:07:57,330 --> 01:08:01,780 katten som hadde betinget logikk for å fastslå om det hadde fanget fuglen. 502 01:08:01,780 --> 01:08:02,280 Greit. 503 01:08:02,280 --> 01:08:08,800 Så la oss gjøre en annen her, dette blir kalt Hi Hi Hi. 504 01:08:08,800 --> 01:08:15,100 Og dette her bare gjør dette i en evig løkke. 505 01:08:15,100 --> 01:08:18,925 Men notice-- hvordan stopper vi dette veldig irriterende program? 506 01:08:18,925 --> 01:08:21,600 507 01:08:21,600 --> 01:08:22,640 Hit mellomromstasten. 508 01:08:22,640 --> 01:08:27,990 For hvis jeg gjør det, venstre hånd program-- 509 01:08:27,990 --> 01:08:31,550 merker det er stadig listening-- er nøkkelen plass pressen. 510 01:08:31,550 --> 01:08:34,090 Hvis mellomromstasten trykkes, og i så fall, hva gjør den? 511 01:08:34,090 --> 01:08:35,980 Det gjør en svært vanlig teknikk. 512 01:08:35,980 --> 01:08:38,590 Det setter en variabel lik noen verdi. 513 01:08:38,590 --> 01:08:39,741 Men det slår denne verdien. 514 01:08:39,741 --> 01:08:41,490 [? Så utseende?] basert på det shape-- I 515 01:08:41,490 --> 01:08:43,160 har en variabel som jeg skrev på forhånd kalt 516 01:08:43,160 --> 01:08:44,770 Dempet, som bare sier ja eller nei. 517 01:08:44,770 --> 01:08:45,880 Er lyden dempet eller ikke? 518 01:08:45,880 --> 01:08:46,990 Sant eller usant? 519 01:08:46,990 --> 01:08:51,580 Og legg merke til, jeg sier dette-- hvis dempet er null, og deretter endre til en, 520 01:08:51,580 --> 01:08:53,840 annet satt mute den til null. 521 01:08:53,840 --> 01:08:55,540 Så bare snu verdi fra null til en. 522 01:08:55,540 --> 01:08:58,320 Jeg kunne ha done-- endre det fra to til tre og ett femtisytti 523 01:08:58,320 --> 01:09:00,162 eller 04:56 eller 05:56. 524 01:09:00,162 --> 01:09:01,870 Men det spiller ingen rolle hva tallene jeg bruker, 525 01:09:01,870 --> 01:09:04,090 så lenge jeg holder endre det motsatt. 526 01:09:04,090 --> 01:09:07,290 >> Og de fleste enhver programmerer ville bare velge null og one-- falsk og sann, 527 01:09:07,290 --> 01:09:09,510 av og on-- å representere dette. 528 01:09:09,510 --> 01:09:10,930 Og dette er fortsatt kjører. 529 01:09:10,930 --> 01:09:12,190 Hvis jeg treffer på mellomromstasten igjen 530 01:09:12,190 --> 01:09:13,590 >> [SEAL SOUNDS] 531 01:09:13,590 --> 01:09:15,440 >> Programmet er fremdeles i gang. 532 01:09:15,440 --> 01:09:18,400 Fordi det er dette andre script som sier, alltid gjøre følgende. 533 01:09:18,400 --> 01:09:21,390 534 01:09:21,390 --> 01:09:24,770 Dersom dempet variabel lik zero-- så hvis du ikke er dempet 535 01:09:24,770 --> 01:09:29,609 er logic-- om det er falsk eller nei, så spille av lyden, 536 01:09:29,609 --> 01:09:30,650 fordi du ikke er dempet. 537 01:09:30,650 --> 01:09:33,358 Du bør spille av lyden og deretter tror hi hi hi i to sekunder 538 01:09:33,358 --> 01:09:35,790 og deretter vente, og gjøre det igjen og igjen og igjen. 539 01:09:35,790 --> 01:09:40,760 >> Og så på den måten har vi en måte for folk to-- for programmer til å samhandle. 540 01:09:40,760 --> 01:09:43,120 Og de trenger ikke å bli som datert som andre. 541 01:09:43,120 --> 01:09:46,280 Faktisk, poking around-- Beklager ordspillet-- 542 01:09:46,280 --> 01:09:49,250 noen har brukt en stor mengde tid på internett implementere 543 01:09:49,250 --> 01:09:51,580 PokemonGo i Scratch. 544 01:09:51,580 --> 01:09:55,440 Det geolocates deg selv i Cambridge eller Allston her. 545 01:09:55,440 --> 01:10:03,120 Så hvis du ønsker å se for hva folk kan gjøre er dette-- veldig fancy meny. 546 01:10:03,120 --> 01:10:04,780 Klikk på her. 547 01:10:04,780 --> 01:10:07,430 >> Dette er meg med mine piltastene nå. 548 01:10:07,430 --> 01:10:09,446 Jeg kommer til å gå etter dette. 549 01:10:09,446 --> 01:10:09,946 Klikk. 550 01:10:09,946 --> 01:10:12,949 551 01:10:12,949 --> 01:10:14,240 Og nå du klikker Pokeball. 552 01:10:14,240 --> 01:10:17,130 553 01:10:17,130 --> 01:10:20,260 Jeg mener, jeg tror du er ment å klikke på Pokeball. 554 01:10:20,260 --> 01:10:20,760 Greit. 555 01:10:20,760 --> 01:10:22,680 Så jeg gjorde det. 556 01:10:22,680 --> 01:10:23,950 Jeg kan gå over her. 557 01:10:23,950 --> 01:10:27,790 Og denne personen iverksatt noen mer Pokeballs enn her-- tre Pokeballs. 558 01:10:27,790 --> 01:10:29,950 >> Vi vil legge ut en link til denne online slik at du kan spille. 559 01:10:29,950 --> 01:10:32,364 Men legg merke til det er bare noen grunnleggende byggesteiner. 560 01:10:32,364 --> 01:10:33,780 Det ser mye mer avansert, og det er. 561 01:10:33,780 --> 01:10:35,905 Dette er imponerende og mer enn vi ville vanligvis 562 01:10:35,905 --> 01:10:37,740 forvente, sikkert for oppgavesettet null. 563 01:10:37,740 --> 01:10:40,809 Jeg aner ikke hvor lenge denne personen brukt på nettet. 564 01:10:40,809 --> 01:10:41,850 Men det er bare en loop. 565 01:10:41,850 --> 01:10:43,180 Det er en lyd spilles. 566 01:10:43,180 --> 01:10:44,850 Det er en slags løkke lytter etter om jeg er 567 01:10:44,850 --> 01:10:47,558 trykke pil opp eller ned pil eller venstre og høyre, 568 01:10:47,558 --> 01:10:49,834 og hvis så, er den i bevegelse det enkelte antall piksler. 569 01:10:49,834 --> 01:10:51,750 Og så hvis jeg klikker på en annen sprite, det er 570 01:10:51,750 --> 01:10:53,390 en slags hvis tilstanden der. 571 01:10:53,390 --> 01:10:54,806 Ja, dette blir for intens. 572 01:10:54,806 --> 01:10:56,100 Vi kommer til å stoppe. 573 01:10:56,100 --> 01:10:57,750 Det er alle de grunnleggende byggesteinene. 574 01:10:57,750 --> 01:11:01,530 Det er ingen andre ingredienser andre enn de vi har sett på allerede. 575 01:11:01,530 --> 01:11:04,670 >> Og likevel her, la meg gjøre en endelig sett eksempler 576 01:11:04,670 --> 01:11:06,960 som tegner et bilde også av hva du kan gjøre her. 577 01:11:06,960 --> 01:11:10,481 Her er et veldig enkelt program som bare gjør dette-- hoste, hoste, hoste. 578 01:11:10,481 --> 01:11:12,480 Og kun basert på hva vi har sett på så langt, 579 01:11:12,480 --> 01:11:14,570 hvor er det åpenbare mulighet for forbedring. 580 01:11:14,570 --> 01:11:15,570 Dette program er korrekte. 581 01:11:15,570 --> 01:11:17,980 Det hoster tre ganger, som er det jeg hadde tenkt. 582 01:11:17,980 --> 01:11:19,650 Men det er dårlig implementert. 583 01:11:19,650 --> 01:11:20,600 Det er dårlig utformet. 584 01:11:20,600 --> 01:11:22,000 Hvorfor? 585 01:11:22,000 --> 01:11:22,500 Yeah. 586 01:11:22,500 --> 01:11:23,230 Det er ikke en loop. 587 01:11:23,230 --> 01:11:24,610 Og det er ikke så mye at det ikke er en loop, 588 01:11:24,610 --> 01:11:26,400 det er at det er mye redundans. 589 01:11:26,400 --> 01:11:28,830 Det er kopiert og limt inn koden, så å si. 590 01:11:28,830 --> 01:11:31,830 Og løsningen trolig er faktisk en løkke. 591 01:11:31,830 --> 01:11:34,350 Så la meg gå videre og forbedre det. 592 01:11:34,350 --> 01:11:36,250 Og jeg kommer til å dra disse over her. 593 01:11:36,250 --> 01:11:39,986 La meg gå videre og få en rapport blokk, endre dette til tre. 594 01:11:39,986 --> 01:11:41,860 Jeg kommer til å kaste bort noen av disse blokkene. 595 01:11:41,860 --> 01:11:43,150 >> Og du vil legge merke til det er ganske intuitivt. 596 01:11:43,150 --> 01:11:45,691 Du dra og slippe ting komme og forsvinne etter hvert. 597 01:11:45,691 --> 01:11:49,170 Og jeg kan bare dra dette inn her, og nå har jeg en renere versjon fortsatt. 598 01:11:49,170 --> 01:11:50,730 Men vet du hva? 599 01:11:50,730 --> 01:11:52,940 Det er denne muligheten nå for abstraction-- 600 01:11:52,940 --> 01:11:56,350 å begynne å definere nye vokabular at MIT ikke hadde forutsett. 601 01:11:56,350 --> 01:11:59,110 Det er vente og gjenta og for alltid, og hvis, 602 01:11:59,110 --> 01:12:02,590 men hva om jeg ønsker å introdusere ordet hoste som en blokk? 603 01:12:02,590 --> 01:12:06,230 Hva om jeg ønsker en puslespillbrikke hvis formål i livet er å hoste? 604 01:12:06,230 --> 01:12:10,720 >> Vel, la oss se på denne versjonen her, som jeg har gjort som følger. 605 01:12:10,720 --> 01:12:13,579 Magisk, jeg har laget dette puslespill brikke her, 606 01:12:13,579 --> 01:12:14,870 som Scratch lar deg gjøre. 607 01:12:14,870 --> 01:12:16,787 Og faktisk C og Python og Javascript er 608 01:12:16,787 --> 01:12:18,370 kommer til å tillate deg å gjøre dette også. 609 01:12:18,370 --> 01:12:21,830 Du kan lage dine egne brikker som du kaller det du ønsker. 610 01:12:21,830 --> 01:12:24,890 I dette tilfellet, føles hoste som en fornuftig definisjon. 611 01:12:24,890 --> 01:12:27,880 Og så med disse brikkene ned Her kan du definere hva det betyr. 612 01:12:27,880 --> 01:12:30,290 >> Jeg dras og slippes fra denne paletten her-- mer 613 01:12:30,290 --> 01:12:33,500 blocks-- denne store lilla blokk, der jeg skrev i hoste 614 01:12:33,500 --> 01:12:35,290 som navnet på min nye puslespill brikke. 615 01:12:35,290 --> 01:12:39,920 Og så jeg sier hver gang en bruker kaller dette nye hoste puslespill brikke, 616 01:12:39,920 --> 01:12:41,770 gjøre noe å si og en vente. 617 01:12:41,770 --> 01:12:46,160 Og så opp her i min gjenta blokk, Jeg kan bare hoste tre ganger. 618 01:12:46,160 --> 01:12:49,972 >> Og jeg vil hevde, spesielt hvis nå du skjule denne detalj. 619 01:12:49,972 --> 01:12:51,430 Hvem bryr seg om hvor hoste er implementert? 620 01:12:51,430 --> 01:12:54,390 Alt jeg bryr meg om som en programmerer som jeg kan hoste. 621 01:12:54,390 --> 01:12:56,280 Jeg bryr meg ikke om hvordan si er implementert. 622 01:12:56,280 --> 01:12:58,620 Jeg bare bryr seg om at katt kan si noe. 623 01:12:58,620 --> 01:13:02,720 Jeg kan abstrakt bort at detaljer og bare fokusere på det som er på skjermen her. 624 01:13:02,720 --> 01:13:04,400 Men jeg kan ta dette ett skritt videre. 625 01:13:04,400 --> 01:13:08,070 >> Legg merke til at her har jeg implementert sløyfen tre ganger. 626 01:13:08,070 --> 01:13:11,560 Men hva om stedet jeg hente denne versjonen? 627 01:13:11,560 --> 01:13:14,640 Og hva om stedet i denne versjonen her, 628 01:13:14,640 --> 01:13:18,730 Jeg bare endre min puslespill brikke for å ta et argument og innspill i seg selv? 629 01:13:18,730 --> 01:13:21,100 Og at innspill kan være et tall som tre. 630 01:13:21,100 --> 01:13:24,580 Så nå, hvis jeg skriver et program og jeg vil at katten å hoste, 631 01:13:24,580 --> 01:13:28,270 Jeg kan faktisk fortelle gåten sette hvor mange ganger å hoste, 632 01:13:28,270 --> 01:13:31,990 fordi nederst her, en mer avansert versjon av disse tilpasset puslespillbrikker 633 01:13:31,990 --> 01:13:34,500 lar meg spesifisere at hoste faktisk tar 634 01:13:34,500 --> 01:13:36,951 en input-- tar et argument som dette. 635 01:13:36,951 --> 01:13:37,700 Og vet du hva? 636 01:13:37,700 --> 01:13:38,890 Kanskje jeg skjønner, vent litt. 637 01:13:38,890 --> 01:13:40,680 Hoste er same-- det er fundamentalt 638 01:13:40,680 --> 01:13:42,120 den samme ideen som nysing. 639 01:13:42,120 --> 01:13:44,040 Det er bare en annen ord på skjermen. 640 01:13:44,040 --> 01:13:46,550 Jeg kan abstrakt bort videre og implementere 641 01:13:46,550 --> 01:13:48,750 denne siste versjonen av en hoste, som ved første øyekast 642 01:13:48,750 --> 01:13:50,660 er langt mer kompleks ute. 643 01:13:50,660 --> 01:13:52,140 Men legg merke til hva jeg har gjort. 644 01:13:52,140 --> 01:13:55,930 Jeg har nå generalized-- genericized really-- dette puslespill brikke 645 01:13:55,930 --> 01:13:59,900 å bli kalt si ordet n ganger. 646 01:13:59,900 --> 01:14:04,410 >> Og nå har jeg to nye brikkene ned her definere hoste n ganger. 647 01:14:04,410 --> 01:14:06,790 Og hva gjør hoste funksjonen gjøre? 648 01:14:06,790 --> 01:14:08,420 Hva har min egendefinert puslespill brikke gjøre? 649 01:14:08,420 --> 01:14:11,996 Det kaller bare si blokken, passerer ordet jeg vil si, 650 01:14:11,996 --> 01:14:13,870 bestått i antall ganger jeg ønsker å si. 651 01:14:13,870 --> 01:14:18,210 Fordi nå kan jeg implementere nyse ved å si Achoo, 652 01:14:18,210 --> 01:14:20,320 i dette tilfellet, et antall ganger. 653 01:14:20,320 --> 01:14:22,360 >> Og så jeg lagdeling og lagdeling. 654 01:14:22,360 --> 01:14:25,690 Og igjen, er ikke nøkkelen her hvordan jeg implementert det, men faktum 655 01:14:25,690 --> 01:14:28,070 at hvis jeg bare bokstavelig flytte disse ut av skjermen, 656 01:14:28,070 --> 01:14:31,280 se hvor enkelt hvis ikke pen programmet mitt nå ser. 657 01:14:31,280 --> 01:14:33,930 Fordi det gjør hva det sier, jeg har abstrahert 658 01:14:33,930 --> 01:14:37,640 bort hva som er inni den svarte boksen. det skjer for å være en lilla boks her, 659 01:14:37,640 --> 01:14:41,430 men jeg har hindret en gang hva som er inni fordi jeg ikke bryr seg hvordan det fungerer. 660 01:14:41,430 --> 01:14:43,650 Jeg bryr nå at det fungerer. 661 01:14:43,650 --> 01:14:46,375 >> Og ja, i problemet satt null, dette er akkurat 662 01:14:46,375 --> 01:14:49,250 den type lagdeling av ideer du vil har mulighet til å utforske. 663 01:14:49,250 --> 01:14:53,510 Det er nøyaktig anledning til å gjelder problemløsning teknikker, 664 01:14:53,510 --> 01:14:55,550 til hva som er nok en ukjent miljø. 665 01:14:55,550 --> 01:14:57,890 Og om du ikke har programmert før eller programmert før, 666 01:14:57,890 --> 01:14:59,500 du vil finne at det er litt noe 667 01:14:59,500 --> 01:15:00,874 i dette miljøet for alle. 668 01:15:00,874 --> 01:15:02,770 Og med oppgavesettet en i en ukes tid, 669 01:15:02,770 --> 01:15:06,630 vi skal overført til fokus på et høyere nivå språk kalt 670 01:15:06,630 --> 01:15:09,290 C-- eller snarere en nedre nivå språk kalt 671 01:15:09,290 --> 01:15:11,347 C-- som er enda mer kraftig, selv om det er 672 01:15:11,347 --> 01:15:12,930 litt mer kryptisk ved første øyekast. 673 01:15:12,930 --> 01:15:16,740 >> Og vil du innse per dagens TL: DR, at dette problemet satt har en kortere 674 01:15:16,740 --> 01:15:19,880 vindu av tid enn fremtidige seg, rett og slett fordi du bør finne det ganske 675 01:15:19,880 --> 01:15:20,420 tilgjengelig. 676 01:15:20,420 --> 01:15:22,211 Og ikke å bekymre deg hvis du legger klassen sent. 677 01:15:22,211 --> 01:15:23,920 Vi vil ta for oss det før lenge. 678 01:15:23,920 --> 01:15:28,480 Og før vi utsette for kake, la oss avslutt med kun to minutters titt 679 01:15:28,480 --> 01:15:30,500 på hva som venter deg her i CS50. 680 01:15:30,500 --> 01:15:40,950 681 01:15:40,950 --> 01:17:20,803 [MUSIKK] 682 01:17:20,803 --> 01:17:21,302 Greit. 683 01:17:21,302 --> 01:17:22,690 Det er det for CS50. 684 01:17:22,690 --> 01:17:23,650 Vi vil se deg snart. 685 01:17:23,650 --> 01:17:25,526 Cake serveres nå. 686 01:17:25,526 --> 01:17:28,998 687 01:17:28,998 --> 01:18:14,267 [MUSIKK] 688 01:18:14,267 --> 01:18:16,350 SPEAKER 17: Har du hørt av et sabbatsår, Chief? 689 01:18:16,350 --> 01:18:29,490 690 01:18:29,490 --> 01:18:31,920 SPEAKER 18: Kanskje det er mer under panseret. 691 01:18:31,920 --> 01:18:38,279