1 00:00:00,000 --> 00:00:00,479 2 00:00:00,479 --> 00:00:10,830 >> [Musik Spela] 3 00:00:10,830 --> 00:00:12,080 [MUSIK - Rossini "Ranz DES Vaches "från William Tell] 4 00:00:12,080 --> 00:00:24,222 5 00:00:24,222 --> 00:00:25,472 >> [MUSIK - DEN ENGELSKA BEAT, "MARS AV vridbara huvuden "] 6 00:00:25,472 --> 00:02:24,538 7 00:02:24,538 --> 00:02:31,510 >> [Applåder och jublar] 8 00:02:31,510 --> 00:02:33,520 >> DAVID MALAN: Så detta är CS50. 9 00:02:33,520 --> 00:02:34,730 Mitt namn är David Malan. 10 00:02:34,730 --> 00:02:39,250 Och 73% av er har någon tidigare erfarenhet med datavetenskap, 11 00:02:39,250 --> 00:02:41,300 i motsats till vad du kanske tror. 12 00:02:41,300 --> 00:02:45,290 Så idag har vi trodde vi skulle nagga på att bristande kunskaper, men också 13 00:02:45,290 --> 00:02:48,970 ger dig en känsla av, för de av er med mer komfort, vilka riktningar 14 00:02:48,970 --> 00:02:50,550 du kan gå den här terminen. 15 00:02:50,550 --> 00:02:51,890 >> Så låt oss börja med det här. 16 00:02:51,890 --> 00:02:55,490 Jag har verkligen ingen aning om vad som finns inuti en dator, även om, som du, jag 17 00:02:55,490 --> 00:02:56,780 använder den varje dag. 18 00:02:56,780 --> 00:03:00,000 Men det är någon form av låda, och det finns inte många ingångar i den. 19 00:03:00,000 --> 00:03:01,350 Minimalt, det finns, vad? 20 00:03:01,350 --> 00:03:03,120 Förmodligen en strömkabel. 21 00:03:03,120 --> 00:03:06,640 >> Och faktiskt med denna ingrediens, el, tycks vi vara i stånd att 22 00:03:06,640 --> 00:03:09,490 gör ganska lite i dessa dagar. 23 00:03:09,490 --> 00:03:12,130 Men i slutet av dagen, vi måste representera saker 24 00:03:12,130 --> 00:03:12,860 att vi bryr oss om. 25 00:03:12,860 --> 00:03:15,240 Vi måste representera information i någon form. 26 00:03:15,240 --> 00:03:18,365 Och du förmodligen åtminstone vagt förtrogen med idén genom binär eller 27 00:03:18,365 --> 00:03:21,370 bitar eller annat sätt, datorer reduceras till ettor och nollor. 28 00:03:21,370 --> 00:03:26,320 Men kan vi omfamna det och minst sätta lite ljus på det? 29 00:03:26,320 --> 00:03:28,880 >> Så jag har dessa små skrivbordslampor här. 30 00:03:28,880 --> 00:03:30,450 Jag har ett eluttag här. 31 00:03:30,450 --> 00:03:33,930 Och jag kommer att föreslå att insidan min dator är åtminstone en av 32 00:03:33,930 --> 00:03:37,300 dessa saker, något som kan av slås på eller av. 33 00:03:37,300 --> 00:03:40,200 I detta fall är det verkligen en skrivbordslampa, men på lägre nivå, är det något 34 00:03:40,200 --> 00:03:41,500 kallas en transistor. 35 00:03:41,500 --> 00:03:44,730 >> Men i vår värld, det är en skrivbordslampa, så Jag ska gå vidare och koppla detta 36 00:03:44,730 --> 00:03:47,990 i min el här. 37 00:03:47,990 --> 00:03:52,970 Och jag hävdar att med hjälp av denna enkla, enkel anordning, denna enkla omkopplare, jag 38 00:03:52,970 --> 00:03:54,850 kan representera information. 39 00:03:54,850 --> 00:03:58,090 Till exempel, just nu är jag representerar någonting, rätt? 40 00:03:58,090 --> 00:04:01,820 Jag representerar vad jag ska kalla 0 eller falskt, motsatsen till något 41 00:04:01,820 --> 00:04:03,130 faktiskt är närvarande. 42 00:04:03,130 --> 00:04:07,050 Men om jag bara vända denna switch, Nu har jag representerade en 1. 43 00:04:07,050 --> 00:04:10,720 Så med hjälp av denna mycket enkel bit av minne, om du vill, kan jag företräder 44 00:04:10,720 --> 00:04:11,450 information. 45 00:04:11,450 --> 00:04:14,350 >> Nu tyvärr, min dator kan inte göra så mycket. 46 00:04:14,350 --> 00:04:17,430 Den kan endast representera två värden i hela världen - 47 00:04:17,430 --> 00:04:18,620 0 eller 1. 48 00:04:18,620 --> 00:04:21,839 Men vad är en självklar lösning, nu, om vi vill utöka vår dator 49 00:04:21,839 --> 00:04:25,120 minne och utgör mer än bara 0 och 1? 50 00:04:25,120 --> 00:04:27,060 >> Nåväl, låt oss ta en annan sådan bit. 51 00:04:27,060 --> 00:04:30,260 Låt oss ta en annan switch, en annan transistor, men du vill 52 00:04:30,260 --> 00:04:31,130 tänka på det. 53 00:04:31,130 --> 00:04:34,170 Låt mig gå vidare och koppla detta in i min dator också. 54 00:04:34,170 --> 00:04:38,270 Och jag kommer att hävda, nu, att genom med lite mer el och 55 00:04:38,270 --> 00:04:42,290 vända mer av dessa växlar på och off, kan jag representera fler sådana 56 00:04:42,290 --> 00:04:43,020 information. 57 00:04:43,020 --> 00:04:44,660 >> Så just nu är det 1. 58 00:04:44,660 --> 00:04:48,120 Om jag vill nu representera 2, kan jag göra det här. 59 00:04:48,120 --> 00:04:51,510 Men typiskt, konvent, som vi kommer småningom se, kommer att få mig att göra det här. 60 00:04:51,510 --> 00:04:55,260 Så det här är 0, är ​​detta 1. 61 00:04:55,260 --> 00:04:56,720 Detta skulle vara 2. 62 00:04:56,720 --> 00:04:59,920 Och inte helt oväntat, skulle detta vara 3. 63 00:04:59,920 --> 00:05:02,610 >> Så på detta sätt, fortfarande kan Vi räknar upp ytterligare? 64 00:05:02,610 --> 00:05:06,500 Om jag får en tredje bit, en tredje omkopplare, vad är det högsta antalet jag kan nu 65 00:05:06,500 --> 00:05:09,720 räkna upp till från 0? 66 00:05:09,720 --> 00:05:12,020 Så 7 om jag börjar på 0, eller hur? 67 00:05:12,020 --> 00:05:15,980 För om jag slår detta ljus på och faktiskt plugga denna tredje och sista 68 00:05:15,980 --> 00:05:20,090 ljus i mitt eluttag här, då jag har förmågan att representera 69 00:05:20,090 --> 00:05:24,930 någon av två värden här, två värden här, två värden här - 70 00:05:24,930 --> 00:05:32,610 och så jag kan representera 2 gånger 2 gånger 2, eller åtta möjliga värden. 71 00:05:32,610 --> 00:05:36,340 Och om jag börjar redovisning till 0, så det är 0, 1, 2, 3, 4, 5, 6, 7. 72 00:05:36,340 --> 00:05:37,480 >> Så här binära. 73 00:05:37,480 --> 00:05:39,420 Det är verkligen så enkelt är det. 74 00:05:39,420 --> 00:05:41,930 Och jag skulle hävda att detta är faktiskt ganska bekant för de flesta 75 00:05:41,930 --> 00:05:43,180 alla i det här rummet. 76 00:05:43,180 --> 00:05:45,710 Låt mig gå vidare och öppna en liten textredigerare här. 77 00:05:45,710 --> 00:05:49,040 >> Och ni kanske minns från grundskolan att vi hade saker som de hundratals 78 00:05:49,040 --> 00:05:51,970 plats, det tiotals plats, och de som plats. 79 00:05:51,970 --> 00:05:55,040 Och minns att om du hade någon decimal nummer, som något slumpmässigt 80 00:05:55,040 --> 00:05:59,470 som 123, skulle du huvudsakligen skriva ut det i form 81 00:05:59,470 --> 00:06:00,450 av dessa tre kolumner. 82 00:06:00,450 --> 00:06:04,070 Och varför är 1, 2, 3 vad vi känner som 123? 83 00:06:04,070 --> 00:06:11,220 Tja, i kolumnen längst till vänster, har vi en 100 plus två 10s, så det är 120, 84 00:06:11,220 --> 00:06:14,250 plus tre 1s, så det är 123. 85 00:06:14,250 --> 00:06:17,990 >> Nu är denna värld som vi bara upplyst är exakt samma som 86 00:06:17,990 --> 00:06:21,150 du har varit bekant med i flera år, utom nu, våra kolumner 87 00:06:21,150 --> 00:06:22,060 är inte befogenheter 10. 88 00:06:22,060 --> 00:06:23,780 De är bara befogenheter 2. 89 00:06:23,780 --> 00:06:27,830 Så medan det är ettor plats, detta kommer att bli den tvåor plats, är detta 90 00:06:27,830 --> 00:06:29,540 kommer att bli fyra plats. 91 00:06:29,540 --> 00:06:33,260 >> Och eftersom jag bara använder den enklaste av mekanismer för att vända saker 92 00:06:33,260 --> 00:06:37,100 av och på - el flödar eller el inte flyter - 93 00:06:37,100 --> 00:06:40,880 Jag förstår inte riktigt har samma uttrycksfulla intervall som 0 till nio. 94 00:06:40,880 --> 00:06:43,270 Vi kommer att hålla det super enkelt i denna värld av datorer. 95 00:06:43,270 --> 00:06:45,060 Jag har bara 0 eller 1 - 96 00:06:45,060 --> 00:06:47,890 av eller på, falska eller sanna. 97 00:06:47,890 --> 00:06:52,610 >> Och så vad jag företräder just nu är 1, 1, 1, eftersom var och en av dessa 98 00:06:52,610 --> 00:06:54,000 lamporna lyser. 99 00:06:54,000 --> 00:06:59,600 Tja, ger det mig en 4 plus en 2, så det är 6, plus en 1, och det är 7. 100 00:06:59,600 --> 00:07:03,450 Och ergo gör denna sekvens av tre bitar representerar numret 7. 101 00:07:03,450 --> 00:07:06,330 >> Så all denna tid, insidan av din dator, har ett antal 102 00:07:06,330 --> 00:07:08,090 transistorer, varje antal bitar. 103 00:07:08,090 --> 00:07:10,380 Men i slutet av dagen, vi kan representera information 104 00:07:10,380 --> 00:07:12,560 så enkelt är det. 105 00:07:12,560 --> 00:07:16,770 Nu tyvärr har vi bara räknas upp till 7 i CS50 hittills, men 106 00:07:16,770 --> 00:07:18,550 förhoppningsvis kan vi göra en lite bättre än så. 107 00:07:18,550 --> 00:07:19,550 Och faktiskt vi kan. 108 00:07:19,550 --> 00:07:23,570 >> Antag att vi som människor bara godtyckligt bestämt att vi ska 109 00:07:23,570 --> 00:07:28,750 att associera siffror som 1 och 2, 3, 4, 5, 6, 7, med specifika bokstäver i 110 00:07:28,750 --> 00:07:29,410 alfabetet. 111 00:07:29,410 --> 00:07:32,350 Och av historiska skäl, kommer jag att starta något godtyckligt, men jag är 112 00:07:32,350 --> 00:07:36,880 kommer att säga, människor, kommer vi att besluta som standard, globalt, att 113 00:07:36,880 --> 00:07:43,200 65 representerar antalet bokstaven A. 66 kommer att representera B. Dot, prick, prick. 114 00:07:43,200 --> 00:07:45,140 90 kommer att representera bokstaven Z. 115 00:07:45,140 --> 00:07:48,000 >> Och låt oss anta, om vi verkligen sätta några trodde in i det, kan vi komma upp 116 00:07:48,000 --> 00:07:50,860 med siffror för utropstecken och gemener, och faktiskt, 117 00:07:50,860 --> 00:07:52,710 andra människor har gjort det för oss. 118 00:07:52,710 --> 00:07:56,410 Så nu hade vi bitar som vi kan representera siffror, siffror som 119 00:07:56,410 --> 00:08:00,130 Vi kan representera bokstäver, och med bokstäver kan vi nu börja komponera 120 00:08:00,130 --> 00:08:02,650 e-post och karaktärer utskrift på skärmen. 121 00:08:02,650 --> 00:08:05,850 >> Så låt mig bjuda, om jag kunde, åtta modiga frivilliga - 122 00:08:05,850 --> 00:08:09,200 som inte har något emot visas inte bara på kameran men på internet - 123 00:08:09,200 --> 00:08:13,130 att komma upp hit och representerar åtta sådana bitar, snarare än dessa tre. 124 00:08:13,130 --> 00:08:14,380 Så vad sägs om en, två? 125 00:08:14,380 --> 00:08:16,290 Vad sägs om tre? 126 00:08:16,290 --> 00:08:20,230 Vad sägs om fyra i ljuset blått, fem på slutet? 127 00:08:20,230 --> 00:08:21,250 Om någon hit? 128 00:08:21,250 --> 00:08:25,320 Sex i fronten, sju framme, och åtta framme, liksom. 129 00:08:25,320 --> 00:08:29,050 >> Så jag bara så råkade komma förberedd med en hel massa papperslappar. 130 00:08:29,050 --> 00:08:34,150 Och på dessa lappar är siffror som representerar vad kolumner 131 00:08:34,150 --> 00:08:35,809 ni kommer att representera. 132 00:08:35,809 --> 00:08:36,740 Så du kommer att vara - vad är ditt namn? 133 00:08:36,740 --> 00:08:37,570 >> STUDENT: Anna Leah. 134 00:08:37,570 --> 00:08:40,370 >> DAVID MALAN: Anna Leah, du kommer att vara den 128S kolonnen. 135 00:08:40,370 --> 00:08:41,059 Du är? 136 00:08:41,059 --> 00:08:41,510 >> STUDENT: Chris. 137 00:08:41,510 --> 00:08:43,620 >> DAVID MALAN: Chris kommer vara den 64s kolonnen. 138 00:08:43,620 --> 00:08:44,070 Du är? 139 00:08:44,070 --> 00:08:44,540 >> STUDENT: Dan. 140 00:08:44,540 --> 00:08:46,970 >> DAVID MALAN: Dan kommer vara den 32s kolonnen. 141 00:08:46,970 --> 00:08:47,470 >> STUDENT: Pramit. 142 00:08:47,470 --> 00:08:49,430 >> DAVID MALAN: Pramit kommer vara den 16s kolumnen. 143 00:08:49,430 --> 00:08:50,290 >> STUDENT: Lillian. 144 00:08:50,290 --> 00:08:51,904 >> DAVID MALAN: Lillian blir 8s. 145 00:08:51,904 --> 00:08:52,768 >> STUDENT: Jill. 146 00:08:52,768 --> 00:08:55,025 >> DAVID MALAN: Jill kommer vara den 4s kolonnen. 147 00:08:55,025 --> 00:08:55,400 >> STUDENT: Mary. 148 00:08:55,400 --> 00:08:57,000 >> DAVID MALAN: Mary blir 2s, och? 149 00:08:57,000 --> 00:08:57,470 >> STUDENT: David. 150 00:08:57,470 --> 00:08:59,220 >> DAVID MALAN: David kommer vara den 1s kolonnen. 151 00:08:59,220 --> 00:09:02,030 Så om ni kunde steg lite framåt så att alla kan se. 152 00:09:02,030 --> 00:09:05,370 Vad ni inte ser är att på baksidan av dessa papperslappar är en 153 00:09:05,370 --> 00:09:09,760 liten fusklapp som handlar om att instruera dessa åtta bitar till endera 154 00:09:09,760 --> 00:09:12,380 räcka upp handen eller inte räcka upp handen. 155 00:09:12,380 --> 00:09:14,100 Om handen går upp, de är som representerar en 1. 156 00:09:14,100 --> 00:09:17,120 Om deras hand stannar nere, de är representerar en 0. 157 00:09:17,120 --> 00:09:21,410 >> Under tiden vi publiken bör vara kunna räkna ut, baserat på denna 158 00:09:21,410 --> 00:09:26,490 kartläggning, vad tre bokstäver ord dessa folk är på väg att precisera. 159 00:09:26,490 --> 00:09:29,700 Så på bara ett ögonblick, du kommer att läs den första raden på baksidan av 160 00:09:29,700 --> 00:09:32,880 din lathund, och du är antingen kommer att höja eller inte höja handen. 161 00:09:32,880 --> 00:09:35,710 Om du är en 1, höjer du, om du är en 0, står du där 162 00:09:35,710 --> 00:09:38,594 tafatt, precis sådär. 163 00:09:38,594 --> 00:09:40,386 Go. 164 00:09:40,386 --> 00:09:43,945 Vilket nummer, först och främst, är dessa killar som företräder? 165 00:09:43,945 --> 00:09:47,140 166 00:09:47,140 --> 00:09:48,860 >> 66. 167 00:09:48,860 --> 00:09:49,560 66, eller hur? 168 00:09:49,560 --> 00:09:52,400 Vi har en 1 i 64s kolumnen en en i 2s kolumnen. 169 00:09:52,400 --> 00:09:56,340 Det ger mig 66, så som visas att representera B. Så 170 00:09:56,340 --> 00:09:57,075 ni har stavat - 171 00:09:57,075 --> 00:09:58,300 OK, det räcker. 172 00:09:58,300 --> 00:09:59,430 B. 173 00:09:59,430 --> 00:10:01,610 >> Så nu ska vi gå vidare vår andra brev. 174 00:10:01,610 --> 00:10:03,530 Go. 175 00:10:03,530 --> 00:10:06,860 Vem är snabbast på matte här? 176 00:10:06,860 --> 00:10:07,750 Så 79. 177 00:10:07,750 --> 00:10:11,840 Återigen, om vi lägger upp alla kolumner där det finns en 1, för närvarande, bara 178 00:10:11,840 --> 00:10:14,840 som vi gjorde tidigare med den enklaste exempel på 7, nu har vi 179 00:10:14,840 --> 00:10:16,140 få nummer 79. 180 00:10:16,140 --> 00:10:19,910 Som enligt våra mappning är den bokstaven O. Så vi är nästan där. 181 00:10:19,910 --> 00:10:22,590 B, O. Och slutligen, går. 182 00:10:22,590 --> 00:10:26,420 183 00:10:26,420 --> 00:10:30,120 >> Vad de representerar nu? 184 00:10:30,120 --> 00:10:31,370 Mindre konsensus. 185 00:10:31,370 --> 00:10:34,660 186 00:10:34,660 --> 00:10:36,460 Det är bara en absolut blåsljud. 187 00:10:36,460 --> 00:10:40,090 Ja, det är i själva verket 87. 188 00:10:40,090 --> 00:10:40,490 Bra. 189 00:10:40,490 --> 00:10:44,480 >> Så om vi nu kartlägga den tillbaka upp till - låt oss börja ringa vår ASCII kartlägger, 190 00:10:44,480 --> 00:10:46,450 American Standard Code för Information Interchange. 191 00:10:46,450 --> 00:10:47,700 Det ger oss brevet - 192 00:10:47,700 --> 00:10:51,260 193 00:10:51,260 --> 00:10:54,810 inte "bo" men "båge." Och det är en perfekt cue för er att ta en båge 194 00:10:54,810 --> 00:10:56,100 och huvud på baksidan. 195 00:10:56,100 --> 00:10:56,980 Tack så mycket. 196 00:10:56,980 --> 00:10:57,886 >> [Applåder] 197 00:10:57,886 --> 00:10:59,136 >> DAVID MALAN: Du kan behålla dem. 198 00:10:59,136 --> 00:11:01,850 199 00:11:01,850 --> 00:11:05,942 Fast egentligen, skulle någon som en skrivbordslampa, också? 200 00:11:05,942 --> 00:11:07,300 >> [DYFT av publiken] 201 00:11:07,300 --> 00:11:08,390 >> DAVID MALAN: Skrivbordslampa? 202 00:11:08,390 --> 00:11:10,850 >> [SKRATT] 203 00:11:10,850 --> 00:11:11,860 >> DAVID MALAN: Verkligen? 204 00:11:11,860 --> 00:11:13,230 Bordslampor för alla? 205 00:11:13,230 --> 00:11:14,310 Okej. 206 00:11:14,310 --> 00:11:20,990 Så börja med det allra enklaste av principer, har vi nu inte bara räknade 207 00:11:20,990 --> 00:11:24,750 upp från 0 ända upp till 7, har vi antas att bara genom att kasta mer 208 00:11:24,750 --> 00:11:28,080 bitar eller mer ljus eller fler transistorer på detta problem, kan vi 209 00:11:28,080 --> 00:11:32,680 representerar större och större siffror, och ergo, större och större serier av 210 00:11:32,680 --> 00:11:33,780 alfabet, som engelska. 211 00:11:33,780 --> 00:11:37,770 Och låt oss ta på tro för dag som på liknande sätt kan vi börja 212 00:11:37,770 --> 00:11:42,220 representera grafik och video samt eventuella antal andra medier med vilka vi är 213 00:11:42,220 --> 00:11:43,610 bekant idag. 214 00:11:43,610 --> 00:11:49,240 >> Så detta är CS50, och i denna klass vid sidan av er är, återigen, väldigt många 215 00:11:49,240 --> 00:11:53,050 klasskamrater som har så lite upplevelse som du. 216 00:11:53,050 --> 00:11:57,730 Och jag nämner detta bara för att helt ofta, bland annat så sent som en av 217 00:11:57,730 --> 00:12:01,860 förstaårselev rådgivning händelser och vid vårens sophomore rådgivning 218 00:12:01,860 --> 00:12:06,420 händelse, hör vi ofta studenter friskriver när man kommer upp till CS bordet, väl, 219 00:12:06,420 --> 00:12:10,070 Jag har funderat på att ta detta intro klass, men jag är inte riktigt en 220 00:12:10,070 --> 00:12:11,120 dator person. 221 00:12:11,120 --> 00:12:13,220 Eller, men alla säkert vet mer än mig. 222 00:12:13,220 --> 00:12:17,340 Och jag sätta detta i största teckensnittet möjligt, för att förmedla detta budskap som 223 00:12:17,340 --> 00:12:18,730 det är faktiskt inte fallet. 224 00:12:18,730 --> 00:12:21,100 >> Och om du undrar, bör Jag, faktiskt, vara här? 225 00:12:21,100 --> 00:12:25,950 Inse att det inte bara är den här kursen är Titel Introduction to Computer 226 00:12:25,950 --> 00:12:31,740 Vetenskap är det Introduktion till dator Science I. Så det finns faktiskt 227 00:12:31,740 --> 00:12:33,170 en andra sådan introduktion. 228 00:12:33,170 --> 00:12:35,390 Så du är inte, i själva verket, på fel ställe. 229 00:12:35,390 --> 00:12:39,000 Och bland de mål jag har för idag är att mildra sådana problem du 230 00:12:39,000 --> 00:12:42,430 kan ha, men även att måla en bild av vad som väntar för 231 00:12:42,430 --> 00:12:45,720 eleverna mindre och mer bekväm likadana i denna kurs. 232 00:12:45,720 --> 00:12:49,320 >> Men först ett ord på en av åhörarkopior du har idag, bland vilka 233 00:12:49,320 --> 00:12:50,780 finns ett antal frågor. 234 00:12:50,780 --> 00:12:54,290 Det har varit en vision av vår för en tid nu att införa ett nytt betygssystem 235 00:12:54,290 --> 00:12:57,010 Alternativet till denna kurs - nämligen, SAT / UNSAT. 236 00:12:57,010 --> 00:13:01,930 Filosofiskt för mig, är det mycket mycket, mycket viktigt att 237 00:13:01,930 --> 00:13:05,050 elever i denna klass ingrepp med material, ifrågasättas av 238 00:13:05,050 --> 00:13:09,800 material, och oroa dig långt, långt mindre om mekaniken i verkliga poängen 239 00:13:09,800 --> 00:13:12,590 och bokstavsbetyg vid terminens slut, men verkligen omfamna 240 00:13:12,590 --> 00:13:13,970 kursen och dess material. 241 00:13:13,970 --> 00:13:18,140 Och verkligen detta känns, mer allmänt, för vad som är intressant för dem, att 242 00:13:18,140 --> 00:13:21,390 känner sig utmanade och belönas, men utan rädsla för att misslyckas. 243 00:13:21,390 --> 00:13:25,030 >> Och faktiskt, är detta också en återkommande Temat i denna och andra inledande 244 00:13:25,030 --> 00:13:28,680 kurser inom andra områden, som du har denna bävan när det kommer till 245 00:13:28,680 --> 00:13:31,040 sätta sina tår i okänt vatten. 246 00:13:31,040 --> 00:13:34,880 Jag själv, redan 1995, var en freshman. 247 00:13:34,880 --> 00:13:37,990 Jag var väldigt fokuserad på att vara en Gov koncentrator här. 248 00:13:37,990 --> 00:13:41,060 Och ändå skulle jag alltid växt upp med en bit av ett intresse för datavetenskap. 249 00:13:41,060 --> 00:13:42,180 Jag var alltid nyfiken. 250 00:13:42,180 --> 00:13:47,610 >> Men då, även hade jag denna rädsla för ens sätta foten i CS50, så mycket 251 00:13:47,610 --> 00:13:49,420 så att jag inte ens handla det första år. 252 00:13:49,420 --> 00:13:53,460 Och den enda anledningen till att jag sätter en fot i Dörren andraårsstuderandeår var eftersom jag 253 00:13:53,460 --> 00:13:55,340 fick ta den godkänd / underkänd. 254 00:13:55,340 --> 00:13:58,920 Men även godkänt / underkänt krävs att jag får upp modet att boka tid 255 00:13:58,920 --> 00:14:01,970 med professor Kernehan på tiden, föra detta stora pappersark, och be 256 00:14:01,970 --> 00:14:04,470 honom för hans namnteckning och tillåtelse att utforska 257 00:14:04,470 --> 00:14:05,700 dessa obekanta vatten. 258 00:14:05,700 --> 00:14:09,030 >> Och det har inte hjälpt de senaste åren att när du gör detta i CS50, när vi 259 00:14:09,030 --> 00:14:12,500 brukade vara godkänt / underkänt, på liknande sätt skulle tiotals eller hundratals dina klasskamrater 260 00:14:12,500 --> 00:14:15,970 måste komma upp, Gud förbjude, vid framför Sanders med denna form, som 261 00:14:15,970 --> 00:14:19,520 i vissa sinnen representerar en oförmåga, Jag vågar påstå, att utföra 262 00:14:19,520 --> 00:14:20,800 är dina kamrater nivå. 263 00:14:20,800 --> 00:14:23,410 Vilket är löjligt, men jag tror finns det där mentalitet. 264 00:14:23,410 --> 00:14:27,210 Och det har aldrig varit i denna kultur av SAT / UNSAT eller godkänd / underkänd mer 265 00:14:27,210 --> 00:14:30,610 allmänhet, i denna kurs, eller egentligen på detta campus. 266 00:14:30,610 --> 00:14:32,310 >> Så i år har vi ändrat det. 267 00:14:32,310 --> 00:14:35,630 Jag skulle vara överlycklig hälften av denna klass eller fler avslutade 268 00:14:35,630 --> 00:14:38,700 upp att ta CS50 SAT / UNSAT. 269 00:14:38,700 --> 00:14:42,130 Under ett års tid, skulle det vara underbart om nästan alla är. 270 00:14:42,130 --> 00:14:44,410 Därefter kanske vi ska arbeta på bokstavsbetyg vid Harvard 271 00:14:44,410 --> 00:14:45,480 College mer generellt. 272 00:14:45,480 --> 00:14:48,900 Men för nu, vi gör detta inom vårt egen sfär, och jag vill varmt 273 00:14:48,900 --> 00:14:53,400 uppmanar dig att granska dessa frågor och ställa frågor som du tycker passar, så att 274 00:14:53,400 --> 00:14:58,000 Förhoppningsvis har du, till skillnad från mig, kommer inte riktigt har samma rädsla faktor när 275 00:14:58,000 --> 00:15:01,040 utforska vad som är nog en obekant plats. 276 00:15:01,040 --> 00:15:02,786 >> Så vad är CS50? 277 00:15:02,786 --> 00:15:06,150 Det är en introduktion till intellektuella företag av dator 278 00:15:06,150 --> 00:15:07,700 vetenskap och konsten att programmeringen. 279 00:15:07,700 --> 00:15:08,770 Men vad betyder det egentligen? 280 00:15:08,770 --> 00:15:12,510 >> Tja, hittills, vi pratade mycket kortfattat om motsvarande information. 281 00:15:12,510 --> 00:15:15,070 Men anta att vi faktiskt vill att göra något med det. 282 00:15:15,070 --> 00:15:17,890 Vi måste införa begreppet vad vi kallar en algoritm. 283 00:15:17,890 --> 00:15:21,540 En algoritm är ett förfarande, en process, en uppsättning instruktioner för 284 00:15:21,540 --> 00:15:22,780 göra något. 285 00:15:22,780 --> 00:15:25,620 >> Och en algoritm kan vara något super enkelt. 286 00:15:25,620 --> 00:15:28,660 Till exempel kan ett exempel med vilka vissa av er kanske känner är här 287 00:15:28,660 --> 00:15:29,350 sak här. 288 00:15:29,350 --> 00:15:32,510 Så denna bok här är allt daterat, men en gång i tiden, det 289 00:15:32,510 --> 00:15:34,720 innehöll en hel del namn och telefonnummer. 290 00:15:34,720 --> 00:15:37,710 Och faktiskt, om jag ville hitta någon i denna telefonbok - 291 00:15:37,710 --> 00:15:39,800 säga, någon som heter Mike Smith - 292 00:15:39,800 --> 00:15:43,810 Jag kunde hitta Mike Smith i valfritt antal av ganska enkla sätt. 293 00:15:43,810 --> 00:15:47,700 Jag kunde börja från början och gå vidare till sida 1, inte där. 294 00:15:47,700 --> 00:15:49,240 Sidan 2, inte där. 295 00:15:49,240 --> 00:15:49,960 Page 3. 296 00:15:49,960 --> 00:15:53,430 Är det algoritm, är att processen, korrekt? 297 00:15:53,430 --> 00:15:54,620 >> Så det är rätt, eller hur? 298 00:15:54,620 --> 00:15:58,070 Jag är typ av en idiot för att göra det i detta sätt, men så småningom kommer jag 299 00:15:58,070 --> 00:16:02,670 hitta efternamnet S, och förhoppningsvis Mike är i detta avsnitt, och jag kommer att bli 300 00:16:02,670 --> 00:16:04,100 gjort med min algoritm. 301 00:16:04,100 --> 00:16:05,440 Men säkert är det inte intuitivt. 302 00:16:05,440 --> 00:16:08,020 Mest varje rimlig människa i detta rum skulle inte ha gjort det. 303 00:16:08,020 --> 00:16:10,180 Vad skulle du ha gjort? 304 00:16:10,180 --> 00:16:11,480 >> Du skulle ha gått rakt till mitten, höger? 305 00:16:11,480 --> 00:16:12,000 Ungefär i mitten. 306 00:16:12,000 --> 00:16:16,310 Och du inser, åh, dessa är Ms Så Mike Smith, efternamn som Smith, 307 00:16:16,310 --> 00:16:19,050 är inte helt klart, sedan i vänstra halvan av boken. 308 00:16:19,050 --> 00:16:21,040 Han måste ligga mot S finns i höger. 309 00:16:21,040 --> 00:16:24,090 Och på denna punkt, även om de flesta av oss gör inte detta i verkligheten, kan vi 310 00:16:24,090 --> 00:16:27,125 bokstavligen riva detta problem i hälften. 311 00:16:27,125 --> 00:16:27,640 >> [Jublar och applåder] 312 00:16:27,640 --> 00:16:28,950 >> DAVID MALAN: Tack. 313 00:16:28,950 --> 00:16:30,150 >> [Jublar och applåder] 314 00:16:30,150 --> 00:16:34,660 >> DAVID MALAN: Du kan bokstavligen riva denna problem i hälften, lämnar mig med, 315 00:16:34,660 --> 00:16:36,120 bokstavligen, ett problem hälften så stor. 316 00:16:36,120 --> 00:16:39,750 Så om detta telefonbok var - och det förmodligen var - ungefär 1.000 sidor, nu 317 00:16:39,750 --> 00:16:40,840 det är bara 500. 318 00:16:40,840 --> 00:16:44,710 Om jag gör det igen, och jag inser, åh, fan, jag gick för långt, jag är i Ts 319 00:16:44,710 --> 00:16:46,480 avsnitt, kan jag på samma sätt - 320 00:16:46,480 --> 00:16:48,030 bildligt eller bokstavligt - 321 00:16:48,030 --> 00:16:50,260 rippa telefonboken - det var faktiskt mycket lättare då. 322 00:16:50,260 --> 00:16:53,610 Jag kan bokstavligen slita telefonboken på mitten, lämnar mig nu med 323 00:16:53,610 --> 00:16:55,186 inte 1000, inte 500 - 324 00:16:55,186 --> 00:16:56,680 250 sidor. 325 00:16:56,680 --> 00:17:00,210 Och jag kan gå 125, och hälften av detta, och hälften av det, och hälften av denna, 326 00:17:00,210 --> 00:17:04,760 tills jag slutligen ska lämnas med bara en enda sida. 327 00:17:04,760 --> 00:17:06,430 >> [SKRATT] 328 00:17:06,430 --> 00:17:07,589 >> DAVID MALAN: Det är del jag misslyckas på. 329 00:17:07,589 --> 00:17:10,400 En enda sida där Mike är förhoppningsvis. 330 00:17:10,400 --> 00:17:14,630 Nu dessa olika algoritmer kan vara sorts bedömda eller utvärderade i 331 00:17:14,630 --> 00:17:15,270 olika sätt. 332 00:17:15,270 --> 00:17:17,300 Den första var väldigt linjär, rätt? 333 00:17:17,300 --> 00:17:18,500 Vänd sida, leta efter Mike. 334 00:17:18,500 --> 00:17:19,630 Vänd sida, leta efter Mike. 335 00:17:19,630 --> 00:17:20,560 Det är väldigt linjärt. 336 00:17:20,560 --> 00:17:23,339 Om det finns ytterligare en sida i telefonen bok, det kommer nog att ta mig 337 00:17:23,339 --> 00:17:27,380 en sekund till, en enhet av tid, men vi beräknar tiden. 338 00:17:27,380 --> 00:17:32,470 >> Så jag kan dra så här denna linje här, varigenom som storleken på den 339 00:17:32,470 --> 00:17:34,700 problemet ökar från vänster till höger - 340 00:17:34,700 --> 00:17:37,480 telefonboken blir mindre till större - 341 00:17:37,480 --> 00:17:41,080 och tiden kommer att öka på den vertikala axeln, desto större 342 00:17:41,080 --> 00:17:42,030 telefonboken är. 343 00:17:42,030 --> 00:17:46,180 Så n är bara en allmän variabel som datavetare använder för att representera 344 00:17:46,180 --> 00:17:48,210 visst värde, vissa nummer. 345 00:17:48,210 --> 00:17:50,740 Så n kommer att öka linjärt. 346 00:17:50,740 --> 00:17:53,040 Fördubbla storleken på telefonboken, är det kommer att ta mig dubbelt så mycket 347 00:17:53,040 --> 00:17:54,780 tid, mest troligt, att hitta Mike. 348 00:17:54,780 --> 00:17:56,390 >> Nu kunde jag ha varit smarta om det här, eller hur? 349 00:17:56,390 --> 00:17:57,800 Jag började bli uttråkad snabbt. 350 00:17:57,800 --> 00:17:58,910 Kunde ha gjort detta genom tvåor. 351 00:17:58,910 --> 00:18:01,870 Så två sidor, sedan fyra, sedan sex, sedan åtta. 352 00:18:01,870 --> 00:18:05,220 Och jag kunde börja flyga igenom det en lite snabbare, om än med mindre risk för 353 00:18:05,220 --> 00:18:09,210 överskridande Mike, men denna kurva är inte kommer att bli så annorlunda. 354 00:18:09,210 --> 00:18:12,550 Det kommer fortfarande att vara en rak linje, men något snabbare. 355 00:18:12,550 --> 00:18:13,710 >> Men vad gjorde jag? 356 00:18:13,710 --> 00:18:15,845 Jag gjorde faktiskt något fundamentalt bättre. 357 00:18:15,845 --> 00:18:21,990 Jag uppnådde vad vi kallar logaritmisk tid, log n, varvid denna gröna 358 00:18:21,990 --> 00:18:27,730 linje har en mycket, mycket, mycket mindre rak kant till den. 359 00:18:27,730 --> 00:18:33,050 Och snarare antyder det, eftersom det sorterar av närmar sig oändligheten någonsin så småningom, 360 00:18:33,050 --> 00:18:36,700 att jag faktiskt kunde ta en 1.000-sida telefonbok, fördubbla sin storlek 361 00:18:36,700 --> 00:18:39,610 nästa år - eftersom antar en hel fler människor flyttar in till stan. 362 00:18:39,610 --> 00:18:43,250 >> Så nu har jag 2.000 sidor, men hur många fler steg är att smartare 363 00:18:43,250 --> 00:18:45,200 algoritm kommer att ta? 364 00:18:45,200 --> 00:18:46,060 Bara en. 365 00:18:46,060 --> 00:18:48,060 Jag menar, det är en mäktig sak. 366 00:18:48,060 --> 00:18:51,400 Om vi ​​går till 4.000 sidor nästa år, som kommer att ta mig 367 00:18:51,400 --> 00:18:53,020 bara två steg. 368 00:18:53,020 --> 00:18:56,500 Så du kan kasta större och större problem på mig, inte olikt banan är 369 00:18:56,500 --> 00:18:59,560 kasta allt större problem varje dag på Googles och Facebooks av 370 00:18:59,560 --> 00:19:01,590 världen, och det är inte en så stor sak. 371 00:19:01,590 --> 00:19:05,840 Eftersom jag lägga mer tanke och omsorg i min algoritm som att lösa 372 00:19:05,840 --> 00:19:07,020 problemen snabbt och effektivt. 373 00:19:07,020 --> 00:19:09,260 >> Och faktiskt, kommer att bli en av målen för denna kurs. 374 00:19:09,260 --> 00:19:11,230 Du kommer, längs vägen, lära sig att programmera. 375 00:19:11,230 --> 00:19:13,360 Du får lära dig att programmera in valfritt antal språk. 376 00:19:13,360 --> 00:19:16,670 Men i slutet av dagen, är kursen om att lösa problem och att få 377 00:19:16,670 --> 00:19:20,490 bättre på att lösa problem - och, som i fall som detta, lösa problem 378 00:19:20,490 --> 00:19:22,030 mer effektivt. 379 00:19:22,030 --> 00:19:23,990 >> Nu så här långt, har vi gjort det här ganska intuitivt. 380 00:19:23,990 --> 00:19:27,420 Låt oss införa något rättvist generiskt kallas pseudokod. 381 00:19:27,420 --> 00:19:29,150 Så vi ska så småningom komma, i denna kurs, till 382 00:19:29,150 --> 00:19:30,570 olika programmeringsspråk. 383 00:19:30,570 --> 00:19:34,280 Men idag ska vi göra det på engelska-liknande syntax, där du bara typ av säg 384 00:19:34,280 --> 00:19:37,330 vad du menar, men du är aldrig så koncis och du inte oroa 385 00:19:37,330 --> 00:19:38,960 grammatik och fullständiga meningar. 386 00:19:38,960 --> 00:19:41,600 Du uttrycker precis själv som kortfattat som möjligt. 387 00:19:41,600 --> 00:19:45,400 >> Så pseudokod är engelska-liknande syntax som representerar 388 00:19:45,400 --> 00:19:46,750 ett programmeringsspråk. 389 00:19:46,750 --> 00:19:51,170 Och mot detta syfte, låt mig föreslå att Vi modellerar nu den process vi just 390 00:19:51,170 --> 00:19:54,990 beskrivs att räkna något lite annorlunda, den här gången med en 391 00:19:54,990 --> 00:19:59,040 titta på detta producerade fem-minuters video av våra vänner på TED som 392 00:19:59,040 --> 00:20:03,170 definierar vad pseudokod är, definierar vad algoritmisk tänkande är, och även 393 00:20:03,170 --> 00:20:07,030 Även om exemplet du ska se är, i sig själv, super enkelt, det är 394 00:20:07,030 --> 00:20:09,820 kommer att börja ge oss den mentala modell, vokabulären, som att 395 00:20:09,820 --> 00:20:14,588 göra mycket, mycket mer komplex algoritmer ganska snabbt. 396 00:20:14,588 --> 00:20:15,576 >> [BEGIN VIDEOAVSPELNING] 397 00:20:15,576 --> 00:20:29,920 >> [Musik Spela] 398 00:20:29,920 --> 00:20:31,100 >> Berättare: Vad är en algoritm? 399 00:20:31,100 --> 00:20:34,730 I datavetenskap är en algoritm en uppsättning instruktioner för att lösa vissa 400 00:20:34,730 --> 00:20:36,620 problem steg för steg. 401 00:20:36,620 --> 00:20:39,650 Typiskt är algoritmer exekveras av datorer, men vi människor har 402 00:20:39,650 --> 00:20:41,230 algoritmer, liksom. 403 00:20:41,230 --> 00:20:43,290 Till exempel, hur skulle du gå om att räkna antalet 404 00:20:43,290 --> 00:20:44,750 av personer i ett rum? 405 00:20:44,750 --> 00:20:47,980 Tja, om du är som jag, skulle du förmodligen punkt vid varje person, en vid 406 00:20:47,980 --> 00:20:50,120 en gång, och räknar upp från 0. 407 00:20:50,120 --> 00:20:52,970 1, 2, 3, 4, och så vidare. 408 00:20:52,970 --> 00:20:54,140 >> Tja, det är en algoritm. 409 00:20:54,140 --> 00:20:57,600 I själva verket, låt oss försöka uttrycka det en lite mer formellt i pseudokod - 410 00:20:57,600 --> 00:21:00,700 Engelsk-liknande syntax som liknar ett programmeringsspråk. 411 00:21:00,700 --> 00:21:02,580 Låt N är lika med 0. 412 00:21:02,580 --> 00:21:06,970 För varje person i rummet, ställ N till N plus ett. 413 00:21:06,970 --> 00:21:08,400 >> Hur man ska tolka denna pseudokod? 414 00:21:08,400 --> 00:21:12,840 Tja, linje ett förklarar, så att säga, en variabel som heter N och initierar 415 00:21:12,840 --> 00:21:14,250 dess värde till 0. 416 00:21:14,250 --> 00:21:17,550 Det betyder bara att i början av vår algoritm, den saken som 417 00:21:17,550 --> 00:21:19,650 rknar har ett värde av 0. 418 00:21:19,650 --> 00:21:22,620 Efter allt, innan vi börjar räkna, Vi har inte räknat något ännu. 419 00:21:22,620 --> 00:21:25,340 Kalla denna variabel N är bara en konvention. 420 00:21:25,340 --> 00:21:26,890 Jag kunde ha kallat det mesta någonting. 421 00:21:26,890 --> 00:21:30,560 >> Nu line två avgränsar början på en loop, en sekvens av steg som 422 00:21:30,560 --> 00:21:32,310 upprepa några antal gånger. 423 00:21:32,310 --> 00:21:35,910 Så i vårt exempel, det steg vi tar räknar människor i rummet. 424 00:21:35,910 --> 00:21:38,730 Under ledning två är linje tre, som beskriver exakt hur 425 00:21:38,730 --> 00:21:40,160 vi ska gå om att räkna. 426 00:21:40,160 --> 00:21:43,440 Fördjupningen innebär att det är Rad tre som kommer att upprepa. 427 00:21:43,440 --> 00:21:47,380 >> Så vad pseudokoden säger är att efter början på 0, för varje 428 00:21:47,380 --> 00:21:50,690 person i rummet, vi öka N med 1. 429 00:21:50,690 --> 00:21:53,050 Nu är den här algoritmen korrekt? 430 00:21:53,050 --> 00:21:54,580 Nåväl, låt oss bang på det lite. 431 00:21:54,580 --> 00:21:57,270 Fungerar det om det finns två personer i rummet? 432 00:21:57,270 --> 00:21:58,170 Låt oss se. 433 00:21:58,170 --> 00:22:00,260 >> I linje ett, initiera vi N till 0. 434 00:22:00,260 --> 00:22:03,660 För var och en av dessa två personer, vi öka då N med 1. 435 00:22:03,660 --> 00:22:07,310 Så på den första resan genom loop, uppdaterar vi N från 0 till 1. 436 00:22:07,310 --> 00:22:11,070 Den andra resan genom samma loop, uppdaterar vi N från 1 till 2. 437 00:22:11,070 --> 00:22:15,780 Och så genom denna algoritm slut, n är 2, som passar faktiskt antalet 438 00:22:15,780 --> 00:22:16,700 personer i rummet. 439 00:22:16,700 --> 00:22:17,760 >> Så långt är allt väl. 440 00:22:17,760 --> 00:22:19,610 Vad sägs om ett hörn fall, men? 441 00:22:19,610 --> 00:22:22,590 Antag att det finns 0 personer i rummet - förutom mig, 442 00:22:22,590 --> 00:22:24,170 vem som gör rösträkningen. 443 00:22:24,170 --> 00:22:27,150 I linje ett, initiera vi N till 0. 444 00:22:27,150 --> 00:22:30,280 Men den här gången, inte linje tre inte exekvera alls eftersom det inte finns en 445 00:22:30,280 --> 00:22:31,370 personen i rummet. 446 00:22:31,370 --> 00:22:35,260 Och så N är 0, vilket motsvarar Antalet personer i rummet. 447 00:22:35,260 --> 00:22:36,420 Ganska enkelt, eller hur? 448 00:22:36,420 --> 00:22:39,630 >> Men räknar människor en i taget är ganska ineffektivt, också, nej? 449 00:22:39,630 --> 00:22:40,920 Visst vi kan göra bättre. 450 00:22:40,920 --> 00:22:43,120 Varför inte räkna två personer på en gång? 451 00:22:43,120 --> 00:22:49,300 Istället för att räkna 1, 2, 3, 4, 5, 6, 7, 8, och så vidare, varför inte räkna, 2, 452 00:22:49,300 --> 00:22:51,460 4, 6, 8, och så vidare? 453 00:22:51,460 --> 00:22:53,700 Det låter ännu snabbare, och det är säkert. 454 00:22:53,700 --> 00:22:56,240 >> Låt oss uttrycka denna optimering i pseudokod. 455 00:22:56,240 --> 00:22:57,800 Låt N är lika med 0. 456 00:22:57,800 --> 00:23:02,450 För varje par av människor i rummet, ställa N lika med N plus 2. 457 00:23:02,450 --> 00:23:04,120 Ganska enkel förändring, eller hur? 458 00:23:04,120 --> 00:23:06,750 Snarare än räkna människor en vid en tidpunkt, räknar vi istället 459 00:23:06,750 --> 00:23:08,300 dem två åt gången. 460 00:23:08,300 --> 00:23:10,980 Denna algoritm är alltså dubbelt lika snabbt som den sista. 461 00:23:10,980 --> 00:23:12,180 >> Men är det korrekt? 462 00:23:12,180 --> 00:23:12,920 Låt oss se. 463 00:23:12,920 --> 00:23:15,330 Fungerar det om det finns två personer i rummet? 464 00:23:15,330 --> 00:23:17,550 I linje ett, initiera vi N till 0. 465 00:23:17,550 --> 00:23:20,920 För att ett par personer, vi öka då N med två. 466 00:23:20,920 --> 00:23:24,860 Och så genom denna algoritm slut, är N 2, som passar faktiskt antalet 467 00:23:24,860 --> 00:23:25,650 personer i rummet. 468 00:23:25,650 --> 00:23:28,250 >> Antag därefter att det finns 0 personer i rummet. 469 00:23:28,250 --> 00:23:30,840 I linje ett, initiera vi N till 0. 470 00:23:30,840 --> 00:23:34,330 Som tidigare, inte köra linje tre inte alls, eftersom det inte finns några par 471 00:23:34,330 --> 00:23:35,380 av människor i rummet. 472 00:23:35,380 --> 00:23:38,350 Och så N är 0, vilket faktiskt stämmer med antalet 473 00:23:38,350 --> 00:23:39,570 personer i rummet. 474 00:23:39,570 --> 00:23:42,280 >> Men tänk om det finns tre människor i rummet? 475 00:23:42,280 --> 00:23:44,130 Hur fungerar denna algoritm biljettpriset? 476 00:23:44,130 --> 00:23:44,990 Låt oss se. 477 00:23:44,990 --> 00:23:47,460 I linje ett, initiera vi N till 0. 478 00:23:47,460 --> 00:23:50,870 För ett par av dessa människor, vi öka då N med 2. 479 00:23:50,870 --> 00:23:51,800 Men sen då? 480 00:23:51,800 --> 00:23:54,960 Det finns inte en annan fullständig par människor i rummet, så att linje två nej 481 00:23:54,960 --> 00:23:56,180 längre gäller. 482 00:23:56,180 --> 00:24:00,530 Och så av denna algoritm slut, N är fortfarande 2, vilket inte är korrekt. 483 00:24:00,530 --> 00:24:03,810 >> I själva verket är denna algoritm sägs vara buggy, eftersom det har ett misstag. 484 00:24:03,810 --> 00:24:05,820 Låter upprättelse med några nya pseudokod. 485 00:24:05,820 --> 00:24:09,670 Låt n är lika med 0 för varje par människor i rummet. 486 00:24:09,670 --> 00:24:12,550 Ställ N till N plus 2. 487 00:24:12,550 --> 00:24:17,140 Om en person fortfarande oparade, ställa N lika med N plus ett. 488 00:24:17,140 --> 00:24:20,140 För att lösa detta problem, har vi infördes, i linje fyra, en 489 00:24:20,140 --> 00:24:24,520 tillstånd, annars känd som en filial som körs bara om det finns en 490 00:24:24,520 --> 00:24:26,640 person som vi inte kunde par med en annan. 491 00:24:26,640 --> 00:24:30,440 Och så nu, om det är en eller tre eller varje udda antal människor i 492 00:24:30,440 --> 00:24:33,290 rummet, denna algoritm kommer nu att räkna dem. 493 00:24:33,290 --> 00:24:34,560 >> Kan vi göra ännu bättre? 494 00:24:34,560 --> 00:24:38,820 Tja, kunde vi räkna in 3s eller 4s eller ens 5s och 10s, men utöver det, är det 495 00:24:38,820 --> 00:24:41,360 kommer att få en liten bit svårt att peka. 496 00:24:41,360 --> 00:24:44,660 Vid slutet av dagen, oavsett om det av datorer eller människor, 497 00:24:44,660 --> 00:24:46,750 algoritmer är bara en uppsättning av instruktioner med 498 00:24:46,750 --> 00:24:48,290 som att lösa problem. 499 00:24:48,290 --> 00:24:49,792 Dessa var bara tre. 500 00:24:49,792 --> 00:24:52,404 Vilka problem skulle du lösa med en algoritm? 501 00:24:52,404 --> 00:24:52,901 >> [END VIDEOAVSPELNING] 502 00:24:52,901 --> 00:24:55,883 >> DAVID MALAN: Det är den enda gången Jag kommer att visas i tecknad bildar. 503 00:24:55,883 --> 00:25:01,050 Men var den historien tar slut, nu, hur kan vi göra bättre? 504 00:25:01,050 --> 00:25:04,680 Treor och fyror, vi hävdar, att vi kan räkna människor mycket snabbare, men det kan vi 505 00:25:04,680 --> 00:25:06,290 gör grunden bättre än så? 506 00:25:06,290 --> 00:25:07,540 Och jag satsar vi kan. 507 00:25:07,540 --> 00:25:11,980 >> Om vi ​​inför lite av vår egen pseudokod här, kommer jag att föreslå 508 00:25:11,980 --> 00:25:14,550 att vi kan åstadkomma en rad som denna. 509 00:25:14,550 --> 00:25:17,280 Vi kommer inte att räkna människor ett, två, tre, fyra. 510 00:25:17,280 --> 00:25:19,470 Vi kommer inte att gå två, fyra, sex, åtta. 511 00:25:19,470 --> 00:25:23,390 Vi kommer att göra fundamentalt bättre genom att ändra på problemet, och i detta 512 00:25:23,390 --> 00:25:27,080 fall utnyttja en annars underutnyttjad resurs. 513 00:25:27,080 --> 00:25:31,460 >> På bara ett ögonblick, jag hoppas att du ska förlåta och humor oss genom att stå upp i 514 00:25:31,460 --> 00:25:34,470 plats, då vi kommer att ber var och en av er att ta på i din 515 00:25:34,470 --> 00:25:36,400 sinnen numret 1. 516 00:25:36,400 --> 00:25:39,560 Du sedan gå till allt olyckligt, eftersom tiden går, hitta 517 00:25:39,560 --> 00:25:42,740 någon annan som står, kombinera dina siffror tillsammans 518 00:25:42,740 --> 00:25:43,720 genom att lägga upp dem. 519 00:25:43,720 --> 00:25:47,490 En av er sedan kommer att tävla för att sitta ner först, och den andra personen 520 00:25:47,490 --> 00:25:48,880 kommer att upprepa. 521 00:25:48,880 --> 00:25:53,090 >> Så med andra ord, genom ympning alla du med nummer 1, och därefter 522 00:25:53,090 --> 00:25:57,800 kombinera dem 1s i 2s och dessa 2s till 4s, med alla allt 523 00:25:57,800 --> 00:26:02,740 sitter ned, bör vi, vid slutet av denna algoritm, har bara ett lån 524 00:26:02,740 --> 00:26:07,570 själ som inte sitta ner tillräckligt snabbt men som har hela publik räkna 525 00:26:07,570 --> 00:26:09,180 i hans eller hennes sinne. 526 00:26:09,180 --> 00:26:13,730 >> Så om ni vill, låt oss gå vidare och - steg ett - stå upp på plats. 527 00:26:13,730 --> 00:26:15,600 Och köra. 528 00:26:15,600 --> 00:26:36,580 >> [Publiken sorlande] 529 00:26:36,580 --> 00:26:38,820 >> DAVID MALAN: Vet du där Lauren är? 530 00:26:38,820 --> 00:26:40,179 729? 531 00:26:40,179 --> 00:27:23,350 >> [Publiken sorlande] 532 00:27:23,350 --> 00:27:24,340 >> DAVID MALAN: Okej? 533 00:27:24,340 --> 00:27:39,110 >> [Publiken sorlande] 534 00:27:39,110 --> 00:27:41,365 >> DAVID MALAN: Okej, ska vi vara närmar sig slutet. 535 00:27:41,365 --> 00:27:44,340 536 00:27:44,340 --> 00:27:47,670 Vi ser en karl står här fortfarande. 537 00:27:47,670 --> 00:27:48,770 Vem behöver annat att paras ihop? 538 00:27:48,770 --> 00:27:50,020 Om ni vill para sig. 539 00:27:50,020 --> 00:27:53,260 540 00:27:53,260 --> 00:27:56,520 Någon där uppe. 541 00:27:56,520 --> 00:27:58,150 Varför inte jag låna ut en hand här. 542 00:27:58,150 --> 00:28:01,370 För de mycket få människor som fortfarande stående, vilka nummer gör du 543 00:28:01,370 --> 00:28:02,790 har i ditt sinne? 544 00:28:02,790 --> 00:28:04,020 >> STUDENT: 78. 545 00:28:04,020 --> 00:28:06,010 >> DAVID MALAN: 78 plus - 546 00:28:06,010 --> 00:28:07,840 vem står här nere? 547 00:28:07,840 --> 00:28:08,370 >> STUDENTEN 39. 548 00:28:08,370 --> 00:28:09,590 >> DAVID MALAN: Plus 39. 549 00:28:09,590 --> 00:28:12,310 Plus vem står fortfarande? 550 00:28:12,310 --> 00:28:13,650 81? 551 00:28:13,650 --> 00:28:15,960 OK, vem annars? 552 00:28:15,960 --> 00:28:17,200 En annan 81? 553 00:28:17,200 --> 00:28:17,860 Wow. 554 00:28:17,860 --> 00:28:19,210 Och vad är i ryggen? 555 00:28:19,210 --> 00:28:20,360 >> STUDENT: 49. 556 00:28:20,360 --> 00:28:21,812 >> DAVID MALAN: 49, plus? 557 00:28:21,812 --> 00:28:22,950 >> STUDENT: 98. 558 00:28:22,950 --> 00:28:24,980 >> DAVID MALAN: 98 plus? 559 00:28:24,980 --> 00:28:28,190 Är det någon annan? 560 00:28:28,190 --> 00:28:29,155 12? 561 00:28:29,155 --> 00:28:30,460 Bra jobbat. 562 00:28:30,460 --> 00:28:33,610 >> [SKRATT] 563 00:28:33,610 --> 00:28:34,690 >> DAVID MALAN: Åh, 112 - 564 00:28:34,690 --> 00:28:35,410 oh. 565 00:28:35,410 --> 00:28:36,220 Bra jobbat! 566 00:28:36,220 --> 00:28:38,660 >> [SKRATT] 567 00:28:38,660 --> 00:28:42,570 >> [Applåder] 568 00:28:42,570 --> 00:28:43,820 >> DAVID MALAN: Någon annan kvar? 569 00:28:43,820 --> 00:28:46,710 570 00:28:46,710 --> 00:28:47,260 Förlåt? 571 00:28:47,260 --> 00:28:48,110 >> STUDENT: 99. 572 00:28:48,110 --> 00:28:49,810 >> DAVID MALAN: 99. 573 00:28:49,810 --> 00:28:52,620 Någon annan står stilla? 574 00:28:52,620 --> 00:28:57,290 Och det totala antalet studenter här är faktiskt, enligt - 575 00:28:57,290 --> 00:28:59,400 har du ett nummer? 576 00:28:59,400 --> 00:29:03,170 Åh, det faktiska antalet personer i rum, enligt det konto som 577 00:29:03,170 --> 00:29:07,660 undervisningen kamrater gjorde på allas sätt, var 729. 578 00:29:07,660 --> 00:29:11,070 Så ur ett rum fullt av Harvard studenter som räknade sig själva, 579 00:29:11,070 --> 00:29:14,126 Svaret är 637. 580 00:29:14,126 --> 00:29:15,480 >> [SKRATT] 581 00:29:15,480 --> 00:29:16,350 >> DAVID MALAN: Så nära. 582 00:29:16,350 --> 00:29:17,360 Men ändå. 583 00:29:17,360 --> 00:29:22,110 OK, är så att en undervisning ögonblick, eller hur? 584 00:29:22,110 --> 00:29:24,120 Detta är nu vad vi beskriver som en bugg. 585 00:29:24,120 --> 00:29:28,120 Någonstans på vägen, gjorde vi några aritmetiska fel, eller någon satt sig ned, 586 00:29:28,120 --> 00:29:29,930 eller vänster, eller något gick fel. 587 00:29:29,930 --> 00:29:30,930 Men det är bra. 588 00:29:30,930 --> 00:29:33,390 Eftersom även fortfarande, vi fick ganska nära. 589 00:29:33,390 --> 00:29:37,480 Och jag skulle hävda att vi fick fel svarar mycket snabbare än jag skulle ha 590 00:29:37,480 --> 00:29:39,770 använda min mer linjära metoden. 591 00:29:39,770 --> 00:29:42,630 >> Så låt oss anta att vi fick faktiskt komma att korrigera, men tänk nu på vad 592 00:29:42,630 --> 00:29:46,870 hände varje gång, jämfört med min egen naiva pekar algoritm. 593 00:29:46,870 --> 00:29:48,420 Ett, två, tre. 594 00:29:48,420 --> 00:29:53,010 Om det finns faktiskt 729 eller 637 personer Här skulle det ha tagit mig 595 00:29:53,010 --> 00:29:57,720 bokstavligen 637 eller 729 Pointings hos fingret och 596 00:29:57,720 --> 00:29:59,490 uppräkning min totala räkningen. 597 00:29:59,490 --> 00:30:01,910 Och jag kunde göra lite bättre genom kommer två, fyra, sex, åtta, och 598 00:30:01,910 --> 00:30:05,660 dubbla den hastigheten, kanske till och med tredubbla eller fyrdubbla, beroende på hur väl jag kan 599 00:30:05,660 --> 00:30:07,110 gör att räkna i huvudet. 600 00:30:07,110 --> 00:30:10,720 >> Men detta synsätt som ni tog var fundamentalt annorlunda. 601 00:30:10,720 --> 00:30:12,770 Eftersom i början, ni alla stod upp. 602 00:30:12,770 --> 00:30:14,620 Så alla 729. 603 00:30:14,620 --> 00:30:17,370 Och sedan bokstavligen halva av er satt. 604 00:30:17,370 --> 00:30:19,720 Och efter det, en annan hälften av er satte sig ner. 605 00:30:19,720 --> 00:30:22,650 Och efter det, en annan hälften av er satte sig ner. 606 00:30:22,650 --> 00:30:27,470 >> Och det totala antalet gånger som du killar kunde ha satt ner är ungefär 607 00:30:27,470 --> 00:30:31,740 åtta eller nio eller tio totalt tider, beroende på vad vår totala antal är. 608 00:30:31,740 --> 00:30:33,300 Och vi kan sortera om göra detta på annat sätt. 609 00:30:33,300 --> 00:30:37,740 Om vi ​​hade 1024 personer i rummet, det totala antalet gånger du kan 610 00:30:37,740 --> 00:30:41,870 halvera 1.024 personer är 10. 611 00:30:41,870 --> 00:30:43,370 >> Nu tänker på det i den andra riktningen. 612 00:30:43,370 --> 00:30:49,170 Antag, löjligt, att vi hade, säger fyra miljarder människor i det här rummet, 613 00:30:49,170 --> 00:30:50,860 eller ett något större rum. 614 00:30:50,860 --> 00:30:54,550 Hur många gånger skulle vi ha gått genom denna algoritm, så att halv 615 00:30:54,550 --> 00:30:58,110 av den klassen sätter sig? 616 00:30:58,110 --> 00:31:03,050 Det kommer bara att ta 32 sådana verksamhet, även i en klass av storlek 617 00:31:03,050 --> 00:31:03,770 fyra miljarder. 618 00:31:03,770 --> 00:31:04,055 Varför? 619 00:31:04,055 --> 00:31:06,980 Eftersom fyra miljarder går till två miljarder, går till en miljon, går till 620 00:31:06,980 --> 00:31:09,925 500 miljoner går till 250 miljoner, pricka, pricka, pricka. 621 00:31:09,925 --> 00:31:14,940 Jag kan bara göra denna delning del 32 gånger, vid vilken punkt, alla utom 622 00:31:14,940 --> 00:31:17,820 en person skulle stå kvar. 623 00:31:17,820 --> 00:31:21,590 >> Och det är också en slags kraftfull tanken att allt vi ska försöka 624 00:31:21,590 --> 00:31:24,690 inflytande i den här kursen, och i programmering och datalogi mer 625 00:31:24,690 --> 00:31:29,400 allmänhet, dessa bakterier av en idé med som vi sedan kan lösa problem mycket, 626 00:31:29,400 --> 00:31:31,130 mycket mer kraftfullt. 627 00:31:31,130 --> 00:31:34,610 Så vi började ganska enkelt med den pseudokod och en kille i ett rum, men 628 00:31:34,610 --> 00:31:38,205 nu med ett helt rum fullt av människor har vi gjort fundamentalt bättre. 629 00:31:38,205 --> 00:31:41,460 >> Nåväl, låt oss nu övergången från pseudokod till några faktiska koden. 630 00:31:41,460 --> 00:31:44,200 Detta språk du ska se hända att kallas JavaScript, och 631 00:31:44,200 --> 00:31:46,190 Vi ska återkomma till detta mot terminens slut. 632 00:31:46,190 --> 00:31:49,960 Det är ett programmeringsspråk som du använder för att göra hemsidor och andra sådana 633 00:31:49,960 --> 00:31:51,360 programvara dessa dagar. 634 00:31:51,360 --> 00:31:54,890 Och vi har använt det, tack vare en vän av vårt på Stanford, för att koda 635 00:31:54,890 --> 00:31:56,630 någon dold information här. 636 00:31:56,630 --> 00:31:59,500 Detta är konsten att steganografi, så att säga, där man kan gömma 637 00:31:59,500 --> 00:32:03,990 informationen i vad som annars tycks vara brus eller en helt annan 638 00:32:03,990 --> 00:32:05,220 bild helt och hållet. 639 00:32:05,220 --> 00:32:10,120 Men inbäddad i viss bild är verkligen ett hemligt meddelande av slag. 640 00:32:10,120 --> 00:32:12,950 >> Så låt mig gå vidare och dra upp samma bild här, detta 641 00:32:12,950 --> 00:32:14,270 tid i en webbläsare. 642 00:32:14,270 --> 00:32:17,710 Och jag kommer att vinka min hand på några av detaljerna för i dag, särskilt 643 00:32:17,710 --> 00:32:21,780 för er som det ser ut inte bara JavaScript utan grekiska, som en 644 00:32:21,780 --> 00:32:23,930 helt obekant språk. 645 00:32:23,930 --> 00:32:26,190 Men detta är ett exempel på ett programmeringsspråk. 646 00:32:26,190 --> 00:32:30,660 >> Och för nu, ta på tron ​​att denna första kodrad - 647 00:32:30,660 --> 00:32:32,470 och genom kod, menar jag bara text. 648 00:32:32,470 --> 00:32:35,660 Text som jag bokstavligen kunde ha skrivit i Microsoft Word, om jag hade 649 00:32:35,660 --> 00:32:37,630 rätt programvara för att sedan göra något med det. 650 00:32:37,630 --> 00:32:42,120 Programmering källkod, programmering kod, är egentligen bara text, och det 651 00:32:42,120 --> 00:32:45,420 ser annorlunda baserat på vilket språk du använder, inte olikt engelska och 652 00:32:45,420 --> 00:32:49,200 Spanska och ryska alla ser olika ut när du skriver dem på tangentbordet. 653 00:32:49,200 --> 00:32:53,520 >> Så denna första raden, för nu tar på tro, bara öppnar en bild från 654 00:32:53,520 --> 00:32:56,160 internet, att bullriga grafiskt vi såg bara. 655 00:32:56,160 --> 00:32:59,900 Denna nästa linje är här ett exempel på en loop, och vi såg faktiskt samma 656 00:32:59,900 --> 00:33:01,130 jargong i TED-video. 657 00:33:01,130 --> 00:33:03,750 En slinga är något som händer igen och igen, och även om detta 658 00:33:03,750 --> 00:33:08,440 absolut ser kryptisk, med nyckelordet för, och några parenteser, och 659 00:33:08,440 --> 00:33:09,510 vissa semikolon. 660 00:33:09,510 --> 00:33:13,070 Vi ska återkomma till detta inom kort, men att slinga det i huvudsak är 661 00:33:13,070 --> 00:33:17,310 träffande programmet, iterera över alla av dessa bullriga prickar, från vänster till 662 00:33:17,310 --> 00:33:18,980 höger, uppifrån och ned. 663 00:33:18,980 --> 00:33:21,260 >> Eftersom vid slutet av dagen, en bild gillar det här - och du kan faktiskt 664 00:33:21,260 --> 00:33:22,860 typ av se det på denna projektor - 665 00:33:22,860 --> 00:33:25,280 är egentligen bara ett rutnät av punkter. 666 00:33:25,280 --> 00:33:29,730 Så vi kan identifiera var och en av dessa punkter av en koordinat, x, y, och med denna 667 00:33:29,730 --> 00:33:33,890 program, kan vi nu börja göra något för dessa punkter. 668 00:33:33,890 --> 00:33:37,540 >> Så vad jag ska gå vidare här och vet är jag ska göra några ändringar. 669 00:33:37,540 --> 00:33:41,000 Först kommer jag att gå vidare och bli av allt detta grönaktigt och blåaktig 670 00:33:41,000 --> 00:33:43,520 buller, och jag kommer att gå vidare och skriv in följande 671 00:33:43,520 --> 00:33:45,710 visserligen kryptisk syntax. 672 00:33:45,710 --> 00:33:48,020 im för bilden. 673 00:33:48,020 --> 00:33:53,380 set blå på plats x, kommatecken, läge y, till 0. 674 00:33:53,380 --> 00:33:55,610 Med andra ord, jag vill bara stänga av alla de blå 675 00:33:55,610 --> 00:33:56,920 prickar i den bilden. 676 00:33:56,920 --> 00:33:59,800 >> Jag ska gå vidare nu och klicka detta Run / Spara-knappen, och du kommer 677 00:33:59,800 --> 00:34:02,850 märke på höger sida, den resulterande bilden visas. 678 00:34:02,850 --> 00:34:06,120 Nu är det super grönt, men det är inte överraskande, eftersom jag bokstavligen vände 679 00:34:06,120 --> 00:34:11,070 rabatt, genom att göra en 1 a 0, alla den blå i den bilden. 680 00:34:11,070 --> 00:34:12,540 >> Nåväl, nu ska vi göra det lite mer. 681 00:34:12,540 --> 00:34:16,989 im för image, dot setGreen, x, y. 682 00:34:16,989 --> 00:34:20,659 Och det betyder bara iterate från vänster till höger och sedan uppifrån och ned. 683 00:34:20,659 --> 00:34:23,520 Stäng av det där med ett värde av 0, liksom. 684 00:34:23,520 --> 00:34:24,750 Spara. 685 00:34:24,750 --> 00:34:28,100 Och på projektorn, kan du inte faktiskt verkligen se någonting alls. 686 00:34:28,100 --> 00:34:31,380 >> På min laptop skärm, om jag kisar i just på rätt sätt, kan jag se en bit av en 687 00:34:31,380 --> 00:34:33,300 bild, eftersom de fortfarande är lite rött i det. 688 00:34:33,300 --> 00:34:35,540 Om du någonsin har hört förkortningen RGB - 689 00:34:35,540 --> 00:34:36,830 röd, grön, blå - 690 00:34:36,830 --> 00:34:39,110 det hänvisar till denna komposition av en bild med hjälp 691 00:34:39,110 --> 00:34:40,230 bara de tre färgerna. 692 00:34:40,230 --> 00:34:43,159 Och just nu har vi kastat bort allt grönt, alla blå, men 693 00:34:43,159 --> 00:34:44,500 det finns inte mycket rött. 694 00:34:44,500 --> 00:34:45,920 >> Så låt mig skruva upp det röda. 695 00:34:45,920 --> 00:34:47,070 Hur kan jag göra det? 696 00:34:47,070 --> 00:34:49,300 Tja, först, jag ska be detta program en fråga. 697 00:34:49,300 --> 00:34:52,030 Jag ska gå vidare och låt oss kalla det en variabel, precis som i algebra. 698 00:34:52,030 --> 00:34:54,060 Du kan ha x eller y eller z. 699 00:34:54,060 --> 00:34:57,230 Jag kommer att deklarera en variabel och säga, sätta in denna variabel, 700 00:34:57,230 --> 00:35:02,790 temporärt, värdet av den bilder getRed värde på x, y. 701 00:35:02,790 --> 00:35:05,870 >> Och igen, ska vi komma tillbaka till alla av denna detalj i framtiden. 702 00:35:05,870 --> 00:35:10,630 Men för nu, bara ta på tron ​​att denna linje frågar programmet, vad 703 00:35:10,630 --> 00:35:12,740 är det röda värdet på x, y? 704 00:35:12,740 --> 00:35:14,450 På just den punkten? 705 00:35:14,450 --> 00:35:15,710 >> Sedan kommer jag att göra något för det. 706 00:35:15,710 --> 00:35:21,100 Sedan kommer jag att göra bilden dot set röd på x, y, y, men den här gången kommer jag att 707 00:35:21,100 --> 00:35:24,760 öka den genom att göra röda tider, låt oss säga, 10. 708 00:35:24,760 --> 00:35:26,870 Så öka det med en faktor på 10. 709 00:35:26,870 --> 00:35:29,880 Låt mig zooma ut nu och Klicka kunde springa / Spara. 710 00:35:29,880 --> 00:35:36,430 Och voila, det var det hela tid, även om våra mänskliga ögon 711 00:35:36,430 --> 00:35:37,900 kunde inte riktigt se det. 712 00:35:37,900 --> 00:35:41,470 >> Så återigen, detta är nu riktiga koden, en exempel på ett språk som vi kommer 713 00:35:41,470 --> 00:35:42,770 tillbaka innan lång. 714 00:35:42,770 --> 00:35:46,670 Men inse, särskilt de av er utan sådan erfarenhet, är det ganska 715 00:35:46,670 --> 00:35:50,280 snart att vi själva kommer att vara skriva kod sånt där. 716 00:35:50,280 --> 00:35:54,520 I själva verket, ett verktyg med vilket du kan uppleva alla något bekant, kanske, är CS50: s 717 00:35:54,520 --> 00:35:57,330 egen kurs-shopping-verktyg, vilket var faktiskt startas denna sommar med några 718 00:35:57,330 --> 00:36:01,070 av CS50 egna tidigare studenter, nu vända TF. 719 00:36:01,070 --> 00:36:04,740 >> Så det här råkar vara en hemsida byggd på ett språk som kallas PHP. 720 00:36:04,740 --> 00:36:08,510 Den använder en databas som kallas MySQL, saker med vilken vi får våra händer 721 00:36:08,510 --> 00:36:10,190 smutsiga senare under terminen. 722 00:36:10,190 --> 00:36:14,140 Men tro det eller ej, även något Gillar du slutligen minskar till 723 00:36:14,140 --> 00:36:19,480 enklaste av loopar och villkor och grenar, som de vi såg bara en 724 00:36:19,480 --> 00:36:21,530 nyss i TED-video. 725 00:36:21,530 --> 00:36:25,180 >> Vad jag trodde jag skulle göra nu är aktien inte bara något vi personalen har gjort 726 00:36:25,180 --> 00:36:28,010 för campus, utan snarare något en före detta student - tre 727 00:36:28,010 --> 00:36:29,080 studenter, faktiskt - 728 00:36:29,080 --> 00:36:33,950 gjort det senaste året, Sierra, Daniel, och Sam, den sista av dem hade ingen tidigare 729 00:36:33,950 --> 00:36:36,370 programmering erfarenhet när han tog CS50. 730 00:36:36,370 --> 00:36:39,950 Och för deras sista projekt, de uppvisade vid CS50 Fair, en 731 00:36:39,950 --> 00:36:43,720 program som heter wrdly, vilket är en webbaserat program som de gjorde 732 00:36:43,720 --> 00:36:47,670 denna video som jag tänkte jag skulle dela med ger dig en känsla av vad är 733 00:36:47,670 --> 00:36:49,280 möjligt genom termins slut. 734 00:36:49,280 --> 00:37:57,170 >> [Musik Spela] 735 00:37:57,170 --> 00:38:00,570 >> DAVID MALAN: Det är från vecka Zero till vecka 12 förra året. 736 00:38:00,570 --> 00:38:05,470 >> [Applåder] 737 00:38:05,470 --> 00:38:09,520 >> DAVID MALAN: Som en teaser också, verkligen att fundera är att vad som är 738 00:38:09,520 --> 00:38:14,580 möjligt, kanske du har sett redan, eller kan snart se, market.cs50.net, en 739 00:38:14,580 --> 00:38:17,710 nya verktyg att kursen team har arbetat med, denna gång i 740 00:38:17,710 --> 00:38:21,530 samarbete med Harvard Student Byråer, så att från och med år 741 00:38:21,530 --> 00:38:24,980 och fortsätter förhoppningsvis i detta kommande sommaren har du en standard 742 00:38:24,980 --> 00:38:27,890 möjlighet på campus för att köpa och sälja saker av intresse för dig. 743 00:38:27,890 --> 00:38:32,220 Och med partnerskap genom HSA, kommer du också kunna släppa objekt utanför 744 00:38:32,220 --> 00:38:35,950 i en av HSA: s fysiska butiker på några gång i framtiden, så att 745 00:38:35,950 --> 00:38:39,150 proxy saker, särskilt när du examen och inte nödvändigtvis vill 746 00:38:39,150 --> 00:38:44,110 kasta saker, men faktiskt betalar det vidarebefordra till folk som kan följa dig 747 00:38:44,110 --> 00:38:45,270 här på campus. 748 00:38:45,270 --> 00:38:46,740 Så mer om detta framöver. 749 00:38:46,740 --> 00:38:49,830 >> Men lite mer konkret, ett verktyg som har kommit ut av CS50 i senaste 750 00:38:49,830 --> 00:38:52,760 år, som några av er kanske vara bekanta och andra om du kan vara 751 00:38:52,760 --> 00:38:57,940 googla nu, på CS50.net/2x, kommer du hitta en länk till en Chrome förlängning 752 00:38:57,940 --> 00:39:01,250 vilket är demonstrativ av hur du kan använder JavaScript, samma språk vi 753 00:39:01,250 --> 00:39:06,660 används med Eiffeltornet för en stund sedan, att genomföra 2x uppspelningshastighet 754 00:39:06,660 --> 00:39:09,000 för alla Harvard iSites videos. 755 00:39:09,000 --> 00:39:11,880 Detta är något som är byggd in CS50 egen videospelare. 756 00:39:11,880 --> 00:39:14,870 Men även detta, att om du börjar gräva i källkoden, som vi kommer 757 00:39:14,870 --> 00:39:18,840 gärna göra tillgänglig, ser du hur Du kan även lösa problem som detta, 758 00:39:18,840 --> 00:39:23,180 accelererande widgets på webbplatser med som du redan är väl bekant. 759 00:39:23,180 --> 00:39:26,630 >> Så ett ord nu på kursen och förväntningar och vad som väntar. 760 00:39:26,630 --> 00:39:29,445 I allmänhet kommer vi samlas faktiskt här på måndagar och onsdagar - men 761 00:39:29,445 --> 00:39:31,490 denna fredag, ska vi samlas för att av Shopping Week - 762 00:39:31,490 --> 00:39:34,640 1:00 till 2:00, men ibland till 2:30. 763 00:39:34,640 --> 00:39:38,700 Med tanke på att du därför kanske vill eller måste ta lite klass kl 2:00 764 00:39:38,700 --> 00:39:42,480 framåt, eller ännu tidigare, inser de Kursen är stödjande av vad som kallas 765 00:39:42,480 --> 00:39:45,900 samtidig inskrivning, där vi ska stödja en petition till Ad styrelsen och 766 00:39:45,900 --> 00:39:49,400 din bofast dekaner för din räkning om du har en konflikt någonstans i detta 767 00:39:49,400 --> 00:39:50,790 1:00 till 02:30 intervall. 768 00:39:50,790 --> 00:39:54,110 Chef till denna URL online ytterligare detaljer. 769 00:39:54,110 --> 00:39:57,750 >> Men när det gäller stödkonstruktionen som kännetecknar CS50, för studenter 770 00:39:57,750 --> 00:40:01,750 mer och mindre bekväm likadana, vi erbjuda tydliga spår av sektioner. 771 00:40:01,750 --> 00:40:04,730 Och detta är ett par veckor off, men Snart kommer du att bli ombedd att 772 00:40:04,730 --> 00:40:05,770 din komfort nivå. 773 00:40:05,770 --> 00:40:08,590 Är du bland dem som mindre bekväm, bekvämare, eller 774 00:40:08,590 --> 00:40:10,520 någonstans mittemellan? 775 00:40:10,520 --> 00:40:13,150 >> Och vi ska ha tre distinkta spår som tillgodoser 776 00:40:13,150 --> 00:40:14,470 just de målgrupper. 777 00:40:14,470 --> 00:40:17,900 Så vid någon punkt på sikt bör du även känna att du tävlar 778 00:40:17,900 --> 00:40:21,390 mot någon student med mera eller mindre bakgrund än du. 779 00:40:21,390 --> 00:40:24,160 I själva verket är det naturligtvis tänkt att vara mycket mer kollaborativ och mycket 780 00:40:24,160 --> 00:40:25,650 mer öppet än så. 781 00:40:25,650 --> 00:40:29,030 >> När det gäller problemet uppsättningar, kommer du hitta också att förutom den 782 00:40:29,030 --> 00:40:32,130 standardversionen av varje veckas problem ställa, det finns ofta en "hacker 783 00:40:32,130 --> 00:40:37,010 edition "som är tänkt att vara riktade vid 5% till 10% eller så av 784 00:40:37,010 --> 00:40:40,270 demografiska som är faktiskt bland dem mer bekväm och vill ha mer 785 00:40:40,270 --> 00:40:43,960 av en utmaning än standard utgåva av denna pset förväntar. 786 00:40:43,960 --> 00:40:46,390 Mer information om de som ska finns i kursplanen. 787 00:40:46,390 --> 00:40:49,430 >> Men även i det kan finnas detaljer på kurserna sena dagar. 788 00:40:49,430 --> 00:40:51,570 Typiskt problem sätter beror på torsdagar. 789 00:40:51,570 --> 00:40:55,550 Däremot kan du förlänga många av er tidsfrister denna nedgång från torsdagar till 790 00:40:55,550 --> 00:41:00,010 Fredagar helt enkelt genom att möta oss halvvägs, så att säga, svara på några warm-up 791 00:41:00,010 --> 00:41:03,370 frågor i några av veckans problem uppsättningar, som kommer att automatiskt 792 00:41:03,370 --> 00:41:05,710 sedan ge dig en extra 24 timmar. 793 00:41:05,710 --> 00:41:09,120 Vi kommer också att släppa din lägsta poäng, enligt kursplanen. 794 00:41:09,120 --> 00:41:12,170 >> För att ge dig en känsla av vad problemet apparater är - för det är faktiskt 795 00:41:12,170 --> 00:41:15,120 kursens problemet sätter att slutligen definiera nästan alla 796 00:41:15,120 --> 00:41:18,760 studerandes erfarenheter, mer så än föreläsningar, mer så än sektioner, fler 797 00:41:18,760 --> 00:41:21,230 så än de flesta andra aspekt av kursen. 798 00:41:21,230 --> 00:41:25,140 Förra året, till exempel, började vi, som Vi kommer att börja i år, med Scratch. 799 00:41:25,140 --> 00:41:29,150 Särskilt denna fredag, kommer vi att använda för bara en dag tid, ett grafiskt 800 00:41:29,150 --> 00:41:32,260 programmeringsspråk, med vilket vi kommer börja programmera genom att dra och 801 00:41:32,260 --> 00:41:37,580 släppa pusselbitar som endast montera fysiskt om det är vettigt 802 00:41:37,580 --> 00:41:38,990 att göra detta logiskt. 803 00:41:38,990 --> 00:41:43,460 >> Nästa vecka ska vi snabbt övergången till C, ett ganska gamla men mycket små och 804 00:41:43,460 --> 00:41:48,510 enkelt språk som ger oss möjlighet att verkligen gå 0-60 under loppet 805 00:41:48,510 --> 00:41:52,290 på bara några veckor, och sedan parlay samma kunskaper och färdigheter för 806 00:41:52,290 --> 00:41:56,160 grundläggande programmering konstruktioner i högre nivå språk som PHP, 807 00:41:56,160 --> 00:41:58,240 JavaScript och ytterligare andra fortfarande. 808 00:41:58,240 --> 00:42:02,560 >> Förra året, den tredje pset under var det av kryptografi, en 809 00:42:02,560 --> 00:42:06,380 domän-specifik applikation där vi utmanade studenter att genomföra någon 810 00:42:06,380 --> 00:42:11,140 antal chiffer, program som att förvränga eller avkoda informationen, 811 00:42:11,140 --> 00:42:11,880 att kryptera den. 812 00:42:11,880 --> 00:42:16,300 För hacker upplagan, däremot, Vi gav hacker studenterna en fil 813 00:42:16,300 --> 00:42:19,900 från en vanlig Unix-dator som innehåller användarnamn och lösenord, 814 00:42:19,900 --> 00:42:22,740 den senare som var krypterat, och vi utmanade dem hacker 815 00:42:22,740 --> 00:42:26,850 studenter till dekryptera, så gott de kunde, dessa lösenord, fortfarande på att 816 00:42:26,850 --> 00:42:27,770 samma domän. 817 00:42:27,770 --> 00:42:30,580 >> Scramble, ett spel som en del av er är kanske bekant. 818 00:42:30,580 --> 00:42:34,410 En kriminalteknisk pjäs, där vi frågar eleverna att återskapa data som hade varit 819 00:42:34,410 --> 00:42:38,530 annars utgår från min egen digitala kamerans compact flash-kort, genom 820 00:42:38,530 --> 00:42:42,740 faktiskt skriva programvara för att räkna ut, där var nollor och ettor i 821 00:42:42,740 --> 00:42:46,850 att digital kamera som tidigare sammansatt en JPEG bild? 822 00:42:46,850 --> 00:42:49,710 >> En utmaning av slag förra året involverar skriver den snabbaste 823 00:42:49,710 --> 00:42:53,160 stavningskontroll möjligt, konkurrerande mot vänner och klasskompisar om 824 00:42:53,160 --> 00:42:53,860 de vill. 825 00:42:53,860 --> 00:42:56,330 Implementera Huff 'n Puff, ett komprimeringsprogram. 826 00:42:56,330 --> 00:43:01,930 Och sedan avsluta terminen med CS50 Finans, en webbaserad applikation med 827 00:43:01,930 --> 00:43:06,570 som du skapar en eTrade-liknande hemsida att köpa och sälja aktier, så att 828 00:43:06,570 --> 00:43:09,860 tala, genom att faktiskt dra nästan realtid citationstecken Yahoo! 829 00:43:09,860 --> 00:43:10,450 Finans. 830 00:43:10,450 --> 00:43:13,590 >> Vad vi inte gjorde förra året var ett problem uppsättning som förblir 831 00:43:13,590 --> 00:43:14,810 ändå en favorit. 832 00:43:14,810 --> 00:43:18,400 Om du aldrig har gått till shuttle.cs50.net, ser du en användare 833 00:43:18,400 --> 00:43:19,670 gränssnittet lite såhär. 834 00:43:19,670 --> 00:43:23,530 Men två år sedan, klassen genomförs med hjälp av Google Maps och 835 00:43:23,530 --> 00:43:28,570 Google Earth Plug-in och lite av kunniga med att köra runt campus, 836 00:43:28,570 --> 00:43:33,290 så att syftet med detta spel var, som ni kan se några av de ansikten, 837 00:43:33,290 --> 00:43:37,530 är att köra runt campus söker personal, kamrater undervisning och CA, och 838 00:43:37,530 --> 00:43:40,080 När du gör, sätta dem på din buss. 839 00:43:40,080 --> 00:43:44,035 Ingen av dem verkar faktiskt vara här, så vi kommer att ange en fuska kod. 840 00:43:44,035 --> 00:43:47,150 >> [SKRATT] 841 00:43:47,150 --> 00:43:48,430 >> DAVID MALAN: Det gå vi. 842 00:43:48,430 --> 00:43:49,240 Okej. 843 00:43:49,240 --> 00:43:51,750 Och här är nu personalen spetsad genom hela campus. 844 00:43:51,750 --> 00:43:54,530 Och som ni kan se, på den högra sida av skärmen, flygbussen 845 00:43:54,530 --> 00:43:55,510 har tomma platser. 846 00:43:55,510 --> 00:43:59,000 Och målet var att skriva kod med vilken att simulera detta 847 00:43:59,000 --> 00:44:01,790 körning och plocka upp och släppa bort av passagerarna. 848 00:44:01,790 --> 00:44:04,960 Att man också använda ett språk kallas JavaScript. 849 00:44:04,960 --> 00:44:10,030 Så inse att program som det kommer vara på vår samma bana här 850 00:44:10,030 --> 00:44:10,910 år, liksom. 851 00:44:10,910 --> 00:44:13,640 >> I termer, nu, av ytterligare stöd, Vi har kontorstid. 852 00:44:13,640 --> 00:44:16,520 Som du kanske har sett i ditt eget hus matsalen eller i Annenberg, 853 00:44:16,520 --> 00:44:19,280 vi ska vara i huset matsal hallar fyra kvällar i veckan - 854 00:44:19,280 --> 00:44:24,450 Leverett, Pfoho, Eliot och Annenberg detta år, från 20:00 till 23:00. 855 00:44:24,450 --> 00:44:26,830 Och vad vi trodde vi skulle göra det här året är något lite annorlunda. 856 00:44:26,830 --> 00:44:29,650 >> Om du hört Mullret förra året som Det var lite för stressigt, detta 857 00:44:29,650 --> 00:44:32,800 Årets kontorstid, när vi ska beskriva nästa vecka, kommer att vara mer organisk, 858 00:44:32,800 --> 00:44:36,900 varigenom vid ankomst, kommer du att sänds till en viss tabell 859 00:44:36,900 --> 00:44:39,860 där flera anställda väntar, och vi ska göra saker mycket mer 860 00:44:39,860 --> 00:44:40,440 organiskt. 861 00:44:40,440 --> 00:44:43,740 Inget mer kö, inget mer iPad, men hellre ha mer intim 862 00:44:43,740 --> 00:44:47,300 samtal runt ett bord med bara åtta eller så att eleverna, så att vi 863 00:44:47,300 --> 00:44:50,880 ungefärliga känslan av vad som annars skulle vara en mycket mindre klass. 864 00:44:50,880 --> 00:44:54,120 >> Vi erbjuder, liksom, dessa saker vi kallas genomgångar, videor filmade i 865 00:44:54,120 --> 00:44:57,330 förväg genom en av kursens undervisning stipendiaterna, Zamyla, där hon 866 00:44:57,330 --> 00:45:00,690 vägleder dig genom veckans problem set, som erbjuder tips och tricks för den 867 00:45:00,690 --> 00:45:02,640 utmaningar som ligger framför oss. 868 00:45:02,640 --> 00:45:06,230 Och omvänt, efter problemsamlingar är tack, det här året kommer vi släpper också 869 00:45:06,230 --> 00:45:09,100 små klipp kallar post-mortems som faktiskt gå igenom 870 00:45:09,100 --> 00:45:13,630 representativa lösningar, både bra och dålig, via vilken du kan sluta hur 871 00:45:13,630 --> 00:45:17,550 du kan ha eller borde ha genomfört en egen lösning. 872 00:45:17,550 --> 00:45:20,500 >> Och vad vi ska erbjuda för första gången även i år, särskilt 873 00:45:20,500 --> 00:45:23,420 för de studenter som använder sig av kursens andra 874 00:45:23,420 --> 00:45:28,580 resurser men ändå kämpar allt för mycket, kursen 875 00:45:28,580 --> 00:45:33,030 själv kommer att para ihop de elever, som resurserna tillåter, med handledare så att 876 00:45:33,030 --> 00:45:35,840 du har en mycket mer intim möjlighet än hus matsalar 877 00:45:35,840 --> 00:45:38,700 möjliggöra för en-mot-en hjälp. 878 00:45:38,700 --> 00:45:42,780 >> Nu en sista glimt på några av avancerade spel i sikte. 879 00:45:42,780 --> 00:45:44,580 Du kanske är bekant med den CS50 Hackathon. 880 00:45:44,580 --> 00:45:48,120 Nåväl, kom i december, från 08:00 PM till 7:00 AM i början av 881 00:45:48,120 --> 00:45:51,410 Läsa period kommer att vara en möjlighet att samlas med klasskamrater - 882 00:45:51,410 --> 00:45:53,130 detta skulle vara runt 9:00 PM - 883 00:45:53,130 --> 00:45:56,550 under vilken du dyka in i ditt slutgiltiga projektets genomförande tillsammans 884 00:45:56,550 --> 00:45:59,910 klasskamrater, vänner och mat. 885 00:45:59,910 --> 00:46:03,680 Detta skulle vara runt 01:00, när den första omgången av livsmedel kom. 886 00:46:03,680 --> 00:46:08,470 Och det är ungefär 4:00 att visst år på CS50 Hackathon. 887 00:46:08,470 --> 00:46:12,000 >> Men den verkliga höjdpunkten för kursen är betytt för CS50 Fair, ett campus-omfattande 888 00:46:12,000 --> 00:46:15,790 utställning av dina egna slutliga projekt, till vilken familj och vänner är alla 889 00:46:15,790 --> 00:46:18,730 inbjudna, eftersom våra rekryterare och våra vänner från industrin. 890 00:46:18,730 --> 00:46:22,170 Detta, till exempel, är en glimt av 2.000-plus människor som har deltagit 891 00:46:22,170 --> 00:46:23,160 senaste åren. 892 00:46:23,160 --> 00:46:27,180 Uttryck som denna är inte ovanligt, och på samma sätt gör din 893 00:46:27,180 --> 00:46:29,660 klasskamrater glädje i saker du har åstadkommit. 894 00:46:29,660 --> 00:46:33,170 >> Och faktiskt, mot detta syfte har vi en start-av-sikt händelsen, liksom. 895 00:46:33,170 --> 00:46:37,400 Om saker som detta tilltalar dig, eller du är minst nyfiken på vad 896 00:46:37,400 --> 00:46:41,590 detta, vet att en ny tradition av Kursen heter CS50 Puzzle Day. 897 00:46:41,590 --> 00:46:45,710 Och detta instiftades ett par år tillbaka för att verkligen signalera till campus 898 00:46:45,710 --> 00:46:48,930 att datavetenskap är inte om programmering, och det är verkligen inte 899 00:46:48,930 --> 00:46:51,960 om att omfamna endast de elever som har tidigare erfarenhet. 900 00:46:51,960 --> 00:46:54,200 Det handlar verkligen om problemlösning mer allmänt. 901 00:46:54,200 --> 00:46:57,360 >> Och så Puzzle dag, under de senaste år nu, har utvecklats till en fin 902 00:46:57,360 --> 00:47:00,500 partnerskap med våra vänner på Facebook, varigenom det kommer att vara fantastiskt 903 00:47:00,500 --> 00:47:04,830 priser och pizza över floden vid i-lab denna kommande lördag. 904 00:47:04,830 --> 00:47:09,180 Bege dig till den adressen med två eller tre vänner om du vill delta 905 00:47:09,180 --> 00:47:10,830 i denna nya tradition. 906 00:47:10,830 --> 00:47:14,180 >> Så jag skulle vilja be er att hålla en sak i åtanke, och vi har bara en 907 00:47:14,180 --> 00:47:17,070 två minuters klipp som att stänga idag. 908 00:47:17,070 --> 00:47:19,640 73% är numret att minnas. 909 00:47:19,640 --> 00:47:23,900 Cake, också, väntar dig utanför detta transept som vi avbryta på bara en 910 00:47:23,900 --> 00:47:26,710 par ögonblick, är som en tradition av kursen, liksom. 911 00:47:26,710 --> 00:47:29,860 Men detta är nyckeln citat från kursens kursplan att hålla i minnet. 912 00:47:29,860 --> 00:47:32,820 Vad slutligen viktigt i denna kurs är inte så mycket när du hamnar 913 00:47:32,820 --> 00:47:36,580 förhållande till dina klasskamrater men där du, i vecka 12, hamna i förhållande till 914 00:47:36,580 --> 00:47:37,960 själv i vecka 0. 915 00:47:37,960 --> 00:47:43,670 >> Men glimt som vi kommer att lämna dig med här i dag är det sista här 916 00:47:43,670 --> 00:47:47,580 genom vår samma Daniel, gjorde vem wrdly video nyss. 917 00:47:47,580 --> 00:47:50,000 Jag lämnar er med denna glimt om vad som väntar. 918 00:47:50,000 --> 00:47:53,360 Och eftersom vi gör detta, om vi kunde ha CS50 personal från framsidan av rummet 919 00:47:53,360 --> 00:47:57,280 att komma vidare upp på scenen för att måla alla det mer av en visuell bild som till 920 00:47:57,280 --> 00:47:59,100 vad som väntar dig i år - 921 00:47:59,100 --> 00:48:00,350 bli besvärlig. 922 00:48:00,350 --> 00:48:02,200 923 00:48:02,200 --> 00:48:05,188 Vi avslutar med detta här på skärmen. 924 00:48:05,188 --> 00:48:18,634 >> [Musik Spela] 925 00:48:18,634 --> 00:48:21,124 >> DAVID MALAN: Detta är CS50. 926 00:48:21,124 --> 00:50:00,226 >> [MUSIK - MATT & KIM, "det är okej"] 927 00:50:00,226 --> 00:50:03,245 >> Högtalare 1: Jag älskar CS50 mer än katter. 928 00:50:03,245 --> 00:50:06,030 >> TALARE 2: Whoaaaa! 929 00:50:06,030 --> 00:50:06,990 >> [SKRATT] 930 00:50:06,990 --> 00:50:08,140 >> DAVID MALAN: Detta är alltså CS50. 931 00:50:08,140 --> 00:50:10,050 Vi kommer att se dig på fredag. 932 00:50:10,050 --> 00:50:13,370 >> [Applåder och jublar] 933 00:50:13,370 --> 00:50:17,540 >> Berättare: Vid nästa CS50, en scen demo går inte som planerat. 934 00:50:17,540 --> 00:50:19,080 >> DAVID MALAN: Vi vill hitta Mike Smith i denna telefonbok. 935 00:50:19,080 --> 00:50:20,380 Tja, vad är dina instinkter? 936 00:50:20,380 --> 00:50:23,750 Jag kanske hoppar ungefär till mitten av telefonboken, blick ner, se till att 937 00:50:23,750 --> 00:50:26,830 Jag är på M, och jag vet nu att Mike Smith är inte åt vänster. 938 00:50:26,830 --> 00:50:27,840 Han måste vara till höger. 939 00:50:27,840 --> 00:50:30,515 Och så på denna punkt, vi kan bokstavligen riva - 940 00:50:30,515 --> 00:50:33,300 vid denna punkt kan vi riva bokstavligen - 941 00:50:33,300 --> 00:50:36,490 Vid denna punkt, kan vi bildligt riva telefonboken i hälften. 942 00:50:36,490 --> 00:50:38,954 >> [UKULELE strumming]