1 00:00:00,000 --> 00:00:00,270 2 00:00:00,270 --> 00:00:01,790 DAVID MALAN: Välkommen tillbaka, alla. 3 00:00:01,790 --> 00:00:05,030 Så igår, kommer du ihåg att vi fokuserat på dessa frågor här. 4 00:00:05,030 --> 00:00:08,380 Så vi hade fyra övergripande topics-- integritet, säkerhet och samhälle; 5 00:00:08,380 --> 00:00:11,960 Internetteknik; molntjänster; och i slutändan, webbutveckling. 6 00:00:11,960 --> 00:00:14,170 >> Har någon har bandbredd eller tid 7 00:00:14,170 --> 00:00:16,900 att titta lite John Oliver kväll? 8 00:00:16,900 --> 00:00:20,120 Det är faktiskt ganska underhållande, om inte lite skrämmande. 9 00:00:20,120 --> 00:00:24,700 Eventuella frågor om något vi gjorde igår? 10 00:00:24,700 --> 00:00:27,600 Eventuella förtydliganden? 11 00:00:27,600 --> 00:00:35,580 Eventuella frågor som du vill göra att vi trycker på i dag i någon form? 12 00:00:35,580 --> 00:00:37,300 Så ren skiffer. 13 00:00:37,300 --> 00:00:38,760 >> Så vad är på agendan idag? 14 00:00:38,760 --> 00:00:41,301 Så jag trodde att vi skulle börja idag med en titt på vad som finns i allmänhet 15 00:00:41,301 --> 00:00:44,460 känd som beräknings thinking-- på risken för övertydlighet, tänkande 16 00:00:44,460 --> 00:00:46,636 som en dator, kanske tänka som en ingenjör, 17 00:00:46,636 --> 00:00:48,510 och försöker att börja organisera dina tankar 18 00:00:48,510 --> 00:00:52,039 eller för att ge dig en bättre känsla för vad det innebär att faktiskt befalla 19 00:00:52,039 --> 00:00:54,080 en dator för att göra något genom programmering. 20 00:00:54,080 --> 00:00:56,663 Och vi kommer att hålla det på en ganska hög nivå, ganska mycket engelska, 21 00:00:56,663 --> 00:00:59,850 men försök att använda familjära exempel för att formalisera hur 22 00:00:59,850 --> 00:01:01,450 du skulle gå om att lösa problem. 23 00:01:01,450 --> 00:01:04,080 >> Och vi kommer att återkomma några CS ämnen, som abstraktion, 24 00:01:04,080 --> 00:01:06,040 som kom upp ett par gånger igår, 25 00:01:06,040 --> 00:01:07,554 algoritmer och sedan representation. 26 00:01:07,554 --> 00:01:09,720 Och det är där vi ska börja idag på bara ett ögonblick. 27 00:01:09,720 --> 00:01:11,481 Sedan tar vi en titt på programmering. 28 00:01:11,481 --> 00:01:13,480 Vi tar en titt på några grundläggande konstruktioner 29 00:01:13,480 --> 00:01:16,450 som du kan vara bekant och kan även hitta ganska intuitivt. 30 00:01:16,450 --> 00:01:18,370 >> Vi tittar i själva verket vid en provprogrammeringen 31 00:01:18,370 --> 00:01:21,244 miljö som är mycket tillgänglig, mycket lekfull, och faktiskt riktade 32 00:01:21,244 --> 00:01:22,555 för åldrarna 12 och uppåt. 33 00:01:22,555 --> 00:01:25,930 Vi kommer att tillbringa några minuter där och sedan ta saker till en lägre nivå 34 00:01:25,930 --> 00:01:30,360 och faktiskt tala om några av algoritmer och datastrukturer, 35 00:01:30,360 --> 00:01:32,360 så att säga, att programmerare använder vanligtvis 36 00:01:32,360 --> 00:01:35,040 att lösa problem långt mer effektivt än du kanske 37 00:01:35,040 --> 00:01:37,322 kunna göra utan dem helt och hållet. 38 00:01:37,322 --> 00:01:40,280 Sedan efter lunch, kommer vi ta en titt på teknik staplar, som är bara 39 00:01:40,280 --> 00:01:42,240 ett fint sätt att säga samlingar av teknik 40 00:01:42,240 --> 00:01:43,690 som du kan använda för att lösa några problem. 41 00:01:43,690 --> 00:01:46,670 Och vi pratar om alfabetet soppa av språk som finns today-- 42 00:01:46,670 --> 00:01:50,930 Java och Python och C ++ och PHP och Ruby och alla möjliga andra saker. 43 00:01:50,930 --> 00:01:53,740 >> Vi tar en kort titt på designmönster. 44 00:01:53,740 --> 00:01:57,730 Programmerare, över tiden, har antagit metoder 45 00:01:57,730 --> 00:02:00,690 som tenderar att hjälpa dem lösa problem lättare. 46 00:02:00,690 --> 00:02:04,390 När du börjar se själv skriva samma typ av kod och om igen, 47 00:02:04,390 --> 00:02:08,080 människor formaliserar dessa upprepningar och tillskriver namn till dem 48 00:02:08,080 --> 00:02:10,084 och sedan använda dem och främja dem i slutändan. 49 00:02:10,084 --> 00:02:12,250 Och vi pratar lite om mobila strategier, 50 00:02:12,250 --> 00:02:16,099 som vad betyder det att faktiskt göra en mobilapp eller en mobil webbplats. 51 00:02:16,099 --> 00:02:17,140 Gör du det för Android? 52 00:02:17,140 --> 00:02:17,730 Gör du det för iOS? 53 00:02:17,730 --> 00:02:19,160 Gör du det för båda dessa? 54 00:02:19,160 --> 00:02:20,326 Och vad är kompromisser? 55 00:02:20,326 --> 00:02:23,180 Och slutligen, tar vi en titt webbprogrammering, som 56 00:02:23,180 --> 00:02:25,380 är ett samlingsbegrepp verkligen beskriver helst 57 00:02:25,380 --> 00:02:28,410 du skriver program som är avsedd att köras på webben, 58 00:02:28,410 --> 00:02:30,430 vare sig på telefoner eller stationära eller bärbara datorer. 59 00:02:30,430 --> 00:02:33,490 Vi tar en kort titt på databaser och design 60 00:02:33,490 --> 00:02:39,049 däri, om så bara för nästan alla intressant webbaserad applikation 61 00:02:39,049 --> 00:02:40,590 dessa dagar har någon form av databasen. 62 00:02:40,590 --> 00:02:42,380 Annars skulle det bara vara statiskt innehåll. 63 00:02:42,380 --> 00:02:45,254 Och en databas tillåter dig att göra förändringar över tid, om dig själv 64 00:02:45,254 --> 00:02:45,960 eller från användarna. 65 00:02:45,960 --> 00:02:47,820 Och vi kommer att överväga hur man skulle gå om att utforma 66 00:02:47,820 --> 00:02:50,510 databasen och den typ av jargong som kan komma upp i en ingenjör 67 00:02:50,510 --> 00:02:52,790 diskussion på en whiteboard när faktiskt genomföra 68 00:02:52,790 --> 00:02:53,900 en app för första gången. 69 00:02:53,900 --> 00:02:57,002 >> Vi pratar kort om API, användbara tjänster 70 00:02:57,002 --> 00:02:59,960 som du kan använda för att stå på axlarna av andra, om företagen 71 00:02:59,960 --> 00:03:02,619 eller individer, och lösa egna problem snabbare. 72 00:03:02,619 --> 00:03:04,785 Och då kommer vi plaska kanske lite med JavaScript 73 00:03:04,785 --> 00:03:08,900 ett programmeringsspråk som används både i webbläsare dessa dagar, men också 74 00:03:08,900 --> 00:03:09,820 i servrar. 75 00:03:09,820 --> 00:03:11,890 Och kanske kommer vi åter, om tiden tillåter, 76 00:03:11,890 --> 00:03:15,670 några av de praktiska webb saker som vi gjorde igår och integrera de två 77 00:03:15,670 --> 00:03:17,630 tillsammans innan vi ajournera. 78 00:03:17,630 --> 00:03:22,380 >> Så med that-- vad ahead-- är det något saknas att du 79 00:03:22,380 --> 00:03:26,289 vill se till att vi sätter och beröra någon gång. 80 00:03:26,289 --> 00:03:28,330 Om det är att tänka på, ta upp det snart. 81 00:03:28,330 --> 00:03:32,010 Men varför vi inte börja med en titta på beräkningstänkande. 82 00:03:32,010 --> 00:03:35,420 >> Och låt mig föreslå att beräknings tänkande är, återigen, 83 00:03:35,420 --> 00:03:38,830 sort av den höga nivå beskrivning av vad datavetare kan göra. 84 00:03:38,830 --> 00:03:42,470 Och faktiskt, låt oss börja med tre ingredienser som 85 00:03:42,470 --> 00:03:44,207 kan gå in computational tänkande. 86 00:03:44,207 --> 00:03:45,790 Detta är bara ett sätt att beskriva det. 87 00:03:45,790 --> 00:03:48,490 Vi kunde verkligen definiera detta i ett antal sätt. 88 00:03:48,490 --> 00:03:50,630 >> Men låt mig föreslå till förmån för idag, 89 00:03:50,630 --> 00:03:53,910 att världens problem, alla världens problem, 90 00:03:53,910 --> 00:03:56,730 när närmade sig av en datavetare kunde 91 00:03:56,730 --> 00:04:00,990 ses som vad vi ska samtals ingångar, som 92 00:04:00,990 --> 00:04:08,142 behöver för att matas in i vad vi kallar algoritmer, som sedan ger resultat. 93 00:04:08,142 --> 00:04:10,600 Med andra ord, hela värld för problemlösning I krav 94 00:04:10,600 --> 00:04:13,140 kan destilleras i dessa tre ingredienser. 95 00:04:13,140 --> 00:04:14,450 Så vad menar jag med ingångar? 96 00:04:14,450 --> 00:04:17,060 Ingångar är precis vad du är handed för att lösa. 97 00:04:17,060 --> 00:04:20,052 >> Till exempel, här är en gammal skola problem. 98 00:04:20,052 --> 00:04:22,760 Om jag har en telefonbok här och Jag vill se något i det, 99 00:04:22,760 --> 00:04:23,760 detta är min ingång. 100 00:04:23,760 --> 00:04:26,260 Jag har 1000 eller så sidor i en telefonbok. 101 00:04:26,260 --> 00:04:27,780 Detta är ingången till mitt problem. 102 00:04:27,780 --> 00:04:31,507 Och jag vill hitta något som Mike Smith, så en vän 103 00:04:31,507 --> 00:04:33,840 vars namn och nummer är förhoppningsvis i adressboken. 104 00:04:33,840 --> 00:04:36,430 >> Detta är innan dagar cell telefoner, så jag kan inte bara söka efter den. 105 00:04:36,430 --> 00:04:38,540 Så jag måste göra det gamla skola och faktiskt söka 106 00:04:38,540 --> 00:04:41,331 dessa ingångar för några svar. 107 00:04:41,331 --> 00:04:43,580 Och det svaret bara kommer att kallas utgången. 108 00:04:43,580 --> 00:04:44,871 Så ingången är telefonboken. 109 00:04:44,871 --> 00:04:47,787 Algoritmen är oberoende uppsättning steg jag använder för att hitta Mike Smith. 110 00:04:47,787 --> 00:04:50,120 Och utgången är, förhoppningsvis, Mike Smith telefonnummer. 111 00:04:50,120 --> 00:04:52,703 Och detta skulle då vara precis representativa för de flesta problem 112 00:04:52,703 --> 00:04:55,210 till med dig delas ingångar och vill producera utgångar. 113 00:04:55,210 --> 00:04:59,459 >> Så innan vi betraktar processen som vi kan lösa det problemet, 114 00:04:59,459 --> 00:05:01,250 hitta Mike Smith och något sådant, 115 00:05:01,250 --> 00:05:04,090 låt oss betrakta det första och de last-- in- och utgångar. 116 00:05:04,090 --> 00:05:08,060 Fysiskt, naturligtvis, ingång här är en hel massa papper limmas ihop 117 00:05:08,060 --> 00:05:09,400 i form av en telefonbok. 118 00:05:09,400 --> 00:05:13,660 Men datorer, av course-- bärbara datorer och stationära datorer och även telefoner 119 00:05:13,660 --> 00:05:16,430 dessa days-- de är elektroniska enheter. 120 00:05:16,430 --> 00:05:20,920 >> Och i slutet av dagen, vad är den enda ingången till en dator? 121 00:05:20,920 --> 00:05:23,299 Tja, det är något som denna nätsladd här. 122 00:05:23,299 --> 00:05:25,590 Jag koppla in den i väggen, och Jag får ett flöde av elektroner, 123 00:05:25,590 --> 00:05:27,048 vilket gör att jag kan köra maskinen. 124 00:05:27,048 --> 00:05:30,420 Eller kanske de elektroner skapad genom mitt batteri. 125 00:05:30,420 --> 00:05:33,790 Men i slutet av dagen, det är det enda som kommer i min laptop. 126 00:05:33,790 --> 00:05:35,772 Och så mycket intressant stuff är i slutändan 127 00:05:35,772 --> 00:05:37,480 kommer ut, vare sig med hjälp av skrivaren 128 00:05:37,480 --> 00:05:40,320 eller skärmen eller audially eller liknande. 129 00:05:40,320 --> 00:05:45,320 >> Så om allt vi har som vår grundläggande bidrag till en dator 130 00:05:45,320 --> 00:05:49,160 är el, så det är bara elektroner går in och eller ut, 131 00:05:49,160 --> 00:05:54,465 och så hur kan vi använda den ingång faktiskt representera information? 132 00:05:54,465 --> 00:05:57,090 Med andra ord, hur får vi från en enkel flöde av el 133 00:05:57,090 --> 00:06:00,350 att företräda faktiska siffror eller faktiska bokstäver 134 00:06:00,350 --> 00:06:03,620 eller faktiska bilder på skärmen eller faktiska filmer eller e-post 135 00:06:03,620 --> 00:06:05,690 eller vilket som helst antal av dessa koncept högre nivå, 136 00:06:05,690 --> 00:06:07,680 om ni så vill, att vid slutet av dagen på något sätt 137 00:06:07,680 --> 00:06:11,950 måste lagras i denna elektronisk mekanisk anordning 138 00:06:11,950 --> 00:06:16,260 med hjälp av endast de enkla ingredients-- elektroner som kommer in och ut? 139 00:06:16,260 --> 00:06:19,530 >> Så det verkar som, i den enklaste formen, 140 00:06:19,530 --> 00:06:23,260 den enda typ av tillstånd Jag har i min värld, så 141 00:06:23,260 --> 00:06:25,350 att speak-- betingelser i mitt world-- är antingen 142 00:06:25,350 --> 00:06:33,020 Jag har elektroner strömmar, el flöda, eller jag inte-- så vidare, bort. 143 00:06:33,020 --> 00:06:35,850 Och låt oss formalisera på och av, som en datorforskare kanske, 144 00:06:35,850 --> 00:06:37,255 med bara en och 0. 145 00:06:37,255 --> 00:06:39,880 Låt oss bara beskriva några godtyckliga men konsekvent nummer till den. 146 00:06:39,880 --> 00:06:41,970 1 betyder på, 0 betyder avstängd. 147 00:06:41,970 --> 00:06:45,427 Eller du kanske också se detta som sanna medel på och falska medel. 148 00:06:45,427 --> 00:06:47,510 Du kan också göra svart och vitt eller rött och blått. 149 00:06:47,510 --> 00:06:48,759 Du behöver bara två deskriptorer. 150 00:06:48,759 --> 00:06:52,240 Och en datavetare skulle i allmänhet bara använda 0 och 1. 151 00:06:52,240 --> 00:06:58,980 >> Så om det är fallet, min enda alfabet är bestående av 0: or och 1: or, hur 152 00:06:58,980 --> 00:07:03,360 skulle jag kunna få jämna antalet 2 i en dator, för att inte tala antalet 3 153 00:07:03,360 --> 00:07:06,140 eller en bokstav i alfabetet eller en bild eller en film? 154 00:07:06,140 --> 00:07:08,910 Hur gör vi slags bootstrap oss från denna grundprincip 155 00:07:08,910 --> 00:07:12,080 av 0 s och 1 s och faktiskt representera något mer intressant? 156 00:07:12,080 --> 00:07:14,430 >> Nåväl, låt oss sätta denna fråga på is under ett ögonblick 157 00:07:14,430 --> 00:07:17,520 och överväga något förhoppningsvis bekant, 158 00:07:17,520 --> 00:07:21,150 även om du inte verkligen har tänkt på den i någon detalj för 10, 20, 30, 40, 50 159 00:07:21,150 --> 00:07:22,520 fler år. 160 00:07:22,520 --> 00:07:24,780 Det här är vad? 161 00:07:24,780 --> 00:07:28,050 Hur skulle du uttalar det? 162 00:07:28,050 --> 00:07:30,770 Inte en kuggfråga. 163 00:07:30,770 --> 00:07:32,950 Ett antal, men vad är det? 164 00:07:32,950 --> 00:07:34,842 1, 2, 3, eller 123. 165 00:07:34,842 --> 00:07:37,800 Och jag gillade hur du sa en, två, tre, eftersom det är ett sätt att se på det. 166 00:07:37,800 --> 00:07:39,870 1, 2, 3, är det en sekvens med tre symboler. 167 00:07:39,870 --> 00:07:42,005 Det är bilder som vi nu har ord för. 168 00:07:42,005 --> 00:07:44,880 Och om du slags läsa dem alla tillsammans, en typisk mänsklig på engelska 169 00:07:44,880 --> 00:07:46,600 skulle säga 123. 170 00:07:46,600 --> 00:07:48,350 Och det är en slags högre begrepp nivå, 171 00:07:48,350 --> 00:07:50,340 känns som en ganska stor antal. 172 00:07:50,340 --> 00:07:51,490 >> Men hur kom vi dit? 173 00:07:51,490 --> 00:07:54,640 Tja, kan det vara ett tag sedan du har tänkt på det så här, 174 00:07:54,640 --> 00:07:56,680 men tillbaka i min dag, jag sorts lärt sig detta 175 00:07:56,680 --> 00:08:01,030 som en kolonn, 10 s kolonn, och 100 kolonn. 176 00:08:01,030 --> 00:08:06,400 Så Lakisa säger är det 1, 2, 3, men det är också 123. 177 00:08:06,400 --> 00:08:08,700 Men hur får vi från den förra till den senare? 178 00:08:08,700 --> 00:08:12,340 >> Tja, skulle du göra vanligtvis i 100 kolonn, jag har en 1. 179 00:08:12,340 --> 00:08:14,794 Så det är som att säga 100 gånger 1. 180 00:08:14,794 --> 00:08:16,210 Och sedan i 10 spalt, jag har två. 181 00:08:16,210 --> 00:08:18,464 Så det är som att säga 10 gånger 2. 182 00:08:18,464 --> 00:08:19,630 I en kolumn, jag har tre. 183 00:08:19,630 --> 00:08:21,720 Så det är som att säga 1 gånger 3. 184 00:08:21,720 --> 00:08:24,290 >> Och om jag lägger dessa saker tillsammans, detta naturligtvis, 185 00:08:24,290 --> 00:08:27,470 är 100 plus 10 plus 3. 186 00:08:27,470 --> 00:08:31,750 Och Åh, det är därför jag får detta högre begreppet 123 nivå. 187 00:08:31,750 --> 00:08:37,220 Det är bara grundläggande matematik, varvid dessa symboler har vikter till dem, om du 188 00:08:37,220 --> 00:08:39,620 kommer placeholder eller kolumnvärden. 189 00:08:39,620 --> 00:08:42,090 Och när jag föröka allt ut, jag får det här numret. 190 00:08:42,090 --> 00:08:47,840 >> Så hur många av er vet hur man talar binary-- 0 s och 1's-- som en dator? 191 00:08:47,840 --> 00:08:50,410 OK, perfekt, ingen, eller ingen av er tror att du gör. 192 00:08:50,410 --> 00:08:52,550 Men jag vill hävda dig faktiskt vet detta redan. 193 00:08:52,550 --> 00:08:55,330 Vi behöver bara slags justera vår mentala modell lite. 194 00:08:55,330 --> 00:08:57,250 Men processen är exakt densamma. 195 00:08:57,250 --> 00:09:01,460 >> Låt mig lämna en uppe och istället dra ner det för ett ögonblick. 196 00:09:01,460 --> 00:09:05,060 I en värld av datorer, Vi har bara 0: or och 1: or. 197 00:09:05,060 --> 00:09:07,240 Och så det som är kommer att förändras är vad? 198 00:09:07,240 --> 00:09:10,920 Tja, i min mänskliga världen, decimalsystemet, december mening 10, 199 00:09:10,920 --> 00:09:12,740 Jag har hur många siffror till mitt förfogande? 200 00:09:12,740 --> 00:09:15,270 201 00:09:15,270 --> 00:09:16,540 10, eller hur? 202 00:09:16,540 --> 00:09:17,880 0 till 9, naturligtvis. 203 00:09:17,880 --> 00:09:21,210 >> Och det är därför vi har 10 plats och 100 plats. 204 00:09:21,210 --> 00:09:22,380 Där det kommer ifrån? 205 00:09:22,380 --> 00:09:24,430 Nåväl, detta är 10 upphöjt till 0. 206 00:09:24,430 --> 00:09:28,440 Detta är 10 upphöjt till 1, 10 upphöjt till två, och så vidare. 207 00:09:28,440 --> 00:09:32,110 Du håller bara multiplicera kolumnerna med 10, börjar med bara en 208 00:09:32,110 --> 00:09:33,700 i den högra ett här. 209 00:09:33,700 --> 00:09:35,490 >> Så i en värld av datorer, om du bara 210 00:09:35,490 --> 00:09:39,600 har binary-- bi innebörd 2-- eller 0: or och 1: or, vi bara 211 00:09:39,600 --> 00:09:42,420 verkligen behöver ändra bas att matte. 212 00:09:42,420 --> 00:09:46,410 Så med andra ord, nu ska vi bara har en spalt och the-- 213 00:09:46,410 --> 00:09:51,270 där är det going-- 2 kolonn, 4 kolonn, och kanske bortom. 214 00:09:51,270 --> 00:09:52,250 Varför är det så? 215 00:09:52,250 --> 00:09:55,650 Tja, det är två 0-th makt. 216 00:09:55,650 --> 00:09:57,270 Detta är 2 den 1. 217 00:09:57,270 --> 00:09:59,610 Detta är 2 till 2, och så vidare. 218 00:09:59,610 --> 00:10:04,910 >> Så medan här, vi har 1, 10-talet, 100 s, 1000 s, 10.000 s, 100.000 s, 1 219 00:10:04,910 --> 00:10:10,560 miljoner, och så vidare, här vi har en, två, fyra, åtta, sexton, 32, 64. 220 00:10:10,560 --> 00:10:13,950 Du håller bara multiplicera med två, i stället för att hålla multiplicera med 10. 221 00:10:13,950 --> 00:10:16,780 Så nu, om målet på hand är att representera 222 00:10:16,780 --> 00:10:20,240 siffror med endast 0: or och 1: or, Låt oss fundera över hur vi kommer dit. 223 00:10:20,240 --> 00:10:26,540 >> Detta är naturligtvis mönstret 0 0 0, men hur många begrepps 224 00:10:26,540 --> 00:10:27,490 betyder representerar? 225 00:10:27,490 --> 00:10:35,430 Tja, 4 gånger 0 plus 2 gånger 0 plus 1 gånger 0, låt oss lägga till dem tillsammans. 226 00:10:35,430 --> 00:10:40,030 4 gånger 0 är, naturligtvis, 0, plus 2 gånger 0 är, naturligtvis, 0 plus 1 gånger 0 227 00:10:40,030 --> 00:10:40,850 är, naturligtvis, 0. 228 00:10:40,850 --> 00:10:44,910 Så ah, representerar detta siffer vi människor känner som 0. 229 00:10:44,910 --> 00:10:47,810 >> Nå, låt oss mycket snabbt framåt. 230 00:10:47,810 --> 00:10:53,600 Om jag istället inte representerar 0 0 0, men låt oss göra ett 0 1, 231 00:10:53,600 --> 00:10:57,010 som kan vara hur Lakisa tidigare, skulle bara uttala det en 0 1. 232 00:10:57,010 --> 00:11:01,020 Men nu, hur ska vi ta den till högre nivå numret vi människor kan känna? 233 00:11:01,020 --> 00:11:04,220 Så vad är det här numret? 234 00:11:04,220 --> 00:11:06,060 Det är 5 antalet vi känner som fem. 235 00:11:06,060 --> 00:11:06,870 >> Tja, varför är det? 236 00:11:06,870 --> 00:11:09,620 Tja, vi kan verkligen sorts gå igenom det metodiskt 237 00:11:09,620 --> 00:11:14,880 4 gånger 1, 2 gånger 0, 1 gånger 1. 238 00:11:14,880 --> 00:11:19,880 Lägg dem tillsammans, så detta är fyra plus 0 plus ett. 239 00:11:19,880 --> 00:11:21,577 Och det är faktiskt fem. 240 00:11:21,577 --> 00:11:24,660 Så det blir lite tråkiga nu gör det aritmetiska och om igen. 241 00:11:24,660 --> 00:11:26,300 Men processen är exakt densamma. 242 00:11:26,300 --> 00:11:28,380 >> Det enda som har förändrats i vår värld 243 00:11:28,380 --> 00:11:32,740 är att våra spalter är 1, 2, 4, 8, 16, och så vidare, i stället för en, 10, 100, 244 00:11:32,740 --> 00:11:33,740 1000. 245 00:11:33,740 --> 00:11:40,000 Och det är bara för att vår alfabetet har krympt från 0 till 9 bara 0-1. 246 00:11:40,000 --> 00:11:50,851 >> Så som en liten frågesport här, hur skulle Representerar du det nummer 7 i binär? 247 00:11:50,851 --> 00:11:51,350 0? 248 00:11:51,350 --> 00:11:53,490 Tja, 0, menar du 0 0 0? 249 00:11:53,490 --> 00:11:58,140 250 00:11:58,140 --> 00:11:59,693 Säg det igen, Karina. 251 00:11:59,693 --> 00:12:03,010 252 00:12:03,010 --> 00:12:03,550 Perfekt. 253 00:12:03,550 --> 00:12:04,370 Varför är det så? 254 00:12:04,370 --> 00:12:08,530 Det är ett effektivt sätt 4 plus två plus ett. 255 00:12:08,530 --> 00:12:09,580 Så bra. 256 00:12:09,580 --> 00:12:14,364 >> Hur ska vi representera en liten another-- sägs om nummer två? 257 00:12:14,364 --> 00:12:18,360 258 00:12:18,360 --> 00:12:20,690 Nära, men baklänges. 259 00:12:20,690 --> 00:12:21,660 Så vad är detta? 260 00:12:21,660 --> 00:12:26,290 Är fyra plus en, så det är 5 igen. 261 00:12:26,290 --> 00:12:28,310 >> Så what's-- Jag är ledsen, Karina? 262 00:12:28,310 --> 00:12:29,220 0 1 0. 263 00:12:29,220 --> 00:12:34,762 0 1 0 skulle vara 2, eftersom igen, även om den typ av inte hoppa ut på dig, 264 00:12:34,762 --> 00:12:35,470 bara göra matten. 265 00:12:35,470 --> 00:12:40,390 4 gånger 0, 0, 2 gånger 1 är 2, 1 gånger 0 r 0. 266 00:12:40,390 --> 00:12:42,830 Så detta är antalet som vi känner som två. 267 00:12:42,830 --> 00:12:44,030 >> Hur om antalet 8? 268 00:12:44,030 --> 00:12:51,240 269 00:12:51,240 --> 00:12:52,730 Hm? 270 00:12:52,730 --> 00:12:53,330 Bra. 271 00:12:53,330 --> 00:12:56,130 Så vi slags behöver en platshållare. 272 00:12:56,130 --> 00:12:59,570 Vi behöver en 0 0 0. 273 00:12:59,570 --> 00:13:02,280 Och det är sant av vår sort av gamla skolan decimalsystemet. 274 00:13:02,280 --> 00:13:05,280 How do you representerar antal 1000? 275 00:13:05,280 --> 00:13:08,480 >> Tja, skulle du verkar vara typ av i en tuff plats, 276 00:13:08,480 --> 00:13:10,390 Om be dig att representera siffran 1000, 277 00:13:10,390 --> 00:13:14,960 eftersom även om du ger dig själv som 9 av dessa nio av dessa 0 av dessa, 278 00:13:14,960 --> 00:13:18,730 vilket är det största antalet du har, har du inte riktigt få till 1000. 279 00:13:18,730 --> 00:13:26,920 Så om du 1000, behöver du bara en annan läge, så att du kan göra ett 0 0 0, 280 00:13:26,920 --> 00:13:29,460 ergo siffran 1000. 281 00:13:29,460 --> 00:13:34,200 >> Så nu, låt oss kartlägga denna typ av konceptuell diskussion tillbaka till hårdvara, 282 00:13:34,200 --> 00:13:37,470 där återigen, den ingående var bara denna lilla strömkabel, el 283 00:13:37,470 --> 00:13:39,300 kommer in och flödar ut. 284 00:13:39,300 --> 00:13:44,740 Och så för att kartläggas härifrån till det, ja, vad vi verkligen behöver? 285 00:13:44,740 --> 00:13:49,460 Tja, kan du tänka på att vara inne i en dator, en hel massa glödlampor, 286 00:13:49,460 --> 00:13:50,450 om du vill. 287 00:13:50,450 --> 00:13:52,040 De är verkligen kallas transistorer. 288 00:13:52,040 --> 00:13:55,121 Och transistorer är bara växlar som kan vara antingen på eller av. 289 00:13:55,121 --> 00:13:56,870 Så du kan tänka på en transistor som är på 290 00:13:56,870 --> 00:14:00,730 tillåter elektricitet att flyta och en transistor som är avstängd som stoppar 291 00:14:00,730 --> 00:14:02,170 elektricitet från att flyta. 292 00:14:02,170 --> 00:14:04,130 Och istället för att ta över lamporna här, 293 00:14:04,130 --> 00:14:06,450 varför jag inte göra den här sortens av ny skola stil. 294 00:14:06,450 --> 00:14:11,360 Så detta kan vara en 1, en ficklampa att vara på, bara knappt om. 295 00:14:11,360 --> 00:14:14,050 Och detta kan vara en 0, och nu bär det av. 296 00:14:14,050 --> 00:14:18,277 >> Så använder denna fysiska enheten jag Nu kan representera det binära systemet. 297 00:14:18,277 --> 00:14:19,235 Jag behöver bara två stater. 298 00:14:19,235 --> 00:14:21,660 Det spelar ingen roll vad färg det är eller vad det är. 299 00:14:21,660 --> 00:14:25,920 Allt som räknas är att jag har ett tillstånd om och en annan stat bort. 300 00:14:25,920 --> 00:14:30,605 Så använder min telefon här, hur gör jag representerar antal vi känner som 0? 301 00:14:30,605 --> 00:14:34,490 302 00:14:34,490 --> 00:14:38,550 Eller sätta ekvivalent vad Antalet jag representerar nu? 303 00:14:38,550 --> 00:14:39,810 0, eftersom enheten är avstängd. 304 00:14:39,810 --> 00:14:41,560 >> Och om jag gör det? 305 00:14:41,560 --> 00:14:43,583 Och nu, hur gör jag representerar antal 2? 306 00:14:43,583 --> 00:14:46,380 307 00:14:46,380 --> 00:14:50,930 Kan jag låna din telefon här, som vi gjorde i går? 308 00:14:50,930 --> 00:14:58,490 Så låt oss se, så om jag vill representera nummer två, är detta nummer 2? 309 00:14:58,490 --> 00:14:59,050 Nej. 310 00:14:59,050 --> 00:15:02,250 Vilket nummer är jag av misstag representerar här? 311 00:15:02,250 --> 00:15:03,550 Detta är faktiskt antalet tre. 312 00:15:03,550 --> 00:15:05,008 >> Så som man gör jag vill stänga av? 313 00:15:05,008 --> 00:15:09,634 Den svarta telefonen eller-- väl, om they're-- svart telefon eller vita telefon? 314 00:15:09,634 --> 00:15:10,300 Den vita telefon. 315 00:15:10,300 --> 00:15:17,020 Så om jag stänga av detta och vi linje upp hit, har vi en 1 316 00:15:17,020 --> 00:15:19,487 i två plats och 0 i en plats. 317 00:15:19,487 --> 00:15:21,195 Och så är jag nu representerar antalet två. 318 00:15:21,195 --> 00:15:24,680 Och detta skulle naturligtvis vara nummer 3, för nu båda dessa lampor 319 00:15:24,680 --> 00:15:25,350 är på. 320 00:15:25,350 --> 00:15:27,480 >> Och jag ska sluta här, men det är självklart 321 00:15:27,480 --> 00:15:31,100 om jag vill representera nummer 4 eller 8 eller högre, 322 00:15:31,100 --> 00:15:32,529 Jag kommer att behöva fler telefoner. 323 00:15:32,529 --> 00:15:33,820 Men det är allt som händer. 324 00:15:33,820 --> 00:15:37,800 Så om du någonsin hört att insidan av en-- tacka du-- dator 325 00:15:37,800 --> 00:15:42,269 är miljontals transistorer, är det bara miljontals små små växlar. 326 00:15:42,269 --> 00:15:44,310 Och de är inte lätt lökar som tänds och släcks, 327 00:15:44,310 --> 00:15:48,340 men de tillåter antingen elektricitet att flöda någonstans eller stoppa den. 328 00:15:48,340 --> 00:15:52,140 Och så det är din två states-- på eller av, på eller av. 329 00:15:52,140 --> 00:15:55,730 >> Så vi verkar nu att ha denna förmåga 330 00:15:55,730 --> 00:16:00,590 att representera denna koncept som Vi vill i själva hårdvaran. 331 00:16:00,590 --> 00:16:05,520 Men allt vi har nu är förmågan att representera tal Det verkar. 332 00:16:05,520 --> 00:16:08,580 Så hur ska vi gå till väga som representerar bokstäverna i alfabetet, som 333 00:16:08,580 --> 00:16:12,310 känns som nästa typ av funktion du skulle vilja lägga till en modern dator 334 00:16:12,310 --> 00:16:14,280 när du har siffror? 335 00:16:14,280 --> 00:16:16,930 >> Och faktiskt, om man tänker på IT, historiskt, datorer 336 00:16:16,930 --> 00:16:19,426 infördes verkligen att tjäna som räknare numeriskt. 337 00:16:19,426 --> 00:16:21,300 Men naturligtvis dessa dagar, gör de mycket mer. 338 00:16:21,300 --> 00:16:23,799 Även när de startar upp, du vanligtvis ser ett eller flera ord. 339 00:16:23,799 --> 00:16:27,420 Så hur gör du representerar ord, om allt du har är, återigen, 340 00:16:27,420 --> 00:16:31,054 el i slutet av den dag, eller ekvivalent 0 s och 1 s? 341 00:16:31,054 --> 00:16:34,430 342 00:16:34,430 --> 00:16:35,690 >> Ja. 343 00:16:35,690 --> 00:16:38,320 Ja, jag menar, typ av gjorde vi Detta går i någon form, 344 00:16:38,320 --> 00:16:40,200 där någon gång, Jag tror att jag godtyckligt 345 00:16:40,200 --> 00:16:46,741 sade att om vi vill representera bokstaven A, vi kunde bara kalla det en 1. 346 00:16:46,741 --> 00:16:49,990 Det var i samband med kryptografi, där vi behövde bara någon form av kod, 347 00:16:49,990 --> 00:16:51,160 någon form av kartläggning. 348 00:16:51,160 --> 00:16:56,680 >> Så kanske en kommer att representeras som en 1, och B kommer att representeras som en 2, 349 00:16:56,680 --> 00:17:01,560 och Z representeras som en 26, till exempel. 350 00:17:01,560 --> 00:17:07,430 Och då det enda förbehållet är att om jag kommer att koda bokstäver i min e-post 351 00:17:07,430 --> 00:17:10,430 eller i mina textmeddelanden som tal, ni alla 352 00:17:10,430 --> 00:17:12,640 måste enas om att använda Samma uppsättning av konventioner. 353 00:17:12,640 --> 00:17:14,619 Och faktiskt, världen har gjort just detta. 354 00:17:14,619 --> 00:17:18,040 >> Det finns ett system i världen kallad ASCII, American Standard 355 00:17:18,040 --> 00:17:21,640 Kod för Information Interchange, vilket är helt enkelt ett beslut för några år 356 00:17:21,640 --> 00:17:25,720 sedan att människorna gjorde det beslutat att A kommer att vara lika, inte 357 00:17:25,720 --> 00:17:32,260 1, 2, och 26, och så forth-- det är en lite different-- men 65, 66, 67. 358 00:17:32,260 --> 00:17:34,010 Och jag ska dra upp en diagram på bara ett ögonblick. 359 00:17:34,010 --> 00:17:34,580 Men det är godtycklig. 360 00:17:34,580 --> 00:17:36,329 Men det spelar ingen roll att det är godtyckligt. 361 00:17:36,329 --> 00:17:38,620 Världen måste bara vara konsekvent. 362 00:17:38,620 --> 00:17:40,540 >> Nu, på senare tid, det finns något snyggare 363 00:17:40,540 --> 00:17:45,430 kallas Unicode, eftersom världens slag av realiserade, efter uppfinna datorer, 364 00:17:45,430 --> 00:17:50,977 att det finns mer än väl 256 symboler i världen 365 00:17:50,977 --> 00:17:53,560 att vi kanske vill representera, speciellt när du introducerar 366 00:17:53,560 --> 00:17:58,420 Asiatiska språk och andra symbol som behöver mer uttrycksfullhet än du 367 00:17:58,420 --> 00:18:02,150 kan passa i den tidigaste versionen av denna kod, som kallades ASCII. 368 00:18:02,150 --> 00:18:05,250 Så Unicode faktiskt tillåter du kan använda mer 0 s och 2. 369 00:18:05,250 --> 00:18:08,830 Framför allt håller du höra ord byte i samhället och även bara 370 00:18:08,830 --> 00:18:09,400 i går. 371 00:18:09,400 --> 00:18:12,040 Och en byte är vad igen? 372 00:18:12,040 --> 00:18:14,840 >> Vad är en byte? 373 00:18:14,840 --> 00:18:15,700 Det är bara 8 bitar. 374 00:18:15,700 --> 00:18:17,150 Så vad betyder det egentligen? 375 00:18:17,150 --> 00:18:22,400 Tja, det betyder, tidigare när vi var talar om binär och jag använde 376 00:18:22,400 --> 00:18:28,010 godtyckligt tre bitar när vi var talar om binary-- 1 plats, 377 00:18:28,010 --> 00:18:33,600 2 plats, och 4: s plats-- väl, en byte betyder bara att du pratar 378 00:18:33,600 --> 00:18:38,730 inte i enheter om tre men fyra, fem, sex, sju åtta, 379 00:18:38,730 --> 00:18:46,910 vilket ger oss 8 plats, 16-talet, 32-talet, 64-talet, och 128-talet. 380 00:18:46,910 --> 00:18:50,010 >> Med andra ord, är lite inte alla som användbar en måttenhet, 381 00:18:50,010 --> 00:18:53,132 eftersom det är precis som en liten liten bit av information, på eller av. 382 00:18:53,132 --> 00:18:54,840 Så för några år sedan, världen just beslutat 383 00:18:54,840 --> 00:18:59,060 det är lite mer bekvämt att tala när det gäller byte, åtta saker samtidigt. 384 00:18:59,060 --> 00:19:01,670 Och så sätt föddes begreppet byte. 385 00:19:01,670 --> 00:19:03,640 Och så har vi åtta bitar här. 386 00:19:03,640 --> 00:19:06,810 >> Och det visar sig, även för liknande Därför beslutade världen år 387 00:19:06,810 --> 00:19:12,439 sedan att representera en ASCII brev, du kommer att använda enheter av 8 bitar. 388 00:19:12,439 --> 00:19:14,230 Så även om du inte behöver det många, du 389 00:19:14,230 --> 00:19:18,130 alltid kommer att använda 8 bitar för att representerar en bokstav i alfabetet. 390 00:19:18,130 --> 00:19:20,950 Och det är bekvämt, för då om du 391 00:19:20,950 --> 00:19:28,720 får ett meddelande som har en 0 0 0 1 1 1 1 0 följt av ytterligare en 1 1 0 1 0 392 00:19:28,720 --> 00:19:33,320 0 1, så om du får 16 bitar, världen kan bara 393 00:19:33,320 --> 00:19:37,460 anta att den första 8 är en bokstav och den andra 8 är ett annat brev. 394 00:19:37,460 --> 00:19:39,240 >> Spelar ingen roll hur många det finns. 395 00:19:39,240 --> 00:19:41,460 Det betyder bara att Vi är alla i överensstämmelse 396 00:19:41,460 --> 00:19:42,950 när vi tolkar dessa bitar. 397 00:19:42,950 --> 00:19:44,377 Och det var bara slumpmässigt. 398 00:19:44,377 --> 00:19:47,210 Som betyder något, men jag gjorde inte verkligen tänka på vad det betyder. 399 00:19:47,210 --> 00:19:49,620 >> Så det är en liten vit lögn. 400 00:19:49,620 --> 00:19:51,990 Ursprungligen, ASCII faktiskt används endast 7 bitar. 401 00:19:51,990 --> 00:19:54,180 Och den åttonde biten är kallad utvidgad ASCII. 402 00:19:54,180 --> 00:19:56,290 Men poängen är, i slutändan, samma. 403 00:19:56,290 --> 00:19:58,850 Världen i allmänhet standardiserat på 8 bitar. 404 00:19:58,850 --> 00:20:04,290 >> Så detta verkar vara lite begränsande, eftersom jag kan bara 405 00:20:04,290 --> 00:20:07,970 representera kapital A, kapital B genom kapital Z. 406 00:20:07,970 --> 00:20:10,940 Men sannerligen inte, om jag går att-- Det finns en massa resurser 407 00:20:10,940 --> 00:20:13,695 nätet, till exempel, asciitable.com, detta 408 00:20:13,695 --> 00:20:16,310 kommer att vara lite överväldigande i början. 409 00:20:16,310 --> 00:20:18,910 Men jag ska påpeka vad som är viktigt här. 410 00:20:18,910 --> 00:20:24,090 >> Detta råkar be-- och jag ska walk-- låt oss se om jag går hit. 411 00:20:24,090 --> 00:20:27,990 Här är, i det decimala kolonn, antalet 65. 412 00:20:27,990 --> 00:20:32,201 Och på den högra kolumnen brev karaktär, Chr, är bokstaven A. 413 00:20:32,201 --> 00:20:34,450 Och du kan ignorera, för nu, allt i mitten. 414 00:20:34,450 --> 00:20:36,769 Detta är hexadecimal, oktala och en HTML-kod. 415 00:20:36,769 --> 00:20:39,810 Till denna webbplats bara försöker kasta en hel del information på dig på en gång. 416 00:20:39,810 --> 00:20:42,970 Men allt vi bryr oss om är det decimala kolonn och teckenkolumnen. 417 00:20:42,970 --> 00:20:46,190 >> Så genom denna logik, vad som är det nummer som världen 418 00:20:46,190 --> 00:20:50,510 har beslutat utgör ett gement a? 419 00:20:50,510 --> 00:20:52,230 Ja, 97. 420 00:20:52,230 --> 00:20:55,850 Och bara för att förvirra potentiellt något, 421 00:20:55,850 --> 00:21:03,715 hur många har världen beslutat skulle representera nummer ett? 422 00:21:03,715 --> 00:21:06,900 423 00:21:06,900 --> 00:21:10,910 Höger, eftersom we-- 49, verkar det här, i det nedre vänstra hörnet. 424 00:21:10,910 --> 00:21:12,320 >> Nu, vad menar jag med det? 425 00:21:12,320 --> 00:21:14,830 Så visar det sig att i datorsystem, 426 00:21:14,830 --> 00:21:16,840 det är i allmänhet en fundamental skillnad 427 00:21:16,840 --> 00:21:19,920 mellan ett antal och ett tecken. 428 00:21:19,920 --> 00:21:22,330 Ett antal är det vi lärt växa upp när 429 00:21:22,330 --> 00:21:23,830 Vi var super unga i grundskolan. 430 00:21:23,830 --> 00:21:25,110 Det är saker som du räkna med. 431 00:21:25,110 --> 00:21:30,220 Men ett tecken är bara en form, en skåra, så att säga, på skärmen. 432 00:21:30,220 --> 00:21:36,200 >> Nu, människor vi slags se något som ser ut så här. 433 00:21:36,200 --> 00:21:39,060 Och vi säger, åh, är att antalet två. 434 00:21:39,060 --> 00:21:44,999 Men nej, det är bara en symbol som ser precis vad vi känner som nummer två. 435 00:21:44,999 --> 00:21:46,790 Och så finns det här grundläggande skillnad 436 00:21:46,790 --> 00:21:50,340 mellan faktiska siffror och tecken. 437 00:21:50,340 --> 00:21:52,130 Detta är ett nummer. 438 00:21:52,130 --> 00:21:54,420 Men i allmänhet, i det samband med en dator, 439 00:21:54,420 --> 00:21:56,809 Om du istället se något sådant quoted-- 440 00:21:56,809 --> 00:21:58,600 och du gör inte alltid måste se det citerade, 441 00:21:58,600 --> 00:22:01,474 men för tydlighetens discussion-- om du ser citattecken runt numret, 442 00:22:01,474 --> 00:22:02,730 detta är nu ett tecken. 443 00:22:02,730 --> 00:22:06,330 Så detta nummer två under huven insidan av en dator 444 00:22:06,330 --> 00:22:12,220 skulle vara representerade med ett mönster bitar som representerar antalet 445 00:22:12,220 --> 00:22:14,850 50 enligt schemat på nätet. 446 00:22:14,850 --> 00:22:18,300 >> Om emellertid en dator bara ser detta, detta 447 00:22:18,300 --> 00:22:24,580 skulle vara representerade med mönster av bit 0 0 0 0 0 0 1 0. 448 00:22:24,580 --> 00:22:29,595 Medan denna karaktär skulle faktiskt vara representerade as-- och nu, 449 00:22:29,595 --> 00:22:34,710 Jag fick tänka lite harder-- så här karaktär skulle representeras med 0 450 00:22:34,710 --> 00:22:39,080 0 1-- vad behöver jag här? 451 00:22:39,080 --> 00:22:44,450 0 0 1 1 0 0 1 0. 452 00:22:44,450 --> 00:22:45,480 Hur gjorde jag det? 453 00:22:45,480 --> 00:22:49,580 Ja detta är antalet 50, om du multiplicera det med hjälp dessa kolumner, 454 00:22:49,580 --> 00:22:53,530 detta är antalet två, och så det är därför det är denna dikotomi. 455 00:22:53,530 --> 00:22:55,850 >> Och detta är bara en teaser nu för funktioner 456 00:22:55,850 --> 00:22:59,710 som existerar i programmeringsspråk att vi kommer att beröra kort senare i dag. 457 00:22:59,710 --> 00:23:01,950 I programmeringsspråk, du har i allmänhet, 458 00:23:01,950 --> 00:23:04,495 men inte alltid, saker ringa olika datatyper. 459 00:23:04,495 --> 00:23:06,870 Med andra ord, en programmer-- när han eller hon skriver, 460 00:23:06,870 --> 00:23:11,150 en programmerare får bestämma i vilken format för att lagra sina data. 461 00:23:11,150 --> 00:23:14,120 Du kan antingen lagra data som råa siffror, såsom siffran 2. 462 00:23:14,120 --> 00:23:17,940 Eller så kan du lagra dem som strängar, eller sekvenser av tecken 463 00:23:17,940 --> 00:23:21,550 att du vanligtvis skulle uttrycka med citat i din programmeringsspråk. 464 00:23:21,550 --> 00:23:25,230 >> Du kan ha saker called-- Jag oversimplify och kallar dem 465 00:23:25,230 --> 00:23:28,870 verklig numbers-- så siffror som är inte heltal som nummer två, 466 00:23:28,870 --> 00:23:31,310 men siffror gillar 4,56. 467 00:23:31,310 --> 00:23:33,490 Så reella tal kan också har decimaler, 468 00:23:33,490 --> 00:23:36,340 så det är en annan fundamental bit data i en dator. 469 00:23:36,340 --> 00:23:41,920 Och då kan du även ha andra datatyper fortfarande. 470 00:23:41,920 --> 00:23:45,810 Så det är bara en teaser verkligen av den enklaste av designbeslut 471 00:23:45,810 --> 00:23:50,960 att en programmerare kanske göra under huven. 472 00:23:50,960 --> 00:23:52,925 >> Så några frågor ännu? 473 00:23:52,925 --> 00:23:57,320 474 00:23:57,320 --> 00:23:59,860 Så låt oss försöka göra detta lite mer verklig. 475 00:23:59,860 --> 00:24:02,120 Denna maskin är inte så mycket i bruk längre. 476 00:24:02,120 --> 00:24:07,420 Men de flesta alla i det här rummet förmodligen växte upp med och fortfarande använder hårddiskar 477 00:24:07,420 --> 00:24:08,010 på något sätt. 478 00:24:08,010 --> 00:24:10,100 >> Även om de flesta av våra bärbara datorer inte längre 479 00:24:10,100 --> 00:24:15,900 har enheter som använder så här, i stället bärbara datorer idag i allmänhet 480 00:24:15,900 --> 00:24:18,590 har solid state-enheter utan rörliga delar. 481 00:24:18,590 --> 00:24:22,840 Och som tenderar att vara dyrare, tyvärr, men lite snabbare 482 00:24:22,840 --> 00:24:27,230 och en-- väl ofta, mycket snabbare, vilket är en av orsakerna. 483 00:24:27,230 --> 00:24:28,980 Och även den inte gör det generera så mycket värme. 484 00:24:28,980 --> 00:24:31,680 Det kan vara mindre, så det är i allmänhet en positiv netto. 485 00:24:31,680 --> 00:24:35,030 >> Men detta ger oss möjlighet att kartlägga en lite mer konkret vad 486 00:24:35,030 --> 00:24:38,460 vi pratar om vid 0 s och En nivå nu en fysisk enhet. 487 00:24:38,460 --> 00:24:40,810 Det är en sak för mig att prata ca 0 s och 1 s när det gäller 488 00:24:40,810 --> 00:24:43,990 av min telefon eller abstrakt när det gäller av växlar att vara på och av. 489 00:24:43,990 --> 00:24:45,340 Men hur hårddiskar? 490 00:24:45,340 --> 00:24:48,495 I din bärbara datorer, om du har en äldre en, eller i din dator, 491 00:24:48,495 --> 00:24:51,200 eller säkert i servrar idag, där du har 492 00:24:51,200 --> 00:24:53,070 hårddiskar som har en terabyte utrymme, 493 00:24:53,070 --> 00:24:55,560 4 terabyte utrymme, väl vad betyder det? 494 00:24:55,560 --> 00:24:59,560 >> En hårddisk med en terabyte av rymdorgan 495 00:24:59,560 --> 00:25:03,890 Det finns 1 biljon bytes insidan av det på något sätt, 496 00:25:03,890 --> 00:25:10,450 eller ekvivalent 8 biljoner bitar inuti. 497 00:25:10,450 --> 00:25:16,240 1 terabyte skulle vara 8 terabit eller 1 biljon bitar, som 498 00:25:16,240 --> 00:25:19,330 innebär att om du har en hård enhet, har du på något sätt 499 00:25:19,330 --> 00:25:22,400 eller andra en biljon 0 s och en insida av den. 500 00:25:22,400 --> 00:25:25,360 Och om vi tar bara en titt på en godtycklig bild av en hårddisk 501 00:25:25,360 --> 00:25:30,110 representant, är vad en hård detta enhet kan normalt ser ut inuti. 502 00:25:30,110 --> 00:25:32,600 >> Det är också ungefär som en gammal grammofonspelare 503 00:25:32,600 --> 00:25:35,350 men i allmänhet med flera poster inne, så 504 00:25:35,350 --> 00:25:38,270 att speak-- multipel skivorna, som de kallas, 505 00:25:38,270 --> 00:25:42,259 metall cirkulära skivor, och då en liten läshuvudet, 506 00:25:42,259 --> 00:25:43,550 mycket som en gammal skivspelare. 507 00:25:43,550 --> 00:25:46,589 Och att läshuvudet rör sig fram och fram och på något sätt läser bitarna. 508 00:25:46,589 --> 00:25:49,380 Och vad som finns på dessa fat, även Även om vi människor inte kan se dem, 509 00:25:49,380 --> 00:25:52,757 antingen i verkligheten eller i den här bilden, Det finns små små magnetiska partiklar. 510 00:25:52,757 --> 00:25:55,090 Och även om du har lång glömt hur el fungerar, 511 00:25:55,090 --> 00:25:57,550 en magnetisk partikel som är laddat i allmänhet 512 00:25:57,550 --> 00:26:00,570 har en norra änden och en söder end-- så norr och söder. 513 00:26:00,570 --> 00:26:03,000 Och så världen bara beslutade för en tid sedan 514 00:26:03,000 --> 00:26:06,570 att om en magnetisk protokoll väsentligen är i linje så här, nord-syd, 515 00:26:06,570 --> 00:26:07,610 låt oss kalla det en 1. 516 00:26:07,610 --> 00:26:10,470 Om det är istället syd-nord, låt oss bara kalla det en 0. 517 00:26:10,470 --> 00:26:13,350 Och så om du har på ditt förfogande en biljon 518 00:26:13,350 --> 00:26:16,300 lilla magnetiska particles-- och förhoppningsvis, 519 00:26:16,300 --> 00:26:18,740 hårdvaran uppfinningsrikedom i För att vända dem runt 520 00:26:18,740 --> 00:26:24,450 som du ser fit-- om du vill representera en hel massa 0 s, du 521 00:26:24,450 --> 00:26:28,120 behöver bara 8 magnetiska partiklar allt i linje så här. 522 00:26:28,120 --> 00:26:30,330 Och om du vill att representera åtta 1: or, du bara 523 00:26:30,330 --> 00:26:33,170 behöver 8 magnetiska partiklar inriktade rygg mot rygg mot rygg så här. 524 00:26:33,170 --> 00:26:35,515 >> Vad menar jag med det magnetiska partiklar? 525 00:26:35,515 --> 00:26:38,390 Ärligt talat, alla dessa år senare, sak som fortfarande kommer att tänka på 526 00:26:38,390 --> 00:26:42,139 är den här killen, om du växte upp med denna sak. 527 00:26:42,139 --> 00:26:43,930 Detta är en little-- för de som unfamiliar-- en 528 00:26:43,930 --> 00:26:47,810 lilla barndom leksak som har denna hairless man här 529 00:26:47,810 --> 00:26:51,690 som har alla dessa lilla svarta magnetiska partiklar som följer med det. 530 00:26:51,690 --> 00:26:53,930 Och med hjälp av den röda pinne, vilket är bara en magnet, 531 00:26:53,930 --> 00:26:58,460 du kan sorts ge honom en mustasch eller ögonbryn eller hår eller något på honom. 532 00:26:58,460 --> 00:27:00,710 Så i själva verket, om vi in i, till exempel, detta 533 00:27:00,710 --> 00:27:02,950 är den typ av spel du kan spela med Wooly Willy. 534 00:27:02,950 --> 00:27:06,570 >> Och detta är bara att säga, dessa är mycket större magnetiska partiklar 535 00:27:06,570 --> 00:27:09,890 än vad som är faktiskt på en hårddisk, och långt färre magnetiska partiklar. 536 00:27:09,890 --> 00:27:11,640 Men låt oss faktiskt se sedan om du har 537 00:27:11,640 --> 00:27:14,720 små magnetiska partiklar i en hårddisk, hur du kan faktiskt 538 00:27:14,720 --> 00:27:19,090 använder dem för att representera data. 539 00:27:19,090 --> 00:27:20,070 >> [VIDEOUPPSPELNING] 540 00:27:20,070 --> 00:27:24,190 >> -Den Hårddisk är där datorn butiker flesta av dess permanenta data. 541 00:27:24,190 --> 00:27:27,170 För att göra det, data färdas från RAM längs 542 00:27:27,170 --> 00:27:31,720 med programsignaler som talar om hårddisk hur man lagrar dessa data. 543 00:27:31,720 --> 00:27:36,570 De hårda drivkretsar översätta dem signaler till spänningsvariationer. 544 00:27:36,570 --> 00:27:40,880 Dessa i sin tur styr hårddiskens flytta parts-- några av de få rörliga 545 00:27:40,880 --> 00:27:43,440 delar kvar i den moderna datorn. 546 00:27:43,440 --> 00:27:47,650 >> Några av de signaler styr en motor, som snurrar metallbelagda skivorna. 547 00:27:47,650 --> 00:27:50,980 Dina uppgifter är faktiskt lagras på dessa skivorna. 548 00:27:50,980 --> 00:27:56,250 Andra signaler flytta läs / skrivhuvuden att läsa eller skriva data på skivorna. 549 00:27:56,250 --> 00:28:00,100 Denna maskin är så exakt att ett mänskligt hårstrå kunde inte ens 550 00:28:00,100 --> 00:28:02,800 passera mellan huvudena och spinning fat. 551 00:28:02,800 --> 00:28:04,887 Ändå allt fungerar på fantastiska hastigheter. 552 00:28:04,887 --> 00:28:05,470 [END SPELA] 553 00:28:05,470 --> 00:28:06,780 Och du kan se på svans slutet av videon, 554 00:28:06,780 --> 00:28:08,340 Det finns i allmänhet flera skivorna. 555 00:28:08,340 --> 00:28:10,250 Och så att läshuvudet är inte bara läsa toppen. 556 00:28:10,250 --> 00:28:12,458 Det är ungefär som tre eller fyra eller fler läshuvudena 557 00:28:12,458 --> 00:28:14,920 att flytta så här, läsning av data samtidigt. 558 00:28:14,920 --> 00:28:17,407 >> Så det finns en hel del komplexitet och typ av timing 559 00:28:17,407 --> 00:28:18,740 som är inblandad i en hårddisk. 560 00:28:18,740 --> 00:28:21,920 Och saken snurrar riktigt jäkla snabb, så det finns en hel del komplexitet. 561 00:28:21,920 --> 00:28:25,220 Men låt oss zooma in lite djupare och se var är dessa magnetiska partiklar 562 00:28:25,220 --> 00:28:27,370 och hur vi får på dem. 563 00:28:27,370 --> 00:28:28,750 >> [VIDEOUPPSPELNING] 564 00:28:28,750 --> 00:28:31,830 >> -Låt Oss titta på vad vi bara såg i slow motion. 565 00:28:31,830 --> 00:28:35,230 När en kort puls av elektricitet sänds till läs / skrivhuvudet, 566 00:28:35,230 --> 00:28:39,000 det vänder på en liten elektromagnetisk för en bråkdel av en sekund. 567 00:28:39,000 --> 00:28:41,390 Magneten skapar en fält, som ändrar 568 00:28:41,390 --> 00:28:44,600 polariteten av en liten, liten del av metallpartiklarna 569 00:28:44,600 --> 00:28:46,960 vilken päls varje tallrik yta. 570 00:28:46,960 --> 00:28:50,020 Ett mönster serie av dessa små laddade områden på skivan 571 00:28:50,020 --> 00:28:54,590 representerar en enda bit av data i binära talsystemet används av datorer. 572 00:28:54,590 --> 00:28:57,510 >> Nu, om den nuvarande sänds en igenom läs / skrivhuvudet, 573 00:28:57,510 --> 00:28:59,899 området är polariserat i en riktning. 574 00:28:59,899 --> 00:29:01,940 Om strömmen skickas i den motsatta riktningen, 575 00:29:01,940 --> 00:29:04,020 polarisationen är omvänd. 576 00:29:04,020 --> 00:29:06,440 Hur får man data från hårddisken? 577 00:29:06,440 --> 00:29:08,190 Bara vända processen. 578 00:29:08,190 --> 00:29:10,440 Så det är partiklarna på disk som får ström 579 00:29:10,440 --> 00:29:12,260 i läs / skrivhuvudet rör sig. 580 00:29:12,260 --> 00:29:14,580 Sätt ihop miljontals dessa magnetiserade segment, 581 00:29:14,580 --> 00:29:16,220 och du har en fil. 582 00:29:16,220 --> 00:29:21,030 >> Nu kan bitar av en enda fil vara spridda över en driv s fat, 583 00:29:21,030 --> 00:29:24,060 ungefär som röran av papper på skrivbordet. 584 00:29:24,060 --> 00:29:27,590 Så en särskild extra fil håller koll på var allt är. 585 00:29:27,590 --> 00:29:30,440 Vill du inte önskar att du hade något sådant? 586 00:29:30,440 --> 00:29:31,290 >> [END SPELA] 587 00:29:31,290 --> 00:29:36,260 >> Så är hänvisade till det, kanske, är ämnet från igår av radering. 588 00:29:36,260 --> 00:29:38,380 När du tar bort en fil, går vi sa 589 00:29:38,380 --> 00:29:41,020 att en dator faktiskt gör vad, när du drar något 590 00:29:41,020 --> 00:29:44,110 till papperskorgen eller papperskorgen? 591 00:29:44,110 --> 00:29:45,150 Det glömmer bara det. 592 00:29:45,150 --> 00:29:47,540 Men 0 s och 1 s, de magnetiska partiklarna 593 00:29:47,540 --> 00:29:50,640 som ser ut som röda och blå saker här, eller min arm här, 594 00:29:50,640 --> 00:29:52,350 finns kvar på hårddisken. 595 00:29:52,350 --> 00:29:56,090 >> Och så finns det software-- Norton Utilities och Yesteryear 596 00:29:56,090 --> 00:29:58,159 och andra modernare software-- som bara 597 00:29:58,159 --> 00:30:01,200 kommer att skanna en hel hårddisk ser på alla dessa 0 s och 1 s, eftersom det 598 00:30:01,200 --> 00:30:06,890 visar sig att de flesta fil format-- Word-dokument, Excel-filer, bilder, 599 00:30:06,890 --> 00:30:10,380 video files-- alla har vissa mönster som är vanliga bland dem. 600 00:30:10,380 --> 00:30:12,550 Varje videofil kanske vara av en annan video, 601 00:30:12,550 --> 00:30:14,870 men den första flera bitar är oftast densamma. 602 00:30:14,870 --> 00:30:16,790 Eller de senaste bitarna är oftast densamma. 603 00:30:16,790 --> 00:30:19,910 >> Och så med hög sannolikhet, du kan söka efter dessa mönster. 604 00:30:19,910 --> 00:30:23,700 Och även om filen har glömts bort, du kan säga med hög sannolikhet, 605 00:30:23,700 --> 00:30:28,460 men det ser ut som ett Word-dokument, låter tillbaka den och un-glömma det, 606 00:30:28,460 --> 00:30:28,990 om du vill. 607 00:30:28,990 --> 00:30:32,330 Och så det är hur du kan återställa data som antingen har varit misstag 608 00:30:32,330 --> 00:30:36,560 raderas eller tas bort eller medvetet raderas oavsett ändamål. 609 00:30:36,560 --> 00:30:42,530 >> Däremot gör vad säker radering i samband med en bild som denna? 610 00:30:42,530 --> 00:30:44,059 Exakt, gör dem slumpmässigt. 611 00:30:44,059 --> 00:30:46,350 Så det slags flyttar några av ner dem, några av dem upp, 612 00:30:46,350 --> 00:30:49,433 lämnar några av dem oförändrade, och i allmänhet gör slumpmässigt brus ur det, 613 00:30:49,433 --> 00:30:52,960 eller bara kanske gör allt dem 0: s eller alla av dem en s. 614 00:30:52,960 --> 00:30:56,350 Och att alltför kan i allmänhet skrubba dina data bort. 615 00:30:56,350 --> 00:31:00,160 >> Så låt oss nu återvända till frågan beräknings tänkande, varigenom 616 00:31:00,160 --> 00:31:03,270 vi har formeln ingångar. 617 00:31:03,270 --> 00:31:06,390 Och algoritmer ger du utmatar slutligen. 618 00:31:06,390 --> 00:31:09,270 Vi fokuserar nu på ingångar och utgångar, för nu, jag 619 00:31:09,270 --> 00:31:12,159 anspråk har vi ett sätt att representerande in- och utgångar. 620 00:31:12,159 --> 00:31:13,450 Vi kommer bara att använda binär. 621 00:31:13,450 --> 00:31:15,910 >> Och oavsett vad vi vill representera dag, 622 00:31:15,910 --> 00:31:20,230 oavsett om det är en siffra eller en bokstav eller tusentals av dessa i en telefonbok 623 00:31:20,230 --> 00:31:23,210 eller bilder eller filmer, i slutet av dagen, det är alla 0: or och 1: or. 624 00:31:23,210 --> 00:31:26,640 Och jag hävdar att även om detta är en super enkel värld med bara 0: 625 00:31:26,640 --> 00:31:28,240 och 1: or, kan vi bygga upp oss. 626 00:31:28,240 --> 00:31:32,210 Och vi har sett ett exempel på att med bokstäver hittills. 627 00:31:32,210 --> 00:31:35,615 >> Så låt oss fokusera nu på detta mitten ingrediens, en algoritm. 628 00:31:35,615 --> 00:31:38,190 Och låt oss återkomma till detta exempel på Mike Smith. 629 00:31:38,190 --> 00:31:41,689 Så i denna telefonbok, som visserligen Vi använder inte så mycket längre, 630 00:31:41,689 --> 00:31:42,980 det finns ett problem som ska lösas. 631 00:31:42,980 --> 00:31:45,040 Vi vill hitta någon som Mike Smith. 632 00:31:45,040 --> 00:31:47,520 >> Och vad kan jag göra för att hitta Mike? 633 00:31:47,520 --> 00:31:51,197 Tja, jag kan bara öppna denna bok, börjar på den första sidan, 634 00:31:51,197 --> 00:31:52,780 och inse, åh, jag är i A-sektionen. 635 00:31:52,780 --> 00:31:53,510 Mike är inte där. 636 00:31:53,510 --> 00:31:55,510 Jag behöver S avdelning för Smith. 637 00:31:55,510 --> 00:31:58,192 Så bara hålla vända en sida i taget. 638 00:31:58,192 --> 00:32:00,900 Låt mig låtsas att allt detta är vita sidor och inte gula sidorna, 639 00:32:00,900 --> 00:32:02,910 eftersom vi inte kommer att hitta Mike i gula sidorna ändå. 640 00:32:02,910 --> 00:32:04,034 Men jag är i de vita sidorna. 641 00:32:04,034 --> 00:32:05,340 Och nu är jag i B sektionen. 642 00:32:05,340 --> 00:32:06,810 Jag har fortfarande inte hittat honom. 643 00:32:06,810 --> 00:32:08,890 Så jag håller vrida en sida i taget. 644 00:32:08,890 --> 00:32:10,130 >> Detta är en algoritm. 645 00:32:10,130 --> 00:32:12,440 Det är en uppsättning instruktioner för att lösa vissa problem. 646 00:32:12,440 --> 00:32:16,480 Med andra ord, titta på sida, om Mike är inte på det, 647 00:32:16,480 --> 00:32:20,020 vända sida, och upprepningar igen och igen och igen, 648 00:32:20,020 --> 00:32:21,760 idealiskt tittar ner när du gör det. 649 00:32:21,760 --> 00:32:24,120 Så är denna algoritm, denna process, eller hur? 650 00:32:24,120 --> 00:32:27,400 651 00:32:27,400 --> 00:32:28,830 >> Förlåt. 652 00:32:28,830 --> 00:32:30,056 Nej, jag höra några nos. 653 00:32:30,056 --> 00:32:33,250 654 00:32:33,250 --> 00:32:36,125 OK, men det är-- ja, det är verkligen tråkiga. 655 00:32:36,125 --> 00:32:39,000 Precis, vi kommer att vara här hela dagen om jag fortsätta leta efter Mike vid denna hastighet. 656 00:32:39,000 --> 00:32:41,430 Men låt mig hävdar att det är korrekt. 657 00:32:41,430 --> 00:32:43,850 Det är dumt, men det är rätt. 658 00:32:43,850 --> 00:32:47,209 >> Vid slutet av dagen, länge som det kan ta, jag hittar Mike om han är där 659 00:32:47,209 --> 00:32:48,250 och jag betalar uppmärksamhet. 660 00:32:48,250 --> 00:32:50,230 Och jag når så småningom hans sida. 661 00:32:50,230 --> 00:32:52,890 Och om jag får för långt, om Jag kommer till T avsnitt, 662 00:32:52,890 --> 00:32:55,900 då jag kan något optimera och bara säga, hm, allt gjort. 663 00:32:55,900 --> 00:32:57,980 Jag behöver inte ens slösa tid att gå till Z-talet. 664 00:32:57,980 --> 00:33:00,010 Men detta är en mycket linjär metod, om du 665 00:33:00,010 --> 00:33:03,370 kommer, en mycket sorts vänster-till-höger tillvägagångssätt, en rak linje. 666 00:33:03,370 --> 00:33:05,560 Och dess rätt men långsam. 667 00:33:05,560 --> 00:33:09,250 >> Så jag minns från skolan, sortera av en optimering av en första väghyvel, 668 00:33:09,250 --> 00:33:13,756 där jag lärde mig hur man räknar inte av dem men av twos-- så 2, 4, 6. 669 00:33:13,756 --> 00:33:15,630 Det är en, mycket svårare att gör, men i teorin, är det 670 00:33:15,630 --> 00:33:20,149 faster-- 8, 10, 12, 14, och så vidare. 671 00:33:20,149 --> 00:33:21,190 Vad sägs om att algoritmen? 672 00:33:21,190 --> 00:33:23,150 Är det mer effektiv? 673 00:33:23,150 --> 00:33:23,880 Är det snabbare? 674 00:33:23,880 --> 00:33:25,365 >> PUBLIK: Det är effektivt. 675 00:33:25,365 --> 00:33:28,560 >> DAVID MALAN: Ja, så det def-- det är bokstavligen dubbelt så snabbt, förutsatt att jag 676 00:33:28,560 --> 00:33:30,170 inte få löst upp med mina fingrar. 677 00:33:30,170 --> 00:33:32,294 Det är dubbelt så snabbt, eftersom Jag vänder genom två 678 00:33:32,294 --> 00:33:36,560 sidor på en gång i stället för en, men det är potentiellt korrekt, eftersom varför? 679 00:33:36,560 --> 00:33:37,852 >> PUBLIK: Du hoppa över några. 680 00:33:37,852 --> 00:33:41,185 DAVID MALAN: Höger, tänk om Mike händer att sandwiched-- kanske när jag senare 681 00:33:41,185 --> 00:33:44,370 i telefonboken, händer Mike att vara inklämt mellan dessa två sidor, 682 00:33:44,370 --> 00:33:46,720 och jag bara blint hoppa över den. 683 00:33:46,720 --> 00:33:48,490 Så vi behöver lite fix där. 684 00:33:48,490 --> 00:33:51,290 När jag träffade T avsnitt, jag kan inte bara tryggt säga, 685 00:33:51,290 --> 00:33:52,420 Vi hittade inte Mike Smith. 686 00:33:52,420 --> 00:33:53,770 Jag har förmodligen att fördubbla tillbaka. 687 00:33:53,770 --> 00:34:00,210 Eller i själva verket, när jag når någon namngav S-N, i stället för S-M för Smith, 688 00:34:00,210 --> 00:34:02,790 omedelbart, kunde jag dubbla tillbaka, eftersom han kanske 689 00:34:02,790 --> 00:34:03,900 var på föregående sida. 690 00:34:03,900 --> 00:34:05,070 >> Men jag behöver inte dubbla tillbaka långt. 691 00:34:05,070 --> 00:34:08,030 I teorin, om jag gör det på rätt tid, jag bara gå tillbaka en sida. 692 00:34:08,030 --> 00:34:10,139 Så det är att lägga till endast ett extra steg. 693 00:34:10,139 --> 00:34:13,070 Så jag har gått dubbelt så snabbt, men det kostade mig en extra sida. 694 00:34:13,070 --> 00:34:14,699 Men det känns som en nettovinst. 695 00:34:14,699 --> 00:34:17,230 >> Men detta är inte hur de flesta människor i Detta rum skulle lösa detta problem. 696 00:34:17,230 --> 00:34:20,313 Vad skulle en typisk person, kanske en För några år sedan gör att hitta Mike Smith? 697 00:34:20,313 --> 00:34:22,900 698 00:34:22,900 --> 00:34:24,800 Ja, inte hittar Mike. 699 00:34:24,800 --> 00:34:27,190 Vad gör jag? 700 00:34:27,190 --> 00:34:31,027 Så komma lite närmare, men jag gör veta-- vad som är sant om en telefonbok? 701 00:34:31,027 --> 00:34:32,110 PUBLIK: Det är sekventiell. 702 00:34:32,110 --> 00:34:32,760 DAVID MALAN: Det är sekventiell. 703 00:34:32,760 --> 00:34:33,750 Det är alfabetisk. 704 00:34:33,750 --> 00:34:36,540 Och så om jag är i M avsnittet Mike är klart till höger, 705 00:34:36,540 --> 00:34:39,949 Jag kan bokstavligen riva problemet i half-- 706 00:34:39,949 --> 00:34:44,360 Det är oftast lättare än that-- tår problemet på mitten och kasta bort det, 707 00:34:44,360 --> 00:34:47,627 så att nu, jag har ett problem som är inte längre 1000 pages-- som var svårt, 708 00:34:47,627 --> 00:34:50,210 eftersom jag tror att jag faktiskt slet telefonboken detta time-- inte 709 00:34:50,210 --> 00:34:52,219 1000 sidor, men 500. 710 00:34:52,219 --> 00:34:54,750 >> Så problemet är bokstavligen hälften så stort. 711 00:34:54,750 --> 00:34:58,170 Och det är ganska övertygande, eftersom med mina tidigare algoritmer, version 712 00:34:58,170 --> 00:35:02,870 1 och 2, jag var bara att göra problemet en sida mindre, två sidor mindre 713 00:35:02,870 --> 00:35:03,470 vid en tid. 714 00:35:03,470 --> 00:35:07,230 Medan nu gjorde jag det 500 sidor mindre alla på en gång. 715 00:35:07,230 --> 00:35:10,089 >> OK, så nu föreslår Karim att jag går till den högra halvan. 716 00:35:10,089 --> 00:35:12,380 Så jag kommer att gå ungefär till mitten, ge eller ta. 717 00:35:12,380 --> 00:35:15,185 Och om jag gjorde detta matematiskt, Jag kunde gå direkt till mitten. 718 00:35:15,185 --> 00:35:17,060 Och nu inser jag, åh, Jag är i T avsnitt. 719 00:35:17,060 --> 00:35:18,280 Jag gjorde faktiskt gå för långt. 720 00:35:18,280 --> 00:35:21,670 >> Men jag kan, återigen, riva problem i halv, kasta bort det. 721 00:35:21,670 --> 00:35:23,330 Och mina byte inte är så stor. 722 00:35:23,330 --> 00:35:28,780 Det är bara, vad, 256 sidor eller 250 sidor, ge eller ta just nu. 723 00:35:28,780 --> 00:35:31,570 Men det är fortfarande långt mer än en sida eller två sidor. 724 00:35:31,570 --> 00:35:33,345 >> Och så nu, jag går ungefär till mitten. 725 00:35:33,345 --> 00:35:35,330 Åh, det gjorde jag inte gå ganska långt nog nu. 726 00:35:35,330 --> 00:35:37,880 Så jag upprepar, upprepa, upprepa, upprepa, tills jag är förhoppningsvis 727 00:35:37,880 --> 00:35:40,360 vänster med bara en sida. 728 00:35:40,360 --> 00:35:44,000 >> Så som inbjuder frågan, om jag började med cirka 1000 sidor, 729 00:35:44,000 --> 00:35:47,340 hur många steg tog det mig med version 1 av min algoritm? 730 00:35:47,340 --> 00:35:50,420 Tja, om Mike är i S sektionen, i värsta fall, 731 00:35:50,420 --> 00:35:52,630 det är ganska nära slutet av alfabetet. 732 00:35:52,630 --> 00:35:56,559 Så om telefonboken har 1000 sidor, Jag hittar Mike inom 1000 sidor, 733 00:35:56,559 --> 00:35:57,100 ge eller ta. 734 00:35:57,100 --> 00:35:59,750 Kanske är det som 800 eller så, men det är ganska nära till 1000. 735 00:35:59,750 --> 00:36:01,680 >> Medan i det andra algoritm, hur många 736 00:36:01,680 --> 00:36:06,840 sidan vänder maximalt kanske jag kräver att hitta Mike Smith? 737 00:36:06,840 --> 00:36:09,970 Det finns 1.000 sidor, men jag är gör dem två åt gången. 738 00:36:09,970 --> 00:36:13,045 Höger, så max som 500ish, eftersom om jag går igenom hela telefonboken, 739 00:36:13,045 --> 00:36:14,170 vid vilken punkt, kan jag sluta. 740 00:36:14,170 --> 00:36:16,669 Men jag kan raka bort ett par av bara stannar vid T avsnitt. 741 00:36:16,669 --> 00:36:19,880 Men det är i värsta fall 500 sidor. 742 00:36:19,880 --> 00:36:24,710 >> Så hur många gånger kan jag dela upp en 1,00o-sida telefonboken i hälften igen 743 00:36:24,710 --> 00:36:30,450 och igen och igen-- från 1000 till 500 till 250 till 125? 744 00:36:30,450 --> 00:36:32,250 Hur lång tid innan jag slog en sida? 745 00:36:32,250 --> 00:36:35,510 746 00:36:35,510 --> 00:36:36,370 Ja, det handlar om 10. 747 00:36:36,370 --> 00:36:40,780 Beroende på avrundning och så är det ca 10 sidor totala behov vridas 748 00:36:40,780 --> 00:36:43,290 eller telefonböcker måste rivas. 749 00:36:43,290 --> 00:36:44,710 >> Så det är ganska kraftfull. 750 00:36:44,710 --> 00:36:48,170 Vi började med en 1000-sidig problem i alla tre av dessa berättelser. 751 00:36:48,170 --> 00:36:51,850 Men i den första algoritmen, det tog mig, värsta fall 1000 sida 752 00:36:51,850 --> 00:36:52,740 vänder för att hitta Mike. 753 00:36:52,740 --> 00:36:55,590 Andra algoritm, 500 sidor för att hitta Mike. 754 00:36:55,590 --> 00:36:58,480 Tredje algoritm, till 10 sidor hitta Mike. 755 00:36:58,480 --> 00:37:00,230 Och det är ännu mer kraftfull när du tänker 756 00:37:00,230 --> 00:37:01,860 om typ av en motsatt scenario. 757 00:37:01,860 --> 00:37:05,680 Antag att telefonbolaget nästa år kanske slår samman två städer tillsammans, 758 00:37:05,680 --> 00:37:08,550 och telefonboken är plötsligt denna tjocka, i stället för detta att, 759 00:37:08,550 --> 00:37:12,470 så 2.000 sidor i stället för 1000. 760 00:37:12,470 --> 00:37:15,640 Tja, min första algoritmen söker Mike Smith i en 2000-sidig telefonboken, 761 00:37:15,640 --> 00:37:21,460 värsta fall kommer det att ta hur många sida vänder nästa år? 762 00:37:21,460 --> 00:37:24,800 >> Telefonboken är 2.000 sidor, so-- bra, inte en till. 763 00:37:24,800 --> 00:37:29,540 Om telefonboken är dubbelt så tjock i den första algoritmen, första algoritmen, 764 00:37:29,540 --> 00:37:30,380 2000, eller hur? 765 00:37:30,380 --> 00:37:33,005 I värsta fall, Mike är verkligen nära slutet av boken, 766 00:37:33,005 --> 00:37:34,110 så det är 2.000 sida varv. 767 00:37:34,110 --> 00:37:38,070 Andra algoritmen går genom tvåor, som 1000 sidor. 768 00:37:38,070 --> 00:37:41,490 >> Men hur i min tredje och senaste algoritm? 769 00:37:41,490 --> 00:37:44,950 Om telefonbolaget fördubblar antal sidor från 1000 till 2000, 770 00:37:44,950 --> 00:37:47,770 hur många gånger behöver jag riva boken i hälften för att hitta Mike? 771 00:37:47,770 --> 00:37:48,710 >> PUBLIK: Bara en. 772 00:37:48,710 --> 00:37:51,001 >> DAVID MALAN: Bara en, eftersom med en sida tår, 773 00:37:51,001 --> 00:37:53,270 Jag kan bokstavligen dela och erövra, om man så vill, 774 00:37:53,270 --> 00:37:57,410 det problemet i halv tagande en massiv bit av det. 775 00:37:57,410 --> 00:38:01,420 Och så detta är ett exempel på effektivitet och utan tvekan en algoritm 776 00:38:01,420 --> 00:38:04,100 med vilken vi alla är sorts intuitivt bekant. 777 00:38:04,100 --> 00:38:07,780 Men det är lika korrekt som mina andra algoritmer 778 00:38:07,780 --> 00:38:09,630 med det tweak för den andra algoritmen, 779 00:38:09,630 --> 00:38:11,290 men det är så mycket mer effektiv. 780 00:38:11,290 --> 00:38:14,030 >> Och i själva verket, vad en dator vetenskapsman, eller i sin tur en programmerare, 781 00:38:14,030 --> 00:38:17,580 skulle normalt gör när du skriver kod är att försöka räkna ut, 782 00:38:17,580 --> 00:38:19,960 okej, jag vill inte min Programmet bara för att vara korrekt, 783 00:38:19,960 --> 00:38:23,220 Jag vill också att det ska vara effektivt och lösa problem väl. 784 00:38:23,220 --> 00:38:26,450 Föreställa sig i den verkliga världen i dag, som Google indexerar, sökningar 785 00:38:26,450 --> 00:38:31,580 som miljarder sidor, tänk om de används den första algoritmen för att hitta katter 786 00:38:31,580 --> 00:38:34,620 bland en miljard pages-- tittar på den första sidan i sin databas, 787 00:38:34,620 --> 00:38:37,700 den andra, den tredje, bara titta för en katt, letar efter en katt. 788 00:38:37,700 --> 00:38:40,350 Det är ganska sakta verkar. 789 00:38:40,350 --> 00:38:43,170 De kunde i stället använda något kallad binär sökning, som 790 00:38:43,170 --> 00:38:47,420 finns ingen coincidence-- bi betyder två, vi fortsätta dela något i två, i half-- 791 00:38:47,420 --> 00:38:50,205 de kunde använda binär sökning och kanske hitta katter ännu snabbare, 792 00:38:50,205 --> 00:38:51,830 eller vad det är du letar efter. 793 00:38:51,830 --> 00:38:54,125 >> Och ärligt talat, det finns ens snyggare algoritmer 794 00:38:54,125 --> 00:38:56,250 att göra mycket mer än bara dividera saker i halv 795 00:38:56,250 --> 00:38:58,180 För att snabbt hitta information. 796 00:38:58,180 --> 00:39:00,880 Och vi pratar lite om de efter lunch idag. 797 00:39:00,880 --> 00:39:02,640 Så låt mig bara försöka att representera denna. 798 00:39:02,640 --> 00:39:05,380 Vi behöver inte gå in någon matematik eller faktiska siffror. 799 00:39:05,380 --> 00:39:07,070 Vi kan prata om detta i det abstrakta. 800 00:39:07,070 --> 00:39:11,580 >> Men låt mig bara föreslå, om du hade en diskussion nu 801 00:39:11,580 --> 00:39:13,491 med ingenjörerna föreslå denna algoritm 802 00:39:13,491 --> 00:39:15,490 och du försöker göra en beräknad beslut, 803 00:39:15,490 --> 00:39:17,285 eftersom kanske ingenjör säger till dig, 804 00:39:17,285 --> 00:39:19,910 Vet du vad, jag kan genomföra en linjär sökning i som två minuter. 805 00:39:19,910 --> 00:39:21,150 Det är så lätt. 806 00:39:21,150 --> 00:39:24,790 Binär sökning är inte så märkvärdigt, men det kommer att ta mig som 10 minuter, 807 00:39:24,790 --> 00:39:26,650 så 5 gånger så lång. 808 00:39:26,650 --> 00:39:30,900 >> Det finns en handel här, även i termer att besluta vilken programvara för att skriva. 809 00:39:30,900 --> 00:39:34,760 Skriver du enklare algoritm, som bara tar dig två minuter? 810 00:39:34,760 --> 00:39:39,880 Eller vill du spendera mer tid, 10 minuter, skriver snyggare algoritm? 811 00:39:39,880 --> 00:39:43,540 Hur bestämmer ni denna typ av fråga? 812 00:39:43,540 --> 00:39:46,710 Eller så kan du göra det lite mer verklig. 813 00:39:46,710 --> 00:39:50,610 Jag berätta för min chef det kommer att ta mig antingen en vecka eller 10 veckor 814 00:39:50,610 --> 00:39:52,490 att genomföra den mjukvara på detta sätt, hur 815 00:39:52,490 --> 00:39:56,103 du bestämmer vilken algoritm för att grönt ljus? 816 00:39:56,103 --> 00:39:56,603 Karim? 817 00:39:56,603 --> 00:39:57,550 >> PUBLIK: Publiken, antar jag. 818 00:39:57,550 --> 00:39:57,960 >> DAVID MALAN: Publiken. 819 00:39:57,960 --> 00:39:59,460 Vad menar du med publiken? 820 00:39:59,460 --> 00:40:03,460 >> PUBLIK: Om det kommer som skall användas av användare 821 00:40:03,460 --> 00:40:09,050 som [OHÖRBART] av användare [OHÖRBART]. 822 00:40:09,050 --> 00:40:11,232 Men om det är något du är bara göra själv 823 00:40:11,232 --> 00:40:13,946 för att underlätta ett problem, [OHÖRBART] snabbare. 824 00:40:13,946 --> 00:40:16,820 DAVID MALAN: Ja, det är snabbt och smutsig är ett bra sätt att beskriva den. 825 00:40:16,820 --> 00:40:18,695 I själva verket, om du är beskriver en stor del av min tid 826 00:40:18,695 --> 00:40:23,630 i grad skolan, varvid ofta gånger, Jag skrev dålig kod medvetet so-- 827 00:40:23,630 --> 00:40:26,490 åtminstone, det är hur jag rationaliseras det-- medvetet så, 828 00:40:26,490 --> 00:40:30,670 för även om jag skrev kod som var relativt långsam att utföra, 829 00:40:30,670 --> 00:40:33,750 Jag kunde skriva själva koden ganska snabbt, spendera bara några minuter 830 00:40:33,750 --> 00:40:35,107 eller timmar inte dagar. 831 00:40:35,107 --> 00:40:37,190 Och det visade sig, jag ibland behövs för att sova. 832 00:40:37,190 --> 00:40:41,270 Så även om min kod krävs 8 timmar att köra, väl det är bra, 833 00:40:41,270 --> 00:40:42,850 Jag ska bara gå att sova medan den körs. 834 00:40:42,850 --> 00:40:46,350 >> Så på den tiden, jag trodde att detta var mycket smart, även om jag tydligen 835 00:40:46,350 --> 00:40:48,990 arbetat genom min PhD mycket långsamt. 836 00:40:48,990 --> 00:40:52,270 Men det omvända av det är att om jag skrev programvara 837 00:40:52,270 --> 00:40:55,930 för andra människor som betydde mer än mig, ja, 838 00:40:55,930 --> 00:40:59,580 har dem vänta 8 timmar till få tillbaka sina sökresultat 839 00:40:59,580 --> 00:41:01,350 är inte så övertygande. 840 00:41:01,350 --> 00:41:04,090 Och så spenderar mer tid up front för att skriva programvara 841 00:41:04,090 --> 00:41:07,300 som är effektivare, mer som vår tredje algoritm, 842 00:41:07,300 --> 00:41:09,780 förmodligen gynnar användarna över tiden. 843 00:41:09,780 --> 00:41:12,710 Så det beror egentligen över tid hur dessa kostnader lägga upp. 844 00:41:12,710 --> 00:41:14,960 Om du kommer att skriva programvara för att använda den en gång, 845 00:41:14,960 --> 00:41:17,240 förmodligen kan lika gärna göra snabb och smutsig, som man säger. 846 00:41:17,240 --> 00:41:18,198 Bara kasta det tillsammans. 847 00:41:18,198 --> 00:41:20,560 Det är kod som generar du, det är så illa, 848 00:41:20,560 --> 00:41:23,860 men det får jobbet gjort på rätt sätt, även om det inte är effektivt. 849 00:41:23,860 --> 00:41:27,200 Omvänt spenderar du mer tid på något, får det bara rätt. 850 00:41:27,200 --> 00:41:30,730 Och sedan skrivs över tiden, som initial kostnad för tid 851 00:41:30,730 --> 00:41:34,330 är förmodligen värt, om du håller optimera för det vanliga fallet. 852 00:41:34,330 --> 00:41:37,620 >> Och faktiskt, det är ett tema i programmering, eller datavetenskap mer 853 00:41:37,620 --> 00:41:41,390 i allmänhet, försöker optimera inte för den ovanliga fallet 854 00:41:41,390 --> 00:41:44,390 men de gemensamma case-- vad operation kommer att hända om och om igen? 855 00:41:44,390 --> 00:41:47,730 Om du kommer att ha miljarder av användare som söker på din webbplats, 856 00:41:47,730 --> 00:41:52,030 bör du förmodligen spendera de extra veckor på framsidan skriver bättre programvara, 857 00:41:52,030 --> 00:41:53,670 så att alla användare gynnas. 858 00:41:53,670 --> 00:41:57,840 Nu ska vi försöka fånga detta en lite pictorially, men inte så mycket 859 00:41:57,840 --> 00:41:58,610 numeriskt. 860 00:41:58,610 --> 00:42:01,680 >> Så här är bara en gammal skola diagrammet. 861 00:42:01,680 --> 00:42:04,260 Och låt mig säga att det är dags. 862 00:42:04,260 --> 00:42:06,660 Och det spelar ingen roll Vad-- faktiskt, nej, inte tid. 863 00:42:06,660 --> 00:42:08,320 Låt oss sätta det på den andra axeln. 864 00:42:08,320 --> 00:42:15,700 Låt oss säga att det är dags, och detta är storleken på problemet. 865 00:42:15,700 --> 00:42:17,830 >> Och datavetare kanske i allmänhet ringa 866 00:42:17,830 --> 00:42:20,820 detta bara n. n är som vår gå till variabel, där 867 00:42:20,820 --> 00:42:26,351 n är ett tal, n antal, och det är det antal oavsett ingångar du har. 868 00:42:26,351 --> 00:42:28,100 Så i detta fall, är n antalet sidor. 869 00:42:28,100 --> 00:42:30,150 Så kan det vara 1000 i fallet vi just sagt. 870 00:42:30,150 --> 00:42:31,969 >> Så tiden kan vara någon måttenhet. 871 00:42:31,969 --> 00:42:32,760 Kanske är det andra. 872 00:42:32,760 --> 00:42:33,410 Kanske är det dagar. 873 00:42:33,410 --> 00:42:34,590 Kanske är det som sidan varv. 874 00:42:34,590 --> 00:42:35,215 Spelar ingen roll. 875 00:42:35,215 --> 00:42:38,840 Oavsett vad du vill räkna, att kommer att finnas tid eller kosta ekvivalent. 876 00:42:38,840 --> 00:42:42,400 >> Så med den allra första algoritm, om jag, till exempel, 877 00:42:42,400 --> 00:42:45,920 hade en 1000-sidig telefonboken, Jag kommer att dra en punkt där, 878 00:42:45,920 --> 00:42:51,450 eftersom om det är 1000 sidor, tog det ungefär 1000 sida vänder, ge eller ta. 879 00:42:51,450 --> 00:42:54,100 Och sedan om jag hade en 2000-sida telefonboken, 880 00:42:54,100 --> 00:42:57,200 och jag kommer att dra en andra dot här, eftersom det för 2000 sidor, 881 00:42:57,200 --> 00:42:59,810 det är som 2.000 sekunder eller sida vänder eller något annat. 882 00:42:59,810 --> 00:43:02,480 Och så när jag sa tidigare, är det typ av ett linjärt förhållande, 883 00:43:02,480 --> 00:43:06,020 det var avsiktligt, eftersom jag ville senare on-- rätt now-- att dra en linje. 884 00:43:06,020 --> 00:43:07,770 Det är lite av en rak line relation. 885 00:43:07,770 --> 00:43:10,180 Lutningen är 1/1, om man så vill. 886 00:43:10,180 --> 00:43:14,630 >> Under tiden, den andra algoritmen sagt, om du har 1000 sidor 887 00:43:14,630 --> 00:43:17,680 och du använde den andra algoritmen, där jag räknade med 2 s, vrida 888 00:43:17,680 --> 00:43:22,564 två sidor åt gången, ska jag dra en prick under eller över mitt ursprungliga prick? 889 00:43:22,564 --> 00:43:23,450 >> PUBLIK: Nedan. 890 00:43:23,450 --> 00:43:27,992 >> DAVID MALAN: Nedan grund som vi såg, det tar mindre tid, hälften så mycket tid. 891 00:43:27,992 --> 00:43:29,950 Så pricken bör vara halv så hög som den andra. 892 00:43:29,950 --> 00:43:33,330 Och samma affär här, denna punkt bör nog vara ungefär där. 893 00:43:33,330 --> 00:43:39,666 Och så min andra algoritm, på samma sätt, har ett linjärt förhållande med tiden. 894 00:43:39,666 --> 00:43:41,990 Och vi kan dra den som sådan. 895 00:43:41,990 --> 00:43:45,950 >> Så nu den tredje och sista algoritm är lite svårare att dra. 896 00:43:45,950 --> 00:43:49,530 Men intuitivt, om jag har 1000 sidor med min tredje algoritm, 897 00:43:49,530 --> 00:43:52,340 det ska bara ta mig som 10 steg. 898 00:43:52,340 --> 00:43:57,500 Och om jag har 2.000 sidor med min tredje algoritm, 899 00:43:57,500 --> 00:44:01,570 det ska ta mig inte 10 steg, men 11, bara en. 900 00:44:01,570 --> 00:44:03,610 Så vi bara knappt går att se här. 901 00:44:03,610 --> 00:44:06,010 >> Och det visar sig, om Jag zooma in på detta, jag är 902 00:44:06,010 --> 00:44:09,320 kommer att överdriva för effekt, formen på den linjen, i slutändan, 903 00:44:09,320 --> 00:44:11,990 är inte en rak line-- eftersom, faktiskt om det vore, 904 00:44:11,990 --> 00:44:15,390 det skulle se mer som others-- det är faktiskt en krökt linje 905 00:44:15,390 --> 00:44:19,265 att om vi zoomar in, kommer att se mycket mer om detta. 906 00:44:19,265 --> 00:44:21,670 Det-- väl, OK, ignorera denna del. 907 00:44:21,670 --> 00:44:25,330 Det var min penna går vinkel. 908 00:44:25,330 --> 00:44:29,000 Det är en böjd linje som alltid ökar alltid, alltid, alltid 909 00:44:29,000 --> 00:44:32,100 ökar, men bara knappt. 910 00:44:32,100 --> 00:44:36,260 >> Och så över tiden, har du förhållande som är mer likt det här. 911 00:44:36,260 --> 00:44:37,540 Det ser nästan rak. 912 00:44:37,540 --> 00:44:40,330 Men det är aldrig så långsamt ökar. 913 00:44:40,330 --> 00:44:44,780 Men för nästan alla punkter längs din x-axeln, horisontell axel, 914 00:44:44,780 --> 00:44:46,550 Det är lägre än de andra linjer. 915 00:44:46,550 --> 00:44:49,930 >> Så detta kan vara en relation n, varigenom om du har n sidor, 916 00:44:49,930 --> 00:44:51,100 tar dig n sekunder. 917 00:44:51,100 --> 00:44:53,320 Detta kan vara ett förhållande n / 2. 918 00:44:53,320 --> 00:44:56,710 Du har n sidor, det tar du n / 2 sekunder, hälften så många. 919 00:44:56,710 --> 00:45:00,590 Och detta är en logaritmisk förhållande, vilket 920 00:45:00,590 --> 00:45:08,920 om ni minns, log bas 2 av n fångar denna typ av tillväxt, så att säga. 921 00:45:08,920 --> 00:45:12,000 Så det här är den typ av helig gral bland de tre av dessa 922 00:45:12,000 --> 00:45:15,940 här, eftersom det är bara så mycket mer effektiv, men utan tvekan mer komplex 923 00:45:15,940 --> 00:45:18,610 att genomföra. 924 00:45:18,610 --> 00:45:20,510 Några frågor? 925 00:45:20,510 --> 00:45:26,220 >> Bra låt mig göra detta, låt mig att öppna upp ett textfönster 926 00:45:26,220 --> 00:45:29,100 bara så vi kan försöka formalisera något här. 927 00:45:29,100 --> 00:45:32,410 Så låt mig gå vidare nu och genomföra denna algoritm 928 00:45:32,410 --> 00:45:35,170 för att hitta Mike Smith i koden, om man så vill, pseudokoden. 929 00:45:35,170 --> 00:45:36,620 Jag tänker inte använda Java eller C ++. 930 00:45:36,620 --> 00:45:38,610 Jag kommer bara att använda slags Engelsk-liknande syntax, som vi 931 00:45:38,610 --> 00:45:40,151 skulle generellt kalla pseudokod kod. 932 00:45:40,151 --> 00:45:41,660 Här har jag ett tomt fönster. 933 00:45:41,660 --> 00:45:48,180 Och jag säger steg 1 i mycket första algoritmen är att plocka upp telefonboken. 934 00:45:48,180 --> 00:45:51,740 Steg 2 är öppen bok till första sidan. 935 00:45:51,740 --> 00:45:58,080 Steg 3 kommer att vara titta på sida för Mike Smith. 936 00:45:58,080 --> 00:46:02,740 Om på sidan, ring Mike. 937 00:46:02,740 --> 00:46:11,640 annars tur sida och gå till steg 3. 938 00:46:11,640 --> 00:46:13,590 Klar, låt oss säga. 939 00:46:13,590 --> 00:46:18,110 >> Och så det är inte helt perfekt, som vi ser i ett ögonblick. 940 00:46:18,110 --> 00:46:21,050 Men låt oss betrakta vad koncept Jag har introducerat här. 941 00:46:21,050 --> 00:46:24,450 Så steg 1 och 2 och 3 är ganska mycket verb. 942 00:46:24,450 --> 00:46:26,544 De är uttalanden actions-- göra detta. 943 00:46:26,544 --> 00:46:28,710 Och så i ett programmerings språk, vi skulle i allmänhet 944 00:46:28,710 --> 00:46:32,349 kalla dem uttalanden eller funktioner eller tillvägagångssätt, 945 00:46:32,349 --> 00:46:33,640 kalla dem ett antal saker. 946 00:46:33,640 --> 00:46:35,460 Men de är bara actions-- göra detta. 947 00:46:35,460 --> 00:46:40,370 >> Steg 4 är fundamentalt annorlunda, eftersom det är typ av att ställa en fråga. 948 00:46:40,370 --> 00:46:42,400 Det säger vi är typ på en gaffel i vägen. 949 00:46:42,400 --> 00:46:48,000 Om Mike är på sidan, ring honom, så sväng vänster, om man så vill. 950 00:46:48,000 --> 00:46:52,170 Och om inte, gå tillbaka till någon andra page-- eller snarare, ledsen, 951 00:46:52,170 --> 00:46:56,650 gå tillbaka till någon annan steg, som inducerar någon form av looping konstruktionen. 952 00:46:56,650 --> 00:46:59,530 Och vi gör det igen och igen och igen. 953 00:46:59,530 --> 00:47:01,300 >> Och faktiskt, vet du vad? 954 00:47:01,300 --> 00:47:01,800 Ja. 955 00:47:01,800 --> 00:47:04,704 956 00:47:04,704 --> 00:47:09,010 annars om i slutet av boken stopp. 957 00:47:09,010 --> 00:47:11,624 Så vi behöver typ av en tredje skick, eftersom du 958 00:47:11,624 --> 00:47:14,290 kan inte hålla vrida sidesannons nauseum, eftersom så småningom kommer jag 959 00:47:14,290 --> 00:47:15,320 slog i slutet av boken. 960 00:47:15,320 --> 00:47:18,546 Och ett fel i ett program kan vara inte förutse det scenariot. 961 00:47:18,546 --> 00:47:21,420 Och då jag bara insett, oh, vänta en minut, jag behöver en tredje scenario. 962 00:47:21,420 --> 00:47:23,900 Om jag är ute sidor, jag bör egentligen bara sluta. 963 00:47:23,900 --> 00:47:25,330 Annars är det odefinierade. 964 00:47:25,330 --> 00:47:29,260 Vad kommer att hända om jag håller säger vända blad och gå tillbaka, 965 00:47:29,260 --> 00:47:31,810 Det är när datorer frysa eller kraschar, när du träffar 966 00:47:31,810 --> 00:47:34,160 några oväntade situation som. 967 00:47:34,160 --> 00:47:37,280 >> Nu, hur Mike Smith tredje algorithm-- 968 00:47:37,280 --> 00:47:43,150 plocka upp telefonboken, öppen bok att first-- till 969 00:47:43,150 --> 00:47:48,640 nej, inte första sidan den här gången, att middle-- oh, ja, det skulle 970 00:47:48,640 --> 00:47:49,640 vara den andra algoritmen. 971 00:47:49,640 --> 00:47:50,590 Låt oss bara hoppa till tredje. 972 00:47:50,590 --> 00:47:50,930 >> PUBLIK: Åh, jag är ledsen. 973 00:47:50,930 --> 00:47:51,971 >> DAVID MALAN: Det är bra. 974 00:47:51,971 --> 00:47:58,590 Låt oss bara hoppa till third-- öppna till mitten och nu leta efter Mike Smith. 975 00:47:58,590 --> 00:48:02,300 om på sidan, ring Mike. 976 00:48:02,300 --> 00:48:04,910 Och vad vill vi säga här? 977 00:48:04,910 --> 00:48:06,134 annars vad? 978 00:48:06,134 --> 00:48:10,620 979 00:48:10,620 --> 00:48:12,370 Vi kan uttrycka detta i ett antal sätt. 980 00:48:12,370 --> 00:48:13,369 Det finns inget rätt svar. 981 00:48:13,369 --> 00:48:20,819 982 00:48:20,819 --> 00:48:23,735 OK, om inte igen, men vi måste be-- OK, vi vill dela i två, 983 00:48:23,735 --> 00:48:25,630 men vi vill gå till vänster eller gå till höger? 984 00:48:25,630 --> 00:48:29,560 Hur kan vi uttrycka den uppfattningen? 985 00:48:29,560 --> 00:48:31,790 Tja, i Mikes fall ja, det är rättvist. 986 00:48:31,790 --> 00:48:35,050 Men OK, så det är faktiskt en bra poäng. 987 00:48:35,050 --> 00:48:35,550 Det är okej. 988 00:48:35,550 --> 00:48:36,924 Vi ska hålla kommer med denna logik. 989 00:48:36,924 --> 00:48:38,182 Så-- 990 00:48:38,182 --> 00:48:39,810 >> PUBLIK: Mindre än hälften. 991 00:48:39,810 --> 00:48:40,560 DAVID MALAN: Ja. 992 00:48:40,560 --> 00:48:49,820 Så annanstans om sidan är, kommer vi att säga, mindre än Smith, till vänster om Smith, 993 00:48:49,820 --> 00:48:52,220 then-- låt oss se, är detta kommer att komplicera? 994 00:48:52,220 --> 00:49:01,885 annars om sidan kommer före Smith, tår i halv, kasta bort som en halv? 995 00:49:01,885 --> 00:49:05,643 996 00:49:05,643 --> 00:49:09,140 >> PUBLIK: Jag trodde det var [OHÖRBART]. 997 00:49:09,140 --> 00:49:11,650 >> DAVID MALAN: jag hör både svar. 998 00:49:11,650 --> 00:49:12,431 >> PUBLIK: Vänster. 999 00:49:12,431 --> 00:49:14,430 DAVID MALAN: OK, kasta bort vänstra halvan, som Lakisa 1000 00:49:14,430 --> 00:49:19,700 sade tidigare, vänster halv, då jag typ av 1001 00:49:19,700 --> 00:49:23,940 vill bara gå att-- jag gå till höger. 1002 00:49:23,940 --> 00:49:27,380 Eller ekvivalent, och jag gjorde en liten bit av en röra av början här, 1003 00:49:27,380 --> 00:49:30,760 Jag vill effektivt gå till steg 2 igen, 1004 00:49:30,760 --> 00:49:38,270 där öppna för middle-- eller open-- ja, låt oss bara säga, sidor till mitten. 1005 00:49:38,270 --> 00:49:39,020 Och detta löser det. 1006 00:49:39,020 --> 00:49:39,936 Det är inte längre en bok. 1007 00:49:39,936 --> 00:49:42,210 Det är bara hälften av en bok, så öppna sidor till mitten. 1008 00:49:42,210 --> 00:49:44,010 >> else-- var nästan där. 1009 00:49:44,010 --> 00:49:54,000 Steg 6, annars om sidan kommer efter Smith, riva i hälften, kasta bort högra halvan, 1010 00:49:54,000 --> 00:49:55,680 sedan gå vidare till steg 2. 1011 00:49:55,680 --> 00:49:58,920 1012 00:49:58,920 --> 00:50:05,230 annars sluta, en fjärde scenario om vi har inga sidor kvar att vända. 1013 00:50:05,230 --> 00:50:06,394 Så vi kunde rensa upp här. 1014 00:50:06,394 --> 00:50:07,560 Och vi bör städa upp detta. 1015 00:50:07,560 --> 00:50:10,656 Detta är mycket pseudokod kod, om du kommer mycket hög nivå beskrivning. 1016 00:50:10,656 --> 00:50:12,280 Men det fångar i allmänhet idén. 1017 00:50:12,280 --> 00:50:16,040 >> Och, återigen, i detta scenario, vi har begreppet tillstånd, 1018 00:50:16,040 --> 00:50:20,450 en filial, ett vägskäl, vilket gör en decision-- om detta, gå denna väg, 1019 00:50:20,450 --> 00:50:23,082 annars om, gå denna väg, annars om, gå den vägen. 1020 00:50:23,082 --> 00:50:25,040 Och detta är en mycket vanlig programmeringsteknik 1021 00:50:25,040 --> 00:50:27,721 att avgöra vilken riktning att gå, så att säga. 1022 00:50:27,721 --> 00:50:29,970 Och vi har också någon form av looping struktur, där 1023 00:50:29,970 --> 00:50:32,440 vi gör något om och om igen. 1024 00:50:32,440 --> 00:50:34,820 >> Nu visar det sig, mycket som i detta exempel, 1025 00:50:34,820 --> 00:50:37,660 är super exakt är viktigt. 1026 00:50:37,660 --> 00:50:42,180 Men vi har också sett något att vi hålla kräver abstraktion. 1027 00:50:42,180 --> 00:50:45,490 Vad innebär det att plocka upp telefonbok? 1028 00:50:45,490 --> 00:50:47,740 Vi bara slags ta för givet i detta rum 1029 00:50:47,740 --> 00:50:49,340 att det har någon semantisk mening. 1030 00:50:49,340 --> 00:50:51,740 Alla vi bara typ av vet, åh, väl, plocka upp telefonboken. 1031 00:50:51,740 --> 00:50:52,864 Vad betyder det egentligen? 1032 00:50:52,864 --> 00:50:59,060 Tja, som verkligen betyder sträcker handen, luta, förlänga fingrar, 1033 00:50:59,060 --> 00:51:03,890 nypa bok mellan fingrarna, stå upp, dra handen mot dig. 1034 00:51:03,890 --> 00:51:05,940 Och vi kan vara riktigt pedantisk om detta, 1035 00:51:05,940 --> 00:51:08,640 verkligen är super exakt vad jag gör. 1036 00:51:08,640 --> 00:51:13,300 Men alla dessa steg kollektivt vad det innebär att plocka upp en telefonbok. 1037 00:51:13,300 --> 00:51:16,940 >> Och så tidigare, när jag sa, var av dessa två första uttalanden 1038 00:51:16,940 --> 00:51:20,830 kan betraktas som en fortsätta eller en funktion, 1039 00:51:20,830 --> 00:51:24,090 verkligen representerar vad vi hålla ringer en abstraktion. 1040 00:51:24,090 --> 00:51:28,770 Det är som en hög nivå begrepps beskrivning av ett problem som 1041 00:51:28,770 --> 00:51:31,110 faktiskt innebär en hel del steg. 1042 00:51:31,110 --> 00:51:34,190 Och så detta är också en återkommande ämne i programmering, 1043 00:51:34,190 --> 00:51:41,125 där jag kan skriva ett program med användning av syntaxen som this-- 1044 00:51:41,125 --> 00:51:42,000 pick_up_phone_book (). 1045 00:51:42,000 --> 00:51:44,344 1046 00:51:44,344 --> 00:51:46,510 Och då syntaktiskt, jag kommer att stjäla något 1047 00:51:46,510 --> 00:51:48,090 från de flesta programmeringsspråk. 1048 00:51:48,090 --> 00:51:51,270 >> Nu, steg 1 ser ännu mer som en funktion, 1049 00:51:51,270 --> 00:51:53,160 som programmerare skulle kalla det. 1050 00:51:53,160 --> 00:51:58,650 Det ser ut som kod som någon har gett ett namn och med tanke på 1051 00:51:58,650 --> 00:52:03,300 till mig att använda somehow-- i andra ord, vad den linje som jag har markerat 1052 00:52:03,300 --> 00:52:07,050 representerar funktioner som kanske Jag visste inte ens genomföra själv. 1053 00:52:07,050 --> 00:52:10,410 Någon äldre, klokare än mig redan listat ut 1054 00:52:10,410 --> 00:52:12,700 hur du uttrycker begreppet att plocka upp en telefonbok. 1055 00:52:12,700 --> 00:52:15,860 Och det är som de fem stegen jag bara rabblade, från toppen av mitt huvud. 1056 00:52:15,860 --> 00:52:19,350 >> Men han eller hon redan genomförts Detta gav de flera steg 1057 00:52:19,350 --> 00:52:22,339 ett namn, pick_up_phone_book. 1058 00:52:22,339 --> 00:52:24,380 Och parentes är precis vad de flesta programmerare 1059 00:52:24,380 --> 00:52:27,100 göra i slutet av uttalanden som detta. 1060 00:52:27,100 --> 00:52:30,190 Jag kan nu stå på hans eller hennes axlar och aldrig igen, 1061 00:52:30,190 --> 00:52:32,465 tänka på vad det innebär att plocka upp en telefonbok. 1062 00:52:32,465 --> 00:52:34,090 Jag kan bara säga, plocka upp telefonboken. 1063 00:52:34,090 --> 00:52:36,690 Och det är precis vad alla av oss människor gjorde här. 1064 00:52:36,690 --> 00:52:38,940 >> När vi var förmodligen en år gammal, 2 år gammal, 1065 00:52:38,940 --> 00:52:41,690 någon var tvungen att lära oss vad det tänkt att plocka upp en telefonbok. 1066 00:52:41,690 --> 00:52:43,810 Och ända sedan dess, vi har sammandrag bort 1067 00:52:43,810 --> 00:52:46,739 från de mycket ointressant mekaniska steg. 1068 00:52:46,739 --> 00:52:48,530 Och vi har bara en intuitiv förståelse 1069 00:52:48,530 --> 00:52:50,480 av vad det innebär att plocka upp en telefonbok. 1070 00:52:50,480 --> 00:52:55,730 >> Och du kan extrapolera nu till mer komplicerade saker-- 1071 00:52:55,730 --> 00:52:57,640 uppföra en byggnad. 1072 00:52:57,640 --> 00:52:59,940 Precis, för vissa människor, som faktiskt har betydelse. 1073 00:52:59,940 --> 00:53:03,080 Entreprenörer, arkitekter, som har en mening. 1074 00:53:03,080 --> 00:53:06,400 Och de skulle veta vad de ska göra, om Jag sa, gå uppföra en byggnad. 1075 00:53:06,400 --> 00:53:10,520 >> Men de flesta av oss i rummet kunde inte itu med det abstraktionsnivå. 1076 00:53:10,520 --> 00:53:14,850 Du måste berätta för oss som går att få spaden och gå få betongen 1077 00:53:14,850 --> 00:53:17,250 och spika träbitar tillsammans och allt annat 1078 00:53:17,250 --> 00:53:18,830 är involverad i att bygga en byggnad. 1079 00:53:18,830 --> 00:53:21,690 Och det beror på att vi har inte Ännu har programmerats att förstå 1080 00:53:21,690 --> 00:53:23,629 vad det innebär att uppföra en byggnad. 1081 00:53:23,629 --> 00:53:24,920 Vi har inte den abstraktion. 1082 00:53:24,920 --> 00:53:26,570 Vi har inte den funktionen. 1083 00:53:26,570 --> 00:53:29,930 >> Och så vad du ser i programmeringsspråk, i allmänhet, 1084 00:53:29,930 --> 00:53:34,570 speciellt mer moderna språk, som Java, PHP, Ruby, och Python, 1085 00:53:34,570 --> 00:53:37,610 de är mycket mer mogen än äldre språk, 1086 00:53:37,610 --> 00:53:40,140 som C och C ++ och ytterligare andra. 1087 00:53:40,140 --> 00:53:42,580 Och så de kommer med mer funktionalitet inbyggd. 1088 00:53:42,580 --> 00:53:45,640 Mer kod har skrivits av människor i det förflutna 1089 00:53:45,640 --> 00:53:50,520 att vi nu kan ringa eller kalla eller använda som jag antyda 1090 00:53:50,520 --> 00:53:52,231 på denna markerade linjen här. 1091 00:53:52,231 --> 00:53:55,230 Och så även om vi inte pratar om programmeringsspråk per se, 1092 00:53:55,230 --> 00:54:00,230 bara pseudokod kod, alla idéer är fortfarande i den diskussionen. 1093 00:54:00,230 --> 00:54:04,600 Och det visar sig precision super viktigt, som är abstraktion. 1094 00:54:04,600 --> 00:54:06,570 Och låt oss försöka kommunicera det på följande sätt. 1095 00:54:06,570 --> 00:54:11,000 >> Jag av misstag kan ha förstört detta genom att blinka en bild på skärmen 1096 00:54:11,000 --> 00:54:12,260 förtid. 1097 00:54:12,260 --> 00:54:16,550 Men låt mig be om en modig volontär, om du inte har något emot att komma upp. 1098 00:54:16,550 --> 00:54:19,040 Du skulle vara framför kamera, om du är OK med det. 1099 00:54:19,040 --> 00:54:24,950 Skulle någon vilja komma upp och ge instruktioner till dina kollegor här? 1100 00:54:24,950 --> 00:54:29,540 Måste bara komma hit och stå hit och säga några ord. 1101 00:54:29,540 --> 00:54:32,890 >> Victoria ler mest och undvika mina ögon mest. 1102 00:54:32,890 --> 00:54:34,740 Skulle du vara beredd att komma på det? 1103 00:54:34,740 --> 00:54:35,240 OK. 1104 00:54:35,240 --> 00:54:38,480 Och om alla andra på era platser kunde ta ut en bit av skrot papper, 1105 00:54:38,480 --> 00:54:39,750 om du vill. 1106 00:54:39,750 --> 00:54:40,760 Linjerat papper är bra. 1107 00:54:40,760 --> 00:54:41,990 Komma runt detta sätt. 1108 00:54:41,990 --> 00:54:44,580 Eller en del av det papper som du fick igår, 1109 00:54:44,580 --> 00:54:46,493 bara en tom ark av papper, om du kunde. 1110 00:54:46,493 --> 00:54:52,240 1111 00:54:52,240 --> 00:54:54,870 Och om du inte har någon, bara fråga din granne om du kunde. 1112 00:54:54,870 --> 00:55:04,220 1113 00:55:04,220 --> 00:55:07,580 >> Så för tillfället, för detta exempel, Victoria 1114 00:55:07,580 --> 00:55:11,520 kommer att spela rollen av en programmerare, en ingenjör, som 1115 00:55:11,520 --> 00:55:16,130 behöver programmera er alla, som datorerna, att göra något. 1116 00:55:16,130 --> 00:55:19,570 Och vi får se vad antaganden du väljer att göra. 1117 00:55:19,570 --> 00:55:22,700 Vi får se hur exakt hon väljer att vara. 1118 00:55:22,700 --> 00:55:26,220 Och om denna demonstration går pedagogiskt väl, massor av misstag 1119 00:55:26,220 --> 00:55:29,220 kommer att göras, att vi då kommer att använda att som en möjlighet för diskussion. 1120 00:55:29,220 --> 00:55:32,010 Men utmaningen för dig bör vara att undvika dessa misstag, 1121 00:55:32,010 --> 00:55:32,896 vara en bra programmerare. 1122 00:55:32,896 --> 00:55:35,520 Och så utmaningen till hands, om du skulle velat gå hit, 1123 00:55:35,520 --> 00:55:38,799 är framför Victoria på skärmen här-- och förhoppningsvis ingen av er 1124 00:55:38,799 --> 00:55:40,590 kom ihåg detta när jag blixtrade på skärmen. 1125 00:55:40,590 --> 00:55:44,097 Och inte vända alls, eftersom det finns en annan skärm i det här rummet 1126 00:55:44,097 --> 00:55:44,930 att jag kan stänga av. 1127 00:55:44,930 --> 00:55:46,620 Så inte vända. 1128 00:55:46,620 --> 00:55:49,090 >> Framför Victoria är samma skrik. 1129 00:55:49,090 --> 00:55:54,170 Och hennes jobb är nu att berätta allt på papper vad att rita. 1130 00:55:54,170 --> 00:55:57,020 Och vi kommer att se, baserat på muntliga instruktioner ensam, 1131 00:55:57,020 --> 00:56:00,020 datakod, om man så vill, hur exakt dina ritningar 1132 00:56:00,020 --> 00:56:02,330 är-- dina implementationer är. 1133 00:56:02,330 --> 00:56:02,980 Vettigt? 1134 00:56:02,980 --> 00:56:03,604 >> PUBLIK: Ja. 1135 00:56:03,604 --> 00:56:04,980 DAVID MALAN: OK, köra. 1136 00:56:04,980 --> 00:56:06,030 >> PUBLIK: Rita en kvadrat. 1137 00:56:06,030 --> 00:56:09,050 >> [SKRATT] 1138 00:56:09,050 --> 00:56:12,310 >> DAVID MALAN: Och ingen frågor kan ställas. 1139 00:56:12,310 --> 00:56:13,720 Kan bara göra vad du blir tillsagd. 1140 00:56:13,720 --> 00:56:17,570 1141 00:56:17,570 --> 00:56:22,550 Åh, och om du har dagens diabilder öppnas i en flik, inte titta på fliken. 1142 00:56:22,550 --> 00:56:23,670 OK? 1143 00:56:23,670 --> 00:56:26,135 >> PUBLIK: OK, rita en cirkel. 1144 00:56:26,135 --> 00:56:32,544 1145 00:56:32,544 --> 00:56:34,872 En slope-- kan jag säga lutningen? 1146 00:56:34,872 --> 00:56:35,830 DAVID MALAN: Upp till dig. 1147 00:56:35,830 --> 00:56:38,230 1148 00:56:38,230 --> 00:56:38,980 AUDIENCE: En sluttning. 1149 00:56:38,980 --> 00:56:46,330 1150 00:56:46,330 --> 00:56:49,795 Och en triangel. 1151 00:56:49,795 --> 00:56:50,850 >> DAVID MALAN: Okej. 1152 00:56:50,850 --> 00:56:52,286 Och stanna här för ett ögonblick. 1153 00:56:52,286 --> 00:56:56,046 1154 00:56:56,046 --> 00:56:58,910 Och jag kommer att komma runt på bara ett ögonblick. 1155 00:56:58,910 --> 00:57:02,420 Och ingen anledning att sätta ditt namn på det. 1156 00:57:02,420 --> 00:57:05,030 Låt mig komma runt och samla dina ritningar, 1157 00:57:05,030 --> 00:57:08,330 om du inte har något emot att riva dem. 1158 00:57:08,330 --> 00:57:12,110 >> Här är vad vi fick tillbaka. 1159 00:57:12,110 --> 00:57:14,770 Jag ska projicera det på skärmen. 1160 00:57:14,770 --> 00:57:18,310 Jag ser en kvadrat, en cirkel, en sluttning, och en triangel. 1161 00:57:18,310 --> 00:57:20,130 Så det var ett svar där. 1162 00:57:20,130 --> 00:57:23,640 Och let's-- hoppsan. 1163 00:57:23,640 --> 00:57:25,370 Tack. 1164 00:57:25,370 --> 00:57:30,710 Här är en annan sortiment, och en bakom den. 1165 00:57:30,710 --> 00:57:34,130 1166 00:57:34,130 --> 00:57:37,120 >> Så att de alla tycks fånga andan. 1167 00:57:37,120 --> 00:57:38,600 Tack. 1168 00:57:38,600 --> 00:57:44,970 Det finns en annan, och här är en annan. 1169 00:57:44,970 --> 00:57:51,590 Lutningen tolkningen är en lite annorlunda, lite kurvig. 1170 00:57:51,590 --> 00:57:57,140 Och den närmaste, antingen på grund av underbart specificitet som du har 1171 00:57:57,140 --> 00:58:03,520 beskrivits, eller kanske du typ av såg det förut, är detta verkligen 1172 00:58:03,520 --> 00:58:06,340 vad Victoria faktiskt beskriva. 1173 00:58:06,340 --> 00:58:09,190 >> Men nu, de av er som inte få det helt rätt, 1174 00:58:09,190 --> 00:58:11,140 Låt oss ge några invändningar här. 1175 00:58:11,140 --> 00:58:13,770 Så Victoria sa först rita en kvadrat. 1176 00:58:13,770 --> 00:58:15,830 Och nu kan vi anta till förmån för idag 1177 00:58:15,830 --> 00:58:17,538 att alla vet hur man drar en kvadrat. 1178 00:58:17,538 --> 00:58:20,590 Men det är inte helt klart, eller hur? 1179 00:58:20,590 --> 00:58:23,220 Hur annars kan du ha ritat en kvadrat eller där 1180 00:58:23,220 --> 00:58:27,114 kan vara någon av de oklarheter för datorn här? 1181 00:58:27,114 --> 00:58:28,280 PUBLIK: Plats och storlek. 1182 00:58:28,280 --> 00:58:28,980 DAVID MALAN: Location, eller hur? 1183 00:58:28,980 --> 00:58:32,070 Alla ni hade ett papper av något form, i allmänhet rektanglar, men något 1184 00:58:32,070 --> 00:58:32,830 olika storlekar. 1185 00:58:32,830 --> 00:58:36,250 Men du säkert kunde ha dragit, om du ville, en stor fyrkant, kanske 1186 00:58:36,250 --> 00:58:37,220 en liten fyrkant. 1187 00:58:37,220 --> 00:58:38,417 Kanske var det roteras. 1188 00:58:38,417 --> 00:58:39,500 Jag tror inte att vi såg det. 1189 00:58:39,500 --> 00:58:41,790 Men det kunde ha varit mer diamant liknande men fortfarande ändå 1190 00:58:41,790 --> 00:58:42,900 matematiskt en kvadrat. 1191 00:58:42,900 --> 00:58:44,850 Så det var utan tvekan tvetydig. 1192 00:58:44,850 --> 00:58:46,709 >> Då sade hon, rita en cirkel. 1193 00:58:46,709 --> 00:58:49,250 Några av er hade dra den bredvid det, vilket inte är orimligt, 1194 00:58:49,250 --> 00:58:52,450 eftersom människor tenderar att tänka eller läsa höger till vänster på de flesta språk, så inte 1195 00:58:52,450 --> 00:58:53,017 en dålig gissning. 1196 00:58:53,017 --> 00:58:55,100 Men denna cirkel kan ha varit inne på torget, 1197 00:58:55,100 --> 00:58:57,600 kunde ha varit runt kvadrat, kunde ha varit någon annanstans 1198 00:58:57,600 --> 00:58:59,480 på bladet, så utan tvekan tvetydig. 1199 00:58:59,480 --> 00:59:03,290 >> Lutning kan ha varit kanske ta flest friheter verbalt 1200 00:59:03,290 --> 00:59:04,200 med vad det betyder. 1201 00:59:04,200 --> 00:59:06,980 Och en del av er tolkas den som en snirkliga linjen 1202 00:59:06,980 --> 00:59:08,560 eller en rak linje eller liknande. 1203 00:59:08,560 --> 00:59:11,719 Och sedan triangel också, kan ha orienterats i en rad olika sätt. 1204 00:59:11,719 --> 00:59:14,760 Så kort sagt, till och med med något som du blick och du är som, wow, så 1205 00:59:14,760 --> 00:59:17,020 enkel, ett barn kunde rita detta, väl inte 1206 00:59:17,020 --> 00:59:19,640 egentligen, om du inte är super, super övertygande 1207 00:59:19,640 --> 00:59:22,045 och tala om för datorn exakt vad de ska göra. 1208 00:59:22,045 --> 00:59:24,420 Så om vi kunde, om du har en annan pappersark, låt oss 1209 00:59:24,420 --> 00:59:26,710 prova det här en gång till. 1210 00:59:26,710 --> 00:59:29,880 Och jag kommer att ge Victoria en andra exempel på skärmen här. 1211 00:59:29,880 --> 00:59:34,060 Och återigen, inte vända och inte titta på bilderna. 1212 00:59:34,060 --> 00:59:37,304 Och jag ska ge henne en stund att tänka på hur man beskriva detta. 1213 00:59:37,304 --> 00:59:39,012 Låt inte dem se rädslan i dina ögon. 1214 00:59:39,012 --> 00:59:40,820 >> [SKRATT] 1215 00:59:40,820 --> 00:59:43,710 >> Och återigen, denna gång hävstång vissa av dessa takeaways 1216 00:59:43,710 --> 00:59:48,130 och försöka få nästan alla åtminstone det rätta svaret. 1217 00:59:48,130 --> 00:59:52,260 >> PUBLIK: OK, ta en papper, se 1218 00:59:52,260 --> 00:59:54,500 i mitten av den bit av papper. 1219 00:59:54,500 --> 00:59:59,591 I mitten av den bit av papper, rita en kub. 1220 00:59:59,591 --> 01:00:01,244 >> [SKRATT] 1221 01:00:01,244 --> 01:00:02,660 DAVID MALAN: Vad har vi lärt oss? 1222 01:00:02,660 --> 01:00:03,540 Vi var så nära. 1223 01:00:03,540 --> 01:00:06,320 1224 01:00:06,320 --> 01:00:09,045 OK, upprepa om du kunde, för alla. 1225 01:00:09,045 --> 01:00:13,210 >> AUDIENCE: I mitten av den papper, rita ett objekt, 1226 01:00:13,210 --> 01:00:14,842 som ser ut som en kub. 1227 01:00:14,842 --> 01:00:17,332 >> DAVID MALAN: OK, det är allt du får arbeta med. 1228 01:00:17,332 --> 01:00:20,010 1229 01:00:20,010 --> 01:00:23,080 Låt mig vara analytisk och inte så mycket kritisk, 1230 01:00:23,080 --> 01:00:25,720 men för att göra anspråk att Victoria definitivt 1231 01:00:25,720 --> 01:00:28,967 verkar vara att tänka på mycket hög nivå abstraktioner, som 1232 01:00:28,967 --> 01:00:29,800 är inte orimligt. 1233 01:00:29,800 --> 01:00:32,160 För annars skulle vi alla vara ganska dysfunktionella, 1234 01:00:32,160 --> 01:00:35,740 Om vi ​​var tvungna att vara aldrig så exakt med allt vi gör i världen. 1235 01:00:35,740 --> 01:00:38,890 >> Men att säga gå till middle-- jag trodde vi var på en sådan bra spår 1236 01:00:38,890 --> 01:00:42,340 där, som går till mycket mitten på sidan och sedan rita en kub. 1237 01:00:42,340 --> 01:00:45,730 Hon tänker i abstraktioner, eftersom hon fortfarande tittar 1238 01:00:45,730 --> 01:00:48,490 vad som finns på skärmen som verkligen en kub. 1239 01:00:48,490 --> 01:00:51,185 Men det finns så många möjligheter för tolkning där. 1240 01:00:51,185 --> 01:00:53,560 Och i själva verket finns det så många andra sätt du kan uttrycka 1241 01:00:53,560 --> 01:00:55,101 det, som jag föreslår i ett ögonblick. 1242 01:00:55,101 --> 01:00:59,770 Så här har vi en inkarnation av picture-- whoops-- en 1243 01:00:59,770 --> 01:01:02,830 inkarnation av bilden, så en lite tredimensionalitet till det, 1244 01:01:02,830 --> 01:01:04,160 vilket är trevligt. 1245 01:01:04,160 --> 01:01:08,470 >> Här är en annan, där du har samma, men det är typ av en öppen kub. 1246 01:01:08,470 --> 01:01:12,020 Vissa människor tog det lite mer platt, tvådimensionell. 1247 01:01:12,020 --> 01:01:13,910 Och det är bra. 1248 01:01:13,910 --> 01:01:17,380 Så där, ja i mitten av papperet. 1249 01:01:17,380 --> 01:01:22,720 Den här Jag tror att du kommer som, för om vi går här, 1250 01:01:22,720 --> 01:01:25,130 detta är vad hon beskrev. 1251 01:01:25,130 --> 01:01:29,570 Så nu, låt mig föreslå hur annars vi kan beskriva den här situationen. 1252 01:01:29,570 --> 01:01:34,070 >> Tillbaka i dag, en av de mest vanligaste sätten att lära sig programmering 1253 01:01:34,070 --> 01:01:38,900 var att skriva kod, skriver rader av instruktioner, 1254 01:01:38,900 --> 01:01:42,640 som kontrollerade lite sköldpadda på skärmen. 1255 01:01:42,640 --> 01:01:45,660 Logotypen och andra varianter av detta var namnet på språket. 1256 01:01:45,660 --> 01:01:47,550 Och sköldpaddan levde i en värld. 1257 01:01:47,550 --> 01:01:49,970 >> Så antar att detta rektangulära utrymmet är hans värld. 1258 01:01:49,970 --> 01:01:53,340 Och du skulle börja med assuming-- I vet inte riktigt hur man drar sköldpadda, 1259 01:01:53,340 --> 01:01:54,740 så låt oss göra det så här. 1260 01:01:54,740 --> 01:01:57,340 Och då han har ett skal och sedan kanske några fötter. 1261 01:01:57,340 --> 01:01:59,840 Så du kan ha den här lilla tecken på skärmen. 1262 01:01:59,840 --> 01:02:02,270 >> Och syftet med detta programmeringsspråk 1263 01:02:02,270 --> 01:02:06,070 var att tvinga sköldpaddan att gå upp, ner, vänster, höger 1264 01:02:06,070 --> 01:02:08,420 och att sätta sin pennan eller plocka sin penna upp, 1265 01:02:08,420 --> 01:02:12,720 så att han kunde faktiskt rita på skärmen i denna mycket plan rektangulär världen. 1266 01:02:12,720 --> 01:02:16,850 Så var jag tänkte att du kanske att gå, och där du ska överväga dykning 1267 01:02:16,850 --> 01:02:19,520 ner till mentalt när man beskriver instruktioner mer allmänt, 1268 01:02:19,520 --> 01:02:21,720 Jag vill hävda, sätts din pennan i middle-- 1269 01:02:21,720 --> 01:02:23,100 och vi kommer att bli av med sköldpadda, eftersom jag kan inte riktigt 1270 01:02:23,100 --> 01:02:24,680 hålla dra honom mycket väl. 1271 01:02:24,680 --> 01:02:27,170 >> Och nu, hur annars kunde Jag säger rita en kub? 1272 01:02:27,170 --> 01:02:32,830 Tja, vi kan säga något i stil med oavgjort en diagonal linje nordost, till exempel, 1273 01:02:32,830 --> 01:02:35,182 eller i 45 graders vinkel uppåt. 1274 01:02:35,182 --> 01:02:36,640 Och det kunde ha fått mig här. 1275 01:02:36,640 --> 01:02:38,380 Och jag är ganska långt från en kub. 1276 01:02:38,380 --> 01:02:42,430 Men nu kan jag säga något som vänder 90 grader åt vänster 1277 01:02:42,430 --> 01:02:47,370 och dra en linje av lika långa nordväst. 1278 01:02:47,370 --> 01:02:49,470 Och jag skulle kunna fortsätta med liknande riktningar. 1279 01:02:49,470 --> 01:02:50,720 Och det kommer inte att bli lätt. 1280 01:02:50,720 --> 01:02:53,345 Och ärligt talat, förmodligen skulle vi har varit här i fem minuter. 1281 01:02:53,345 --> 01:02:59,600 Men kanske vi skulle ha kommit till något som, vid slutet av dagen, 1282 01:02:59,600 --> 01:03:04,280 slutar upp att vara en kub, men vi dök insidan av att uttag inte 1283 01:03:04,280 --> 01:03:06,370 att göra det till ett så lågt nivå som du kan inte riktigt 1284 01:03:06,370 --> 01:03:09,795 se vad du gör tills hela sak är faktiskt det på sidan. 1285 01:03:09,795 --> 01:03:12,670 Och så detta är en allmän princip, igen, av programming-- denna idé 1286 01:03:12,670 --> 01:03:13,320 av abstraktion. 1287 01:03:13,320 --> 01:03:15,920 Det är så underbart kraftfull, eftersom igen, 1288 01:03:15,920 --> 01:03:19,281 hon just sagt, rita en kub, som alla oss ganska mycket skulle grok mycket snabbt. 1289 01:03:19,281 --> 01:03:21,030 Vi skulle bara förstå, OK, rita en kub. 1290 01:03:21,030 --> 01:03:24,030 Vi kanske inte vet orienteringen, så vi kunde vara lite mer exakt, 1291 01:03:24,030 --> 01:03:26,297 men vi kan i allmänhet föreställa eller vet vad en kub är. 1292 01:03:26,297 --> 01:03:28,130 Och det är bra, eftersom om varje gång du 1293 01:03:28,130 --> 01:03:31,540 satt som en programmerare på tangentbordet för att skriva kod, 1294 01:03:31,540 --> 01:03:33,912 Om du var tvungen att tänka på en sådan en låg nivå, ingen av oss 1295 01:03:33,912 --> 01:03:35,120 någonsin skulle få något gjort. 1296 01:03:35,120 --> 01:03:38,259 Och visst, ingen av oss skulle njuta av processen för att skriva kod. 1297 01:03:38,259 --> 01:03:41,550 Det skulle vara som att skriva in 0 s och 1 s, som sagt var inte så länge sedan 1298 01:03:41,550 --> 01:03:43,680 människor skrev kod i 0 s och 1 s. 1299 01:03:43,680 --> 01:03:46,960 Och vi kom mycket snabbt upp med dessa högre nivå languages-- 1300 01:03:46,960 --> 01:03:49,410 C ++ och Java och andra. 1301 01:03:49,410 --> 01:03:52,500 >> Så låt oss prova detta en gång bara för att flip tabellerna, så att vi alla 1302 01:03:52,500 --> 01:03:55,450 har möjlighet att tänka i stället på samma sätt. 1303 01:03:55,450 --> 01:03:59,230 Skulle vi kunna få en mer volontär detta tid att komma fram till tavlan och rita, 1304 01:03:59,230 --> 01:04:01,480 inte recitera? 1305 01:04:01,480 --> 01:04:02,070 Ja okej. 1306 01:04:02,070 --> 01:04:04,820 Ben, kom upp. 1307 01:04:04,820 --> 01:04:08,510 Och Ben, i det här fallet, när du inför styrelsen, inte titta åt vänster, 1308 01:04:08,510 --> 01:04:09,370 ser inte rätt. 1309 01:04:09,370 --> 01:04:12,367 Bara gör vad din kolleger här berätta. 1310 01:04:12,367 --> 01:04:14,950 Och för alla andra i rum, nu är du programmeraren. 1311 01:04:14,950 --> 01:04:16,020 Han är datorn. 1312 01:04:16,020 --> 01:04:21,395 Och bilden jag valt här i förväg är detta en här. 1313 01:04:21,395 --> 01:04:24,490 1314 01:04:24,490 --> 01:04:27,660 De bara-- de tänker av ett roligt skämt är allt. 1315 01:04:27,660 --> 01:04:31,510 >> Så skulle inte någon vilja volontär den första instruktionen 1316 01:04:31,510 --> 01:04:35,470 eller uppgift om att bör kommandot Ben penna? 1317 01:04:35,470 --> 01:04:40,850 Och vi kommer att göra detta tillsammans, kanske en instruktion från varje person. 1318 01:04:40,850 --> 01:04:41,440 Jag är ledsen? 1319 01:04:41,440 --> 01:04:42,440 >> PUBLIK: Rita en cirkel. 1320 01:04:42,440 --> 01:04:45,866 DAVID MALAN: Rita en cirkel är det första jag hörde. 1321 01:04:45,866 --> 01:04:47,100 >> PUBLIK: Upptill. 1322 01:04:47,100 --> 01:04:48,140 >> DAVID MALAN: Upptill. 1323 01:04:48,140 --> 01:04:52,504 OK, vi kan låta dig ta bort, ångra. 1324 01:04:52,504 --> 01:04:53,420 Och nu, någon annan. 1325 01:04:53,420 --> 01:04:55,994 Dan, skulle du vara bekväma erbjuda nästa instruktion? 1326 01:04:55,994 --> 01:05:02,070 >> PUBLIK: Visst, dra centrum av botten av cirkeln, 1327 01:05:02,070 --> 01:05:07,121 med en small-- lite litet utrymme från det, 1328 01:05:07,121 --> 01:05:15,420 rita en rak linje ner till tre fjärdedelar av vägen ner brädet 1329 01:05:15,420 --> 01:05:17,845 en liten vinkel till vänster. 1330 01:05:17,845 --> 01:05:21,250 1331 01:05:21,250 --> 01:05:22,620 >> DAVID MALAN: Bra. 1332 01:05:22,620 --> 01:05:24,086 >> PUBLIK: liten vinkel. 1333 01:05:24,086 --> 01:05:32,807 >> DAVID MALAN: Ångra Ctrl-Z. OK. 1334 01:05:32,807 --> 01:05:34,890 Andrew, vill du att erbjuda upp nästa instruktion? 1335 01:05:34,890 --> 01:05:35,515 >> PUBLIK: Visst. 1336 01:05:35,515 --> 01:05:43,250 Från botten av den linjen, en ytterligare liten angle-- 1337 01:05:43,250 --> 01:05:49,024 whoops-- kanske ungefär en tredjedel av längden [OHÖRBART], 1338 01:05:49,024 --> 01:05:52,928 liten vinkel nedåt och som en tredjedel av längden på [OHÖRBART]. 1339 01:05:52,928 --> 01:05:57,550 1340 01:05:57,550 --> 01:06:00,578 Så ja, från den punkten, dra en linje tredjedel 1341 01:06:00,578 --> 01:06:04,150 av längden av den föregående linje längre åt vänster. 1342 01:06:04,150 --> 01:06:08,416 1343 01:06:08,416 --> 01:06:10,040 >> DAVID MALAN: Att OK? 1344 01:06:10,040 --> 01:06:12,330 Rak linje, är det OK? 1345 01:06:12,330 --> 01:06:14,900 OK, Olivier, du vill att erbjuda upp nästa? 1346 01:06:14,900 --> 01:06:28,564 >> PUBLIK: [OHÖRBART] från botten av cirkeln, [OHÖRBART]. 1347 01:06:28,564 --> 01:06:32,000 1348 01:06:32,000 --> 01:06:45,126 Rita på höger sida av [OHÖRBART] centimeter. 1349 01:06:45,126 --> 01:06:46,560 >> [SKRATT] 1350 01:06:46,560 --> 01:06:49,872 >> DAVID MALAN: Jag tror att du kommer att måste konvertera det är inches här. 1351 01:06:49,872 --> 01:06:50,764 >> PUBLIK: Stopp. 1352 01:06:50,764 --> 01:06:52,186 >> [SKRATT] 1353 01:06:52,186 --> 01:06:54,570 >> DAVID MALAN: OK. 1354 01:06:54,570 --> 01:06:56,660 [? Ara,?] Som du vill att erbjuda upp nästa? 1355 01:06:56,660 --> 01:07:00,653 1356 01:07:00,653 --> 01:07:15,443 >> PUBLIK: Rita en [OHÖRBART] den övre [OHÖRBART] densamma. 1357 01:07:15,443 --> 01:07:28,829 [OHÖRBART] cirkel, dra till [OHÖRBART] och dra [OHÖRBART]. 1358 01:07:28,829 --> 01:07:33,799 1359 01:07:33,799 --> 01:07:36,730 >> DAVID MALAN: OK, inte mer ångra. 1360 01:07:36,730 --> 01:07:38,390 Låt oss göra en eller två instruktioner. 1361 01:07:38,390 --> 01:07:40,825 Chris, vill du ge en? 1362 01:07:40,825 --> 01:07:46,182 >> AUDIENCE: Längst ned av cirkeln, [OHÖRBART] 1363 01:07:46,182 --> 01:07:51,528 rita en lika linje sluttande nedåt till vänster [OHÖRBART]. 1364 01:07:51,528 --> 01:07:59,304 1365 01:07:59,304 --> 01:08:00,590 >> DAVID MALAN: OK. 1366 01:08:00,590 --> 01:08:01,170 Andrew? 1367 01:08:01,170 --> 01:08:02,472 Vi did-- Karim? 1368 01:08:02,472 --> 01:08:06,891 1369 01:08:06,891 --> 01:08:13,765 >> PUBLIK: Från den högra linjen, I slutet av den vänstra linjen, botten, 1370 01:08:13,765 --> 01:08:21,012 du kommer att gå rätt om samma längd som den linjen 1371 01:08:21,012 --> 01:08:27,680 du är på, dra till rätt [OHÖRBART]. 1372 01:08:27,680 --> 01:08:33,572 1373 01:08:33,572 --> 01:08:37,991 [OHÖRBART] grader, så [OHÖRBART] grader på den högra sidan. 1374 01:08:37,991 --> 01:08:41,919 1375 01:08:41,919 --> 01:08:43,500 >> DAVID MALAN: Okej. 1376 01:08:43,500 --> 01:08:44,029 Låt oss stanna. 1377 01:08:44,029 --> 01:08:44,950 Inte vända ännu. 1378 01:08:44,950 --> 01:08:46,783 Låt oss stanna, och låt oss prova en annan försök 1379 01:08:46,783 --> 01:08:48,850 innan vi avslöja för Ben vad han dragit. 1380 01:08:48,850 --> 01:08:51,189 Kan du blanda Ben till den right-- eller faktiskt, 1381 01:08:51,189 --> 01:08:54,080 Nej, låt oss bara ge dig en annan styrelse, ännu bättre. 1382 01:08:54,080 --> 01:08:57,640 Så skulle någon nu vilja att ta mer av tillvägagångssättet 1383 01:08:57,640 --> 01:09:02,149 att Victoria tog tidigare, där vi talar i en högre nivå abstraktion 1384 01:09:02,149 --> 01:09:05,149 och på bara en mening eller två beskriva för Ben 1385 01:09:05,149 --> 01:09:07,229 vad att dra utan komma in ogräset, 1386 01:09:07,229 --> 01:09:10,670 så att säga, på denna en lägre nivå? 1387 01:09:10,670 --> 01:09:11,206 Victoria. 1388 01:09:11,206 --> 01:09:11,706 [SKRATT] 1389 01:09:11,706 --> 01:09:14,249 PUBLIK: Rita en siffra av gång mannen. 1390 01:09:14,249 --> 01:09:18,866 Och hans ben och armar måste vara den högra sidan. 1391 01:09:18,866 --> 01:09:20,505 >> DAVID MALAN: OK, det är allt du får. 1392 01:09:20,505 --> 01:09:27,210 1393 01:09:27,210 --> 01:09:27,710 Okej. 1394 01:09:27,710 --> 01:09:31,609 Varför vi inte avslöja för Ben vad han gjorde. 1395 01:09:31,609 --> 01:09:32,890 Så en applåd. 1396 01:09:32,890 --> 01:09:35,700 Det var den svåraste kanske. 1397 01:09:35,700 --> 01:09:37,931 >> Så även om vi pratar i ganska dumma termer 1398 01:09:37,931 --> 01:09:39,680 om att bara dra bilder, förhoppningsvis du 1399 01:09:39,680 --> 01:09:44,226 kan verkligen uppskatta graden av uttrycksfullhet som kan vara nödvändigt 1400 01:09:44,226 --> 01:09:45,850 För att tala om en dator vad de ska göra. 1401 01:09:45,850 --> 01:09:50,370 Och i själva verket det faktum att Ben kunde dra denna så snabbt 1402 01:09:50,370 --> 01:09:54,227 är en slags bevis på att använda en språk, kanske en högre nivå 1403 01:09:54,227 --> 01:09:57,060 version av engelska, tillåter honom att att bara använda ord, eller höra ord 1404 01:09:57,060 --> 01:09:59,990 från Victoria, som tillåter honom dessa abstractions-- bara rita 1405 01:09:59,990 --> 01:10:03,020 en siffra gå till right-- den sortens har 1406 01:10:03,020 --> 01:10:07,100 några semantisk mening åt det som inte är nästan lika uppenbart när du är bara 1407 01:10:07,100 --> 01:10:10,310 sade sätta pennan ner, rita till höger, dra åt vänster. 1408 01:10:10,310 --> 01:10:12,420 >> Och så detta är också mycket vanligt i programmering. 1409 01:10:12,420 --> 01:10:15,253 Detta skulle sägas vara som en språket mycket låg nivå, programmering 1410 01:10:15,253 --> 01:10:16,730 i 0 s och 1 s om man så vill. 1411 01:10:16,730 --> 01:10:19,320 Och detta skulle vara en högre nivå programmeringsspråk i Java, 1412 01:10:19,320 --> 01:10:20,278 eller något sådant. 1413 01:10:20,278 --> 01:10:22,050 En bit av en förenkling är men det 1414 01:10:22,050 --> 01:10:24,310 den typ av som emotionell känslan av att du känner när 1415 01:10:24,310 --> 01:10:26,630 genom att använda någon typ av sak eller en annan. 1416 01:10:26,630 --> 01:10:32,650 En bit av frustration här av behovet för sådan precision, men chansen 1417 01:10:32,650 --> 01:10:34,930 att vara lite lösare med tolkningen här. 1418 01:10:34,930 --> 01:10:38,060 Men naturligtvis buggar kan uppstå som ett resultat. 1419 01:10:38,060 --> 01:10:40,500 >> Om du vill på home-- vi kommer inte att göra detta i class-- 1420 01:10:40,500 --> 01:10:41,900 men om du vill ta detta ett hem, 1421 01:10:41,900 --> 01:10:43,387 Jag trodde att vi skulle dyka in i detta. 1422 01:10:43,387 --> 01:10:45,970 Så om du vill spela spel med din partner 1423 01:10:45,970 --> 01:10:49,180 eller barn eller liknande, du kan njuta av det också. 1424 01:10:49,180 --> 01:10:54,460 >> Så låt oss gå vidare och titta på en sista sak för beräknings tänkande här. 1425 01:10:54,460 --> 01:10:57,010 Och det leder oss till John Oliver, inte klippet 1426 01:10:57,010 --> 01:11:00,070 du kanske har sett i går kväll, men till en något senare fråga. 1427 01:11:00,070 --> 01:11:03,310 Några månader tillbaka, Volkswagen tog en hel del skottsäkra 1428 01:11:03,310 --> 01:11:05,651 av vilken anledning, om du vet? 1429 01:11:05,651 --> 01:11:07,025 Vad fick de i trubbel för? 1430 01:11:07,025 --> 01:11:10,270 1431 01:11:10,270 --> 01:11:14,030 >> Ja, så emissions-- de försökte slå utsläpp 1432 01:11:14,030 --> 01:11:19,100 tester av huvudsakligen har sitt bilar förorenar miljön mindre 1433 01:11:19,100 --> 01:11:23,620 när deras bilar testas och förorenar miljön mer 1434 01:11:23,620 --> 01:11:25,547 när bilarna inte höll på att testas. 1435 01:11:25,547 --> 01:11:28,630 Och vad är allt intressantare i världen, eftersom du kan ha antagen 1436 01:11:28,630 --> 01:11:34,072 från diskussioner om like-- vad är det-- CarPlay, Apples programvara för bilar 1437 01:11:34,072 --> 01:11:35,780 och det faktum att många av oss allt 1438 01:11:35,780 --> 01:11:38,390 har pekskärmar i våra bilar, Det finns en skrämmande mängd 1439 01:11:38,390 --> 01:11:41,250 av programvara i människors bilar idag, vilket 1440 01:11:41,250 --> 01:11:45,650 uppriktigt öppnar en hel burk maskar när det gäller säkerhet och fysiska risker. 1441 01:11:45,650 --> 01:11:48,070 Men för idag, låt oss fokusera på vad är 1442 01:11:48,070 --> 01:11:52,170 involverade i skriva programvara som kan ha gamed systemet. 1443 01:11:52,170 --> 01:11:54,510 >> För definitionen av problem, för dem obekanta, 1444 01:11:54,510 --> 01:11:55,740 låt oss ta en titt på John Oliver. 1445 01:11:55,740 --> 01:11:58,115 Och för dem som är bekanta med problemet, låt oss titta på det 1446 01:11:58,115 --> 01:12:00,480 i en rolig lins via John Oliver liksom. 1447 01:12:00,480 --> 01:12:05,810 Så låt mig slå spela på detta, jag tänka, tre minuters introduktion. 1448 01:12:05,810 --> 01:12:07,074 Helvete. 1449 01:12:07,074 --> 01:12:07,740 [VIDEOUPPSPELNING] 1450 01:12:07,740 --> 01:12:08,170 -Cars-- 1451 01:12:08,170 --> 01:12:09,919 DAVID MALAN: Självklart, på YouTube, it's-- 1452 01:12:09,919 --> 01:12:12,500 - --Den smartaste tecken i Den snabba och Furious filmer. 1453 01:12:12,500 --> 01:12:16,080 Den här veckan, tyska automaker Volkswagen befann sig 1454 01:12:16,080 --> 01:12:19,430 i mitten av en skandal potentiellt kriminella proportioner. 1455 01:12:19,430 --> 01:12:23,020 >> -Volkswagen Är stärkande för miljarder i böter, möjliga åtal 1456 01:12:23,020 --> 01:12:25,530 för sina chefer, som företaget apologizes 1457 01:12:25,530 --> 01:12:28,790 för rigg 11 miljoner bilar hjälpa det slog utsläppsproven. 1458 01:12:28,790 --> 01:12:32,110 >> -Vissa Dieslar utformades med sofistikerad programvara som 1459 01:12:32,110 --> 01:12:35,410 använd information, inklusive positionen rattens och fordon 1460 01:12:35,410 --> 01:12:38,820 hastighet, för att bestämma bilen var genomgår tester utsläpp. 1461 01:12:38,820 --> 01:12:42,620 Under denna omständighet, motorn skulle minska giftiga utsläpp. 1462 01:12:42,620 --> 01:12:46,040 Men bilen var riggad att kringgå att när det kördes. 1463 01:12:46,040 --> 01:12:51,370 Utsläppen ökade 10 till 40 gånger högre än acceptabla EPA nivåer. 1464 01:12:51,370 --> 01:12:55,920 >> -Oj 10 till 40 gånger större än EPA tillåter. 1465 01:12:55,920 --> 01:12:59,570 Det är det värsta Volkswagen har någonsin gjort, 1466 01:12:59,570 --> 01:13:04,200 är något du kan säga om du aldrig hört talas om andra världskriget. 1467 01:13:04,200 --> 01:13:09,710 Men kanske det säkraste tecknet på hur mycket besvär Volkswagen är i, 1468 01:13:09,710 --> 01:13:12,730 är att människor på mycket top har avgick. 1469 01:13:12,730 --> 01:13:16,320 VD avgick på onsdagen efter klättra för att göra skadekontroll, 1470 01:13:16,320 --> 01:13:20,380 sade att han var oändligt ledsen, som lät bra tills det visade sig 1471 01:13:20,380 --> 01:13:22,920 Han var bara 10% ledsen men hade riggat hans mun 1472 01:13:22,920 --> 01:13:25,600 att artificiellt höja sin sorriness. 1473 01:13:25,600 --> 01:13:29,700 Och under tiden, Volkswagens USA chef hade en ursäkt för sin egen. 1474 01:13:29,700 --> 01:13:33,580 >> -Låt Oss vara tydliga om detta, vårt företag var oärlig. 1475 01:13:33,580 --> 01:13:37,140 Och i mina tyska ord, vi har helt skruvas upp. 1476 01:13:37,140 --> 01:13:41,360 >> -Ja, Men helt skruvad upp är inte tyska verk. 1477 01:13:41,360 --> 01:13:43,750 Och det tyska språket har många vackra fraser 1478 01:13:43,750 --> 01:13:50,070 att beskriva situationer precis som denna, såsom [tyska], vilket innebär ungefär, 1479 01:13:50,070 --> 01:13:52,870 sorg som kommer från affärsrelaterade lögner, 1480 01:13:52,870 --> 01:13:59,060 eller [tyska], som översätter som shaming ettor far involverar 1481 01:13:59,060 --> 01:14:00,352 moln av bensin. 1482 01:14:00,352 --> 01:14:02,060 Det är ett vackert språk. 1483 01:14:02,060 --> 01:14:04,660 Det seglar strax utanför tungan. 1484 01:14:04,660 --> 01:14:07,920 Och förresten, medan man ursäkt kan ha låtit uppriktig, 1485 01:14:07,920 --> 01:14:12,260 Det är värt att notera att han talade på ett officiellt lanseringsfesten för 2016 1486 01:14:12,260 --> 01:14:17,310 Volkswagen Passat, vilket innebär att kort efter att ha sagt ledsen, sade han detta. 1487 01:14:17,310 --> 01:14:18,850 >> -Tack Så mycket för att ni kom. 1488 01:14:18,850 --> 01:14:19,630 Njuta av kvällen. 1489 01:14:19,630 --> 01:14:21,300 Härnäst är Lenny Kravitz. 1490 01:14:21,300 --> 01:14:24,640 >> [Musik spelar] 1491 01:14:24,640 --> 01:14:28,230 >> -OK, OK, slutar din ursäkt med upp nästa 1492 01:14:28,230 --> 01:14:31,940 Lenny Kravitz inte skrika nykter ånger. 1493 01:14:31,940 --> 01:14:35,830 Det skriker, frågade vi Bon Jovi, och han sa nej. 1494 01:14:35,830 --> 01:14:38,600 Volkswagens varumärke har skadats allvarligt. 1495 01:14:38,600 --> 01:14:42,466 Och ärligt talat, deras nya annons kampanj inte exakt hjälper. 1496 01:14:42,466 --> 01:14:47,289 >> - [Tyska], skulle vi på Volkswagen gillar be om ursäkt för att lura dig med 1497 01:14:47,289 --> 01:14:47,930 våra fordon. 1498 01:14:47,930 --> 01:14:48,513 >> [END SPELA] 1499 01:14:48,513 --> 01:14:54,090 DAVID MALAN: Så detta var en omväg of-- sorry-- 1500 01:14:54,090 --> 01:14:58,730 Detta var en omväg av införande av ett grundläggande problem 1501 01:14:58,730 --> 01:15:02,810 i programvara, vilket är att du behöver för att detektera vissa villkor. 1502 01:15:02,810 --> 01:15:07,680 Och så frågan till hands här är, hur en bil potentiellt 1503 01:15:07,680 --> 01:15:09,870 som implementeras i mjukvara av dessa programmerare, 1504 01:15:09,870 --> 01:15:11,850 upptäcka att det faktiskt är testas? 1505 01:15:11,850 --> 01:15:14,150 Så för att vara super tydliga, vad de gjorde 1506 01:15:14,150 --> 01:15:17,940 var, i miljöer där programmerare figured 1507 01:15:17,940 --> 01:15:20,460 bilen är testas, de på något sätt gjort 1508 01:15:20,460 --> 01:15:24,840 bilen avger mindre utsläpp, färre utsläpp, så mindre giftig rök 1509 01:15:24,840 --> 01:15:25,470 och så. 1510 01:15:25,470 --> 01:15:27,261 Men när det är normalt körning på väg, 1511 01:15:27,261 --> 01:15:30,350 det skulle bara släpper ut lika mycket föroreningar som den ville. 1512 01:15:30,350 --> 01:15:33,870 >> Så hur kan vi skriva pseudokod för denna algoritm? 1513 01:15:33,870 --> 01:15:37,820 Hur kan vi skriva pseudokod för programvara som körs i bilen? 1514 01:15:37,820 --> 01:15:43,390 Jag menar, i ett nötskal, kokar det ner till något sådant. 1515 01:15:43,390 --> 01:15:48,000 om testas, släpper ut mindre. 1516 01:15:48,000 --> 01:15:50,750 annars avger mer. 1517 01:15:50,750 --> 01:15:52,630 Men det är lite alltför hög nivå, eller hur? 1518 01:15:52,630 --> 01:15:58,580 >> Låt oss försöka att dyka i vad detta abstraktion av att vara testade medel. 1519 01:15:58,580 --> 01:16:06,340 Med andra ord, även om du vet ingenting om bilar, vilken typ av frågor 1520 01:16:06,340 --> 01:16:13,440 kanske du frågar för att avgöra om du testas, om du är bilen? 1521 01:16:13,440 --> 01:16:19,638 Vilka egenskaper kan vara närvarande om en bil testas? 1522 01:16:19,638 --> 01:16:21,026 >> PUBLIK: testutrustning. 1523 01:16:21,026 --> 01:16:22,420 >> DAVID MALAN: testutrustning. 1524 01:16:22,420 --> 01:16:26,060 Så om testutrustning i närheten, sedan släpper ut mindre. 1525 01:16:26,060 --> 01:16:28,669 Så jag kunde tänka mig att genomföra att med någon form av kameror 1526 01:16:28,669 --> 01:16:29,960 eller upptäcka vad som finns runt omkring dig. 1527 01:16:29,960 --> 01:16:32,870 Och låt mig föreslå att bara känns alltför komplicerat 1528 01:16:32,870 --> 01:16:37,914 att faktiskt ha ytterligare hårdvara just för detta ändamål. 1529 01:16:37,914 --> 01:16:44,830 >> PUBLIK: Om du befinner dig i parkera, om din huv är öppen. 1530 01:16:44,830 --> 01:16:47,320 >> DAVID MALAN: I parken eller huven öppen, så det är bra. 1531 01:16:47,320 --> 01:16:47,420 >> PUBLIK: Och bilen igång. 1532 01:16:47,420 --> 01:16:50,480 >> DAVID MALAN: Så det är lite mer concrete-- och bilen igång. 1533 01:16:50,480 --> 01:16:55,690 Så detta skulle vara kombinationen av en några olika förhållanden, om man så vill. 1534 01:16:55,690 --> 01:16:59,227 Så om bilen är i parken och även även om detta är en mycket mekanisk sak 1535 01:16:59,227 --> 01:17:01,060 typiskt, jag kunde föreställa sig att skriva programvara, 1536 01:17:01,060 --> 01:17:03,476 särskilt eftersom det finns ofta en ljus där dessa dagar, 1537 01:17:03,476 --> 01:17:07,400 Jag kan föreställa mig att det finns programvara som kan söka i skift 1538 01:17:07,400 --> 01:17:10,634 eller vad inte, är du i parken, är du i enheten, är du i omvänd ordning. 1539 01:17:10,634 --> 01:17:12,550 Och jag kan få tillbaka en svara att det är antingen ja 1540 01:17:12,550 --> 01:17:14,400 eller nej till dessa typer av frågor. 1541 01:17:14,400 --> 01:17:17,630 >> Och så jag kunde också antagligen svara en fråga som är huven öppen. 1542 01:17:17,630 --> 01:17:21,860 Kanske finns det någon form av sensor som antingen ger mig tillbaka en 1 eller 0, 1543 01:17:21,860 --> 01:17:23,720 sant eller falskt, är huven öppen. 1544 01:17:23,720 --> 01:17:28,180 Och då bilen igång, kan jag upptäcka som på något sätt via vilken mekanism? 1545 01:17:28,180 --> 01:17:30,430 Liksom, är bilen körs, jag kunde upptäcka att det är på, 1546 01:17:30,430 --> 01:17:32,127 kunde jag upptäcka något sätt att bilen är i rörelse? 1547 01:17:32,127 --> 01:17:32,881 >> Målgrupp: RPM. 1548 01:17:32,881 --> 01:17:35,190 >> DAVID MALAN: Ja, så det finns alltid att nålen som 1549 01:17:35,190 --> 01:17:38,034 talar om hur många varv per minuten hjulen upplever. 1550 01:17:38,034 --> 01:17:39,200 Och så jag kunde titta på det. 1551 01:17:39,200 --> 01:17:43,090 Och om det inte är 0, som förmodligen innebär att bilen är i rörelse. 1552 01:17:43,090 --> 01:17:45,400 Men vi måste vara en lite försiktig där, 1553 01:17:45,400 --> 01:17:49,780 because-- låt oss förenkla this-- om vi bara sagt, om bilen körs, 1554 01:17:49,780 --> 01:17:53,070 Vi vill inte bara släpper ut mindre, vi vill om bilen körs 1555 01:17:53,070 --> 01:17:54,310 och det testas. 1556 01:17:54,310 --> 01:17:56,320 >> Så det finns några andra Ingredienser som folk 1557 01:17:56,320 --> 01:18:00,550 har en hypotes programvaran gör, eftersom frånvarande själva källkoden, 1558 01:18:00,550 --> 01:18:05,130 du kan bara sorts sluta från fysiska effekterna av bilen om vad 1559 01:18:05,130 --> 01:18:08,280 kan gå på under huven i programvaran. 1560 01:18:08,280 --> 01:18:17,090 Så om bilen kör och kanske, säg, bakhjulen rör sig inte, 1561 01:18:17,090 --> 01:18:19,420 kan detta vara ett tecken någon form av test? 1562 01:18:19,420 --> 01:18:22,830 Vad jag antyda här? 1563 01:18:22,830 --> 01:18:24,830 Ja, kanske, det är på en av dessa rull saker, 1564 01:18:24,830 --> 01:18:28,340 där som hjulen vänder i fronten eller i ryggen, 1565 01:18:28,340 --> 01:18:32,570 beroende på om det är framhjul eller bakhjulsdrift, så hälften av hjulen 1566 01:18:32,570 --> 01:18:34,420 är att flytta, men andra två är inte, vilket 1567 01:18:34,420 --> 01:18:36,320 är en konstig situation i den verkliga världen. 1568 01:18:36,320 --> 01:18:38,110 Om du kör på väg, som inte skulle hända. 1569 01:18:38,110 --> 01:18:40,568 Men om du är i ett lager på någon form av valssystem, 1570 01:18:40,568 --> 01:18:41,630 som kan faktiskt hända. 1571 01:18:41,630 --> 01:18:46,980 >> Jag tror att folk har också föreslagit att kanske, Om bilen är igång och styrning 1572 01:18:46,980 --> 01:18:51,300 hjulet inte rör sig, att också kan vara en signal, 1573 01:18:51,300 --> 01:18:54,090 eftersom det är rimligt att som en genast på en väg. 1574 01:18:54,090 --> 01:18:57,960 Men även då, är den mänskliga förmodligen flytta den lite eller säkert 1575 01:18:57,960 --> 01:18:59,100 under några sekunder. 1576 01:18:59,100 --> 01:19:01,030 Eller under loppet av en minut, oddsen är det inte 1577 01:19:01,030 --> 01:19:03,510 kommer att vara fixerade i exakt samma position. 1578 01:19:03,510 --> 01:19:05,440 >> Så med andra ord, vi kan ta subtraktion, 1579 01:19:05,440 --> 01:19:08,200 är du testas, och bryta ner denna funktion 1580 01:19:08,200 --> 01:19:10,420 in dessa komponent ingredienser. 1581 01:19:10,420 --> 01:19:13,440 Och det är verkligen vad Volkswagens ingenjörer gjorde något sätt. 1582 01:19:13,440 --> 01:19:17,070 De skrev programvara medvetet upptäcka om bilen testas, 1583 01:19:17,070 --> 01:19:20,440 Därför släpper ut mindre, annars avger på vanligt sätt. 1584 01:19:20,440 --> 01:19:22,690 >> Och problemet här också, är att programvaran är inte 1585 01:19:22,690 --> 01:19:26,080 något du verkligen kan se om du har den så kallade källkoden. 1586 01:19:26,080 --> 01:19:29,060 Så det finns två olika typer av code-- åtminstone två olika typer 1587 01:19:29,060 --> 01:19:30,130 av kod i världen. 1588 01:19:30,130 --> 01:19:33,150 Det finns något som kallas källa kod, vilket inte är till skillnad från vad som 1589 01:19:33,150 --> 01:19:37,240 vi har skrivit, källkod. 1590 01:19:37,240 --> 01:19:40,099 >> Detta är källkod skriven i ett språk som kallas pseudokoden, 1591 01:19:40,099 --> 01:19:41,640 vilket är bara något engelsk liknande. 1592 01:19:41,640 --> 01:19:43,140 Det finns ingen formell definition av det. 1593 01:19:43,140 --> 01:19:46,770 Men C och Java, C ++, de som är alla formella språk som, 1594 01:19:46,770 --> 01:19:50,610 när du skriver in dem, vad du har är en textfil som innehåller källkoden. 1595 01:19:50,610 --> 01:19:54,850 >> Men det finns också något i den värld som kallas maskinkoden. 1596 01:19:54,850 --> 01:20:00,579 Och maskinkod, tyvärr, är bara 0: s och 1: or. 1597 01:20:00,579 --> 01:20:02,870 Så maskinkod är vad maskiner förstå, naturligtvis. 1598 01:20:02,870 --> 01:20:04,470 Källkoden är vad människor förstår. 1599 01:20:04,470 --> 01:20:08,390 >> Och i allmänhet, men inte alltid, finns det ett program 1600 01:20:08,390 --> 01:20:14,090 att en programmerare använder som tar källa kod och omvandlar den till maskinkod. 1601 01:20:14,090 --> 01:20:17,400 Och att programmet är i allmänhet kallas en kompilator. 1602 01:20:17,400 --> 01:20:19,820 Så din ingång är källkod, utskrifterna är maskinkod, 1603 01:20:19,820 --> 01:20:22,890 och kompilatorn är en bit av programvara som gör denna process. 1604 01:20:22,890 --> 01:20:26,260 Så detta faktiskt kartor fint till våra ingångar, algoritmer, utgångar. 1605 01:20:26,260 --> 01:20:30,400 >> Men detta är en mycket specifik inkarnation av det, vilket är att säga att, 1606 01:20:30,400 --> 01:20:34,200 även om du äger en av Volkswagens bilar som är skyldig till detta, 1607 01:20:34,200 --> 01:20:38,390 Det är inte som du kan bara öppna huva eller öppna bruksanvisningen eller titta 1608 01:20:38,390 --> 01:20:42,690 på källkoden, eftersom när den når din bil i din uppfart, 1609 01:20:42,690 --> 01:20:45,580 Det har redan varit omvandlas till 0 s och 1 s. 1610 01:20:45,580 --> 01:20:51,310 Och det är mycket svårt, inte omöjligt, men mycket svårt att få fram mycket av något 1611 01:20:51,310 --> 01:20:53,710 från att bara titta på underliggande 0 s och 1 s. 1612 01:20:53,710 --> 01:20:57,150 Så du kan räkna ut, i slutändan, om du förstår hur en maskin operates-- 1613 01:20:57,150 --> 01:20:59,870 Intel inside-- om du förstår Intel arkitektur, 1614 01:20:59,870 --> 01:21:01,440 men det är mycket tidskrävande. 1615 01:21:01,440 --> 01:21:05,010 Och även där, kanske du inte kunna se allt 1616 01:21:05,010 --> 01:21:08,220 att koden faktiskt kan göra. 1617 01:21:08,220 --> 01:21:12,521 >> Några frågor om detta eller detta typ av process mer allmänt? 1618 01:21:12,521 --> 01:21:15,134 1619 01:21:15,134 --> 01:21:18,300 Och faktiskt, kan vi knyta denna diskussion gårdagens diskussion om Apple. 1620 01:21:18,300 --> 01:21:22,500 Även detta är anledningen till att FBI kan inte bara gå och titta i den misstänktes telefon 1621 01:21:22,500 --> 01:21:26,820 och hitta rader kod, för exempel att göra det möjligt för lösenkod 1622 01:21:26,820 --> 01:21:28,940 eller aktivera att 80-millisekunders fördröjning. 1623 01:21:28,940 --> 01:21:31,630 På grund av den tid det på stipendiaten iPhone, 1624 01:21:31,630 --> 01:21:34,975 Det har redan varit konverteras till 0 s och 1 s. 1625 01:21:34,975 --> 01:21:38,015 1626 01:21:38,015 --> 01:21:40,820 >> Nåväl, låt oss stanna här för vår titta på beräkningstänkande. 1627 01:21:40,820 --> 01:21:42,320 Varför tar vi inte en 15 minuters paus. 1628 01:21:42,320 --> 01:21:44,130 Och när vi kommer tillbaka, vi ska ta en titt på programmering 1629 01:21:44,130 --> 01:21:46,550 själv och börja att kartlägga några av dessa högnivåkoncept 1630 01:21:46,550 --> 01:21:49,780 till en faktisk, om lekfull, programmeringsspråk. 1631 01:21:49,780 --> 01:21:51,089