David Malan: Welkom terug, almal. So gister, sal jy onthou dat Ons het gefokus op hierdie onderwerpe hier. So het ons vier oorkoepelende topics-- privaatheid, sekuriteit, en die samelewing; internet tegnologie; wolk rekenaar; en uiteindelik, web ontwikkeling. Het iemand het die bandwydte of die tyd om 'n bietjie John kyk Oliver gisteraand? Dit is eintlik redelik amusant, indien nie 'n bietjie skrikwekkend. Enige vrae oor enigiets Ons het gister? Enige verduideliking? Enige vrae wat jy wil maak seker ons raak vandag in een of ander vorm? So skoon lei. So, wat is op die agenda vir vandag? So het ek gedink ons ​​wil begin vandag met 'n blik op wat oor die algemeen bekend as computational thinking-- by die risiko van oorvereenvoudig, dink soos 'n rekenaar, miskien dink soos 'n ingenieur, en probeer om te begin om organiseer jou gedagtes of om jou 'n beter begrip van gee wat betrokke is by eintlik bevelvoerder 'n rekenaar om iets te doen deur middel van programmering. En ons sal dit hou 'n mooi hoë vlak, pretty much Engels, maar probeer om te gebruik van bekende voorbeelde te formaliseer hoe jy te werk sal gaan oplos van probleme. En ons sal verskeie CS heroorweeg onderwerpe, soos onttrekking, wat 'n paar vorendag gekom keer gister, algoritmes, en dan verteenwoordiging. En dit is waar ons moet begin vandag in net 'n oomblik. Dan sal ons 'n blik op ontwikkeling te neem. Ons sal 'n blik op sommige neem fundamentele konstrukte waarmee jy dalk vertroud wees en dalk selfs vind nogal intuïtief. Ons sal kyk, in werklikheid, teen 'n monster programmering omgewing wat baie toeganklik, baie speels en inderdaad gerig vir ouderdomme 12 en ouer. Ons sal 'n paar minute daar spandeer en dan neem dinge na 'n laer vlak en eintlik praat oor 'n paar van die algoritmes en datastrukture, om so te praat, wat programmeerders tipies gebruik om probleme op te los baie meer doeltreffend as wat jy dalk in staat wees om heeltemal te doen sonder hulle. Dan na middagete, sal ons 'n blik op tegnologie stapels, wat net 'n fancy manier om te sê versamelings van tegnologie wat jy kan gebruik om los 'n probleem. En ons sal praat oor die alfabet sop van tale wat bestaan ​​today-- Java en Python en C ++ en PHP en Ruby en allerhande ander dinge. Ons sal 'n blik kortliks te neem by ontwerp patrone. Programmeerders, met verloop van tyd, het aangeneem metodologieë wat geneig is om hulle te help probleme op te los meer geredelik. Wanneer jy begin om jouself te sien skryf dieselfde soort kode weer en weer, mense formaliseer diegene herhalings en toeskryf name aan hulle en gebruik dit dan en bevorder hulle uiteindelik. En ons sal 'n bietjie gesels oor mobiele strategieë, soos wat beteken dit om werklik 'n mobiele program of 'n mobiele webwerf. Het jy dit doen vir Android? Het jy dit vir IOS? Het jy dit vir beide van diegene? En wat is die trade-offs? En dan uiteindelik, sal ons neem 'n blik web ontwikkeling, wat is 'n kollektiewe term regtig beskryf enige tyd jy skryf sagteware wat bedoel om uit te voer op die web, of op selfone of desktops en skootrekenaars. Ons sal 'n kort blik op te neem databasisse en die ontwerp daarin, al is dit net omdat byna elke interessante web-gebaseerde program deesdae het 'n soort van databasis. Andersins, dit sal net statiese inhoud. En 'n databasis kan jy maak veranderinge met verloop van tyd, of jouself of van die gebruikers. En ons sal kyk hoe jy werk sal gaan om die ontwerp dat databasis en die soort jargon wat kan kom in 'n ingenieur se bespreking op 'n wit bord wanneer eintlik implementering 'n app vir die eerste keer. Ons sal kortliks praat oor APIs, nuttige dienste wat jy kan gebruik op die om op te staan skouers van ander, of maatskappye of individue, en los jou eie probleme vinniger. En dan sal ons dalk ploeteraars 'n bietjie met JavaScript, 'n programmeertaal wat gebruik word beide in blaaiers deesdae, maar ook in bedieners. En miskien, sal ons weer, die tyd dit toelaat, sommige van die praktiese web dinge wat ons het gister en die twee te integreer saam voordat ons verdaag. So met that-- wat ahead-- is daar enigiets ontbreek wat jou wil om seker te maak ons ​​voeg en raak op een of ander stadium. As dit Springs ter harte neem, bring dit tot kort voor lank. Maar hoekom doen ons nie begin met 'n kyk na Rekenaardenke. En laat ek stel voor dat Rekenaardenke is, weer, soort van die hoë vlak beskrywing van wat 'n rekenaar wetenskaplike kan doen. En inderdaad, kom ons begin met drie bestanddele wat mag gaan in computational denke. Dit is net een manier om dit te beskryf. Ons kan beslis definieer dit in 'n aantal maniere. Maar laat my stel, ter wille van vandag, wat die wêreld se probleme, al die wêreld se probleme, wanneer hulle genader word deur 'n rekenaarwetenskaplike kon gesien word as wat ons sal oproep insette, wat moet gevoer word in wat ons sal noem algoritmes, wat dan lewer uitgange. Met ander woorde, die hele wêreld van probleemoplossingsvaardighede Ek eis kan gedistilleerde in hierdie drie bestanddele. So, wat bedoel ek met insette? Insette is net wat jy oorhandig om op te los. Byvoorbeeld, hier is 'n ou skool probleem. As ek 'n telefoon boek hier en Ek wil iets kyk na dit, dit is my insette. Ek het 1000 of so bladsye in 'n telefoon boek. Dit is die insette om my probleem. En ek wil iets vind soos Mike Smith, sodat 'n vriend wie se naam en nommer hopelik in hierdie adresboek. Dit is voor die dae van sel selfone, so ek kan nie net soek vir dit. So ek het dit ou te doen skool en eintlik soek hierdie insette vir 'n paar antwoorde. En die antwoord is net gaan die uitset genoem te word nie. So het die insette is die telefoon boek. Die algoritme is alles stel stappe wat ek gebruik om Mike Smith vind. En die uitset is, hopelik, Mike Smith se telefoonnommer. En dit dan net sou wees verteenwoordiger van die meeste enige probleem om met jou oorhandig insette en wil uitsette te produseer. Dus, voordat ons kyk na die proses waardeur ons kan die probleem op te los, vind Mike Smith en iets soos dit, Kom ons kyk na die eerste en die last-- insette en uitsette. Fisies, natuurlik, die insette hier is 'n hele klomp van die papier vasgeplak saam in die vorm van 'n telefoon boek. Maar rekenaars, van course-- skootrekenaars en desktops en selfs selfone hierdie days-- dit is elektroniese toestelle. En aan die einde van die dag, wat die enigste insette tot 'n rekenaar? Wel, dit is iets soos hierdie netsnoer hier. Ek prop dit in die muur, en Ek kry 'n vloei van elektrone, wat dit moontlik maak vir my om die masjien loop. Of miskien diegene elektrone geskep deur middel van my battery. Maar aan die einde van die dag, dis die enigste ding wat gaan in my laptop. En so baie interessante dinge is uiteindelik uit te kom, of deur middel van die drukker of die skerm of audially of dies meer. So as alles wat ons het as ons fundamentele insette tot 'n rekenaar is elektrisiteit, sodat net elektrone gaan in en of uit, en so hoe kan ons gebruik wat insette om werklik inligting voor te stel? Met ander woorde, hoe kry ons van 'n eenvoudige vloei van elektrisiteit om verteenwoordig werklike getalle of werklike briewe of werklike beelde op die skerm of werklike films of e-posse of enige nommer van hierdie hoër vlak konsepte, as jy wil, wat aan die einde van die dag op 'n manier moet gestoor word in hierdie elektroniese meganiese toestel die gebruik van slegs die eenvoudige ingredients-- elektrone kom in en uit? So dit blyk dat, in die eenvoudigste vorm, die enigste soort state Ek het in my wêreld, sodat aan voorwaardes speak-- in my world-- is óf Ek het elektrone vloei, elektrisiteit vloei, of ek doen not-- so aan, af. En laat ons formaliseer op en af, as 'n rekenaarwetenskaplike krag met net 1 en 0. Kom ons beskryf sommige arbitrêre maar konsekwent nommer nie. 1 beteken op, 0 beteken nie. Of jy kan ook beskou dit as ware middel op en valse middel. Jy kan ook swart doen en wit of rooi en blou. Jy hoef net twee beskrywings. En 'n rekenaar wetenskaplikes sou oor die algemeen net gebruik 0 en 1. So as dit die geval is, my enigste alfabet is wat bestaan ​​uit 0 en 1 se hoe kon ek moontlik te kry om die syfer selfs 2 in 'n rekenaar, wat nog te sê die nommer 3 of 'n letter van die alfabet of 'n beeld of 'n fliek? Hoe weet ons soort opstart onsself uit hierdie basiese beginsel van 0 en 1 en eintlik iets meer interessant verteenwoordig? Wel, laat ons sit daardie vraag op te hou vir 'n oomblik en oorweeg iets hopelik bekend, selfs as jy nie regtig gedink het oor dit in enige detail vir 10, 20, 30, 40, 50 meer jare. Dit is wat? Hoe sou jy dit uit? Nie 'n truuk vraag. 'N Aantal nie, maar wat is dit? 1, 2, 3, of 123. En ek hou van hoe jy gesê 1, 2, 3, want dit is een manier om van die lees van dit. 1, 2, 3, dit is 'n reeks van drie simbole. Dit is foto's wat ons nou woorde vir. En as jy soort van lees hulle almal saam, 'n tipiese menslike in Engels sou sê 123. En dit is soort van 'n hoër vlak konsep, voel soos 'n redelik groot aantal. Maar hoe het ons daar kom? Wel, dit kan 'n rukkie sedert wees jy het daaroor gedink soos hierdie, Maar terug in my dag, ek soort van hierdie geleer soos kolom die 1'e, die 10's kolom, en kolom die 100 se. So as Lakisa sê, dit is 1, 2, 3, maar dit is ook 123. Maar hoe kry ons uit die eersgenoemde na laasgenoemde? Wel, jy sal tipies doen kolom die 100 se, ek het 'n 1. So dit is soos om te sê 100 keer 1. En dan in kolom 10's, ek het 2. So dit is soos om te sê 10 keer 2. In kolom die 1'e, ek het 3. So dit is soos om te sê 1 keer 3. En as ek voeg hierdie dinge saam, hierdie, natuurlik, is 100 plus die 10 plus 3. En o, dit is hoekom ek hierdie kry hoër vlak idee van 123. Dis net basiese wiskunde, waardeur hierdie simbole gewigte aan hulle, as jy sal, place holder of kolom waardes. En as Ek vermenigvuldig alles uit, ek kry hierdie nommer. So hoeveel van julle weet hoe om te praat binary-- 0 en 1's-- soos 'n rekenaar? OK, perfekte, niemand, of niemand van julle dink jy doen. Ek sou julle kon eis eintlik weet dit reeds. Ons moet net soort van tweak ons geestelike model 'n bietjie. Maar die proses is presies dieselfde. Laat my hierdie een daar laat en plaas trek dit neer vir 'n oomblik. In die wêreld van rekenaars, Ons het net 0 en 1 se. En so het die ding wat gaan verander is wat? Wel, in my menslike wêreld, die desimale stelsel, Desember betekenis 10, Ek het hoeveel syfers tot my beskikking? 10, of hoe? 0 tot 9, natuurlik. En dit is hoekom ons het die 10 se plek en die 100 se plek. Waar is dit vandaan? Wel, dit is 10 tot die mag van 0. Dit is 10 tot die mag van 1, 10 om die krag van 2, en so meer. Jy hou net jou kolomme te vermenigvuldig met 10 begin af met net 1 in die regterkantste een hier. So in die wêreld van rekenaars, as jy net het binary-- bi betekenis 2-- of 0 en 1 se, het ons net regtig nodig het om te verander die basis van daardie wiskunde. So met ander woorde, nou sal ons net het kolom die 1 en the-- waar is hierdie going-- kolom die 2 se kolom die 4's, en miskien buite. Hoekom is dit? Wel, dit is 2 die 0-ste krag. Dit is 2 die 1. Dit is 2 tot die 2, en so aan. So terwyl hier, ons het 1, 10's, 100 se 1000 se 10,000 se 100,000 se 1 miljoene, en dies meer, hier Ons het 1, 2, 4, 8, 16, 32, 64. Jy hou net vermenigvuldig met 2, in plaas van hou te vermenigvuldig met 10. So nou, as die doel op hand is om te verteenwoordig getalle met behulp van slegs 0 en 1 se Kom ons kyk hoe ons daar kom. Dit, natuurlik, is die patroon 0 0 0, maar hoeveel konseptueel verteenwoordig dit? Wel, 4 keer 0 plus 2 keer 0 plus 1 keer 0, laat ons saam te voeg diegene. 4 keer 0 is, natuurlik, 0, plus 2 tye 0 is, natuurlik, 0 plus 1 keer 0 is, natuurlik, 0. So ah, dit verteenwoordig die aantal ons mense ken as 0. Wel, nou, laat ons baie vinnig vinnig vorentoe. As ek in plaas nie verteenwoordig 0 0 0, maar laat ons doen 1 0 1, wat dalk hoe Lakisa, vroeër, sou net te spreek dit 1 0 1. Maar nou, hoe kan ons neem dit na die hoër vlak die getal wat ons mense kan weet? So, wat is hierdie getal? Dit is 5, die aantal wat ons weet as 5. Wel, hoekom is dit? Wel, kan ons regtig soort loop deur dit metodies 4 keer 1, 2 keer 0, 1 keer 1. Voeg die saamgekom, sodat dit is 4 plus 0 plus 1. En dit is inderdaad 5. So dit is 'n bietjie vervelig nou doen die rekenkundige weer en weer. Maar die proses is presies dieselfde. Die enigste ding wat verander in ons wêreld is dat ons kolomme is 1, 2, 4, 8, 16, ensovoorts, in plaas van 1, 10, 100, 1000. En dit is net omdat ons alfabet het gekrimp van 0 tot 9 tot net 0-1. So as 'n bietjie quiz hier, hoe sou jy die nommer 7 in binêre verteenwoordig? 0? Wel, 0, beteken dat jy 0 0 0? Sê dit weer, Karina. Perfek. Hoekom is dit? Dit is effektief 4 plus 2 plus 1. So goed. Hoe kan ons verteenwoordig 'n bietjie another-- hoe oor nommer 2? Close, maar agteruit. So, wat is dit? 4 plus 1, so dit is 5 weer. So what's-- Ek is jammer, Karina? 0 1 0. 0 1 0 sal wees 2, want weer, selfs As dit soort van spring nie uit na jou, net doen die wiskunde. 4 keer 0, 0, 2 keer 1 is 2, 1 keer 0 0. So dit is die getal wat ons weet as 2. Hoe gaan dit met die nommer 8? Hm? Goeie. So ons soort van 'n ander plekhouer nodig. Ons moet 1 0 0 0. En dit is waar van ons soort van die ou skool desimale stelsel. Hoe kan jy die nommer 1000 te verteenwoordig? Wel, jy sal blyk te wees soort in 'n moeilike plek, As jy vra om verteenwoordig die getal 1000, want selfs as jy jouself gee soos 9 van hierdie, 9 van hierdie, 0 van hierdie, wat is die grootste getal wat jy het, het jy nie heeltemal kry tot 1000. So as jy 1000, jy hoef net 'n ander posisie, sodat jy kan doen 1 0 0 0, ergo die getal 1000. So nou, laat ons karteer hierdie soort konseptuele bespreking terug na hardeware, waar eens die insette was net hierdie klein elektriese kabel, elektrisiteit kom in en vloei uit. En so is dit vir wat moet gekarteer uit hier om daar, wel, wat doen ons regtig nodig het? Wel, kan jy dink dat hulle binne 'n rekenaar, 'n hele klomp van die gloeilampe, as jy wil. Hulle is regtig transistors genoem. En transistors is net skakel wat kan óf op of af. So jy kan dink aan 'n transistor wat op toelaat elektrisiteit te laat vloei en 'n transistor wat af as stop elektrisiteit vloei. En eerder as om te neem oor die ligte hier, Hoekom kan ek nie doen nie sulke van nuwe skool styl. So dit dalk 'n 1, 'n flitslig wat op, net skaars al. En dit kan wees 'n 0, en nou is dit af. So die gebruik van hierdie fisiese toestel, ek kan nou verteenwoordig die binêre stelsel. Ek hoef net twee lande. Dit maak nie saak wat kleur dit is of wat dit is. Al wat saak maak, is dat ek 'n staat op en 'n ander staat af. So met my selfoon hier, hoe kan ek verteenwoordig die aantal ons weet as 0? Of anders gestel het, wat getal is ek wat nou? 0, omdat die toestel af is. En as ek dit doen? En nou, hoe kan ek verteenwoordig die aantal 2? Kan ek leen jou selfoon hier, soos ons gister gedoen het? So laat ons sien, so as ek wil verteenwoordig die nommer 2, is dit die nommer 2? Geen. Watter getal is ek per ongeluk verteenwoordig hier? Dit is eintlik die nommer 3. So watter een wil ek afskakel? Die swart telefoon or-- Wel, as they're-- Swart telefoon of die wit selfoon? Die wit telefoon. So as ek draai dit af en ons lyn dit hier het ons 'n 1 in die 2 se plek en 'n 0 in die 1 se plek. En so ek is nou verteenwoordig die aantal 2. En dit, natuurlik, sou die getal wees 3, want nou albei hierdie ligte is op. En ek sal hier stop, maar dit spreek vanself As ek wil die verteenwoordig nommer 4 of 8 of hoër, Ek gaan meer fone nodig. Maar dit is alles wat aangaan. So as jy ooit gehoor het dat binnekant van a-- dankie you-- rekenaar is miljoene transistors, dis net miljoene klein bietjie skakelaars. En hulle is nie lig bolle wat op en af ​​te skakel, maar hulle het nie toelaat dat elektrisiteit iewers vloei of stop dit. En dus is daar jou twee states-- op of af, aan of af. So sal ons nou lyk om hierdie vermoë te hê om hierdie konsep verteenwoordig wat Ons wil graag in werklike hardeware. Maar al wat ons nou het, is die vermoë om om getalle dit wil voorkom verteenwoordig. So hoe ons te werk gaan verteenwoordig letters van die alfabet, wat voel soos die volgende soort funksie wat jy wil toe te voeg tot 'n moderne rekenaar Sodra jy het 'n nommer? En inderdaad, as jy dink oor dit, histories, rekenaars was regtig ingestel om te dien as numeries sakrekenaars voorsien. Maar natuurlik, hierdie dae, hulle doen baie meer. Selfs toe hulle boot, jy sien tipies een of meer woorde. So hoe kan jy verteenwoordig woorde, As alles wat jy het, is, weer, elektrisiteit aan die einde van die dag, of anders gestel 0 en 1 se? Ja. Ja, ek bedoel, ons soort het hierdie gister in een of ander vorm, waar op 'n sekere punt, Ek dink ek arbitrêr het gesê dat, as ons wil hê dat die verteenwoordig letter A, kon ons net noem dat 'n 1. Dit was in die konteks van kriptografie, waar ons net nodig 'n soort van kode, 'n soort van kartering. So miskien A sal verteenwoordig as 'n 1, en B sal verteenwoordig word as 'n 2, en Z word verteenwoordig as 'n 26, byvoorbeeld. En dan is die enigste nadeel is dat as ek gaan briewe enkodeer in my e-pos of in my sms-boodskappe as getalle, julle almal moet saamstem met die gebruik Dieselfde stel konvensies. En inderdaad, die wêreld het presies dit gedoen. Daar is 'n stelsel in die wêreld genoem ASCII, American Standard -Kode vir Inligting-wisselaar, wat is eenvoudig 'n besluit 'n paar jaar gelede dat die mens gemaak wat besluit dat 'n gaan gelyk, nie 1, 2, en 26, en so forth-- dit is 'n bietjie different-- maar 65, 66, 67. En Ek sal optrek 'n grafiek in net 'n oomblik. Maar dit is arbitrêr. Maar dit maak nie saak dat dit arbitrêr. Die wêreld moet net konsekwent wees. Nou, meer onlangs, daar is iets liefhebber genoem Unicode, want soort ter wêreld van besef, nadat uitvind rekenaars, dat daar meer as goed 256 simbole in die wêreld dat ons dalk wil verteenwoordig, veral as jy voer Asiatiese tale en ander symbologies dat meer uitdrukking as wat jy nodig het kan inpas in die vroegste weergawe van hierdie kode, wat ASCII genoem. So Unicode kan eintlik jy meer 0 en 2 gebruik. In die besonder, hou jy hoor die woord grepe in die samelewing en selfs net gister. En 'n greep is wat nou weer? Wat is 'n byte? Dis net 8 stukkies. So, wat beteken dit werklik? Wel, dit beteken, vroeër, toe ons praat oor binêre en ek is met behulp van arbitrêr drie stukkies toe ons praat oor binary-- die 1 se plek, die 2 se plek, en die 4 se place-- goed, 'n greep beteken net dat jy praat nie in eenhede van drie, maar vier, vyf, ses, sewe agt, wat gee ons 8 se plek, 16's, 32's, 64's en 128's. Met ander woorde, 'n bietjie is nie al wat nuttig 'n eenheid van meet, want dit is net soos 'n klein bietjie stukkie inligting, aan of af. So 'n paar jaar gelede, die wêreld net besluit dis 'n bietjie meer gerieflik om te praat in Ingevolge grepe, agt dinge op 'n slag. En so dus gebore die idee van 'n greep. En so het ons agt stukkies hier. En dit blyk ook vir soortgelyke redes, die wêreld besluit jaar gelede dat 'n ASCII brief verteenwoordig, jy gaan eenhede gebruik van 8 stukkies. So selfs as jy dit nie doen nie nodig dat baie, jy altyd gaan 8 stukkies gebruik om verteenwoordig 'n letter van die alfabet. En dit is gerieflik, want dan as jy 'n boodskap ontvang dat 'n 0 0 0 1 1 het 1 1 0 gevolg deur 'n ander 1 1 1 0 1 0 0 1, so as jy ontvang 16 stukkies, die wêreld kan net aanvaar dat die eerste 8 is een letter en die tweede 8 is nog 'n brief. Maak nie saak hoeveel daar is. Dit is belangrik dat net ons is almal in ooreenstemming wanneer ons die interpretasie van hierdie stukkies. En dit was net random. Dit beteken iets, maar ek het nie regtig dink oor wat dit beteken. Dit is dus 'n klein wit leuentjie. Oorspronklik, ASCII eintlik slegs 7 stukkies. En op die agtste bietjie is genoem uitgebreide ASCII. Maar die punt is, uiteindelik, dieselfde. Die wêreld in die algemeen gestandaardiseerde op 8 stukkies. So dit lyk 'n bietjie wees beperk, want ek kan net verteenwoordig kapitaal A, kapitaal B deur kapitaal Z. Maar inderdaad nie, as ek gaan aan- daar is 'n klomp van die hulpbronne aanlyn, byvoorbeeld, asciitable.com, hierdie gaan 'n bietjie wees oorweldigend op die eerste. Maar ek sal uitwys Wat is hier belangrik. Dit gebeur net om be-- en ek sal walk-- Kom ons kyk, as ek hier gaan. Hier is, in die desimale kolom, die nommer 65. En op die brief regterkantste kolom karakter, Chr, is die letter A En jy kan ignoreer nie, want nou, alles in die middel. Dit is heksadesimaal, oktale, en 'n HTML-kode. Om hierdie webwerf is net probeer om te gooi 'n baie inligting oor jou op een slag. Maar al wat ons omgee is die desimale kolom en die kolom karakter. So deur die logika, wat die getal wat die wêreld het besluit verteenwoordig 'n klein 'n? Ja, 97. En net om te verwar potensieel effens, watter getal het die wêreld besluit sou die nommer 1 verteenwoordig? Reg, want we-- 49, blyk dit hier, in die onderste linker. Nou, wat moet ek daarmee? So dit blyk dat in rekenaarstelsels, Daar is oor die algemeen 'n fundamentele verskil tussen 'n nommer en 'n karakter. 'N Aantal is die ding wat ons geleer grootword wanneer ons super jong in graad skool. Dit is dinge wat jy reken met. Maar 'n karakter is net 'n vorm, 'n Than, so te sê, op die skerm. Nou, die mens wat ons soort van sien iets wat lyk soos volg. En ons sê: Ag, dit is die nommer 2. Maar nee, dit is net 'n simbool wat lyk soos wat ons weet as die nommer 2. En dus is daar hierdie fundamentele onderskeid tussen werklike getalle en karakters. Dit is 'n aantal. Maar oor die algemeen, in die konteks van 'n rekenaar, As jy in plaas sien iets quoted-- en jy nie altyd maar moet sien dit aangehaal, maar ter wille van discussion-- as sien jy aanhalingstekens rondom die getal, Dit is nou 'n karakter. So hierdie nommer 2 onder die kap binnekant van 'n rekenaar sou word verteenwoordig met 'n patroon bisse wat die getal verteenwoordig 50 volgens die grafiek aanlyn. Maar, as 'n rekenaar net sien dit, hierdie sou word verteenwoordig met die patroon van bietjie 0 0 0 0 0 0 1 0. AANGESIEN hierdie karakter sou eintlik as-- en nou verteenwoordig word, Ek het 'n bietjie harder-- so dit dink karakter sou word verteenwoordig met 0 0 1-- wat moet ek hier? 0 0 1 1 0 0 1 0. Hoe het ek dit doen? Wel, dit is die getal 50, as jy vermenigvuldig dit uit die gebruik van hierdie kolomme, dit is die nommer 2, en so dit is waarom daar is hierdie digotomie. En dit is net 'n teaser nou vir funksies wat bestaan ​​in programmeertale dat ons sal raak op kortliks later vandag. In programmeertale, jy het oor die algemeen, maar nie altyd nie, dinge noem verskillende tipes data. Met ander woorde, 'n programmer-- wanneer hy of sy skryf, 'n programmeerder kry om te besluit in watter formaat om sy of haar data te stoor. Jy kan óf te stoor as rou getalle, soos die nommer 2. Of jy kan dit stoor as snare, of rye van karakters dat jy oor die algemeen sou uitspreek met aanhalings in jou programmeringstaal. Jy kan dinge het called-- Ek sal eenvoudig vir en noem dit werklike numbers-- so getalle wat is nie heelgetalle soos die nommer 2, maar getalle graag 4.56. So kan ook reële getalle het desimale punte, so dit is 'n ander fundamentele stuk data in 'n rekenaar. En dan kan jy selfs ' ander tipes data steeds. So dit is net 'n teaser regtig van die eenvoudigste van ontwerp besluite wat 'n programmeerder mag maak onder die enjinkap. So nog net vrae? So kom ons probeer om te maak dit 'n bietjie meer real. Dit hardeware is nie soveel meer in gebruik nie. Maar die meeste mense in hierdie kamer waarskynlik grootgeword met en gebruik steeds hardeskywe een of ander manier. Hoewel die meeste van ons skootrekenaars nie meer het toestelle wat werk soos hierdie, plaas skootrekenaars vandag algemeen het vaste toestand dryf met geen bewegende dele. En dit is geneig om duurder wees, Ongelukkig nie, maar 'n bietjie vinniger en a-- goed, dikwels, baie vinniger, Dit is een van die redes. En ook dit maak nie genereer soveel hitte. Dit kan kleiner wees, so dit is oor die algemeen 'n netto positiewe. Maar dit stel ons in staat om te karteer 'n bietjie meer konkreet wat ons praat oor die 0 en 1 se vlak nou 'n fisiese toestel. Dit is een ding vir my om te praat ongeveer 0 en 1 in terme van my selfoon of abstrak in terme skakelaars om op en af. Maar wat van hardeskywe? In jou skootrekenaars, as jy 'n ouer een of in jou rekenaar, of beslis in bedieners vandag, waar jy hardeskywe wat 'n terabyte van ruimte, 4 terabyte van ruimte, goed wat beteken dit? 'N hardeskyf met 1 terabyte van ruimte middel daar is 1000000000000 grepe binnekant van dit een of ander manier, Of anders gestel 8000000000000 stukkies binnekant. 1 terabyte sou wees 8 terabis of 1000000000000 stukkies, wat beteken as jy 'n harde ry, jy het een of ander manier of ander 'n triljoen 0 se en 1 se binnekant van dit. En as ons net 'n blik op 'n arbitrêre foto van 'n hardeskyf verteenwoordiger, dit is wat 'n harde ry kan tipies lyk binnekant. Dit is ook 'n soort van soos 'n ou grammofoon speler maar oor die algemeen met verskeie rekords in, sodat om speak-- verskeie borde, soos hulle genoem word, metaal omsendbrief skywe, en dan 'n bietjie lees kop, baie soos 'n ou platespeler. En dit lees kop beweeg heen en voort en een of ander manier lees die stukkies. En wat is hierdie borde, selfs al ons mense hulle nie kan sien nie, óf in werklikheid of in hierdie foto, daar is klein bietjie magnetiese deeltjies. En selfs as jy het 'n lang vergeet hoe elektrisiteit werk, 'n magnetiese deeltjies dit is oor die algemeen aangekla 'n Noord-end en 'n Suid- end-- so noord en suid. En so het die wêreld net besluit 'n geruime tyd gelede dat, indien 'n magnetiese protokol wese is in lyn soos hierdie, noord-suid, kom ons noem dit 'n 1. As dit plaas Suid-noord, laat ons net noem dat 'n 0. En so as jy op jou beskikking 'n triljoen klein bietjie magnetiese particles-- en hopelik, die hardeware vindingrykheid in Om rond te draai diegene as jy sien fit-- as jy wil verteenwoordig 'n hele klomp van 0 se jy hoef net 8 magnetiese deeltjies al in lyn hou hiervan. En as jy wil verteenwoordig agt 1'e, jy net moet 8 magnetiese deeltjies in lyn rug aan rug aan rug hou hiervan. Wat bedoel ek met die magnetiese deeltjies? Om eerlik te wees, al die jare later, die Al wat nog kom myns insiens is hierdie man, as jy grootgeword met hierdie ding. Dit is 'n little-- vir diegene unfamiliar-- n bietjie kinderjare speelgoed wat het hierdie haarloos man hier wat al hierdie klein bietjie swart magnetiese deeltjies wat kom met dit. En die gebruik van daardie rooi stok, wat net 'n magneet, jy kan soort gee hom 'n snor of wenkbroue of hare of enigiets op hom. So in werklikheid, as ons zoom in, byvoorbeeld, die is die soort spel wat jy kan speel met vaag Willy. En dit is net om te sê, hierdie is veel groter magnetiese deeltjies as is eintlik op 'n hardeskyf, en veel minder magnetiese deeltjies. Maar laat ons eintlik sien dan as jy het klein magnetiese deeltjies in 'n hardeskyf, hoe kan jy eintlik gebruik die om data voor te stel. [Video speel] -Die Hardeskyf is waar jou rekenaar winkels meeste van sy permanente data. Om dit te doen, die data reis van geheue saam met sagteware seine dat die vertel hardeskyf hoe om die data te stoor. Die hardeskyf kringe vertaal diegene seine in spanning skommelinge. Hierdie op sy beurt, beheer oor die hardeskyf se beweeg parts-- sommige van die min bewegende dele links in die moderne rekenaar. Sommige van die seine te beheer 'n motor, wat draai-metaal bedek borde. Jou data is eintlik gestoor word op hierdie borde. Ander seine beweeg die lees / skryf koppe om te lees of data op die borde skryf. Dit masjinerie is so akkuraat dat 'n menslike haar kon nie eens slaag tussen die koppe en spin borde. Tog, dit alles werk op geweldige spoed. [Einde TERUGSPEEL] En jy kan sien op die stertkant van die video, Daar is oor die algemeen verskeie borde. En sodat lees kop is nie net die lees van die top. Dit is soort van soos drie of vier of meer lees koppe die gewemel soos hierdie, lees data gelyktydig. Daar is dus 'n baie kompleksiteit en soort van tydsberekening wat betrokke is in 'n hardeskyf. En die ding draai regtig darn vinnig, so daar is 'n baie kompleksiteit. Maar laat ons in 'n bietjie dieper zoom en sien waar is hierdie magnetiese deeltjies en hoe gaan ons kry op hulle. [Video speel] kyk -Laat se na wat ons net sien in slow motion. Wanneer 'n kort pols van elektrisiteit gestuur om die lees / skryf kop, dit flips op 'n klein elektromagnetiese vir 'n fraksie van 'n sekonde. Die magneet skep ' gebied, wat verander die polariteit van 'n klein, klein gedeelte van die metaal deeltjies wat laag oppervlak elke skottel se. 'N patroon reeks van hierdie klein aangekla gebiede op die skyf verteenwoordig 'n enkele stukkie van data in die binêre getallestelsel wat gebruik word deur rekenaars. Nou, as die huidige gestuur een pad deur die lees / skryf kop, die gebied is gepolariseer in een rigting. As die huidige gestuur in die teenoorgestelde rigting, die polarisasie is omgekeer. Hoe kry jy data van die hardeskyf? Net om te keer die proses. Dit is dus die deeltjies op die skyf wat die huidige kry in die lees / skryf kop beweeg. Saam miljoene hierdie gemagnetiseerde segmente, en jy het 'n lêer het. Nou, kan die stukke van 'n enkele lêer regoor borde n ry se soort van soos die gemors papiere op jou lessenaar. So 'n spesiale ekstra lêer hou spoor van waar alles is. Het jy nie hê dat julle gehad iets soos dit? [Einde TERUGSPEEL] So word verwys na daar, miskien, is die onderwerp van gister van skrap. Wanneer jy verwyder 'n lêer, gister gesê ons dat 'n rekenaar eintlik nie wat, as jy iets sleep om die asblik of asblik bin? Dit vergeet dit net. Maar die 0'e en 1'e die magnetiese deeltjies wat lyk soos rooi en blou dinge hier, of my arm hier, is daar steeds op die hardeskyf. En so bestaan ​​daar software-- Norton Utilities en Yesteryear en ander meer moderne software-- dat net sal 'n hele hardeskyf scan soek by al die 0 en 1, omdat dit blyk dat die meeste lêer formate- Word-dokumente, Excel-lêers, beelde, video files-- almal sekere patrone wat algemeen onder hulle is. Elke video lêer mag wees van 'n ander video, maar die eerste paar stukkies is gewoonlik dieselfde. Of die laaste paar stukkies is gewoonlik dieselfde. En so met 'n hoë waarskynlikheid, jy kan kyk vir diegene patrone. En selfs as die lêer is vergete, jy kan sê met 'n hoë waarskynlikheid, maar dit lyk soos 'n Word-dokument, Kom ons herwin dit en un-vergeet nie, as jy wil. En so dit is hoe jy kan herstel data wat óf per ongeluk was verwyder of verwyder of doelbewus verwyder om watter doeleindes. In teenstelling hiermee, veilige skrap doen wat in die konteks van 'n foto soos hierdie? Presies, maak hulle almal ewekansige. Daarom is dit soort van beweeg van hulle af, sommige van hulle het, laat sommige van hulle onveranderd, en oor die algemeen maak ewekansige geluid daaruit, of net miskien maak al hulle 0 of almal van hulle 1 se. En dit te kan oor die algemeen skrop jou data weg. So laat ons nou terugkeer na die kwessie van Rekenaardenke, waardeur Ons het die formule insette. En algoritmes gee jy uitgange uiteindelik. Ons fokus nou op insette en uitsette, want nou het ek eis het ons 'n manier om verteenwoordig en uitgange. Ons is net gaan om binêre gebruik. En maak nie saak wat ons wil vandag verteenwoordig, of dit nou 'n nommer of 'n brief of duisende daarvan in 'n telefoon boek of beelde of films, aan die einde van die dag, dis al 0 en 1 se. En ek sê dat, alhoewel hierdie is 'n super eenvoudige wêreld met net 0 se en 1'e, kan ons onsself opbou. En ons het 'n voorbeeld van gesien wat met letters tot dusver. So laat ons nou fokus op hierdie middel bestanddeel, 'n algoritme. En laat ons terugkeer tot die voorbeeld van Mike Smith. So in hierdie telefoon boek, wat weliswaar, ons nie soveel meer gebruik, daar is 'n probleem wat opgelos moet word. Ons wil iemand soos Mike Smith vind. En wat kan ek doen om Mike vind? Wel, ek kon net oop te stel hierdie boek, begin by die eerste bladsy, en besef, o, ek is in die A-afdeling. Mike is daar nog nie. Ek moet die S afdeling vir Smith. So hou net draai een bladsy op 'n slag. Laat my voorgee dat dit alles wit bladsye en nie geel bladsye, want ons gaan nie om uit te vind Mike in die geel bladsye in elk geval. Maar ek is in die wit bladsye. En nou, ek is in die afdeling B. Ek het nog vir hom nie gevind nie. So ek hou draai een bladsy op 'n slag. Dit is 'n algoritme. Dit is 'n stel instruksies vir die oplossing van 'n probleem. Met ander woorde, kyk na bladsy, as Mike is nie daarop, draai bladsy, en herhaal weer en weer en weer, ideaal afkyk as jy dit doen. So is hierdie algoritme, hierdie proses, korrek? Jammer. Nee, ek hoor 'n paar nommers. OK, maar dit is-- ja, dit is beslis vervelig. Soos ons sal hier die hele dag as ek wees hou op soek na Mike teen hierdie spoed. Maar laat ek beweer dit is korrek. Dit is dom, maar dit is korrek. Aan die einde van die dag, solank dit dalk neem, ek sal Mike vind as hy daar en ek aandag. En ek uiteindelik sy bladsy te bereik. En as ek te ver, as Ek kry die T artikel, dan kan ek effens te optimaliseer en net sê, hm, al gedoen. Ek hoef nie eens te mors tyd gaan die Z se. Maar dit is 'n baie lineêre benadering, as jy sal 'n baie soort van links na regs benadering, 'n reguit lyn. En sy korrekte maar stadig. So ek onthou van graad skool, sorteer van 'n optimalisering van 'n eerste padskraper, waar ek geleer hoe om nie te tel deur mense nie, maar deur twos-- so 2, 4, 6. Dit is 'n, veel moeiliker om doen nie, maar in teorie, dis faster-- 8, 10, 12, 14, en so meer. Hoe gaan dit algoritme? Is dit meer doeltreffend? Is dit vinniger? GEHOOR: Dis doeltreffende. David Malan: Ja, so dit is def-- dis letterlik twee keer so vinnig, in die veronderstelling ek doen nie raak geskakel met my vingers. Dit is twee keer so vinnig, want Ek draai deur twee bladsye in 'n keer in plaas van een, maar dit is potensieel in korrekte, want hoekom? Gehoor: Jy draai 'n paar. David Malan: Right, wat as Mike gebeur om miskien word sandwiched-- toe ek later is in die telefoon boek, Mike gebeur te wees landgebonde tussen hierdie twee bladsye, en ek het net blindelings slaan daaroor. So ons moet 'n bietjie los daar. Sodra ek druk die T artikel, ek kan nie net met vertroue sê, Ons het dit nie vind Mike Smith. Ek het waarskynlik om terug te verdubbel. Of in werklikheid, as ek kom iemand vernoem S-N, in plaas van S-M vir Smith, onmiddellik, kon ek verdubbel terug, want miskien het hy was op die vorige bladsy. Maar ek hoef nie te ver terug verdubbel. In teorie, as ek dit doen op die regte tyd, ek een bladsy terug te gaan net. So dit is die toevoeging van net een ekstra stap. So ek het twee keer so vinnig gegaan, maar dit kos my 'n ekstra bladsy. Maar dit voel soos 'n netto oorwinning. Maar dit is nie hoe die meeste mense in hierdie kamer sal hierdie probleem op te los. Wat sou 'n tipiese persoon, miskien 'n n paar jaar gelede te doen, om Mike Smith vind? Ja, hulle het niks gevind Mike. Wat doen ek? So kry 'n bietjie nader, maar ek doen know-- wat waar is oor 'n telefoon boek? GEHOOR: Dis opeenvolgende. David Malan: Dis opeenvolgende. Dis alfabetiese. En so as ek in die M artikel, Mike is duidelik na regs, Ek kan letterlik skeur die probleem in half-- dit is gewoonlik makliker as that-- traan die probleem in die helfte en gooi dit weg, sodat nou, ek het 'n probleem wat nie meer as 1000 pages-- wat hard was, want ek dink ek eintlik geskeur die telefoon boek hierdie time-- nie 1000 bladsye, maar 500. So die probleem is letterlik helfte so groot. En dis nogal dwingende, omdat met my vorige algoritmes, weergawe 1 en 2, is ek net die maak van die probleem een bladsy kleiner, twee bladsye kleiner op 'n slag. AANGESIEN tog, ek het dit 500 bladsye kleiner alles op een slag. OK, so nou, Karim stel dat ek regs gaan die helfte. So ek gaan min of meer gaan om die middel, gee of neem. En as ek dit gedoen het wiskundig, Ek kon gaan reg om die middel. En nou, besef ek: Ag, Ek is in die T-afdeling. Ek het eintlik het te ver gaan. Maar ek kan, weer, skeur die probleem in die helfte, gooi dit weg. En my grepe nie so groot. Dis net, wat, 256 bladsye of 250 bladsye, gee of neem op die oomblik. Maar dit is nog steeds baie meer as een bladsy of twee bladsye. En so nou gaan ek min of meer na die middel. O, ek het nie regtig ver genoeg gaan nou. So ek herhaal, herhaal, herhaal, herhaal, totdat ek hopelik gelaat met net een bladsy. Sodat nooi die vraag, as ek begin met ongeveer 1000 bladsye, hoeveel stappe het dit my met weergawe 1 van my algoritme? Wel, as Mike is in die S artikel, in die ergste geval, dit is redelik naby aan die einde van die alfabet. So as die telefoon boek het 1000 bladsye, Ek sal Mike vind binne 1,000 bladsye, gee of neem. Miskien is dit soos 800 of so, maar dit is redelik naby aan 1000. AANGESIEN dit met die tweede algoritme, hoeveel bladsy draai maksimaal sou ek vereis dat Mike Smith vind? Daar is 1000 bladsye, maar ek is doen hulle twee op 'n slag. Reg, so Max soos 500ish, omdat As ek gaan deur die hele telefoon boek, op watter punt kan ek ophou. Maar ek kan afskeer 'n paar deur net stop by die T-afdeling. Maar dit is in die ergste geval 500 bladsye. So hoeveel keer kan ek verdeel 'n 1,00o-bladsy telefoon boek weer in die helfte en weer en again-- uit 1000 tot 500 tot 250-125? Hoe lank voor ek getref een bladsy? Ja, dit is ongeveer 10. Afhangende van afronding en sulke, dis ongeveer 10 bladsye totale behoefte aan verander of telefoon boeke moet geskeur. So dit is redelik sterk. Ons het begin met 'n 1000-bladsy probleem in al drie van hierdie stories. Maar in die eerste algoritme, dit het my ergste geval, 1000 bladsy draai na Mike vind. Tweede algoritme, 500 bladsye aan Mike vind. Derde algoritme, 10 bladsye aan Mike vind. En dit is selfs meer kragtige wanneer jy dink oor n soort van 'n teenoorgestelde scenario. Veronderstel dat die telefoon maatskappy volgende jaar saamsmelt miskien twee dorpe bymekaar, en die telefoon boek is skielik hierdie dik, in plaas van dit wat, so 2000 bladsye in plaas van 1,000. Wel, my eerste algoritme op soek na Mike Smith in 'n 2000-bladsy telefoon boek, erger geval, dit gaan oor te neem hoeveel bladsy draai volgende jaar? Telefoon boek is 2000 bladsye, so-- goed, nie een meer. As die telefoon boek is twee keer so dik in die eerste algoritme, eerste algoritme, 2000, of hoe? In die ergste geval, Mike is regtig naby aan die einde van die boek, so dit is bladsy beurte 2000. Tweede algoritme gaan deur twees, soos 1000 bladsye. Maar wat dink jy in my derde en mees onlangse algoritme? As die telefoon maatskappy verdubbel die aantal bladsye van 1000 tot 2000, Hoeveel keer moet ek skeur daardie boek in die helfte om Mike vind? Publiek: Net een. David Malan: Net nog 'n, want met bladsy traan een, Ek kan letterlik verdeel en oorwin, as jy wil, dat die probleem in die helfte neem 'n massiewe hap uit dit. En dus is dit 'n voorbeeld van doeltreffendheid en waarskynlik 'n algoritme waarmee ons almal soort intuïtief bekend. Maar dit is net so korrek soos my ander algoritmes met daardie Tweak vir die tweede algoritme, maar dit is soveel meer doeltreffend te maak. En in werklikheid, wat 'n rekenaar wetenskaplike, of op sy beurt 'n programmeerder, sou tipies doen wanneer skryf kode is probeer om uit te vind, Goed, ek wil nie hê my program net reg wees, Ek wil dit ook aan doeltreffende wees en probleme op te los well. Stel jou in die werklike wêreld van vandag, soos Google indekse, soek soos miljarde bladsye, dink as hulle gebruik die eerste algoritme om katte te vind onder 'n miljard pages-- kyk na die eerste bladsy in hul databasis, die tweede, die derde, net op soek vir 'n kat, op soek na 'n kat. Dit is pretty darn stadig dit wil voorkom. Hulle kon plaas gebruik iets genoem binêre soek, wat geen coincidence-- bi beteken twee, ons hou verdeel iets in 2, in half-- hulle kon binêre soek gebruik en miskien vind katte nog vinniger, of wat dit ookal is wat jy op soek is na. En eerlik, daar is selfs liefhebber algoritmes wat veel meer as net doen verdeel dinge in die helfte ten einde inligting vinnig te vind. En ons sal 'n bietjie gesels oor dié ná middagete vandag. So laat ek net probeer om hierdie verteenwoordig. Ons hoef nie in te gaan enige wiskunde of werklike getalle. Ons kan in die abstrakte praat hieroor. Maar laat ek net voor, as jy is 'n gesprek nou met die ingenieurs stel hierdie algoritme en jy probeer om te maak 'n berekende besluit, want miskien die ingenieur sê vir julle, julle weet wat, ek het 'n kan implementeer lineêre soek in soos twee minute. Dit is so maklik. Binêre soek is nie so fancy nie, maar dit gaan om my te vang soos 10 minute, so 5 keer so lank. Daar is 'n handel hier, selfs in terme om te besluit watter sagteware te skryf. Het jy die eenvoudiger algoritme te skryf, wat net twee minute sal neem jy? Of dink jy spandeer meer tyd, 10 minute, skryf die liefhebber algoritme? Hoe besluit jy daardie soort van die vraag? Of jy kan dit 'n bietjie meer werklik te maak. Ek vertel my baas dit gaan neem my óf 'n week of 10 weke om die implementering sagteware op hierdie manier, hoe jy besluit watter algoritme om groen lig? Karim? Gehoor: Die publiek, dink ek. David Malan: Die gehoor. Wat is jou bedoeling met die gehoor? Publiek: As dit gaan om gebruik te word deur die gebruikers wat [onhoorbaar] deur gebruikers [onhoorbaar]. Maar as dit is iets wat jy net doen vir jouself om 'n probleem te fasiliteer, [Onhoorbaar] vinniger. David Malan: Ja, dit is 'n vinnige en vuil is 'n goeie manier om dit te beskryf. In werklikheid, as jy beskryf baie van my tyd in grad skool, waardeur dikwels, Ek het slegte kode doelbewus so-- ten minste, dit is hoe ek gerasionaliseer it-- doelbewus so, want selfs al het ek is-kode skryf dit was relatief stadig uit te voer, Ek was in staat om die kode self skryf redelik vinnig, besteding 'n paar minute of uur nie dae. En dit blyk, ek soms nodig om te slaap. So selfs as my kode vereis 8 uur te hardloop, wel dit is goed, Ek sal net gaan slaap terwyl dit loop. So op die oomblik, het ek gedink dit was baie slim, selfs al het ek glo deurgewerk my PhD baie stadig. Maar die omgekeerde van wat dat, as ek skryf sagteware vir ander mense wat saak meer as ek, wel, met hulle wag 8 uur om terug te kry hul resultate is nie alles wat aantreklik. En so spandeer meer tyd voorlangs te sagteware te skryf dit is meer doeltreffend, meer soos ons derde algoritme, waarskynlik tot voordeel van die gebruikers met verloop van tyd. So dit hang regtig oor tyd hoe daardie koste optel. As jy gaan om te skryf sagteware om dit te gebruik wanneer, waarskynlik kan net so goed doen vinnige en vuil, soos hulle sê. gooi dit net saam. Dis kode wat verleentheid jy, dit is so sleg, maar dit kry die werk korrek gedoen, selfs al is dit nie doeltreffend. Aan die ander kant, jy spandeer meer tyd oor iets, kry dit net reg. En dan afgeskryf oor tyd, wat vooraf koste van tyd is waarskynlik die moeite werd, as jy hou optimalisering vir die algemene geval. En inderdaad, dit is 'n tema in ontwikkeling, of rekenaarwetenskap meer oor die algemeen, probeer om te optimaliseer nie vir die ongewoon geval maar die algemene case-- wat operasie gaan weer en weer gebeur nie? As jy gaan om miljarde te hê van gebruikers wat soek op jou webwerf, moet jy waarskynlik spandeer die ekstra weke voorlangs skryf beter sagteware, sodat al jou gebruikers te bevoordeel. Nou, laat ons probeer om dit 'n vang bietjie picturaal, maar nie soseer numeries. So hier is net 'n ou skool grafiek. En laat my sê dat dit tyd. En dit maak nie saak what-- eintlik nie, selfs nie die tyd. Kom ons sit dit op die ander as. Kom ons sê dat dit die tyd, en dit is die grootte van die probleem. En 'n rekenaarwetenskaplike kan oor die algemeen noem dit net n. N is soos ons go-to veranderlike, waar N is 'n nommer, N nommer, en dit is die aantal watter insette wat jy het. So in hierdie geval, N is die aantal bladsye. Daarom is dit dalk 1000 in die geval het ons net vertel. So tyd kan 'n eenheid van meet wees. Miskien is dit die tweede. Miskien is dit dae. Miskien is dit soos bladsy draaie. Maak nie saak nie. Wat jy ook al wil in tel, wat sal tyd wees of kos in dieselfde. So met daardie heel eerste algoritme, as ek byvoorbeeld 'n 1000-bladsy telefoon boek, Ek gaan 'n punt daar trek, want as dit is 1000 bladsye, dit het ongeveer 1000 bladsy draai, gee of neem. En dan as ek het 'n 2000-bladsy telefoon boek, en ek gaan 'n tweede stel dot hier, want vir 2000 bladsye, dit is soos 2000 sekondes of page draai of wat ook al. En so toe ek vroeër gesê het, dit is soort van 'n lineêre verwantskap, dit was doelbewuste, want ek wou later is-- reg now-- 'n streep te trek. Dit is soort van 'n reguit lyn verhouding. Die helling is 1/1, as jy wil. Intussen het die tweede algoritme gesê, as jy het 1000 bladsye en jy is met behulp van die tweede algoritme, waar ek deur 2 se getel, draai twee bladsye op 'n slag, moet ek trek 'n kol onder of bo my oorspronklike dot? Publiek: hieronder. David Malan: Hier, want soos ons gesien het, dit neem minder tyd, die helfte soveel tyd. So het die dot moet die helfte wees so hoog as die ander. En dieselfde deal hier, hierdie dot moet min of meer daar waarskynlik. En so is my tweede algoritme, insgelyks, 'n lineêre verwantskap met die tyd. En ons kan dit teken as sodanig. So nou, die derde en finale algoritme is 'n bietjie moeiliker om te trek. Maar intuïtief, as Ek het 1000 bladsye met my derde algoritme, Dit moet eers my soos 10 stappe. En as Ek het 2000 bladsye het met my derde algoritme, Dit moet my vat nie 10 stappe, maar 11, net nog 'n. So ons net-net gaan om dit te sien. En dit blyk dat indien Ek zoem in op hierdie, ek is gaan oordryf ter wille van effek, die vorm van die lyn, uiteindelik, is nie 'n reguit line-- want, wel as 't ware Dit sou meer soos die kyk others-- dit is eintlik 'n geboë lyn dat, as ons in zoom, gaan veel meer so lyk. It-- goed, OK, ignoreer hierdie deel. Dit was my pen gaan van hoek. Dit is 'n geboë lyn wat altyd toeneem, altyd, altyd, altyd toeneem, maar net skaars. En so met verloop van tyd, het jy 'n verhouding wat meer soos hierdie. Dit lyk amper reguit. Maar dis nog so stadig aan die toeneem. Maar vir byna al die punte saam jou x-as, horisontale as, dis laer as die ander lyne. So dit kan 'n verhouding wees N, waar as jy 'n bladsy, neem jou N sekondes. Dit kan 'n verhouding N / 2 wees. Jy het N bladsye, dit neem jy N / 2 sekondes, die helfte soveel. En dit is 'n logaritmiese verhouding, wat As jy onthou, teken basis 2 van N vang hierdie soort van groei, om so te praat. So is dit die soort van heilige graal onder die drie van hierdie hier, want dit is net soveel meer doeltreffende, maar waarskynlik meer kompleks om te implementeer. Enige vrae? Wel laat ek dit doen, laat my oop te stel 'n teks venster net so kan ons probeer om formaliseer hier iets. Laat my nou gaan voort en uitvoering van hierdie algoritme vir die vind van Mike Smith in kode, as jy wil, pseudokode kode. Ek is nie van plan om Java of C ++ gebruik. Ek gaan net om soort van gebruik Engels-agtige sintaksis, wat ons sou oor die algemeen noem pseudokode kode. Hier het ek 'n leeg venster. En ek sê stap 1 van die baie eerste algoritme is haal telefoon boek. Stap 2 is oop boek na die eerste bladsy. Stap 3 sal wees kyk na bladsy vir Mike Smith. As op bladsy, bel Mike. anders beurt bladsy en gaan na stap 3. Gedoen, kom ons sê. En dus is dit nie heeltemal perfek nie, wat ons sal sien in 'n oomblik. Maar laat ons kyk wat konsepte Ek het hier bekend gestel. So stap 1 en 2 en 3 is pretty much werkwoorde. Hulle is state, actions-- doen. En so in 'n programmeertaal taal, sou ons in die algemeen noem hulle state of funksies of prosedures, noem dit 'n aantal van die dinge. Maar hulle actions-- net dit te doen. Stap 4 is fundamenteel verskil, want dit is soort van 'n vraag. Dit sê ons soort van 'n vurk in die pad. As Mike is op die bladsy, bel hom so draai links, as jy wil. En indien nie, gaan terug na 'n paar ander page-- of liewer, jammer, gaan terug na 'n ander stap, wat veroorsaak 'n soort van herhaling konstruk. En ons doen dit weer en weer en weer. En eintlik, jy weet wat? Ja. anders as aan die einde van boek stop. So ons moet soort van 'n derde toestand, omdat jy kan nie bly draai die bladsy advertensie nauseum, want uiteindelik, sal ek druk op die einde van die boek. En 'n fout in 'n program kan wees nie verwag dat scenario. En dan het ek net besef, O, wag 'n minuut, ek moet 'n derde scenario. As ek uit bladsye, ek moet regtig net ophou. Andersins, dit is ongedefinieerd. Wat gaan gebeur as ek hou sê draai die bladsy en gaan terug, dit is wanneer rekenaars vries of ongeluk, wanneer jy getref sommige onverwagte situasie soos dit. Nou, wat van Mike derde algorithm-- Smith se haal die telefoon boek, oopboek om first-- om nee, nie eerste bladsy van hierdie tyd, om middle-- O, wel, wat sou wees die tweede algoritme. Kom ons slaan na die derde. Publiek: Ag, ek is jammer. David Malan: Dit is goed. Kom ons slaan na die third-- oop om middel- en nou kyk vir Mike Smith. As op bladsy, bel Mike. En dan wat wil ons hier sê? anders wat? Ons kan dit uitspreek in 'n aantal maniere. Daar is geen regte antwoord. OK, as dit nie weer nie, maar ons moet be-- OK, wil ons verdeel in twee, maar wil ons links om te gaan of gaan reg? Hoe kan ons druk dat die idee? Wel, in die geval Mike se, ja, dit is regverdig. Maar OK, so dit is eintlik 'n goeie punt. Dis goed. Ons sal aanhou gaan met hierdie logika. So-- Publiek: Minder as die helfte. David Malan: Ja. So anders as bladsy is, sal ons sê, minder as Smith, aan die linkerkant van Smith, then-- laat ons sien, is hierdie gaan bemoeilik? anders as bladsy kom voor Smith, traan in die helfte, weggooi wat die helfte? Publiek: Ek het gedink dit was [onhoorbaar]. David Malan: ek hoor beide antwoorde. Publiek: linkerkant. David Malan: OK, gooi weg gelaat helfte, as Lakisa het vroeër gesê, die verlaat helfte, dan het ek soort wil net gaan aan- ek regs gaan. Of anders gestel, en ek het 'n bietjie bietjie van 'n gemors van die begin hier, Ek wil effektief te gaan weer stap 2, waar oop vir die middle-- of open-- ja, laat ons net sê, bladsye middel. En dit is vasgestel nie. Dit is nie meer 'n boek. Dis net die helfte van 'n boek, so oop bladsye middel. else-- was amper daar. Stap 6, anders as bladsy kom nadat Smith, skeur in die helfte, weggooi reg helfte, dan gaan jy na stap 2. anders hou, 'n vierde scenario as Ons het geen bladsye links te draai. So kan ons hierdie skoon te maak. En ons moet hierdie skoon te maak. Dit is baie pseudokode kode, as jy wil, 'n baie hoë vlak beskrywing. Maar dit beteken oor die algemeen op te vang die idee. En, weer, in hierdie scenario, ons het die idee van 'n toestand, 'n tak, 'n vurk in die pad, maak 'n decision-- as dit, gaan op hierdie manier, anders as, gaan op hierdie manier, anders as, daarheen gaan nie. En dit is 'n baie algemene ontwikkeling tegniek om te besluit watter rigting om te gaan, om so te praat. En ons het ook 'n soort van herhaling struktuur, waar ons iets doen weer en weer. Nou, dit blyk dat baie soos in hierdie voorbeeld, synde super akkurate belangrik. Maar ons het ook iets gesien dat ons hou die roeping onttrekking. Wat beteken dit om af te haal telefoon boek? Ons is net soort van die neem van as vanselfsprekend aanvaar in hierdie kamer dat het 'n paar semantiese betekenis. Almal van ons het net soort van weet, o, Wel, die telefoon optel boek. Wat beteken dit werklik? Wel, dit werklik beteken brei hand, leun oor, uit te brei vingers, knyp boek tussen vingers, opstaan, trek hand na jou toe. En ons kan regtig nie pedanties oor hierdie, regtig dat super akkurate oor wat ek doen. Maar al daardie stappe gesamentlik wat dit beteken om af te haal 'n telefoon boek. En so het vroeër, toe ek gesê het: elke van hierdie eerste twee state kan wees gedink as 'n voortgaan of 'n funksie, regtig dit verteenwoordig wat ons hou 'n beroep 'n abstraksie. Dit is soos 'n hoë vlak konseptuele beskrywing van 'n probleem wat eintlik behels 'n hele paar stappe. En so gaan dit ook 'n herhalende onderwerp in programmering, waardeur ek dalk 'n program te skryf gebruik van sintaksis soos this-- pick_up_phone_book (). En dan sintakties, ek is gaan om iets te steel van die meeste programmeertale. Nou, stap 1 lyk selfs meer soos 'n funksie, as 'n programmeerder sou dit noem. Dit lyk soos 'kode wat iemand het 'n naam gegee en gegee om my te somehow-- gebruik in ander woorde, wat die lyn Ek het uitgelig verteenwoordig funksies wat dalk Ek het nie eens te implementeer myself. Iemand ouer, wyser as my reeds uitgepluis hoe jy die idee uit te druk van die optel van 'n telefoon boek. En dit is soos die vyf stappe wat ek net afgerammel, uit die bokant van my kop. Maar hy of sy reeds in werking gestel hierdie, het die verskeie stappe 'n naam, pick_up_phone_book. En die hakies is net wat die meeste programmeerders doen aan die einde van stellings soos hierdie. Ek kan nou op staan ​​sy of haar skouers en nooit weer, dink oor wat dit beteken af te haal 'n telefoon boek. Ek kan net sê, haal die telefoon boek. En dit is presies wat almal van ons mense het hier. Toe ons waarskynlik 1 jaar oud, 2 jaar oud, Iemand het om ons te leer wat dit bedoel om af te haal 'n telefoon boek. En sedertdien, Ons het weg onttrek van dié baie oninteressant meganiese stappe. En ons het net 'n intuïtiewe begrip van wat dit beteken om haal 'n telefoon boek. En jy kan nou ekstrapoleer meer ingewikkeld things-- bou 'n gebou. Soos om 'n paar mense, wat eintlik beteken. Om kontrakteurs, argitekte, wat het 'n paar betekenis. En hulle sal weet wat om te doen indien Ek het gesê, gaan bou 'n gebou. Maar die meeste van ons in die kamer kon nie hanteer dat die vlak van abstraksie. Jy moet vertel ons graag gaan kry skop en gaan kry die beton en spyker die stukke hout saam en alles anders is betrokke by die bou van 'n gebou. En dit is omdat ons nie nog geprogrammeer om te verstaan wat dit beteken om 'n gebou op te rig. Ons het nie daardie onttrekking. Ons het nie daardie funksie. En so wat jy sal sien in programmeertale, in die algemeen, veral meer moderne tale, soos Java, PHP, Ruby, en Python, hulle is baie meer volwasse as ouer tale, soos C en C ++ en nog ander. En so kom hulle met meer funksie gebou in. Meer kode is geskryf deur mense in die verlede dat ons nou kan bel of dagvaar of te gebruik, as ek sinspeel op met uitgelig hierdie lyn hier. En so selfs al is ons nie praat oor programmeertale per se nie, net pseudokode kode, al die idees is nog in daardie bespreking. En dit blyk presisie is super belangrik, net soos abstraksie. En laat ons probeer om kommunikeer dat soos volg. Ek het per ongeluk kan deursny dit deur flikker 'n skyfie op die skerm voortydig. Maar laat ek vra vir 'n dapper vrywilligers, As jy nie omgee nie opkom. Jy wil wees in die voorkant van die kamera, as jy is ok met dit. Sou iemand graag kom en gee instruksies om jou kollegas hier? Net moet hier oor kom en staan ​​hier oor en sê sommige woorde. Victoria glimlag die meeste en die voorkoms van my oë die mees. Sou jy bereid wees om op te kom nie? OK. En as al die ander mense op jou sitplekke kon neem 'n stukkie afvalpapier, as jy wil. Gevoer papier is fyn. Kom om op hierdie manier. Of 'n paar van die papier wat jy gister gegee, net 'n leë vel papier, as jy kon. En as jy het nie, net vra jou naaste as jy kon. So op hierdie oomblik, vir hierdie voorbeeld, Victoria gaan die rol van speel 'n programmeerder, 'n ingenieur, wat moet jy die program alles, as die rekenaars, om iets te doen. En ons sal sien wat aannames jy besluit om te maak. Ons sal sien hoe akkuraat sy verkies om te wees. En as hierdie demonstrasie gaan pedagogies goed, baie foute gemaak sal word, dat ons dan sal gebruik wat as 'n geleentheid vir bespreking. Maar die uitdaging vir jou moet wees om die foute te vermy, 'n goeie programmeerder. En so het die uitdaging op hande, indien jy graag hier oor te loop, is in die voorkant van Victoria op die skerm here-- en hopelik, niemand van julle onthou wanneer ek flits op die skerm. En moenie omdraai glad nie, want Daar is nog 'n skerm in hierdie kamer dat ek af kan draai. So moenie omdraai. In die voorkant van Victoria is dat dieselfde gil. En haar werk is nou vir jou vertel al op jou stuk papier wat om te teken. En ons sal sien, wat gebaseer is op verbale instruksies alleen, rekenaarkode, as jy wil, hoe akkuraat jou tekeninge are-- jou implementering is. Maak sin? Gehoor: Ja. David Malan: OK, uit te voer. Publiek: Trek 'n vierkant. [Gelag] David Malan: En nee vrae kan gevra word. Kan dit net doen wat jy vertel. O ja, en as jy skyfies vandag open met 'n blad, moenie kyk na jou blad. OK? Publiek: OK, trek 'n sirkel. A slope-- kan ek sê helling? David Malan: aan jou. Publiek: A helling. En 'n driehoek. David Malan: Alle reg. En hier bly vir net 'n oomblik. En ek gaan kom rond in net 'n oomblik. En nie nodig om jou naam daarop sit. Laat my rondom kom en haal jou tekeninge, As jy nie omgee nie skeur hulle uit. Hier is wat ons terug gekry. Ek sal dit projekteer op die skerm. Ek sien 'n vierkant, 'n sirkel, 'n helling, en 'n driehoek. So dit was 'n antwoord daar. En let's-- Oeps. Dankie. Hier is nog 'n verskeidenheid, en een agter dit. Sodat hulle almal lyk die gees te vang. Dankie. Daar is 'n ander, en hier is 'n ander een. Die helling interpretasie is 'n bietjie anders, bietjie krom. En die naaste, hetsy as gevolg van die wonderlike spesifisiteit waarmee jy beskryf, of miskien het jy soort sien voordat dit inderdaad wat Victoria was eintlik beskryf. Maar nou, dié van julle wat nie kry dit heeltemal reg, Kom ons bied 'n paar besware hier. So Victoria eerste gesê Teken 'n vierkant. En nou, kan ons aanneem ter wille van vandag dat almal weet hoe om 'n vierkant te teken. Maar dit is nie heeltemal duidelik nie, reg? Hoe anders kan jy getrek 'n vierkant, of waar dalk 'n paar van die dubbelsinnighede hier vir die rekenaar? Publiek: ligging en grootte. David Malan: ligging, reg? Almal van julle het 'n papier van 'n paar vorm, algemeen reghoeke, maar effens verskillende groottes. Maar jy beslis kon getrek, As jy wil, 'n groot vierkant, miskien 'n klein vierkant. Miskien is dit roteer. Ek dink nie ons het gesien dat. Maar dit kan meer diamant gewees soos maar nog steeds, nietemin, Wiskundig 'n vierkant. So dit was waarskynlik dubbelsinnig. En sy antwoord: 'n sirkel. Sommige van julle het dit langs trek dit, wat nie onredelik, omdat die mens geneig om te dink of lees regs na links in die meeste tale, sodat nie 'n slegte raaiskoot. Maar dit sirkel kan hê was binne-in die vierkant, rondom die kon gewees het vierkante, kan elders gewees op die vel, so waarskynlik dubbelsinnig. Helling kan dalk gewees het neem die meeste vryhede mondelings met wat dit beteken. En sommige van julle dit vertaal dit as 'n kronkel lyn of 'n reguit lyn en dies meer. En dan driehoek ook kan hê is gerig in 'n aantal maniere. So in kort, selfs met iets wat jy blik en jy soos, wow, so eenvoudige, 'n kind kon trek dit goed nie regtig nie, tensy jy super, super oortuigende en vertel die rekenaar presies wat om te doen. So as ons kon, as jy ' 'n ander vel papier, kom ons probeer om hierdie keer meer. En ek gaan Victoria een gee ander voorbeeld op die skerm hier. En weer, moenie omdraai en kyk nie na jou skyfies. En Ek sal haar 'n oomblik om te gee dink oor hoe om dit te beskryf. Moet nie toelaat dat hulle sien die vrees in jou oë. [Gelag] En weer, hierdie keer hefboom sommige van daardie wegneemetes en probeer om byna almal kry ten minste die regte antwoord. Publiek: OK, neem 'n stuk papier, lyk in die middel van daardie stuk papier. In die middel van daardie stuk papier, trek 'n kubus. [Gelag] David Malan: Wat het ons geleer? Ons was so naby. OK, herhaal as jy kon, vir almal. Publiek: In die middel van die stuk papier, trek 'n voorwerp, wat lyk soos 'n kubus. David Malan: OK, dis al wat jy kry om te werk met. Laat my toe om analitiese wees en nie soseer krities, maar om die eis te maak dat Victoria beslis lyk baie dink in hoë vlak abstraksies, wat is nie onredelik nie. Want anders, ons wil almal wees mooi abnormaal, As ons ooit so presies te wees met alles wat ons doen in die wêreld. Maar sê gaan na die middle-- ek gedink ons ​​op so 'n goeie track daar, soos gaan tot by die helfte van die bladsy, en dan trek 'n kubus. So sy denke in abstraksies, want sy is nog steeds lees wat op die skerm soos inderdaad 'n kubus. Maar daar is so baie geleenthede vir interpretasie is daar. En in werklikheid, daar is so baie ander maniere wat jy kan uitdruk dat, wat ek sal voorstel in 'n oomblik. So hier het ons 'n inkarnasie van die picture-- whoops-- een inkarnasie van die prentjie, so 'n bietjie drie dimensionaliteit om dit, wat is lekker. Hier is nog 'n, waar jy die dieselfde, maar dit is soort van 'n oop blokkie. Sommige mense het dit 'n bietjie meer plat, twee dimensionele. En dit is goed. So is daar inderdaad in die middel van die papier. Hierdie een ek dink jy sal soos, want as ons hier gaan, dit is wat sy beskryf. So nou, laat my stel hoe anders Ons kan hierdie situasie beskryf. Terug in die dag, een van die mees meer algemene maniere om te leer programmeer was om kode te skryf, skryf lyne van instruksies, daardie beheerde 'n bietjie skilpad op die skerm. Logo en ander variante van hierdie was die naam van die taal. En die skilpad het in 'n wêreld. So veronderstel dit reghoekige ruimte is sy wêreld. En jy sal begin deur assuming-- ek weet nie regtig hoe om skilpad trek, so laat ons doen dit so. En dan is hy 'n dop en dan miskien 'n paar voete. So jy kan hierdie klein hê karakter op die skerm. En die doel van hierdie programmeertaal was om die skilpad te dwing optrek, af, links, regs en sy pen neer te sit of haal sy pen up, sodat hy kan eintlik stel op die skerm in hierdie baie plat vierkantige wêreld. So waar ek gedink dat jy dalk gaan, en waar jy moet duik oorweeg af te geestelik wanneer beskryf instruksies meer algemeen, Ek sou eis, is sit jou pen in die middle-- en ons sal ontslae te raak van die kry skilpad, want ek kan nie regtig ons teken hom baie goed. En nou, hoe anders kon Ek sê trek 'n kubus? Wel, ons kan iets soos trekking sê 'n skuins lyn noordooste, byvoorbeeld, of op 'n hoek van 45 grade opwaarts. En dit kan my hier gekry het. En ek is redelik ver van 'n kubus. Maar nou, kan ek iets sê soos draai 90 grade na links en trek 'n streep van ewe lank noordweste. En ek kon voortgaan met 'n soortgelyke rigtings. En dit gaan nie maklik wees nie. En eerlik, sou ons waarskynlik het hier vir vyf minute was. Maar miskien sal ons gekry het om iets wat aan die einde van die dag, beland om 'n kubus, maar ons geduik binnekant van daardie onttrekking om dit te doen op so 'n lae vlak wat jy nie kan regtig sien wat jy doen totdat die hele ding is eintlik daar op die bladsy. En dus is dit 'n algemene beginsel, weer van programming-- hierdie idee van abstraksie. Dit is so wonderlik kragtige, want weer, Sy het net gesê, trek 'n kubus, wat al ons pretty much sal baie vinnig grok. Ons wil net verstaan, OK, trek 'n kubus. Ons kan nie weet wat die oriëntasie, sodat ons kan 'n bietjie meer presies te wees, maar ons kan oor die algemeen beeld of weet wat 'n kubus is. En dit is nuttig, want as elke keer as jy gaan sit as 'n programmeerder by u sleutelbord om die kode te skryf, As jy het om te dink aan so ' 'n lae vlak, niemand van ons sou ooit iets gedoen. En in elk geval, nie een van ons sou geniet die proses van die skryf-kode. Dit sou wees soos die skryf in 0 en 1 se wat eerlik was nie so lank gelede die mens is-kode skryf in 0 en 1 se. En ons het baie vinnig met hierdie hoër vlak languages-- C ++ en Java en ander. So kom ons probeer dit weer net flip die tafels, sodat ons almal het die kans om te dink in plaas van die dieselfde manier. Kan ons nog 'n vrywilliger hierdie tyd om te kom tot die direksie en trek, nie opsê? Ja, OK. Ben, kom op tot. En Ben, in hierdie geval, as jy gesig die raad, kyk nie links, kyk nie reg nie. Slegs doen wat jou kollegas hier vertel jou. En vir almal in die kamer, jy is nou die programmeerder. Hy is die rekenaar. En die prentjie wat ek hier gekies vooruit is hierdie een hier. Hulle is just-- hulle dink van 'n snaakse grap is al. So sou beteken iemand wil vrywilliger die eerste instruksie of stelling dat indien pen opdrag Ben se? En ons sal dit gesamentlik te doen, miskien een opdrag van elke persoon. Ek is jammer? Publiek: Trek 'n sirkel. David Malan: Trek 'n sirkel is die eerste ding wat ek gehoor het. Publiek: Up top. David Malan: Up top. OK, kan ons u verwyder, ongedaan te maak. En nou, iemand anders. Dan sal jy gemaklik wees bied die volgende opdrag? Gehoor: Ja, trek die sentrum van die onderkant van die sirkel, met 'n small-- 'n bietjie klein ruimte van daardie, trek 'n reguit lyn af na drie kwartale van die pad af die direksie 'n effense hoek om jou linkerkant. David Malan: Goeie. Publiek: effens skuins. David Malan: Herroep, beheer-Z. OK. Andrew, jy wil aan te bied die volgende opdrag? Publiek: Seker. Van die onderkant van die lyn, 'n verdere effense angle-- whoops-- miskien oor 'n derde van die lengte [onhoorbaar], effense hoek afwaarts en soos 'n derde van die lengte van [onhoorbaar]. So ja, van daardie punt, trek 'n streep 'n derde van die lengte van die vorige lyn verder aan die linkerkant. David Malan: Dit OK? Reguitlyn, dit is OK? OK, Olivier, wat jy wil om die volgende aan te bied nie? Gehoor: [onhoorbaar] van die onderkant van die sirkel, [onhoorbaar]. Teken op die regterkant van [onhoorbaar] sentimeter. [Gelag] David Malan: Ek dink jy gaan moet omskep dis duim hier. Publiek: Stop. [Gelag] David Malan: OK. [? Ara,?] Wat jy wil om die volgende aan te bied nie? Publiek: Teken 'n [onhoorbaar] die boonste [onhoorbaar] dieselfde. [Onhoorbaar] sirkel, te vestig op die [Onhoorbaar] en trek [onhoorbaar]. David Malan: OK, nie meer ongedaan te maak. Kom ons doen een of twee meer instruksies. Chris, jy wil een aanbied? Publiek: Aan die onderkant van die sirkel, [onhoorbaar] trek 'n gelyke lyn Hellend Vlak afwaartse na links [onhoorbaar]. David Malan: OK. Andrew? Ons did-- Karim? Publiek: Vanaf die regte lyn, die einde van die links lyn, die onderkant, jy gaan reg oor te gaan dieselfde lengte as die lyn jy op, teken aan die reg [onhoorbaar]. [Onhoorbaar] grade, so [onhoorbaar] grade aan die regterkant. David Malan: Alle reg. Kom ons breek. Moet tog nie omdraai. Kom ons breek, en laat ons Probeer een ander poging voordat ons openbaar Ben wat hy is teken. Kan jy shuffle Ben om die right-- of eintlik, nee, laat ons net gee die ander styl, selfs beter. So sal iemand nou wil meer van die benadering dat Victoria het vroeër op, waar Ons praat in 'n hoër vlak onttrekking en in net 'n sin of twee te beskryf Ben wat om te trek sonder om in die onkruid, so op hierdie 'n laer vlak te praat,? Victoria. [Gelag] Publiek: Teken 'n figuur van die loop man. En sy bene en arms het na die regterkant wees. David Malan: OK, dit is al wat jy kry. Alles reg. Hoekom het ons nie openbaar aan Ben wat hy gedoen het. So 'n rondte van applous. Dit was die moeilikste miskien. So selfs al is ons praat in redelik dom terme oor net teken foto's, hopelik jy kan dit baie waardeer die graad van uitdrukking wat nodig mag wees ten einde 'n rekenaar wat om te doen te vertel. En in werklikheid, die feit dat Ben was in staat om dit so vinnig trek is 'n soort van bewys van die gebruik van 'n taal, miskien 'n hoër vlak weergawe van die Engelse, wat hom toelaat om net te gebruik woorde, of woorde hoor van Victoria, wat hom toelaat hierdie abstractions-- net trek 'n figuur loop om die right-- dié soort van het sommige semantiese betekenis aan dit wat nie naastenby so voor die hand liggend as jy net en gesê: sit jou pen neer, trek om die reg, trek aan die linkerkant. En so gaan dit ook baie algemeen in programmering. Dit sou gesê dat dit soos 'n 'n baie lae vlak taal, ontwikkeling in 0 en 1 se as jy wil. En dit sal 'n hoër vlak wees taal programmering in Java, of iets soos dit. 'N bietjie van 'n oorvereenvoudiging, maar dit is die soort van soos emosionele voel dat jy voel wanneer met behulp van 'n soort van ding of 'n ander. 'N bietjie van frustrasie hier deur die behoefte vir sodanige presisie, maar die geleentheid om 'n bietjie losser wees met die interpretasie hier. Maar natuurlik, foute kan ontstaan ​​as gevolg. As jy wil te home-- ons sal hierdie een in class-- nie maar as jy wil bring hierdie een huis, Ek het gedink ons ​​sou duik in hierdie. So as jy wil hierdie speel speletjie saam met jou beduidende ander of kinders of dies meer, jy kan geniet wat sowel. So laat ons gaan voort en kyk na 'n laaste ding hier vir Rekenaardenke. En dit bring ons by Johannes Oliver, nie vir die clip jy dalk gisteraand gesien het, maar 'n bietjie onlangse uitgawe. 'N Paar maande terug, Volkswagen het nogal 'n bietjie van kritiek om watter rede, as jy weet? Wat het hulle in die moeilikheid vir? Ja, so emissions-- hulle probeer uitstoot klop toetse deur in wese met hul motors besoedel die omgewing minder wanneer hul motors getoets en die omgewing besoedel meer wanneer die motors is nie getoets. En wat is toenemend interessante in die wêreld, as jy kan afgeleide het uit besprekings van like-- wat it-- CarPlay, Apple se sagteware vir motors en die feit dat baie van ons toenemend het raakskerms in ons motors, daar is 'n skrikwekkende bedrag van sagteware in mense se motors vandag, wat eerlik open 'n hele blikkie wurms wanneer dit kom by veiligheid en fisiese risiko. Maar vir vandag, laat ons fokus op net wat betrokke by die skryf sagteware wat dalk die stelsel het gamed. Vir die definisie van die probleem, vir diegene wat nie vertroud, Kom ons neem 'n blik op John Oliver. En vir diegene wat vertroud is met die probleem, laat ons kyk na dit in 'n prettige lens via John Oliver sowel. So laat my getref speel op hierdie, ek dink, drie minute inleiding. Vervloek dit. [Video speel] -Cars-- David Malan: Dit is duidelik dat, op YouTube, it's-- - --the Slimste karakters in die Fast and Furious films. Hierdie week, Duitse automaker Volkswagen gevind homself in die middel van 'n skandaal van potensieel kriminele proporsies. -Volkswagen Is verspanning vir miljarde in boetes, moontlik 'n kriminele klag vir sy bestuurders, soos die maatskappy vra om verskoning vir rigging 11 miljoen motors te help dit klop uitstoot toetse. -Certain Diesel modelle is ontwerp met gesofistikeerde sagteware wat gebruik inligting, insluitend die posisie van die stuurwiel en voertuig spoed, om vas te stel die motor was ondergaan uitstoot toets. Onder daardie omstandighede, die enjin sou giftige uitlaatgasse te verminder. Maar die motor getuig om verbypad dat wanneer dit gedryf. Uitstoot verhoog 10-40 keer bo aanvaarbare EPA vlakke. -Wow 10 tot 40 keer groter as die EPA kan. Dit is die ergste ding Volkswagen het ooit gedoen het, is iets wat jy kan sê of jy het nog nooit gehoor van die Tweede Wêreldoorlog. Maar miskien is die sekerste teken van hoe veel moeite Volkswagen is in, is dat mense op die heel top het uitgetree. Die hoof uitvoerende beampte bedank het gister ná skommeling skadebeheer doen, sê hy eindeloos jammer was, wat geklink groot totdat dit blyk Hy was slegs 10% jammer maar het sy mond getuig kunsmatig opblaas sy sorriness. En intussen, Volkswagen se Amerikaanse hoof het 'n verskoning van sy eie. -Laat Se duidelik wees oor hierdie, Ons maatskappy is oneerlik. En in my Duitse woorde, ons het heeltemal geskroef. -Yeah, Maar heeltemal geskroef up is nie Duitse werke. En die Duitse taal het baie mooi frases om situasies te beskryf net soos hierdie, soos [Duits], wat min of meer beteken, die hartseer wat kom van sake wat verband hou leuens, of [Duits], wat vertaal as shaming kinders vader wat wolke van petrol. Dit is 'n pragtige taal. Dit seile net buite die tong. En by the way, terwyl die man se verskoning kan opreg geklink het, Dit is opmerklik Hy het gepraat by 'n amptelike bekendstelling party vir die 2016 Volkswagen Passat, wat beteken dat binnekort nadat sê jammer, het hy gesê dit. -Thank You very much vir die komende. Geniet die aand. Tot volgende is Lenny Kravitz. [Speel van musiek] -OK, OK, eindig jou verskoning met tot volgende Lenny Kravitz nie skree nugter berou. Dit skree, vra ons Bon Jovi, en hy het gesê nee. merk Volkswagen se is erg beskadig. En eerlik, hul nuwe advertensie veldtog is nie juis help. - [Duits], het ons by Volkswagen wil om verskoning te vra vir jou mislei met ons voertuie. [Einde TERUGSPEEL] David Malan: So dit was 'n ompad of-- sorry-- dit was 'n ompad van die bekendstelling van 'n fundamentele probleem in sagteware, en dit is dat jy moet aan sekere voorwaardes op te spoor. En so het die vraag aan die hand hier is, hoe 'n motor potensieel, soos toegepas in sagteware deur hierdie programmeerders, ontdek dat dit eintlik getoets? So om super duidelik wees, wat hulle doen was, in 'n omgewing waar die programmeerders uitgepluis die motor is wat getoets, hulle een of ander manier gemaak die motor stoot minder uitstoot, minder uitstoot, sodat minder giftige dampe en so. Maar wanneer dit normaalweg ry op die pad, Dit sou net stoot so veel besoedeling soos dit wou. So, hoe kan ons skryf die pseudokode vir hierdie algoritme? Hoe kan ons skryf die pseudokode vir die sagteware wat in die motor? Ek bedoel, in 'n neutedop, dit kook af om iets soos hierdie. As getoets, uitstraal minder. anders straal meer. Maar dit is 'n bietjie te hoë vlak, reg? Kom ons probeer om te duik in oor wat hierdie onttrekking van getoets middel. Met ander woorde, selfs as jy weet niks oor motors, watter soort vrae kan jy vra ten einde te bepaal of jy getoets, as jy die motor is? Watter eienskappe kan wees bied as 'n motor word getoets? Publiek: toets van toerusting. David Malan: toets van toerusting. So as toets toerusting buurt, dan stoot minder. So ek kon dink die implementering wat met 'n soort van kameras of die opsporing van wat rondom jou. En laat my stel, wat voel net te ingewikkeld om werklik nog meer hardeware net vir daardie doel. Publiek: As jy in park, as jou kap oop. David Malan: In die park of kap oop, so dit is goed. Publiek: En motor bestuur. David Malan: So dit is 'n bietjie meer concrete-- en motor loop. So sou dit die samewerking van 'n wees paar verskillende toestande, as jy wil. So as die motor is in 'n park, en selfs al is dit 'n baie meganiese ding Tipies, ek kon dink skryf sagteware, veral omdat daar dikwels 'n ligte daar deesdae, Ek kon daar voorstel wat sagteware wat die shifter kan navraag of wat nie, is jy in 'n park, is jy in ry, is jy in reverse. En ek kan terug te kry 'n beantwoord dit is óf ja of nee vir hierdie soort van vrae. En so het ek kon ook waarskynlik beantwoord 'n vraag soos, is die enjinkap oop. Miskien is daar 'n soort van sensor wat óf gee my terug 'n 1 of 0, waar of onwaar is, die enjinkap oop. En dan die motor loop, ek kon opspoor dat een of ander manier deur middel van watter meganisme? Soos die motor loop, ek kon opspoor wat dit op, kon ek opspoor een of ander manier dat die motor beweeg? Publiek: RPMs. David Malan: Ja, so daar is altyd dat naald wat vertel jou hoeveel rotasies per minuut die wiele ervaar. En so het ek kan kyk na dit. En as dit nie 0, wat waarskynlik beteken die motor beweeg. Maar ons het 'n wees bietjie versigtig daar, because-- laat ons vereenvoudig this-- As ons net sê, as die motor loop, Ons wil nie net uitstraal minder, Ons wil as die motor loop en dit is getoets. So is daar 'n paar ander bestanddele wat mense het vermoed die sagteware doen, omdat afwesig die werklike bron-kode, jy kan net soort van aflei uit die fisiese gevolge van die motor oor wat kan aangaan onder die enjinkap in sagteware. So as motor loop en miskien, sê, agterwiele nie beweeg, kan dit wees 'n aanduiding van die een of ander toets? Wat ek sinspeel op hier? Ja, miskien, dis op 'n van diegene roller dinge, waar soos die wiele draai in die voorkant of in die rug, afhangende van of dit nou voorwiel of agterwiel-aandrywing, sodat die helfte van die wiele beweeg, maar die ander twee is nie, wat is 'n vreemde situasie in die werklike wêreld. As jy ry op die pad, wat moet nie gebeur nie. Maar as jy in 'n pakhuis op die een of ander roller stelsel, wat kan inderdaad gebeur. Ek dink mense het ook voorgestel dat miskien, As die motor loop en stuur wiel nie beweeg, wat Ook kan 'n sein wees, want dit is redelik vir soos 'n dadelik op 'n pad. Maar selfs dan, die mens is waarskynlik beweeg dit 'n bietjie of beslis oor 'n paar sekondes. Of die loop van 'n minuut, die kans is dit nie gaan gefikseerd in presies dieselfde posisie. So met ander woorde, ons kan Substraction neem, is jy getoets, en afbreek wat funksionaliteit in hierdie komponent bestanddele. En dit is werklik wat Volkswagen se ingenieurs op 'n manier gedoen. Hulle het sagteware bewus te spoor indien die motor word getoets, dus uitstraal minder, anders uitstraal in die gewone manier. En die probleem hier ook is dat sagteware is nie iets wat jy kan regtig sien nie, tensy jy het die sogenaamde bronkode. Daar is dus twee verskillende tipes code-- ten minste twee verskillende tipes van die kode in die wêreld. Daar is iets genoem bron kode, wat nie in teenstelling met wat ons het al skryf, bronkode. Dit is bronkode wat geskryf is in 'n taal genoem pseudokode, wat net iets Engels-agtige. Daar is geen formele definisie daarvan. Maar C en Java, C ++, diegene is alle formele tale wat, wanneer jy skryf in hulle wat jy het is 'n teks lêer met bronkode. Maar daar is ook iets in die wêreld genoem masjienkode. En masjien-kode ongelukkig is net 0 en 1 se. So masjienkode is wat masjiene verstaan, natuurlik. Bronkode is wat mense verstaan. En oor die algemeen, maar nie altyd, daar is 'n program wat 'n programmeerder gebruik wat neem bron kode en draai dit in masjienkode. En dat hierdie kursus algemeen bekend as 'n samesteller. So jou insette is bronkode, jou uitset is masjienkode, en die samesteller is 'n stuk sagteware wat daardie proses nie. So hierdie kaarte eintlik mooi na ons insette, algoritmes, uitsette. Maar dit is 'n baie spesifieke inkarnasie van dit wat om te sê dat, selfs al is jy die eienaar van een van Volkswagen se motors wat hieraan skuldig is, dit is nie soos jy kan net maak die kap of oop die gebruiker se handleiding of kyk by die bronkode, want teen die tyd dit jou motor bereik in jou oprit, Dit is reeds omskep in 0 en 1 se. En dit is baie moeilik, nie onmoontlik nie, maar baie moeilik om te optel veel van enigiets van net te kyk na die onderliggende 0 en 1 se. So jy kan dit uit te vind, uiteindelik, as jy verstaan ​​hoe 'n masjien operates-- Intel inside-- as jy verstaan die Intel argitektuur, maar dit is baie tydrowend. En selfs daar, kan jy nie in staat wees om alles te sien dat die kode eintlik kan doen. Enige vrae oor hierdie of hierdie soort proses meer algemeen? En eintlik, kan ons hierdie gesprek te bind bespreking van Apple gister. Dit is ook waarom die FBI kan nie net gaan kyk in telefoon die verdagte se en vind die reëls van die kode, vir Byvoorbeeld, wat in staat stel om die wagwoord uitsluitlik of in staat stel dat 80-millisekonde vertraging. Omdat teen die tyd dat dit op iPhone die mede se Dit is reeds omgeskakel word na 0 en 1 se. Wel, laat ons breek hier vir ons kyk na Rekenaardenke. Hoekom het ons nie neem 'n 15 minute breek. En wanneer ons terugkeer, sal ons 'n blik op ontwikkeling self en begin om 'n paar te karteer van hierdie hoë vlak konsepte om 'n werklike, as speels, programmeertaal.