DAVID MALAN: Bine ai revenit, toată lumea. Deci, ieri, vă veți aminti că ne-am concentrat pe aceste teme aici. Așa că am avut patru topics-- general intimitate, securitate și societate; tehnologii de internet; cloud computing; și în cele din urmă, dezvoltare web. Ai cineva-au atins lățime de bandă sau timpul pentru a viziona un pic John Oliver noaptea trecută? Este de fapt destul de amuzant, dacă nu un pic înfricoșător. Orice întrebări cu privire la orice am făcut-o ieri? Clarificări? Orice întrebări pe care doriți să le realizați sigur că atingem astăzi într-o formă? ardezie atât de curat. Deci, ce e pe ordinea de zi pentru ziua de azi? Așa că am crezut că vom incepe azi cu o privire la ceea ce este în general cunoscut sub numele de calcul la gândeam riscul de simplifici, gândire ca un computer, probabil gândire ca un inginer, și încearcă să înceapă să organizați gândurile sau pentru a vă oferi un sentiment mai bun de ceea ce este implicat în fapt, comandant un computer pentru a face ceva prin intermediul programării. Și o vom ține la destul la nivel înalt, destul de mult limba engleză, dar încercați să utilizați de familiare exemple pentru a formaliza modul în care v-ar merge cu privire la rezolvarea problemelor. Și vom revedea unele CS subiecte, cum ar fi captarea, care a venit un cuplu de ori ieri, algoritmi, și apoi de reprezentare. Și acolo vom începe astăzi, într-un moment. Apoi vom arunca o privire la programare. Vom arunca o privire la unele constructe fundamentale cu care s-ar putea să fie familiarizat și s-ar putea găsi chiar destul de intuitiv. Ne vom uita, de fapt, la o programare eșantion mediu care este foarte accesibil, foarte jucăuș, și într-adevăr, orientate pentru vârstele de 12 și în sus. Vom petrece câteva minute acolo și apoi să ia lucrurile la un nivel mai scăzut și de fapt, vorbim despre unele dintre algoritmi si structuri de date, ca să spunem așa, că programatorii folosesc de obicei pentru a rezolva probleme mult mai mult mai eficient decât s-ar putea să fie capabil să facă fără ele cu totul. Apoi, după masa de prânz, vom arunca o privire la stive de tehnologie, care este doar un mod fantezist de a spune colecții de tehnologii că s-ar putea folosi pentru a rezolva unele probleme. Si vom vorbi despre alfabetul supa de limbi care există today-- Java și Python și C ++ și PHP și Ruby și tot felul de alte lucruri. Vom arunca o privire pe scurt la modelele de design. Programatori, în timp, au metodologii adoptate care tind să-i ajute rezolva probleme mai ușor. Atunci când începeți să vă vedeți scris același tip de cod din nou și din nou, oamenii oficializeze aceste repetiții și numele atribuim-le și apoi să le folosească și a le promova, în cele din urmă. Si vom vorbi un pic despre strategiile mobile, ca ceea ce înseamnă de fapt să face o aplicație mobilă sau un site web mobil. O faci tu pentru Android? O faci pentru iOS? O faci tu pentru amândoi aceia? Și care sunt compromisurile? Și apoi în cele din urmă, vom lua o programare web, care le- este un termen colectiv descrie într-adevăr orice moment scrieți software-ul care este menite să ruleze pe web, fie pe telefoanele sau desktop-uri sau laptop-uri. Vom arunca o scurtă privire la baze de date și proiectarea în aceasta, în cazul în care numai pentru că aproape orice interesante aplicatii web-based aceste zile are un fel de baze de date. În caz contrar, aceasta ar doar să fie conținut static. Și o bază de date vă permite să efectuați se modifică în timp, dacă te sau de la utilizatori. Și vom lua în considerare modul în care vă ar merge despre proiectarea această bază de date și un fel de jargon care s-ar putea veni într-un inginer discuție la o tablă albă atunci când de fapt, de punere în aplicare o aplicație pentru prima dată. Vom vorbi pe scurt despre API-uri, servicii utile pe care le puteți utiliza să stea pe umerii altora, fie companii sau persoane fizice, și de a rezolva ta propriile probleme mai repede. Și apoi ne vom dabble probabil un pic cu JavaScript, un limbaj de programare care este utilizată atât în ​​browsere aceste zile, dar, de asemenea, in servere. Si, poate, vom revizuiască, timp de autorizare, unele dintre hands-on noi chestii web a făcut ieri și să integreze cele două împreună înainte de a se suspenda. Deci, cu that-- ce e ahead-- este există ceva lipsă, pe care ar dori să vă asigurați că vom introduce și atinge pe la un moment dat. Dacă este izvoare în minte, aduceți-l înainte de mult timp. Dar de ce nu începem cu o uita-te la gândire de calcul. Și să-mi propun ca gândire de calcul este, din nou, un fel de descriere de nivel înalt de ce s-ar putea face un om de știință de calculator. Și într-adevăr, să începem cu trei ingrediente care s-ar putea intra în gândire de calcul. Acesta este doar un mod de a descrie. Am putea defini cu siguranță acest lucru în orice număr de moduri. Dar, lasă-mă să propună, de dragul de astăzi, că problemele lumii, toate problemele lumii, atunci când se apropie de un om de știință de calculator ar putea să fie privit ca ceea ce noi vom intrări de apel, care au nevoie pentru a obține hrănite în ceea ce vom numi algoritmi, care apoi randament ieșiri. Cu alte cuvinte, întregul lume de revendicare de rezolvare a problemelor I poate fi distilat în aceste trei ingrediente. Deci ce vreau să spun prin intrări? Intrări este doar ceea ce ești înmânat în scopul de a rezolva. De exemplu, iată o problemă de școală veche. Dacă am o carte de telefon aici și Vreau să uit ceva în ea, acest lucru este intrarea mea. Am 1000 sau cam asa ceva pagini într-o carte de telefon. Acest lucru este de intrare la problema mea. Și vreau să găsesc ceva cum ar fi Mike Smith, asa ca un prieten al cărui nume și număr este sperăm că în această carte de adrese. Aceasta este înainte de zilele de celulă telefoane, așa că nu pot doar să caute. Așa că trebuie să o fac vechi căutare de școală și de fapt, aceste intrări pentru unele răspuns. Iar acest răspuns este doar a merge care urmează să fie numit de ieșire. Așa că de intrare este cartea de telefon. Algoritmul este orice set de etapele I folosesc pentru a găsi Mike Smith. Iar producția este, sperăm, Numărul de telefon al lui Mike Smith. Și acest lucru, atunci ar fi doar reprezentativ pentru cele mai multe probleme la cu tine sunt factori de producție handed și doresc să producă rezultate. Așa că, înainte considerăm procesul prin care putem rezolva această problemă, constatare Mike Smith și ceva de genul, Să considerăm primul și intrările și ieșirile last--. Punct de vedere fizic, desigur, de intrare aici este o grămadă de hârtie lipite împreună sub forma unei cărți de telefon. Dar, calculatoare, laptop-uri de course-- și desktop-uri si chiar telefoane aceste days-- acestea sunt dispozitive electronice. Iar la sfârșitul zilei, ceea ce este singura intrare la un calculator? Ei bine, e ceva de genul acest cablu de alimentare aici. Am conectați-l în perete, și Am obține un flux de electroni, care îmi permite pornirea mașinii. Sau poate că acei electroni sunt creat prin intermediul bateriei mele. Dar, la sfârșitul zilei, asta singurul lucru care merge în laptop-ul meu. Și așa de mult mai interesant lucruri este în cele din urmă ies, dacă prin intermediul imprimantei sau ecran sau audially sau altele asemenea. Așa că, dacă tot avem noastră intrare fundamental la un calculator este de energie electrică, așa electronii care intra si sau afară, și așa cum putem folosi acea intrare pentru a reprezenta de fapt informații? Cu alte cuvinte, cum putem obține dintr-un simplu flux de energie electrică reprezentare reală cifre sau litere reale sau imagini reale de pe ecran sau filme reale sau e-mail-uri sau orice număr dintre acestea concepte de nivel superior, dacă vreți, că la sfârșitul zilei într-un fel trebuie să fie depozitate în această dispozitiv mecanic electronic folosind numai acele simplu ingredients-- electronii care vine și în afară? Așa că s-ar părea că, în cea mai simplă formă, singurul tip de state Am în lumea mea, așa la speak-- condiții în world-- mea este fie Am electroni care curge, electricitate care curge, sau eu fac not-- așa mai departe, off. Și să formalizeze on și off, ca un om de știință de calculator ar putea, cu doar 1 și 0. Hai să descrie unele arbitrare dar număr consistent să-l. 1 mijloace sunt, 0 înseamnă off. Sau s-ar putea vedea, de asemenea, ca acest lucru mijloace adevărate cu privire și mijloace false. Ai putea face, de asemenea, negru și alb sau roșu și albastru. Ai nevoie doar de doi descriptori. Și un oameni de știință de calculator ar în general, utilizați doar 0 și 1. Așa că, dacă e cazul, singura mea alfabet este format din 0 și 1, a modului aș putea ajunge la chiar și numărul 2 într-un calculator, să nu mai vorbim de numărul 3 sau o literă a alfabetului sau o imagine sau un film? Cum putem fel de bootstrap ne de la acest principiu de bază de la 0 și 1 și de fapt reprezintă ceva mai interesant? Ei bine, să punem această întrebare în așteptare pentru un moment și ia în considerare ceva sperăm familiare, chiar dacă nu s-au gândit cu adevărat despre în vreun detaliu pentru 10, 20, 30, 40, 50 mai mulți ani. Acesta este ce? Cum ai pronunță asta? Nu este o întrebare capcană. Un număr, dar ce este? 1, 2, 3, sau 123. Si mi-a placut cum ai zis 1, 2, 3, pentru că este o modalitate de a vedea asta. 1, 2, 3, este o secvență de trei simboluri. Este imaginile pe care le au acum cuvinte pentru. Și dacă ai un fel de citit pe toate împreună, un om tipic în limba engleză ar spune 123. Și asta e un fel de Conceptul de nivel superior, se simte ca un număr rezonabil de mare. Dar, cum am ajuns acolo? Ei bine, ar putea fi un timp de când v-ați gândit la asta ca asta, dar, din nou în ziua mea, un fel de învățat acest lucru ca coloana 1 a lui, a celor 10 coloană, iar coloana 100 a lui. Deci, după cum spune Lakisa, este 1, 2, 3, dar este, de asemenea, 123. Dar, cum putem obține de la fostul acesta din urmă? Ei bine, v-ar face în mod obișnuit în coloana 100 este, am un 1. Deci, asta e ca si cum spune de 100 de ori 1. Și apoi, în coloana 10 a lui, am 2. Deci, asta e ca si cum spune de 10 ori 2. În coloana 1 a lui, am 3. Deci, asta e ca și cum a zis 1 ori 3. Și, dacă am adăuga aceste lucruri împreună, acest lucru, desigur, este de 100 plus 10 plus 3. Și, oh, de aceea am obține acest lucru notiune nivel mai ridicat de 123. Este doar matematica de bază, prin care acestea simbolurile au greutăți pentru ei, dacă vă va, substituent sau valorile coloanelor. Și odată ce voi înmulți totul afară, am obține acest număr. Deci, cât de mulți dintre voi știți cum să vorbească binary-- 0 și 1's-- ca un computer? OK, perfect, nimeni, sau nici unul dintre voi crezi că faci. Dar eu v-ar revendica știu de fapt acest lucru deja. Avem nevoie doar pentru a sorta de tweak modelul nostru mintal un pic. Dar procesul este exact la fel. Lasă-mă să lase asta acolo sus și în schimb trage în jos acest lucru pentru un moment. In lumea calculatoarelor, avem doar 0 și 1 lui. Și astfel, lucru care este va schimba este ceea ce? Ei bine, în lumea mea umană, sistem zecimal, dec 10 sens, Am cât de multe cifre la dispoziția mea? 10, nu? 0 prin 9, desigur. Și de aceea avem un Locul 10 și locul lui de 100. În cazul în care se vine asta? Ei bine, acest lucru este de 10 la puterea de la 0. Acest lucru este de 10 la puterea de 1, 10 la puterea de 2, și așa mai departe. vă păstrați doar înmulțirea coloanelor de 10, pornind cu doar 1 în cel de aici din dreapta. Deci, în lumea calculatoare, în cazul în care numai au o semnificație bi binary-- 2-- sau 0 și la 1, am doar într-adevăr nevoie să se schimbe baza pe care matematica. Deci, cu alte cuvinte, acum vom doar au coloana 1 și the-- în cazul în care este aceasta going-- coloana 2, a coloana 4, evident și poate dincolo. De ce este asta? Ei bine, acest lucru este de 2 puterea 0-lea. Acesta este 2, 1. Aceasta este de 2 la 2, și așa mai departe. Așadar, în timp aici, avem 1, 10, a 100, a lui 1000, 10.000 de 100.000, la 1 milioane de oameni, și așa mai departe, aici avem 1, 2, 4, 8, 16, 32, 64. Tocmai ai păstra înmulțirea cu 2, în loc să păstreze înmulțirea cu 10. Deci, acum, în cazul în care obiectivul la mână este de a reprezenta numere folosind doar 0 și 1, a Să ia în considerare modul în care vom ajunge acolo. Aceasta, desigur, este modelul 0 0 0, dar ce număr conceptual reprezintă? Ei bine, de 4 ori 0 plus 2 ori 0 plus 1 ori 0, să adăugăm cei împreună. 4 ori 0 este, desigur, 0, plus 2 0 ori este, desigur, 0 plus 1 ori 0 este, desigur, 0. Așa că ah, aceasta reprezintă numărul de noi, oamenii stiu ca 0. Ei bine, acum, hai foarte repede înainte de repede. Dacă, în schimb eu nu reprezint 0 0 0, dar să facem 1 0 1, care ar putea fi modul în care Lakisa, mai devreme, ar 1 0 1 pronunță doar. Dar acum, cum o ducem la mare nivel numărul noi, oamenii, s-ar putea ști? Deci, ce este acest număr? Este 5, numărul știm ca 5. Ei bine, de ce e asta? Ei bine, putem într-adevăr un fel de plimbare prin ea metodic 4 ori 1, 2 ori 0, 1 ori 1. Adăugați cei împreună, așa acest lucru este de 4, plus 0, plus 1. Și asta e, într-adevăr, 5. Așa că e un pic cam plictisitor acum face aritmetică din nou și din nou. Dar procesul este exact la fel. Singurul lucru care are a schimbat în lumea noastră este faptul că coloanele noastre sunt 1, 2, 4, 8, 16, și așa mai departe, în loc de 1, 10, 100, 1000. Și asta e doar pentru că alfabetul nostru are scăzut de la 0 la 9 la doar 0 la 1. Deci, ca un test mic aici, cum ar fi Reprezentati numărul 7 în binar? 0? Ei bine, 0, adică 0 0 0? Spune-o din nou, Karina. Perfect. De ce este asta? Este eficient 4 plus 2 plus 1. Atat de bun. Cum reprezentăm un pic another-- cum despre numărul 2? Închide, dar în sens invers. Deci, ce e asta? Este 4 plus 1, astfel că e 5 din nou. Așa că what's-- Îmi pare rău, Karina? 0 1 0. 0 1 0 ar fi 2, pentru că, din nou, chiar în cazul în care un fel de nu sari la tine, doar face matematica. 4 ori 0, 0, 2 ori 1 este 2, 1 ori 0 este 0. Deci, acesta este numărul de noi cunoaștem ca 2. Ce zici de numărul 8? Hm? Bun. Așa că avem nevoie de un alt fel de înlocuitor. Avem nevoie de 1 0 0 0. Și asta e valabil un fel nostru a vechiului sistem zecimal școală. Cum vă reprezintă numărul 1000? Ei bine, s-ar părea să fie un fel de dur într-un loc, dacă cereți să reprezinte numărul 1000, pentru că, chiar dacă vă place da-te 9 dintre acestea, 9 dintre acestea, 0 dintre acestea, care este cel mai mare număr pe care au, nu ai ajuns destul de la 1.000. Așa că, dacă ai 1000, ai nevoie doar de un alt poziție, astfel încât să puteți face 1 0 0 0, ergo numărul 1.000. Așa că acum, să harta acest tip de înapoi la hardware discuție conceptuală, în cazul în care, din nou, de intrare a fost doar acest mic cablu de alimentare, energie electrică vin și curge afară. Și astfel, pentru ca aceasta să fie cartografiate de aici la acolo, ei bine, ce avem cu adevărat nevoie? Ei bine, vă puteți gândi de a fi în interiorul unei calculator, o mulțime de becuri, daca tu vei. Sunt numite într-adevăr tranzistori. Și tranzistori sunt doar switch-uri care poate fi fie pornit sau oprit. Deci, vă puteți gândi la un tranzistor care se află pe este permițând energie electrică să curgă și un tranzistor care este oprit ca oprire electricitate din care curge. Și, mai degrabă decât să ia peste luminile de aici, de ce nu fac acest tip de stil nou de școală. Deci, acest lucru ar putea fi un 1, o lanternă fiind pe, doar abia totuși. Și acest lucru ar putea fi un 0, iar acum este oprit. Deci, folosind acest dispozitiv fizic, eu poate reprezenta acum sistemul binar. Am nevoie doar de două state. Nu contează ce culoare este sau ce este. Tot ceea ce contează este că am o stare pe și un alt stat în afara. Deci, folosind telefonul meu aici, cum fac eu reprezintă numărul știm ca 0? Sau pune în mod echivalent, ceea ce număr sunt eu acum reprezentând? 0, deoarece aparatul este oprit. Și, dacă eu fac asta? Și acum, cum fac eu reprezintă numărul 2? Pot să împrumut telefonul tău aici, așa cum am făcut-o ieri? Așa că hai să vedem, așa că dacă vreau să reprezinte numărul 2, este acesta numărul 2? Nu. Ce număr sunt eu accidental reprezentând aici? Aceasta este de fapt numărul 3. Deci care vreau să opri? Negru de telefon sau-- bine, dacă Sunt-- telefon negru sau telefon alb? Telefonul alb. Deci, dacă am rândul său, acest off și noi line-l aici, avem un 1 în locul 2 și un 0 în loc de 1 lui. Și, așa că eu sunt acum reprezentând numărul 2. Și acest lucru, desigur, ar fi numărul 3, pentru că acum ambele aceste lumini sunt pe. Și eu voi opri aici, dar este evident motivul pentru dacă vreau să reprezintå numărul 4 sau 8 sau mai mare, Voi avea nevoie de mai multe telefoane. Dar asta e tot ce se întâmplă. Așa că, dacă v-ați auzit vreodată că în interiorul a-- mulțumesc calculator Tu-- este milioane de tranzistori, asta doar milioane de switch-uri mici mici. Și nu sunt lumină bulbi care activa si dezactiva, dar ele permit, fie de energie electrică să curgă undeva sau opri. Și așa e ta doi states-- pornit sau oprit, pornit sau oprit. Așa că ne-ar părea acum pentru a avea această capacitate pentru a reprezenta acest concept ne-ar plăcea în hardware-ul real. Dar tot ce avem acum este abilitatea pentru a reprezenta numere s-ar părea. Deci, cum putem merge cu privire la reprezentarea litere ale alfabetului, care se simte ca urmatorul fel de facilitate tine ar dori să adăugați la un computer modern odată ce ai numere? Și într-adevăr, dacă te gândești ea, istoric, calculatoare au fost introduse într-adevăr pentru a servi ca și calculatoare numeric. Dar, desigur, acestea zile, ei fac mult mai mult. Chiar și atunci când boot-up, de obicei, a se vedea unul sau mai multe cuvinte. Deci, cum vă reprezintă cuvinte, dacă tot ce ai este, din nou, energie electrică la sfârșitul fișierului zi, sau 0 și echivalent 1 lui? Da. Da, vreau să spun, am cam făcut acest lucru ieri, într-o anumită formă, în cazul în care, la un moment dat, Cred că în mod arbitrar a spus că, dacă vrem să reprezintå litera A, am putea numi asta 1. Era în contextul criptografie, în cazul în care tocmai am avut nevoie de un fel de cod, un fel de cartografiere. Deci, poate că A va fi reprezentat ca 1, și B va fi reprezentat ca un 2, și Z vor fi reprezentate ca un 26, de exemplu. Și, atunci singura problemă este că, dacă eu sunt va codifica scrisorile în e-mailurile mele sau în mesajele text mele ca numere, voi toți trebuie să fie de acord să folosească același set de convenții. Și într-adevăr, lumea a făcut exact acest lucru. Există un sistem în lume numita ASCII, American Standard Cod pentru Schimbul de Informații, care este pur și simplu o decizie de câțiva ani în urmă, că oamenii a făcut ca a decis că o va egala, nu 1, 2, și 26, și așa forth-- este un putin different-- dar 65, 66, 67. Și eu voi trage un diagramă într-un moment. Dar este arbitrară. Dar nu contează că este arbitrară. Lumea trebuie să fie doar consistente. Acum, mai recent, e ceva crescatorul numit Unicode, pentru că un fel din lume a realizat, după inventarea calculatoarelor, că există mai mult decât bine 256 simboluri din lume pe care ne-am putea dori să reprezinte, mai ales atunci când introduce limbi asiatice și alte simbolici care au nevoie de mai mult decât tine expresivitate se poate încadra în cea mai veche versiune a acest cod, care a fost numit ASCII. Așa că Unicode permite de fapt să utilizați mai mult 0 și 2. În special, vă păstrați cursul ședinței, bytes cuvânt în societate și chiar doar ieri. Și un octet este ceea ce din nou? Ce este un octet? Este doar 8 biți. Deci, ce înseamnă că într-adevăr înseamnă? Asta înseamnă că, mai devreme, când am fost vorbind despre binar și am fost folosind în mod arbitrar trei biți atunci când am fost vorbind despre binary-- loc de 1, a Locul de 2, iar 4 este place-- bine, un octet înseamnă doar că vorbești Nu în unități de câte trei, dar patru, cinci, șase, șapte și opt, care ne dă locul 8 lui, 16, 32 au, 64 au, și pe 128 a lui. Cu alte cuvinte, un pic nu este totul că utilă o unitate de măsură, pentru că e la fel ca și un mic minuscul bucată de informații, on sau off. Așa că acum câțiva ani, lumea tocmai a decis este ușor mai convenabil pentru a vorbi în termeni de bytes, opt lucruri la un moment dat. Și așa, astfel, sa născut noțiunea de octet. Și așa avem opt biți aici. Și se pare, de asemenea, pentru similare motive, lumea a decis ani în urmă, care să reprezinte o literă ASCII, vei folosi unități de 8 biți. Deci, chiar dacă nu nevoie de mulți, tu ești întotdeauna va utiliza 8 biți pentru a reprezintă o literă a alfabetului. Și acest lucru este convenabil, pentru că apoi, dacă primi un mesaj care are 0 0 0 1 1 1 1 0, urmat de un alt 1 1 1 0 1 0 0 1, așa că, dacă primiți 16 biți, lumea poate doar presupunem că primele 8 sunt o singură literă iar al doilea 8 reprezintă o altă literă. Nu contează cât de multe sunt. Contează doar că suntem cu toții consecvent când vom interpreta acești biți. Și acest lucru a fost pur și simplu la întâmplare. Asta înseamnă că ceva, dar nu am făcut-o cred că într-adevăr despre ce înseamnă. Deci este o mică minciună albă. Inițial, ASCII folosit de fapt, numai 7 biți. Iar al optulea bit numita ASCII extins. Dar ideea este, în cele din urmă, la fel. Lumea în general standardizat pe 8 biți. Deci, acest lucru s-ar părea să fie un pic limitarea, pentru că numai eu pot reprezintă capitalul A, capitalul B, prin Z. de capital Dar, într-adevăr, nu, dacă mă duc sa-- există o grămadă de resurse on-line, de exemplu, asciitable.com, aceasta va fi un pic copleșitoare la început. Dar, voi atrage atenția asupra ceea ce este important aici. Acest lucru se întâmplă doar la be-- și eu voi walk-- să vedem, dacă mă duc aici. Aici este, în zecimal coloană, numărul 65. Iar pe scrisoarea coloana din dreapta caracter, Cro, este litera A. Și tu poți ignora, pentru moment, totul în mijloc. Acesta este hexazecimal, octal, și un cod HTML. La acest site este doar încearcă să arunce o mulțime de informații la tine la o dată. Dar tot ce ne interesează este zecimal coloană și coloana de caractere. Deci, prin această logică, ceea ce este numărul pe care lumea a decis reprezintă o literă mică a? Da, 97. Si doar pentru a confunda potențial ușor, ce număr a decis lumea ar reprezenta numărul 1? Dreapta, pentru că we-- 49, se pare aici, în jos, în partea din stânga jos. Acum, ce vreau sa spun prin asta? Deci, se pare că în sistemele informatice, există în general o diferență fundamentală între un număr și un caracter. Un număr este lucru pe care îl aflat în creștere, atunci când am fost super tânăr în școală clasa. Este lucruri pe care le conta cu. Dar un personaj este doar o formă, o glyph, ca să spunem așa, pe ecran. Acum, noi oamenii un fel de a se vedea ceva care arata ca acest lucru. Si noi spunem, oh, că este numărul 2. Dar nu, asta e doar un simbol care arată ca ceea ce noi stim ca numarul 2. Și așa e acest lucru distincție fundamentală între numere reale și de caractere. Acesta este un număr. Dar, în general, în contextul unui calculator, în cazul în care în loc să vezi ceva de genul quoted-- și tu nu întotdeauna trebuie să-l vadă citat, dar de dragul discussion-- dacă vezi citate în jurul numărului, acest lucru este acum un personaj. Așa că acest număr de 2 dedesubt capota interiorul unui calculator ar fi reprezentat cu un model de biți care reprezintă numărul 50 conform tabelului on-line. Cu toate acestea, în cazul în care un computer doar vede acest lucru, acest lucru ar fi reprezentat prin model de bit 0 0 0 0 0 0 1 0. Întrucât, acest personaj ar de fapt, să fie reprezentat as-- și acum, Trebuie să mă gândesc un pic harder-- astfel încât acest lucru caracter ar fi reprezentat cu 0 0 1-- ce am nevoie aici? 0 0 1 1 0 0 1 0. Cum am făcut acest lucru? Ei bine, acest lucru este numărul 50, în cazul în care multiplica-l folosind aceste coloane, acesta este numărul 2, etc. de aceea există această dihotomie. Și acesta este doar un teaser acum pentru caracteristici care există în limbaje de programare pe care o vom atinge pe scurt mai târziu astăzi. În limbaje de programare, aveți în general, dar nu întotdeauna, lucrurile suna diferite tipuri de date. Cu alte cuvinte, un programmer-- atunci când el sau ea este scris, un programator devine pentru a decide în ce format pentru a stoca datele sale. Puteți fie să stoca date ca numere prime, cum ar fi numărul 2. Sau le puteți stoca ca siruri de caractere, sau secvențe de caractere pe care le-ar exprima, în general, cu citate in limba de programare. Puteți avea lucruri called-- O să simplificăm și să le numesc real, astfel încât numerele Numere care nu sunt numere întregi, cum ar fi numărul 2, dar numere ca 4.56. Astfel încât numere reale pot, de asemenea, au puncte de zecimale, astfel încât este un alt fundamental bucată de date într-un calculator. Si atunci poti avea chiar alte tipuri de date statice. Deci asta e doar un teaser cu adevărat de cele mai simple decizii de proiectare că un programator ar putea face sub capota. Deci, orice întrebări doar încă? Așa că hai să încercăm să facem acest lucru un pic mai real. Acest lucru hardware-ul nu este atât de mult în uz mai. Dar, cel mai mult pentru toată lumea din această cameră, probabil, a crescut cu și încă mai utilizează hard disk-uri într-un fel. Chiar dacă cele mai multe dintre laptop-urile noastre nu mai au dispozitive care funcționează ca acest lucru, în schimb laptop-uri de azi, în general, au solid state drive fără piese în mișcare. Și care tinde să fie mai scumpe, din păcate, dar un pic mai repede și un-- bine, de multe ori, mult mai repede, care este unul dintre motivele. Și, de asemenea, contrar genera cât mai multă căldură. Acesta poate fi mai mică, deci este în general, un net pozitiv. Dar acest lucru ne permite să o hartă puțin mai concret ce vorbim despre de la 0 și 1 este nivelul de acum la un dispozitiv fizic. Este un lucru pentru mine să vorbesc aproximativ 0 și 1 lui în termeni din telefonul meu sau în termeni abstract de switch-uri fiind pornit și oprit. Dar, ce zici de hard disk-uri? În laptop-uri, dacă aveți o vârstă unul, sau în computer desktop, sau cu siguranță în servere astăzi, în cazul în care aveți hard disk-uri, care au un terabyte de spațiu, 4 terabytes de spațiu, bine ce înseamnă asta? Un hard disk cu 1 terabyte de mijloace spațiale există 1 trilion de bytes în interiorul acestuia într-un fel, sau 8 trilioane de biți echivalent interior. 1 terabyte ar fi 8 terabiți sau 1 trilion de biți, care înseamnă că dacă aveți un hard unitate, aveți cumva sau alte un trilion 0 lui și în interiorul acesteia 1 lui. Și, dacă luăm doar o privire la un imagine arbitrară a unui hard disk reprezentativ, acest lucru este ceea ce un hard unitate ar putea arata de obicei, la fel ca în interior. Ea, de asemenea, este un fel de un jucator vechi fonograf dar, în general, cu mai multe înregistrări în interiorul, astfel încât la speak-- multiple platane, așa cum se numesc, metalice discuri circulare, și apoi un cap de citire pic, de mult ca un jucător de înregistrare vechi. Și că, capul de citire se deplasează înapoi și mai departe și într-un fel citește biții. Și ce e pe aceste platane, chiar deși noi, oamenii nu le pot vedea, fie în realitate, fie în această imagine, există mici particule magnetice mici. Și chiar dacă ai mult timp uitat cum functioneaza electricitatea, o particulă magnetică care este încărcat în general are un capăt la nord și sud end-- atât de nord și sud. Și așa lumea doar a decis ceva timp în urmă că, în cazul în care un protocol magnetic în esență este aliniat ca aceasta, la nord-sud, Să numim un 1. Dacă este în schimb nord-sud, hai să numim un 0. Și, așa că, dacă aveți la de evacuare a unui trilion minuscul magnetic particles-- și, sperăm, ingeniozitatea hardware în pentru a se răsturna pe cei din jurul după cum vedeți fit-- dacă doriți să reprezintă un întreg buchet de 0, aveți nevoie doar de 8 particule magnetice toate aliniate ca aceasta. Iar dacă vrei să reprezinte opt 1, aveți doar nevoie de 8 particule magnetice aliniate spate în spate la spate, ca acest lucru. Ce înțeleg prin particule magnetice? Sincer, toți acești ani mai târziu, lucru care încă îmi vine în minte este acest tip, dacă tu a crescut cu acest lucru. Acesta este un little-- pentru cei unfamiliar-- un mică jucărie din copilărie că are acest om aici pleșuv care are toate aceste mici puțin negru particule magnetice care vin cu ea. Și, folosind acel băț roșu, care este doar un magnet, aveți posibilitatea să-i dea un fel de mustață sau sprâncene sau păr sau ceva pe el. Așa că, de fapt, dacă am zoom în, de exemplu, aceasta este genul de joc pe care poate juca cu Wooly Willy. Și acest lucru este doar să spun, aceste sunt particule magnetice mult mai mari decât sunt de fapt, pe un hard-disk, și particule magnetice mult mai puține. Dar, de fapt, să vedem apoi, dacă aveți particule magnetice mici într-un hard disk, cum poți de fapt folosi pentru a reprezenta date. [REDARE VIDEO] -ORAȘUL Hard disk este în cazul în care PC-ul stochează cele mai multe dintre datele sale permanente. Pentru a face acest lucru, datele călătorește din memoria RAM de-a lungul cu semnale software care spun hard disk cum se păstrează datele respective. Hard disk Circuitele traduce cele Semnalele de tensiune. în fluctuații Acestea, la rândul său, de control hard-disk în mișcare parts-- unele dintre puținele în mișcare piese de stânga în calculator moderne. Unele dintre semnalele de control a motorului, care se învârte platane acoperite cu metal. Datele dvs. este de fapt stocate pe aceste platane. Alte semnale de a muta capetele de citire / scriere pentru a citi sau scrie date pe platane. Acest echipament este atât de precisă că un fir de păr uman nu ar putea chiar trec între capetele și filare platane. Cu toate acestea, totul funcționează la viteze teribil. [END REDARE] Și puteți vedea în cele capătul cozii video, în general, există mai multe platane. Și astfel, încât capul de citire nu citește doar partea de sus. Este un fel de trei sau patru sau mai multe capete de citire care se misca in acest fel, citirea datelor simultan. Deci, există o mulțime de complexitatea și un fel de sincronizare care este implicat într-un hard-disk. Și lucrul se învârte într-adevăr al naibii rapid, astfel încât există o mulțime de complexitate. Dar, să măriți un pic mai adânc și a se vedea în cazul în care sunt aceste particule magnetice și cum ne apropiem la ei. [REDARE VIDEO] uite -Sa la ceea ce tocmai a văzut în mișcare lentă. Atunci când un impuls scurt de energie electrică este trimis la capul de citire / scriere, basculează pe ea electromagnetic minuscul pentru o fracțiune de secundă. Magnetul creează o câmp, care se schimbă polaritatea unui minuscul, mici parte din particulele de metal care strat de suprafață în fiecare platou lui. O serie de model de aceste mici încărcate în sus zonele de pe disc reprezintă un singur bit de date din sistem numeric binar utilizat de calculatoare. Acum, în cazul în care curentul este trimis unul de drum prin capul de citire / scriere, zona este polarizată într-o singură direcție. În cazul în care curentul este trimis în direcția opusă, polarizarea este inversată. Cum puteți obține date de pe hard disk? Doar inversa procesul. Deci, e particulelor cu disc care obține curent în capul de citire / scriere în mișcare. Pune împreună milioane de aceste segmente, magnetizați și ai un fișier. Acum, piesele unui singur fișier poate fi împrăștiate peste tot platane de acționare, a un fel de mizerie de documente de pe birou. Deci, un fișier special extra tine urmări în cazul în care totul este. Nu vrei să ai avut ceva de genul? [END REDARE] Fiind astfel aluzie la acolo, probabil, este că subiectul de ieri de ștergere. Atunci când ștergeți un fișier, ieri am spus că un calculator face de fapt ce, când trageți ceva la coșul de gunoi sau coșul de gunoi? Pur și simplu uită. Dar lui 0 și 1, a particule magnetice care arata ca roșu și albastru lucruri aici, sau brațul meu aici, sunt încă acolo pe hard disk. Și așa există software-- Norton Utilities și Yesteryear și alte mai moderne software-- că doar va scana un hard disk întreg în căutarea la toate aceste 0 și 1, deoarece aceasta se dovedește că majoritatea formats-- fișier documente Word, fișiere Excel, imagini, film files-- toate au anumite modele care sunt comune între ele. Fiecare fișier video ar putea să fie de un alt film, dar primele câteva biți sunt de obicei la fel. Sau ultimii câțiva biți sunt, de obicei la fel. Și astfel, cu mare probabilitate, poti sa te uiti pentru aceste modele. Și chiar dacă fișierul a fost uitat, vă pot spune cu mare probabilitate, dar acest lucru arata ca un document Word, îl lasă să recupereze și ne-uita, daca tu vei. Și, astfel că e modul în care se poate recupera date care le fie a fost accidental șterse sau șterse sau în mod deliberat eliminat pentru orice scopuri. În schimb, ștergerea securizată ce face în contextul unei imagini ca asta? Exact, le face ca toate aleatoare. Deci, este un fel de mută o parte din le în jos, unele dintre ele în sus, lasa unele dintre ele neschimbate și în general, face zgomot aleator din ea, sau pur și simplu poate face toate le 0 sau toate dintre ele. 1 lui Și asta prea poate, în general, frecarea datelor departe. Deci să revenim acum la problema de gândire de calcul, prin care avem intrările formulă. Și algoritmi da în cele din urmă te ieșiri. Ne concentrăm acum pe factori de producție și ieșiri, pentru că acum, afirmație avem o modalitate de reprezentând intrări și ieșiri. Noi doar de gând să utilizeze binar. Și, indiferent de ce noi doresc să reprezinte astăzi, indiferent dacă este un număr sau o literă sau mii acestora într-o carte de telefon sau imagini sau filme, la sfârșitul anului a zilei, este tot 0 și 1 lui. Iar eu susțin că, chiar dacă acest lucru este o lume foarte simplu, cu doar 0 lui și 1, putem construi noi înșine în sus. Și am văzut un exemplu de că, cu litere până acum. Așa că hai să ne concentrăm acum asupra acestui ingredient de mijloc, un algoritm. Și să se întoarcă la această exemplu de Mike Smith. Deci, în această carte de telefon, care, desigur, noi nu folosim atat de mult mai, există o problemă care trebuie rezolvată. Vrem să găsim pe cineva ca Mike Smith. Și ce s-ar putea să fac pentru a găsi Mike? Ei bine, am putut deschide doar această carte, începe de la prima pagină, și dau seama, oh, eu sunt în secțiunea A. Mike nu e acolo. Am nevoie de secțiunea S pentru Smith. Așa că ține doar de cotitură o singură pagină la un moment dat. Lasă-mă să pretind că acest lucru este tot pagini albe și pagini nu galbene, pentru că nu vom găsi Mike în paginile galbene oricum. Dar eu sunt în paginile albe. Și acum, eu sunt în secțiunea B. Încă nu l-am gasit. Așa că am păstra de cotitură o singură pagină la un moment dat. Acesta este un algoritm. Este un set de instrucțiuni pentru rezolvarea unor probleme. Cu alte cuvinte, uita-te la pagina, în cazul în care Mike nu e pe ea, rândul său, pagina și se repetă din nou și din nou și din nou, în mod ideal, se uită în jos pe măsură ce o faci. Așa că este acest algoritm, acest proces, corect? Scuze. Nu, am auzit niște nr. OK, dar este-- da, este cu siguranță plictisitor. Cum ar fi, vom fi aici toată ziua dacă să păstreze în căutarea Mike la această viteză. Dar, lasă-mă să pretind că e corect. E o prostie, dar e corect. La sfârșitul zilei, atâta timp cât s-ar putea ia, voi găsi pe Mike dacă el e acolo și eu sunt atent. Și, în cele din urmă am ajunge la pagina lui. Și, dacă am ajunge prea departe, dacă Am ajunge la secțiunea T, atunci pot optimiza ușor și doar să spun, hm, toate făcut. Eu nici măcar nu trebuie să deșeuri timp merge la Z. Dar acest lucru este foarte abordare liniară, în cazul în care va, un foarte fel de la stânga la dreapta abordare, o linie dreaptă. Iar ei corectă, dar lent. Asa ca mi amintesc de la școală grad, sortare de optimizare dintr-un elev de clasa I, unde am învățat cum să nu conta de cele ci de twos-- asa 2, 4, 6. Este A, mult mai greu de face, dar în teorie, este faster-- 8, 10, 12, 14, și așa mai departe. Ce zici de asta algoritm? Este mai eficient? Este mai rapid? AUDIENTA: Este eficient. DAVID MALAN: Da, așa că def-- este literalmente de două ori la fel de repede, am presupunând nu te împiedicat cu degetele. Este de două ori mai repede, deoarece Împlinesc prin intermediul a două pagini dintr-o dată în loc de una, dar este potențial în corect, pentru că de ce? Audiența: Sari peste unele. DAVID MALAN: Corect, ce se întâmplă dacă se întâmplă Mike să fie sandwiched--, poate, când sunt mai târziu în cartea de telefon, Mike se întâmplă să fie prins între aceste două pagini, și am sări orbește peste el. Așa că avem nevoie de un pic fix acolo. Odată ce am lovit secțiunea T, I nu se poate spune pur și simplu cu încredere, nu am găsit pe Mike Smith. Probabil că trebuie să se dubleze din nou. Sau, de fapt, odată ce voi ajunge pe cineva numit S-N, în loc de S-M pentru Smith, imediat, am putea dubla înapoi, pentru că poate el a fost pe pagina anterioară. Dar eu nu trebuie să se dubleze din nou departe. În teorie, dacă eu o fac la dreapta timp, trebuie doar să mă duc înapoi o pagină. De aceea este adăugarea de doar un singur pas suplimentar. Așa că am plecat de două ori mai repede, dar ma costat o pagină în plus. Dar acest lucru se simte ca un câștig net. Dar acest lucru nu este modul în care cei mai mulți oameni în această cameră ar rezolva această problemă. Ce ar fi o persoană tipic, poate câțiva ani în urmă face, pentru a găsi Mike Smith? Da, nu a găsit pe Mike. Ce fac? Deci, a lua un pic mai aproape, dar eu fac ceea ce este adevărat stiu, despre o carte de telefon? AUDIENTA: Este secvențial. DAVID MALAN: Este secvențial. Este în ordine alfabetică. Și așa, dacă eu sunt în secțiunea M, Mike este în mod clar la dreapta, I se pot rupe literalmente problema în half-- este de obicei mai ușor decât lacrima that-- problema în jumătate și-l arunca departe, astfel încât acum, am o problemă care este nu mai este de 1.000 de pages-- care a fost greu, pentru că eu cred că de fapt rupt cartea de telefon nu time-- 1.000 de pagini, dar 500. Deci, problema este literalmente pe jumătate la fel de mare. Și asta e destul de convingătoare, deoarece cu algoritmi mele anterioare, versiunea 1 și 2, am fost a face doar problema o pagină mai mici, două pagini mai mici la un moment dat. Întrucât acum, l-am făcut 500 Paginile mai mici dintr-o dată. OK, deci acum, Karim propune că mă duc la jumătatea din dreapta. Așa că am de gând să merg aproximativ la mijloc, da sau de a lua. Și, dacă am făcut acest lucru matematic, Am putea merge direct la mijloc. Și acum, îmi dau seama, oh, Sunt în secțiunea T. Eu de fapt am mers prea departe. Dar eu pot, din nou, lacrima problemă în jumătate, aruncați-l. Si bytes meu nu la fel de mare. Este doar, ceea ce, 256 de pagini sau 250 pagini, da sau de a lua chiar acum. Dar este încă mult mai mult decât o pagină sau două pagini. Și așa acum, mă duc aproximativ la mijloc. Oh, nu am mers destul de departe de ajuns acum. Asa ca repet, repet, repet, repet, până când eu sunt, sperăm, a plecat cu doar o singură pagină. Astfel că invită întrebarea, dacă a inceput cu aproximativ 1000 de pagini, câți pași am luat-o pe mine cu versiunea 1 a algoritmului meu? Ei bine, dacă Mike este în S secțiune, în cel mai rău caz, asta e destul de aproape de sfârșitul alfabetului. Așa că în cazul în care cartea de telefon are 1.000 de pagini, O să găsesc pe Mike în termen de 1.000 de pagini, da sau de a lua. Poate e ca 800 sau cam asa ceva, dar este destul de aproape de 1.000. Întrucât, în al doilea algoritm, câte întoarce pagina la maximum I s-ar putea nevoie pentru a găsi Mike Smith? Există 1000 de pagini, dar eu sunt le face două la un moment dat. Bine, max cum ar fi 500ish, deoarece dacă mă duc prin toată cartea de telefon, moment în care, mă pot opri. Dar eu pot rade de câteva doar oprindu-se la secțiunea T. Dar este în cel mai rău caz, 500 de pagini. Deci, cât de multe ori pot împărți 1,00o pagini de carte de telefon în jumătate din nou și din nou și din again-- 1000 la 500 la 250-125? Cât de mult înainte de a lovit o pagină? Da, este vorba despre 10. În funcție de rotunjire și astfel, este aproximativ 10 de pagini au nevoie totală să fie transformate sau cărți de telefon trebuie să fie rupte. Deci asta e destul de puternic. Am început cu o problemă de 1000 de pagini în toate cele trei dintre aceste povești. Dar, în primul algoritm ea, mi-a luat, cel mai rău caz, 1.000 de pagini se întoarce pentru a găsi Mike. Al doilea algoritm, 500 pagini pentru a găsi Mike. În al treilea rând algoritm, 10 pagini pentru a găsi Mike. Și este chiar mai mult puternic atunci când crezi despre un fel de scenariu opus. Să presupunem că compania de telefonie următoare an poate se unește cele două orașe împreună, și cartea de telefon este dintr-o dată această gros, în loc de aceasta că, astfel încât 2.000 de pagini în loc de 1000. Ei bine, primul meu algoritm cautati Mike Smith într-o carte de telefon 2000 de pagini, mai rău caz, se va lua cât de multe pagini se transformă anul viitor? carte de telefon este de 2.000 de pagini, deci-- bine, nu mai mult unul. În cazul în care cartea de telefon este de două ori mai gros în primul algoritm, primul algoritm, 2000, nu? În cel mai rău caz, Mike este într-adevăr aproape de sfârșitul cărții, deci este de 2.000 de pagini se transformă. În al doilea rând algoritm merge de doi câte doi, la fel ca 1.000 de pagini. Dar, cum despre în a treia mea și algoritmul cel mai recent? În cazul în care compania de telefonie dublează numărul de pagini de la 1.000 la 2.000, câte ori au nevoie să se rupă acea carte în jumătate pentru a găsi Mike? AUDIENTA: Doar unul. DAVID MALAN: Doar una, deoarece, cu o singură pagină lacrimă, Pot împărți literalmente și cuceri, dacă vreți, această problemă în jumătate luarea o muscatura masivă din ea. Și, astfel încât acesta este un exemplu de eficiență și, fără îndoială un algoritm cu care noi toți sunt un fel de intuitiv familiare. Dar este la fel de corect ca și alți algoritmi mei cu Tweak pentru al doilea algoritm, dar este atât de mult mai eficient. Și, de fapt, ceea ce un calculator om de știință, sau la rândul său, un programator, s-ar face în mod obișnuit atunci când scrieți Codul este încercați să dau seama, Bine, nu vreau mea programul doar pentru a fi corect, De asemenea, doresc să fie eficient și de a rezolva probleme de bine. Imaginați-vă în lumea reală astăzi, cum ar fi indexurile Google, căutările cum ar fi miliarde de pagini, imaginați-vă dacă acestea a folosit primul algoritm pentru a găsi pisici printre un miliard pages-- uita la prima pagină în baza lor de date, al doilea, al treilea, doar în căutarea pentru o pisică, în căutarea pentru o pisica. Asta e lent destul de darn s-ar părea. Ele ar putea folosi în schimb ceva numita binar de căutare, care este nici bi coincidence-- adica doi, noi să păstreze împărțirea ceva în 2, în half-- acestea ar putea folosi binar de căutare și poate găsi pisici chiar mai repede, sau orice este pe care o căutați. Și, sincer, există chiar si algoritmi crescator care face mult mai mult decat împărțind lucruri în jumătate în scopul de a găsi informații rapid. Si vom vorbi un pic despre cei care după masa de prânz astăzi. Așa că lasă-mă să încerc să reprezinte acest lucru. Noi nu avem nevoie pentru a merge în orice matematica sau numere reale. Putem vorbi despre acest lucru în abstract. Dar, lasă-mă să propună, dacă tu au fost o discuție acum cu inginerii propunând acest algoritm și încercați să facă o decizie calculată, pentru că, poate, inginer spune la tine, știu ce, eu pot pune în aplicare un căutare liniară în ca două minute. Este atât de ușor. căutare binară nu este acea fantezie, dar o să mă ia ca și 10 minute, asa de 5 ori mai mult. E un comerț aici, chiar și în termeni de a decide ce software pentru a scrie. Scrieți algoritmul mai simplu, pe care le va lua doar două minute? Sau iti petreci mai mult timp, 10 minute, scrierea algoritmului crescatorul? Cum decideți acest tip de întrebare? Sau ai putea face un pic mai real. Eu spun șefului meu că va lua mi fie o săptămână 10 săptămâni să pună în aplicare software, în acest fel, cum decideți ce algoritm pentru a-lumină verde? Karim? AUDIENTA: Publicul, cred. DAVID MALAN: Publicul. Ce vrei sa spui cu publicul? AUDIENTA: Dacă se întâmplă pentru a fi utilizate de către utilizatori care [inaudibil] de către utilizatori [inaudibil]. Dar dacă e ceva ce ești faci doar pentru tine pentru a facilita o problemă [Inaudibil] mai repede. DAVID MALAN: Da, este rapid și murdar este un bun mod de a descrie. De fapt, dacă sunteți descriind o mare parte din timpul meu în școală grad, care de multe ori, Am scris cod rău în mod conștient deci-- cel puțin, așa cum am raționalizată it-- în mod conștient acest lucru, pentru că, chiar dacă am scris codul care a fost relativ lent pentru a executa, Am fost în stare să scrie codul în sine destul de rapid, cheltuind doar minute sau nu zile ore. Și sa dovedit, am ocazional, este nevoie să doarmă. Deci, chiar dacă codul meu este necesar 8 ore pentru a rula, bine că e bine, Mă duc doar să dorm în timp ce rulează. Deci, la momentul respectiv, am crezut că acest lucru a fost foarte inteligent, chiar dacă, aparent a lucrat prin doctorat mea foarte încet. Dar conversa că este că, software-ul, dacă aș fi scris pentru alte persoane care a contat mai mult decât mine, bine, având să aștepte 8 ore pentru obține înapoi rezultatele căutării nu este tot ceea ce convingătoare. Și astfel, petrec mai mult timp în față pentru a scrie software-ul care este mai eficient, mai cum ar fi al treilea algoritmul nostru, beneficii, probabil, utilizatorii-a lungul timpului. Așa că depinde într-adevăr de peste timp modul în care aceste costuri adăuga în sus. Dacă aveți de gând să fi scris software-ul să-l folosească o singură dată, probabil, s-ar putea face la fel de bine rapid și murdar, așa cum spun ei. Aruncă-l împreună. Este un cod care embarrasses tu, e așa de rău, dar devine treaba corect, chiar dacă nu este eficient. Pe de altă parte, va petrece mai mult timp pe ceva, să-l doar dreapta. Și apoi amortizate în timp, cost pe care avans de timp este, probabil, merită, dacă vă păstrați optimizarea pentru cazul comun. Și într-adevăr, aceasta este o temă în programare sau calculator știință mai mult în general, încercând să optimizeze nu pentru cazul mai puțin frecvente dar comune case-- ce operațiune se va întâmpla din nou și din nou? Dacă aveți de gând să aibă miliarde de utilizatorii care caută pe site-ul dvs., ar trebui să petreacă, probabil, extra săptămâni în față software de scriere mai bine, astfel încât toți utilizatorii să beneficieze. Acum, să încercăm să captureze acest lucru un putin pictural, dar nu atât de mult numeric. Deci, aici e doar o diagramă de școală veche. Și lasă-mă să spun că acest lucru este timpul. Și nu contează what-- de fapt, nu, nu de timp. Să punem că pe cealaltă axă. Să presupunem că acest lucru este timpul, iar aceasta este dimensiunea problemei. Și un om de știință de calculator s-ar putea numi în general acest lucru pur și simplu n. n este ca noastre du-te la variabilă, în cazul în care n este un număr, numărul n, și e numărul de intrări, indiferent care le aveți. Deci, în acest caz, n este numărul de pagini. Asa ca s-ar putea să fie în 1000 cazul tocmai am spus. Așa că timpul poate fi orice unitate de măsură. Poate, este a doua. Poate, e de zile. Poate, e ca se transformă pagină. Nu contează. Orice ai vrea să conta în aceea că va fi timp sau cost echivalent. Deci, cu acea primă algoritm, dacă, de exemplu, a avut o carte de telefon de 1000 de pagini, Voi desena un punct acolo, pentru că dacă este de 1.000 de pagini, a fost nevoie aproximativ 1.000 de pagini se transforma, da sau de a lua. Și apoi, dacă am avut un 2000 pagini de carte de telefon, și am de gând să elaboreze un al doilea dot aici, pentru că pentru 2.000 de pagini, este ca 2.000 secunde sau întoarce pagina sau orice altceva. Așa că atunci când am spus mai devreme, este un fel de relație liniară, care a fost în mod deliberat, pentru că am vrut mai târziu, on-- dreapta now-- pentru a trage o linie. Este un fel de drept relație de linie. Panta este de 1/1, dacă vreți. Între timp, al doilea algoritm a spus, dacă ai 1.000 de pagini și ați fost folosind al doilea algoritm, unde am numărat de 2 lui, de cotitură două pagini la un moment dat, ar trebui să elaboreze un punct de mai jos sau mai sus punct meu original? AUDIENTA: Mai jos. DAVID MALAN: Mai jos, pentru că așa cum am văzut, este nevoie de mai puțin timp, pe jumătate la fel de mult timp. Astfel încât punctul ar trebui să fie pe jumătate la fel de mare ca și cealaltă. Și aceeași afacere aici, acest punct ar trebui să fie, probabil, aproximativ acolo. Și astfel, în al doilea rând algoritmul meu, în mod similar, are o relație liniară cu timpul. Si putem trage ca atare. Deci, acum, a treia și ultima Algoritmul este un pic mai greu pentru a trage. Dar, în mod intuitiv, dacă am 1000 pagini cu al treilea algoritmul meu, ar trebui să ia doar pe mine ca și 10 pași. Și, dacă am 2.000 de pagini cu al treilea algoritmul meu, ar trebui să nu mă ia 10 pași, dar 11, doar mai mult unul. Așa că doar abia o să vadă acest lucru. Și se pare că, dacă Am zoom pe asta, sunt va exagera pentru un efect, forma acestei linii, în cele din urmă, nu este un line-- drept pentru că, într-adevăr, dacă ar fi fost, ea ar arata mai mult ca others-- este de fapt o linie curbă că, dacă vom mări, se întâmplă să arate mult mai mult ca acest lucru. It-- bine, OK, ignorați această parte. Asta a fost stiloul meu merge cu unghi. Este o linie curbă, care este întotdeauna în creștere, mereu, mereu, mereu în creștere, dar numai cu greu. Și așa-a lungul timpului, aveți relația asta e mai mult ca asta. Aproape că pare dreaptă. Dar este tot atât de încet, în creștere. Dar, pentru aproape toate punctele de-a lungul dvs. de axa x, axa orizontală, este mai mică decât celelalte linii. Deci, acest lucru ar putea fi o relație n acest fel, dacă aveți n pagini, tu n secunde ia. Acest lucru ar putea fi o relație de n / 2. Aveți n pagini, este nevoie tu n / 2 secunde, pe jumătate la fel de multe. Și acest lucru este o logaritmică relație, care dacă vă amintiți, log 2 de bază de n capturi acest tip de creștere, ca să spunem așa. Deci, acesta este un fel de sfânt Grail printre cele trei dintre acestea aici, pentru că e doar atât de mult mai mult eficiente, dar, fără îndoială, mai complexă a implementa. Alte intrebari? Ei bine, lasă-mă să fac asta, să mă deschide o fereastră de text doar astfel încât să putem încerca să formaliza ceva aici. Așa că lasă-mă să merg mai departe acum și punerea în aplicare a acestui algoritm pentru a găsi Mike Smith în cod, dacă va fi, codul pseudocod. Eu nu am de gând să folosească Java sau C ++. Sunt doar de gând să folosească un fel de Engleză-ca sintaxa, pe care noi ar suna în general, codul pseudocod. Aici, am o fereastră goală. Si eu spun pasul 1 din foarte Primul algoritm este de a ridica cartea de telefon. Pasul 2 este carte deschisă pentru prima pagină. Pasul 3 va fi uita-te la Pagina de Mike Smith. În cazul în care, la pagina, suna pe Mike. altfel pagina de viraj și mergeți la pasul 3. Done, să zicem. Și așa că nu e destul de perfect, care vom vedea într-un moment. Dar, să ia în considerare ceea ce conceptele pe care le-am prezentat aici. Așa că pașii 1 și 2 și 3 sunt destul de mult verbe. Sunt declarații, actions-- fac acest lucru. Și așa într-o programare limba, am fi în general le numesc declarații sau funcții sau proceduri, le numim orice număr de lucruri. Dar ei doar te actions-- fac asta. Etapa 4 este fundamental diferit, pentru că este un fel de a pune o întrebare. Ea spune că suntem un fel de la o furculiță în drum. În cazul în care Mike este pe pagina, apelați el, asa ca viraj la stânga, dacă doriți. Și, dacă nu, du-te înapoi la unele altele page-- sau, mai degrabă, îmi pare rău, du-te înapoi la un alt pas, care induce un fel de construct looping. Si noi facem din nou și din nou și din nou. Și, de fapt, tu ce știi? Da. altfel, dacă la sfârșitul stop carte. Așa că avem nevoie de un fel de o treime condiție, pentru că tu nu poate ține de cotitură anunțul pagină nauseum, pentru că în cele din urmă, voi a lovit la sfârșitul cărții. Și un bug într-un program ar putea fi nu anticipând acest scenariu. Și apoi am dat seama, oh, așteptați un minut, am nevoie de un al treilea scenariu. Dacă sunt de pagini, am într-adevăr doar ar trebui să se oprească. În caz contrar, este nedefinit. Ce se va întâmpla dacă am păstra spunând rândul său, pagina și du-te înapoi, acest lucru este atunci când calculatoarele congela sau accident, atunci când te-a lovit unele situații neprevăzute de genul asta. Acum, ce zici de Mike a treia algorithm-- Smith ridica cartea de telefon, carte deschisă pentru first-- la nu, nu pentru prima pagină de această dată, la middle-- oh, bine, asta ar fi al doilea algoritm. Hai să săriți la a treia. Audiența: Oh, îmi pare rău. DAVID MALAN: Asta e bine. Hai să sari la aer liber third-- la mijloc și acum caută Mike Smith. în cazul în care, la pagina, suna pe Mike. Si atunci ce vrem să spunem aici? Ce altceva? Ne putem exprima acest lucru în orice număr de moduri. Nu există nici un răspuns corect. OK, dacă nu din nou, dar trebuie să ne be-- OK, noi vrem să împartă în două, dar vrem să mergem la stânga sau la dreapta merge? Cum ne exprimăm această noțiune? Ei bine, în cazul lui Mike, da, asta e corect. Dar, OK, astfel încât este de fapt un bun punct. E in regula. Ne vom continua cu această logică. Asa de-- AUDIENTA: Mai puțin de jumătate. DAVID MALAN: Da. Așa că, dacă altfel pagina este, vom spune, mai puțin decât Smith, în stânga lui Smith, then-- să vedem, este acest lucru va complica? altfel dacă pagina vine înainte Smith, lacrimă în jumătate, aruncați care jumătate? AUDIENTA: M-am gândit care a fost [inaudibil]. DAVID MALAN: Am auzit ambele răspunsuri. AUDIENTA: stânga. DAVID MALAN: OK, arunca departe de jumătate din stânga, după cum Lakisa a spus mai devreme, stânga jumătate, apoi m-am cam vrea să fie doar sa-- mă duc la dreapta. Sau echivalent, și am făcut un pic biți de o mizerie de început aici, Vreau în mod eficient la du-te la pasul 2 din nou, în cazul în care deschise middle-- sau open-- Da, să spunem doar pagini de mijloc. Și acest lucru îl fixează. Nu mai este o carte. Este doar o jumătate dintr-o carte, pagini, astfel încât deschise la mijloc. else-- erau aproape acolo. Etapa 6, în cazul în care altfel pagina vine după Smith, rupe în jumătate, arunca jumătate de departe dreapta, apoi mergeți la pasul 2. altfel renuntat, un al patrulea scenariu în cazul în care nu avem pagini de stânga pentru a activa. Așa că am putea curăța asta. Și ar trebui să curețe asta. Acest lucru este foarte cod pseudocod, dacă vă va, descriere nivel foarte ridicat. Dar ea nu surprinde, în general, ideea. Și, din nou, în acest scenariu, noi au noțiunea de condiție, o ramură, o furculiță în drum, făcând un decision-- în cazul în care acest lucru, du-te în acest fel, altfel în cazul în care, du-te în acest fel, altfel daca, du-te în acest fel. Și acest lucru este un foarte frecvente tehnica de programare pentru a decide ce direcție pentru a merge, ca să spunem așa. Și avem, de asemenea, un fel a looping structurii, în cazul în care facem ceva din nou și din nou. Acum, se pare, de mult ca în acest exemplu, fiind foarte precis este important. Dar am văzut, de asemenea, ceva că ne ținem de asteptare abstracție. Ce înseamnă pentru a ridica cartea de telefon? Suntem doar un fel de a lua pentru a acordat în această cameră că acest lucru are un sens semantic. Toate dintre noi doar un fel de știu, oh, bine, ridica cartea de telefon. Ce înseamnă asta înseamnă cu adevărat? Asta înseamnă că într-adevăr se extind mână, se apleca peste, se extind degetele, prindeți carte între degete, sta în picioare, trage mâna spre tine. Si am putea fi într-adevăr pedant despre acest lucru, într-adevăr fiind foarte precise ca la ceea ce fac. Dar, toate aceste etape sunt în mod colectiv ceea ce înseamnă că pentru a ridica o carte de telefon. Și așa mai devreme, când am spus, fiecare din aceste prime două declarații poate fi gândit ca continua sau o funcție, într-adevăr reprezintă ceea ce noi ține de asteptare o abstracție. E ca un înalt nivel conceptual descrierea unei probleme care implică de fapt destul de câțiva pași. Și așa acest lucru, de asemenea, este un subiect recurent în programare, prin care s-ar putea scrie un program folosind sintaxa cum ar fi astea-- pick_up_phone_book (). Și apoi sintactic, eu sunt O să fure ceva de cele mai multe limbaje de programare. Acum, etapa 1 arată chiar mai mult ca o funcție, ca un programator ar numi. Se pare că codul pe care cineva a dat un nume și dat să-mi folosesc somehow-- în alte cuvinte, ce linia I-am subliniat reprezintă funcționalitate care poate Nici măcar nu mă pune în aplicare. Cineva mai în vârstă, mai înțelept decât mi-a dat seama deja modul în care exprimă noțiunea de a alege o carte de telefon. Și este la fel ca cele cinci etape am doar off zguduit, pe partea de sus a capului meu. Dar el sau ea deja pusă în aplicare acest lucru, a dat cei mai mulți pași un nume, pick_up_phone_book. Și paranteze este doar ceea ce cei mai mulți programatori face, la sfârșitul afirmații de genul asta. Eu acum pot sta pe lui sau ei umeri și niciodată, gândesc la ce înseamnă pentru a ridica o carte de telefon. Pot să spun doar, ridica cartea de telefon. Si asta este exact ceea ce noi toți oamenii au făcut aici. Atunci când am fost, probabil, 1 ani, în vârstă de 2 ani, cineva trebuia să ne învețe ce menit a ridica o carte de telefon. Și de atunci, ne-am abstras departe de la cele foarte neinteresantă trepte mecanice. Și avem doar un înțelegere intuitivă a ceea ce înseamnă să ridica o carte de telefon. Și tu poți extrapola acum la lucruri-- mai complicat construi o clădire. Cum ar fi, pentru unii oameni, care are de fapt un sens. Contractorilor, arhitecților, care are un sens. Și ei ar ști ce să facă, dacă Am spus, du-te construi o clădire. Dar cei mai mulți dintre noi în cameră nu a putut a face cu acel nivel de abstracție. Trebuie sa ii spui ca noi să iau lopata și du-te betonul și unghiilor bucăți de lemn împreună și orice altceva este implicată în construirea unei clădiri. Si asta pentru ca noi nu avem dar a fost programat să înțeleagă ceea ce înseamnă a construi o clădire. Noi nu avem acea abstracție. Noi nu avem această funcționalitate. Și ce veți vedea în limbaje de programare, în general, limbi moderne, în special mai cum ar fi Java, PHP, Ruby, Python și, acestea sunt mult mai matur decât limbile mai vechi, cum ar fi C și C ++ și încă altele. Și așa au venit cu mai multe funcționalitate construită în. Mai mult cod a fost scris de oameni în trecut pe care o putem numi acum sau convoca sau de a folosi, după cum am aluzie la acest evidențiat linia de aici. Și așa, chiar dacă nu vorbim despre limbaje de programare per se, cod doar pseudocod, tot idei sunt încă în această discuție. Și se pare că precizia este super-importantă, așa cum este abstracție. Și să încercăm să comunică după cum urmează. Am accidental s-ar fi stricat acest lucru prin clipirea un diapozitiv pe ecran prematur. Dați-mi voie să ceri un voluntar curajos, dacă nu te superi vine. Ai fi, în fața aparat de fotografiat, dacă ești în regulă cu asta. Oricine ar vrea să vină și să dea instructiuni colegilor de aici? Trebuie doar să vii aici stau aici și să spun câteva cuvinte. Victoria zâmbește cel mai mult și evitând ochii mei cel mai mult. Ați fi dispus să vină pe sus? O.K. Și, dacă toți ceilalți la locurile ar putea scoate o bucată de hârtie resturi, daca tu vei. hârtie căptușită este bine. Veni în jurul valorii în acest fel. Sau o parte din hârtie care ai fost dat ieri, doar orice foaie albă de hârtie, dacă ai putea. Și dacă nu ai nici una, doar întreba pe aproapele tău, dacă ai putea. Deci, pentru moment, pentru acest exemplu, Victoria va juca rolul un programator, un inginer, care trebuie să vă programați toate, ca calculatoarele, pentru a face ceva. Și vom vedea ce ipoteze vă decide să facă. Vom vedea cât de precisă ea alege să fie. Iar dacă această demonstrație merge bine pedagogic, o mulțime de greșeli se va face, că vom folosi atunci că ca o oportunitate de discuție. Dar provocarea pentru tine ar trebui fie pentru a evita aceste greșeli, să fie un bun programator. Si astfel provocarea la îndemână, dacă v-ar plăcea să se plimbe aici, se află în fața Victoria pe ecran aici-- și, sperăm, nici unul dintre voi amintiți-vă acest lucru atunci când am fulgeră pe ecran. Și nu te întoarce deloc, deoarece există un alt ecran în această cameră că mă pot opri. Așa că nu te întoarce. Victoria în fața este același strigăt. Iar munca ei acum este să-ți spun totul pe bucata ta de hârtie ce să atragă. Și vom vedea, pe baza instrucțiuni verbale singur, cod de computer, dacă va fi, cât de exacte desenele are-- implementările sunt. Are sens? AUDIENTA: Da. DAVID MALAN: OK, executa. AUDIENTA: desena un pătrat. [RÂSETE] DAVID MALAN: Și nu întrebări pot fi adresate. Poate face doar ceea ce a spus. Oh, și dacă aveți slide-uri de azi deschide într-o filă, nu te uita la fila. O.K? AUDIENTA: OK, desena un cerc. Un slope-- pot spune panta? DAVID MALAN: Până la tine. AUDIENTA: O pantă. Și un triunghi. DAVID MALAN: Bine. Si stai aici pentru un moment. Si voi veni în jurul valorii într-o clipă. Și nu este nevoie să pună numele pe el. Lasă-mă să vin în jurul și colecta desenele, dacă nu te superi rupe-le. Aici este ceea ce ne-am întors. O să-l proiecteze pe ecran. Văd un pătrat, un cerc, o pantă, și un triunghi. Astfel că a fost un răspuns acolo. Și let's-- Hopa. Mulțumesc. Iată un alt sortiment, și unul în spatele ei. Asa ca toate acestea par să surprindă spiritul. Mulțumesc. Nu e alta, iar aici e altul. Interpretarea pantei este puțin diferit, puțin curbați. Și, cel mai aproape, fie din cauza specificitate minunat cu care le-ați s-a descris, sau poate un fel de a văzut-o înainte, acest lucru este într-adevăr ceea ce Victoria a fost de fapt care descrie. Dar, acum, aceia dintre voi care nu a primit destul de bine, să ofere unele obiecții aici. Așa că Victoria întâi a spus desena un pătrat. Și acum, putem presupune de dragul de astăzi că toată lumea știe cum să atragă un pătrat. Dar asta nu e totul clar, nu? Cum altfel ai putea avea trase un pătrat, sau în cazul în care ar putea fi unele dintre ambiguități aici pentru calculator? AUDIENTA: Amplasarea și mărimea. DAVID MALAN: Locație, nu? Toți ați avut-o hârtie de o anumită formă, în general, dreptunghiuri, dar ușor dimensiuni diferite. Dar tu cu siguranță, ar fi putut, dacă ai vrut, un pătrat imens, poate un pătrat minuscul. Poate, a fost rotit. Nu cred că am văzut asta. Dar ar fi putut fi mai mult de diamant cum ar fi, dar totuși, cu toate acestea, matematic un pătrat. Astfel că a fost fără îndoială ambiguu. Apoi, ea a spus, desena un cerc. Unii dintre voi a făcut-o trage lângă ea, care nu este rezonabil, pentru că oamenii tind să se gândească sau a citi dreapta la stânga, în cele mai multe limbi, astfel încât să nu o presupunere proastă. Dar acest lucru ar putea avea cercul fost în interiorul pătrat, ar fi fost în jurul valorii pătrat, ar fi fost în altă parte pe foaie, așa că, fără îndoială, ambiguă. Pantă ar fi fost, poate, luând cele mai multe libertăți verbal cu ceea ce înseamnă că. Și unii dintre voi interpretat ca pe o linie șerpuită sau o linie dreaptă sau ceva asemănător. Și apoi triunghi, de asemenea, ar putea avea fost orientate în orice număr de moduri. Deci, pe scurt, chiar și cu ceva ce te arunca o privire si tu esti ca, wow, asa simplu, un copil ar putea trage acest lucru, nu este bine într-adevăr, dacă nu ești super, super-convingător și spune computerul exact ce să facă. Așa că, dacă am putea, dacă aveți o altă foaie de hârtie, să încercați acest lucru încă o dată. Si voi da Victoria unul Un alt exemplu de pe ecran aici. Și din nou, nu se întoarce în jurul valorii de și nu te uita la diapozitive. Și o să-i dau un moment să gândiți-vă cum să descrie acest lucru. Nu-i lăsa să vadă frica în ochii tăi. [RÂSETE] Și din nou, de data aceasta efectul de levier unele dintre aceste takeaways și să încercați să obțineți aproape toată lumea cel puțin răspunsul corect. AUDIENTA: OK, să ia o bucată de hârtie, uita-te în mijlocul acelei bucată de hârtie. In mijlocul acestei piese de hârtie, trage un cub. [RÂSETE] DAVID MALAN: Ce am învățat? Am fost atât de aproape. OK, se repetă dacă ai putea, pentru toată lumea. AUDIENTA: La miezul bucată de hârtie, trage un obiect, care arată ca un cub. DAVID MALAN: OK, asta tot ce ajunge să lucrați. Permiteți-mi să fie analitică și nu atât de mult critică, dar pentru a face cererea că Victoria cu siguranță pare a fi de gândire în foarte abstractizări de nivel înalt, care nu este rezonabilă. Pentru că altfel, am fi toți fie destul de disfuncțională, dacă a trebuit să fie vreodată atât de precis cu tot ceea ce facem în lume. Dar, spunând: du-te la I middle-- crezut că suntem pe o astfel de cale bună acolo, cum ar fi du-te la foarte mijloc a paginii, și apoi trage un cub. Deci, ea se gândește în abstracțiuni, pentru că ea încă vizionează ceea ce este pe ecran ca într-adevăr, un cub. Dar, există atât de multe oportunități pentru interpretare acolo. Și, de fapt, există atât de multe alte modalități de ai putea exprima că, pe care le voi propune într-un moment. Deci, aici avem o incarnare a celui whoops-- picture-- incarnare a imaginii, asa ca o putin trei dimensionalitate-l, ceea ce este frumos. Iată încă unul, în cazul în care aveți la dispoziție același, deși este un fel de cub deschis. Unii oameni a fost nevoie de un pic mai plat, două dimensiuni. Și asta e bine. Deci, există, într-adevăr, în centrul hârtiei. Asta cred că o să cum ar fi, pentru că dacă vom merge aici, aceasta este ceea ce a fost descris. Așa că acum, permiteți-mi propun cum altfel am putea descrie această situație. Înapoi în a doua zi, una dintre cele mai modalități mai comune de a învăța programare a fost de a scrie cod, scrie linii de instrucțiuni, care a controlat un pic Turtle pe ecran. Logo și alte variante ale acestui a fost numele limbii. Turtureaua a trăit într-o lume. Așa că să presupunem că această formă dreptunghiulară spațiu este lumea lui. Iar tu ar începe prin assuming-- I nu știu cu adevărat cum să atragă broască țestoasă, așa că hai să o facem așa. Și apoi el are o carapace și apoi, poate, niște picioare. Așa că s-ar putea avea acest mic caracter pe ecran. Iar obiectul acestei limbaj de programare a fost de a constrânge broasca testoasa pentru a merge în sus, în jos, la stânga, dreapta și de a pune pixul jos sau ridica stiloul lui în sus, astfel încât să se poată desena pe ecran în această lume dreptunghiulară foarte plat. Așa că în cazul în care m-am gândit că este posibil să, și unde ar trebui să ia în considerare scufundări până la mental atunci când descrie mai multe instrucțiuni în general, Mi-ar pretinde, este pus ta pen-ul în jos în middle-- și vom scapa de broască țestoasă, pentru că eu nu pot într-adevăr să păstreze desen-l foarte bine. Și acum, cum altfel ar putea Eu spun trage un cub? Ei bine, am putea spune ceva de genul remiză o linie de nord-est diagonală, spre exemplu, sau la un unghi de 45 de grade în sus. Și asta mi-ar fi ajuns aici. Și eu sunt destul de departe de un cub. Dar acum, aș putea spune ceva cum ar fi rândul său, la 90 de grade spre stânga și trage o linie de lungime egală nord-vest. Și aș putea continua cu direcții similare. Și nu va fi ușor. Și, sincer, probabil că ne-ar au fost aici timp de cinci minute. Dar poate că am fi ajuns la ceva care, la sfârșitul zilei, sfârșește prin a fi un cub, dar noi scufundat în interiorul acelei abstracție pentru a face acest lucru, la un astfel de scăzut nivel care nu poate într-adevăr vezi ceea ce faci până când toată lucru este de fapt acolo pe pagina. Și, astfel încât acesta este un principiu general, din nou, din programming-- această idee de abstracție. Este atât de minunat puternic, pentru că, din nou, ea tocmai a spus, trage un cub, care toate ne destul de mult s-ar Grok foarte repede. Ne-ar înțelege exact, OK, trage un cub. S-ar putea să nu știm orientarea, așa că am putea fi un pic mai precis, dar ne putem imagina, în general, sau stiti ce este un cub. Și asta e util, pentru că, dacă de fiecare dată când așezat ca programator la tastatura pentru a scrie cod, dacă ai trebuit să se gândească la o astfel de un nivel scăzut, nici unul dintre noi s-ar obține vreodată ceva de făcut. Și, cu siguranță, nici unul dintre noi nu ar fi bucura de procesul de cod de scriere. Ar fi ca și cum scrie în 0 și 1, a care sincer nu a fost tot atât de mult timp în urmă oamenii au scris cod în 0 și 1 lui. Si am ajuns foarte repede cu acestea superior languages-- nivel C ++ si Java si altele. Așa că hai să încercăm încă o dată doar pentru a flip tabele, astfel încât noi toți au șansa de a gândi în destul de același fel. Am putea obține mai mult de un voluntar acest lucru timp pentru a veni la bord și să tragă, nu recita? Da, OK. Ben, vino sus. Si, Ben, în acest caz, o dată ce se confruntă cu placa, nu te uita la stânga, nu arata bine. Numai a face ceea ce dvs. Colegii aici vă spun. Iar pentru toți ceilalți din cameră, acum sunt programator. El e calculatorul. Iar imaginea l-am ales aici în avans este cel de aici. Sunt doar-- gândesc ei de o glumă amuzant este tot. Așa că s-ar face cineva vrea să voluntar prima instrucțiune sau o declarație pe care ar trebui să stilou comanda lui Ben? Si vom face acest lucru în mod colectiv, poate o instrucțiune de la fiecare persoană. Imi pare rau? AUDIENTA: desena un cerc. DAVID MALAN: Desenați un cerc este primul lucru pe care l-am auzit. AUDIENTA: Up top. DAVID MALAN: Up top. OK, putem lăsa să ștergeți, anulați. Și acum, altcineva. Dan, te-ai fi confortabil oferind următoarea instrucțiune? Audiența: Sigur, trage centrul din partea de jos a cercului, cu un small-- un pic spațiu mic de la faptul că, trage o linie dreaptă până la trei sferturi din drum în jos placa un unghi mic stânga. DAVID MALAN: Bine. AUDIENTA: Unghi ușor. DAVID MALAN: Anulare, Control-Z. O.K. Andrew, vrei să oferim up instrucțiunea următoare? AUDIENTA: Sigur. Din partea de jos a acestei linii, o ușoară angle-- suplimentară whoops-- poate aproximativ o treime din lungimea [inaudibil], ușor înclinat în jos și ca un treime din lungimea [inaudibil]. Deci da, din acel moment, trage o linie de o treime din lungimea anterioară linia mai la stânga. DAVID MALAN: Asta OK? linie dreaptă, e în regulă? OK, Olivier, pe care doriți pentru a oferi până la următoarea? AUDIENTA: [inaudibil] din partea de jos a cercului, [inaudibil]. Desena pe partea dreaptă de [inaudibil] centimetri. [RÂSETE] DAVID MALAN: Cred că vei trebuie să transforme asta inch aici. AUDIENTA: Stop. [RÂSETE] DAVID MALAN: OK. [? Ara,?] Vrei pentru a oferi până la următoarea? AUDIENTA: desena o [inaudibil] superior [inaudibil] la fel. [Inaudibil] cerc, aducă la [Inaudibil] și să [inaudibil]. DAVID MALAN: OK, nu mai anulează. Hai să facem una sau două mai multe instrucțiuni. Chris, vrei să oferi una? AUDIENTA: La partea de jos a cercului, [inaudibil] trage o linie debordare egală în jos spre stânga [inaudibil]. DAVID MALAN: OK. Andrew? Noi did-- Karim? AUDIENTA: Pornind de la linia dreaptă, capătul liniei de stânga, în partea de jos, vei merge dreptate aceeași lungime ca acea linie sunteți pe picior, desen la dreptul [inaudibil]. [Inaudibil] grade, astfel încât [inaudibil] grade pe partea dreapta. DAVID MALAN: Bine. Să ne oprim. Nu te întoarce încă. Hai să ne oprim și să încercați încă o încercare de înainte de a ne dezvălui lui Ben ce a desenat. Puteți amesteca Ben să right-- sau de fapt, Nu, să vă dau doar un alt bord, chiar mai bine. Așa că s-ar dori cineva acum să ia mai mult de abordare că Victoria a luat mai devreme, în cazul în care vom vorbi într-o abstracție de nivel superior și în doar o propoziție sau două descriu Ben ce să atragă fără intrând în buruieni, ca să spunem așa, la acest nivel inferior? Victoria. [RÂSETE] AUDIENTA: desena o figură a omului de mers pe jos. Și picioarele și brațele trebuie să fie pe partea dreapta. DAVID MALAN: OK, asta e tot ce primești. In regula. De ce nu ne dezvăluie lui Ben ceea ce a făcut el. Deci, o rundă de aplauze. Acesta a fost cel mai greu, probabil. Deci, chiar dacă e vorba în termeni destul de stupide doar despre desen poze, sperăm, se poate aprecia cu adevărat gradul de expresivitate care ar putea fi necesare în scopul de a spune un computer ce să facă. Și, de fapt, faptul că Ben a fost în măsură să atragă acest lucru atât de repede este un fel de testament de a utiliza un limbă, poate un nivel mai ridicat versiune de limba engleză, care îi permite să folosească doar cuvinte, sau să audă cuvinte de la Victoria, care îi permite aceste abstractions-- doar trage o figură mers pe jos right-- care are un fel de un sens semantic să-l că nu este aproape la fel de evident atunci când ești doar spunând, pune stiloul în jos, trage la dreapta, trage la stânga. Și așa acest lucru, de asemenea, este foarte comune în programare. Acest lucru ar fi spus să fie ca un limbaj de nivel foarte scăzut, de programare în 0 și 1 dacă vreți. Și acest lucru ar fi un nivel mai ridicat limbaj de programare în Java, sau asa ceva. Un pic de suprasimplificării, dar asta cum ar fi un fel de emoțional sentimentul că te simți când folosind un singur tip de lucru sau altul. Un pic de frustrare aici de necesitatea pentru o astfel de precizie, dar oportunitatea să fie un pic mai flexibile cu interpretarea aici. Dar, desigur, bug-uri pot apărea ca rezultat. Dacă doriți la home-- noi nu va face asta în class-- dar dacă doriți să aduce aceasta acasă, Am crezut că vom arunca cu capul în asta. Așa că, dacă doriți să joace acest joc cu alte dvs. semnificative sau copii, sau asemenea, vă s-ar putea bucura de asta la fel de bine. Așa că hai să mergem mai departe și să se uite la o ultimă lucru aici pentru gândirea de calcul. Si asta ne aduce la John Oliver, nu pentru clipul s-ar putea fi văzut noaptea trecută, dar într-o problemă oarecum recentă. Câteva luni în urmă, Volkswagen a luat destul de un pic de antiglonț din ce motiv, dacă știi? Ce au ajuns în necazuri? Da, deci emissions-- ei au încercat să bată emisiile Testele prin esență având acestora mașinile poluează mediul mai puțin când mașinile lor au fost testate și poluează mediul mai mult atunci când nu au fost testate mașinile. Și ce e din ce în ce mai interesant în lume, așa cum s-ar putea avea intuit din discuțiile like-- ceea ce este it-- CarPlay, software-ul Apple pentru automobile și faptul că mulți din ce în ce mai noi au ecrane tactile în mașinile noastre, există o cantitate înfricoșătoare a software-ului în oameni a lui mașini de astăzi, care sincer deschide un întreg poate de viermi atunci când este vorba de securitate și risc fizic. Dar pentru ziua de azi, hai se concentreze doar pe ceea ce este implicate în software-ul scris care ar fi putut gamed sistemului. Pentru definiția problemă, pentru cei care nu cunosc, Să aruncăm o privire la John Oliver. Iar pentru cei familiarizați cu problema, să ne uităm la ea într-o lentilă de distracție prin intermediul John Oliver, de asemenea. Așa că lasă-mă lovit ca jocul să continue acest lucru, am cred că, introducerea de trei minute. La naiba. [REDARE VIDEO] -Cars-- DAVID MALAN: Evident, pe YouTube, it's-- - --Discutii mai inteligente de caractere filmele Fast and Furious. În această săptămână, constructorul german Volkswagen a găsit în sine în mijlocul unui scandal de proporții potențial penale. -Volkswagen Se pregătește pentru miliarde în amenzi, eventuale acuzații penale pentru directori sale, în calitate de compania isi cere scuze pentru fraudarea 11 milioane de automobile la ajuta bate testele de emisii. Modelele diesel -Certain au fost proiectate cu software-ul sofisticat informații utilizate, inclusiv poziția a volanului și a vehiculului viteza, pentru a determina masina a fost în curs de testare a emisiilor. În conformitate cu această împrejurare, motorul ar reduce emisiile toxice. Dar masina a fost trucat bypass că atunci când a fost condus. Emisiile au crescut la 10 la 40 ori peste nivelurile acceptabile EPA. -Wow, 10 până la 40 de ori mai mare decât APE permite. Acesta este cel mai rău lucru Volkswagen a făcut vreodată, este ceva ce s-ar putea spune dacă tu n-ai auzit de-al doilea război mondial. Dar poate cel mai sigur semn al modului multe probleme Volkswagen este, este faptul că oamenii de la foarte de sus în jos s-au intensificat. CEO-ul a demisionat miercuri, după de codare pentru a face controlul daunelor, spunând că a fost nesfârșit de rău, care a sunat mare până când s-au dovedit el a fost de numai 10% rău dar a aranjat gura pentru a umfla artificial sorriness lui. Și între timp, SUA Volkswagen șef a avut o apologie a propriei sale. -Hai Să fie clare cu privire la acest lucru, compania noastra a fost necinstit. Și, în cuvintele mele din Germania, noi au stricat complet în sus. Da, dar complet înșurubate up nu sunt opere germane. Și limba germană are multe expresii frumoase pentru a descrie situații la fel ca aceasta, cum ar fi [german], ceea ce înseamnă aproximativ, tristețea care vine de minciuni legate de afaceri, sau [GERMANĂ], care se traduce ca rușinare tată pe cele care implică nori de benzină. Este o limbă frumoasă. Este doar vele de pe limba. Și, apropo, în timp ce acel om scuze poate fi sunat sincer, este demn de remarcat faptul că vorbește la o petrecere de lansare oficiala pentru 2016 Volkswagen Passat, ceea ce înseamnă că în scurt timp după ce a spus rău, el a spus acest lucru. te -Multumesc foarte mult pentru că ați venit. Bucura-te de seara. Up următor este Lenny Kravitz. [MUZICĂ] -Bine, OK, se termină ta scuze cu până următoare Lenny Kravitz nu țipă căință treaz. Ea țipă, am întrebat Bon Jovi, și el a spus nu. Volkswagen are fost grav avariate. Și, sincer, noul lor anunț Campania nu este de a ajuta cu exactitate. - [GERMANĂ], noi la Volkswagen ar dori să-mi cer scuze pentru tine înșelător cu vehiculele noastre. [END REDARE] DAVID MALAN: Deci asta a fost un ocoliș de-- sorry-- aceasta a fost o cale ocolitoare introducând o problemă fundamentală în software-ul, care este că Trebuie să detecteze anumite condiții. Și așa întrebarea la îndemână aici este, cum face o masina potential, așa cum este implementat în software-ul de către acești programatori, detecta că este de fapt a fi testat? Deci, pentru a fi super clare, ceea ce făceau a fost, în medii în care programatorii gândit masina a dat testat, au făcut într-un fel masina emit mai puține emisii, mai puține emisiile, fum atât de puțin toxice și astfel. Dar, când este în mod normal, de conducere pe drum, aceasta ar emite la fel de mult poluarea așa cum a dorit. Deci, cum am putea scrie pseudocod pentru acest algoritm? Cum am putea scrie pseudocod pentru software-ul care rulează în mașină? Vreau să spun, într-un cuvânt, se fierbe până la ceva de genul asta. în cazul în care a fost testat, emit mai puțin. altceva emite mai mult. Dar asta e un pic prea înalt nivel, nu? Hai să încercăm să se scufunde în a ceea ce acest lucru abstracție de a fi mijloace testate. Cu alte cuvinte, chiar dacă nu știi nimic despre masini, ce fel de întrebări s-ar putea să vă întreb pentru a determina dacă esti in curs de testare, dacă sunteți mașina? Ce caracteristici ar putea fi în cazul în care prezenta o masina este in curs de testare? AUDIENTA: Testarea echipamentelor. DAVID MALAN: Echipamente de testare. Așa că, dacă echipamentul de testare în apropiere, apoi emit mai puțin. Așa că am putut imagina de punere în aplicare că, cu un fel de aparate foto sau detectarea ce e în jurul tău. Și să-mi propun, că pur și simplu se simte prea complicat pentru a avea de fapt suplimentare hardware doar pentru acest scop. Audiența: Dacă sunteți în parc, în cazul în care hota este deschisă. DAVID MALAN: în parc sau hota deschisă, așa că e bine. AUDIENTA: Și rulează mașina. DAVID MALAN: Deci asta e un pic mai multe concrete-- și funcționare auto. Deci, acest lucru ar fi conjuncția unui câteva condiții diferite, dacă vreți. Așa că, dacă mașina se află în parc, și chiar deși acest lucru este un lucru foarte mecanic în mod tipic, aș putea imagina scris software-ul, mai ales pentru că există de multe ori o lumină acolo aceste zile, Aș putea imagina acolo fiind software-ul care poate interoga schimbatorul sau nu ceea ce, ești în parc, sunt vă în unitate, ești în sens invers. Și pot să mă întorc o răspunde la asta, fie da sau nu la aceste tipuri de întrebări. Și așa am putut, de asemenea, să răspundă, probabil, o întrebare cum ar fi, este capota deschisă. Poate, există un fel de senzor fie că-mi dă înapoi un 1 sau 0, adevărat sau fals, capota este deschisă. Și apoi masina de rulare, am putut detecta că într-un fel prin ce mecanism? Cum ar fi, mașina se execută, eu ar putea detecta că este pornit, aș putea detecta cumva că mașina se află în mișcare? Audiența:. RPMs DAVID MALAN: Da, deci nu există întotdeauna că ac vă spune cât de multe rotații pe minut roțile se confruntă. Și, așa că am putut uita la asta. Și dacă nu e 0, că, probabil, înseamnă că mașina se află în mișcare. Dar noi trebuie să fim un puțină atenție acolo, because-- să simplifice astea-- dacă ne-am spus, în cazul în care mașina de rulare, noi nu vrem să emită doar mai puțin, vrem dacă mașina rulează si este in curs de testare. Așadar, există alte câteva ingrediente care oameni au emis ipoteza software-ul este de a face, deoarece lipsește codul sursă reală, puteți doar un fel de deduce din Efectele fizice ale masinii la ceea ce s-ar putea merge pe dedesubt capota în software-ul. Așa că, dacă mașina rulează și poate, să zicem, roțile din spate nu se deplasează, ar putea fi acest indicativ de un fel de test? Ce sunt eu aluzie aici? Da, poate, e pe unul din aceste lucruri cu role, în cazul în care la fel ca roțile sunt de cotitură în partea din față sau în spate, în funcție de faptul dacă este roata din față sau tracțiune spate, astfel încât jumătate din roți sunt în mișcare, dar celelalte două nu sunt, care este o situație ciudată în lumea reală. Dacă sunteți de conducere pe rutier, care nu ar trebui să se întâmple. Dar, dacă ești într-un depozit pe un fel de sistem de role, care s-ar putea întâmpla, într-adevăr. Cred ca oamenii, de asemenea, a propus ca, poate, în cazul în care autovehiculul este pornit și direcție nu cu roata în mișcare, că de asemenea ar putea fi un semnal, pentru că este rezonabil pentru ca o imediat pe un drum. Dar chiar și atunci, omul este, probabil, se deplasează un pic sau cu siguranță peste câteva secunde. Sau cursul unei minut, șansele sunt nu este O să fie fixată în exact aceeași poziție. Cu alte cuvinte, noi poate lua Scădere, esti testat, si rupe în jos că funcționalitatea în aceste ingrediente componente. Si asta este cu adevărat ceea ce Volkswagen ingineri într-un fel a făcut. Ei au scris software-ul conștient detecta dacă autovehiculul este în curs de testare, Prin urmare, emit mai puțin, altfel emit în mod obișnuit. Iar problema aici, de asemenea, este că software-ul nu este ceva ce se poate vedea într-adevăr, cu excepția cazului aveți așa-numitul cod sursă. Așa că există două tipuri diferite de code-- cel puțin două tipuri diferite de cod din lume. Nu e ceva ce se numește sursă cod, care nu este, spre deosebire de ceea ce ne-am scris, codul sursă. Acesta este codul sursă scris în un limbaj numit pseudocod, care este doar ceva englez-like. Nu există nici o definiție formală a acestuia. Dar C și Java, C ++, cele sunt toate limbile oficiale care, atunci când scrie în ele, ceea ce ai este un fișier text care conține codul sursă. Dar există și ceva în lumea numit cod mașină. Și cod mașină, din păcate, este doar 0 și 1 lui. Așa că cod mașină este ceea ce mașinile să înțeleagă, desigur. Codul sursă este ceea ce înțelegem oamenii. Și, în general, dar nu întotdeauna, există un program că un programator folosește care ia sursa cod și se transformă în cod mașină. Si acel program este în general, numit un compilator. Astfel încât dvs. de intrare este codul sursă, ieșire este cod mașină, iar compilatorul este o bucată de software-ul care face acest proces. Așa că acest fapt harti frumos la intrările noastre, algoritmi, ieșiri. Dar aceasta este o incarnare foarte specifică de aceea, ceea ce înseamnă că, chiar dacă dețineți unul dintre Volkswagen mașini care se face vinovat de acest lucru, nu e ca tine se poate deschide doar hota sau deschide manualul utilizatorului sau uita-te la codul sursă, deoarece până în momentul ea ajunge la masina in fata casei, au trecut deja convertit în 0 și 1 lui. Și este foarte greu, nu imposibil, dar foarte greu să culeagă spice mult din nimic de la doar se uită la care stau la baza 0 și 1 lui. Deci, vă puteți da seama, în cele din urmă, în cazul în care ați înțeles modul în care o mașină operates-- Intel inside-- dacă înțelegi arhitectura Intel, dar este foarte consumatoare de timp. Și chiar acolo, s-ar putea să nu fie în măsură să vadă totul că codul poate face de fapt. Întrebări cu privire la acest lucru sau acest lucru un fel de proces mai general? Și, de fapt, putem lega această discuție la discuția de ieri de la Apple. Acest lucru, de asemenea, este motivul pentru care FBI-ul nu se poate pur și simplu du-te si uita-te în telefonul suspectului și pentru a găsi liniile de cod, pentru de exemplu, care să permită parola sau activați această întârziere de 80-milisecundă. Pentru că de multe ori este pe colegii iPhone, au trecut deja convertit la 0 și 1 lui. Ei bine, să oprim aici pentru nostru uita-te la gândire de calcul. De ce nu luăm o pauză de 15 minute. Iar când ne vom întoarce, vom să ia o privire la programare în sine și de a începe să harta unele a acestor concepte de nivel înalt la un real, dacă este jucaus, limbaj de programare.