DAVID MALAN: Bentornato, tutti. Così ieri, si ricorderà che ci siamo concentrati su questi temi qui. Così abbiamo avuto quattro topics-- generale la privacy, la sicurezza, e la società; tecnologie internet; cloud computing; e in ultima analisi, lo sviluppo del web. Qualcuno ha la larghezza di banda o il tempo per guardare un po 'John Oliver ieri sera? In realtà è piuttosto divertente, se non un po 'paura. Tutte le domande su qualsiasi cosa abbiamo fatto ieri? Eventuali chiarimenti? Tutte le domande che si desidera rendere Assicurarsi tocchiamo oggi in qualche forma? ardesia Così pulito. Allora, qual è all'ordine del giorno di oggi? Così ho pensato di cominciare oggi con uno sguardo a ciò che è generalmente noto come thinking-- computazionale a il rischio di semplificare eccessivamente, pensando come un computer, forse pensare come un ingegnere, e cercando di iniziare a organizzare i tuoi pensieri o per dare un migliore senso di ciò che è coinvolto in realtà comandare un computer per fare qualcosa a titolo di programmazione. E ci terremo in una bella di alto livello, più o meno inglese, ma provare a utilizzare di familiare esempi per formalizzare come si dovrebbe fare per risolvere i problemi. E noi rivisitare alcuni CS argomenti, come astrazione, che è venuto un paio dei tempi di ieri, algoritmi e poi rappresentazione. Ed è qui che inizieremo oggi in un attimo. Poi daremo uno sguardo a programmazione. Daremo uno sguardo ad alcuni costrutti fondamentali con il quale si potrebbe avere familiarità e potrebbe anche trovare abbastanza intuitivo. Vedremo, infatti, ad una programmazione del campione ambiente che è molto accessibile, molto giocoso, e in effetti mirati a partire dai 12 anni in su. Passeremo qualche minuto lì e poi prendere le cose ad un livello inferiore ed effettivamente parlare di alcune delle gli algoritmi e strutture dati, per così dire, che I programmatori utilizzano in genere per risolvere i problemi di gran lunga più efficiente di quanto si potrebbe essere in grado di fare a meno del tutto. Poi, dopo pranzo, daremo uno sguardo a stack tecnologici, che si trova a soli un modo elegante per dire collezioni di tecnologie che si potrebbe utilizzare per risolvere alcuni problemi. E parleremo l'alfabeto zuppa di lingue che esistono oggi-- Java e Python e C ++ e PHP e Ruby e ogni sorta di altre cose. Daremo uno sguardo brevemente a modelli di progettazione. I programmatori, nel corso del tempo, avere metodologie adottate che tendono ad aiutarli risolvere i problemi più facilmente. Quando si inizia a vedere se stessi scrivendo lo stesso tipo di codice più e più volte, persone formalizzano queste ripetizioni e nomi attribuiscono a loro e poi li usa e promuoverli, in ultima analisi. E parleremo un po ' sulle strategie mobili, come quello che significa in realtà fare una app mobile o di un sito web mobile. Lo fai per Android? Lo fai per iOS? Lo fai per entrambi questi? E quali sono i compromessi? E poi finalmente, prenderemo una programmazione web look, che è un termine collettivo davvero descrivere qualsiasi momento si scrive un software che è lo scopo di eseguire sul web, sia su telefoni o desktop o laptop. Daremo un breve sguardo banche dati e il design in esso, se non altro perché quasi tutte le interessante applicazione web-based in questi giorni ha un qualche tipo di database. Altrimenti, sarebbe basta essere contenuto statico. E un database permette di fare i cambiamenti nel corso del tempo, sia da soli o da parte degli utenti. E noi considereremo come sarebbe andato sulla progettazione che database e il tipo di gergo che potrebbe venire a un ingegnere di discussione in una scheda bianca quando in realtà attuazione un app per la prima volta. Parleremo brevemente API, servizi utili che è possibile utilizzare per stare sul spalle degli altri, se le aziende o individui, e risolvere il problemi più rapidamente. E poi ci dilettarsi forse un po 'con JavaScript, un linguaggio di programmazione che viene utilizzato entrambi nei browser in questi giorni, ma anche nei server. E forse, faremo rivisitare, tempo permettendo, alcuni degli hands-on roba web siamo ha fatto ieri e integrare i due insieme prima di aggiornare. Quindi, con che-- ciò che è ahead-- è Manca qualcosa che si vorrebbe assicurarsi che inseriamo e toccare ad un certo punto. Se è in mente, tirarlo su in poco tempo. Ma perché non si comincia con un guarda pensiero computazionale. E lasciate che propongo pensiero computazionale è, ancora, sorta di descrizione ad alto livello di quello che uno scienziato informatico potrebbe fare. E in effetti, cominciamo con tre ingredienti che potrebbe andare in pensiero computazionale. Questo è solo un modo di descriverlo. Potremmo certamente definire questo in qualsiasi numero di modi. Ma lasciate che propongo, per il gusto di oggi, che i problemi del mondo, tutti i problemi del mondo, quando viene avvicinato da un informatico potrebbe essere visto come quello che faremo ingressi di chiamata, che È necessario prendere alimentato in ciò che chiameremo algoritmi, che poi producono uscite. In altre parole, l'intero mondo della domanda di problem-solving I può essere distillata in questi tre ingredienti. Allora, cosa voglio dire con ingressi? Ingressi è proprio quello che sei consegnato al fine di risolvere. Per esempio, ecco un vecchio problema della scuola. Se ho una rubrica telefonica e qui Voglio guardare qualcosa in esso, questo è il mio ingresso. Ho 1.000 o giù di lì pagine di un libro di telefono. Questo è l'ingresso al mio problema. E voglio trovare qualcosa come Mike Smith, così un amico il cui nome e il numero è speriamo che a questa rubrica. Questo è prima dei giorni di cella telefoni, quindi non posso solo cercare. Quindi devo farlo vecchio scuola e realtà di ricerca questi ingressi per qualche risposta. E la risposta è solo andare di essere chiamato all'uscita. Quindi l'ingresso è la rubrica telefonica. L'algoritmo è qualunque insieme di passi che utilizzano per trovare Mike Smith. E l'uscita è, si spera, il numero di telefono di Mike Smith. E questo allora sarebbe giusto rappresentante della maggior parte qualsiasi problema a con sei ingressi handed e vogliono produrre risultati. Quindi, prima consideriamo il processo con la quale siamo in grado di risolvere il problema, trovando Mike Smith e qualcosa del genere, Consideriamo il primo e gli ingressi e le uscite last--. Fisicamente, naturalmente, l'ingresso qui è un sacco di carta incollati insieme nella forma di un elenco telefonico. Ma i computer, dei computer portatili naturalmente-- e desktop e persino telefoni questi days-- quelli sono dispositivi elettronici. E alla fine della giornata, ciò che è l'unico input a un computer? Beh, è ​​qualcosa di simile questo cavo di alimentazione. L'ho presa nel muro, e Ho un flusso di elettroni, che mi permette di far funzionare la macchina. O forse questi elettroni sono creato mediante mia batteria. Ma alla fine della giornata, che è l'unica cosa che va nel mio computer portatile. E molto interessante roba è in ultima analisi, coming out, se a titolo di stampante o lo schermo o audially o simili. Quindi, se tutto quello che abbiamo come il nostro input fondamentale per un computer è l'elettricità, quindi basta elettroni in entrata e in avanti o indietro, e così come possiamo usare tale ingresso di rappresentare realmente le informazioni? In altre parole, come si arriva da un semplice flusso di elettricità a rappresentare attuale numeri o lettere effettive o immagini reali sullo schermo o film attuali o e-mail o qualsiasi numero di questi concetti di livello superiore, se si vuole, che al fine della giornata qualche modo devono essere memorizzati in questa dispositivo meccanico elettronico utilizzando solo quelli semplice ingredients-- elettroni che entrano ed escono? Quindi sembrerebbe che, nella forma più semplice, l'unico tipo di stati Ho nel mio mondo, in modo da a speak-- condizioni nel mio world-- è o Ho elettroni che scorre, l'elettricità che scorre, o lo faccio non-- così via, via. E cerchiamo di formalizzare on e off, come un informatico potrebbe, con solo 1 e 0. Diciamo solo descrivere alcuni arbitrario ma il numero consistente di esso. 1 significa acceso, 0 significa off. Oppure si potrebbe anche vedere questa come vero mezzo su e falsi mezzi. Si potrebbe anche fare il nero e bianco o rosso e blu. Hai solo bisogno di due descrittori. E un computer scienziati sarebbe in genere basta usare 0 e 1. Quindi, se questo è il caso, il mio unico alfabeto è composto di 0 e 1 di, come potrei arrivare a pareggiare il numero 2 in un computer, per non parlare del numero 3 o una lettera dell'alfabeto o un'immagine o un filmato? Come possiamo sorta di bootstrap noi stessi da questo principio di base di 0 e 1 e realtà rappresentare qualcosa di più interessante? Bene, mettiamo a questa domanda in attesa per un attimo e prendere in considerazione qualcosa si spera familiare, anche se non avete mai pensato in alcun dettaglio per 10, 20, 30, 40, 50 più anni. Questo è ciò? Come si pronuncia questo? Non una domanda trabocchetto. Un numero, ma di cosa si tratta? 1, 2, 3, o 123. E mi è piaciuto come hai detto 1, 2, 3, perché questo è un modo di visualizzazione. 1, 2, 3, si tratta di una sequenza di di tre simboli. E 'immagini che abbiamo ora hanno parole per. E se si ordina di leggerli tutti insieme, un tipico umano in inglese direbbe 123. E questo è una sorta di concetto di livello superiore, si sente come una abbastanza grande numero. Ma come ci arriviamo? Beh, potrebbe essere un po 'che hai pensato in questo modo, ma ai miei tempi, ho tipo di imparato come colonna del 1, i 10 di colonna e colonna 100 del. Così come dice Lakisa, è 1, 2, 3, ma è anche 123. Ma come si arriva da la prima alla seconda? Beh, si dovrebbe in genere fare colonna 100 del, ho un 1. Ecco, questo è come dire 100 volte 1. E poi nella colonna 10 di, ho 2. Ecco, questo è come dire 10 volte 2. Nella colonna 1 del, ho 3. Ecco, questo è come dire 1 volte 3. E se aggiungo queste cose insieme, questo, naturalmente, è 100 più il 10 più 3. E, oh, ecco perché ottengo questo più alto livello nozione di 123. E 'solo la matematica di base, per cui questi simboli hanno pesi per loro, se si sarà, segnaposto o valori di colonna. E una volta moltiplico tutto fuori, ottengo questo numero. Così come molti di voi sanno come parlare binary-- 0 e 1's-- come un computer? OK, perfetto, nessuno, o nessuno di voi pensa che fate. Ma vorrei affermare te in realtà lo sanno già. Abbiamo solo bisogno di una sorta di modificare il nostro modello mentale un po '. Ma il processo è esattamente lo stesso. Mi permetta di lasciare questo uno lì e invece tirare giù questo per un momento. Nel mondo dei computer, abbiamo solo 0 e 1.. E così la cosa che è cambierà è che cosa? Ebbene, nel mio mondo umano, il sistema decimale, diminuire significato 10, Ho il numero di cifre a mia disposizione? 10, giusto? Da 0 a 9, naturalmente. Ed è per questo abbiamo la posto 10 del luogo e la 100 del. Dove è che viene? Ebbene, questo è 10 alla potenza di 0. Questo è 10 alla potenza di 1, 10 alla potenza di 2, e così via. Basta tenere moltiplicando le colonne da 10, partendo con solo 1 in quello più a destra qui. Così nel mondo computer, se solo hanno significato bi binary-- 2-- o 0 e 1., abbiamo appena davvero bisogno di cambiare la base di tale matematica. Quindi, in altre parole, ora ci limiteremo a hanno colonna 1 e il-- dove è questo going-- colonna del 2, colonna del 4, e forse oltre. Perché? Ebbene, questo è il potere 2 0-esimo. Questo è il 2 1. Questo è 2 a 2, e così via. Così mentre qui, abbiamo 1, 10 di, 100 del 1000, di 10.000, di, 100.000 di, 1 milioni di persone, e così via, qui abbiamo 1, 2, 4, 8, 16, 32, 64. Basta tenere moltiplicando per 2, invece di continuare a moltiplicare per 10. Così ora, se l'obiettivo a mano è quello di rappresentare numeri utilizzando solo 0 e 1 di, prendiamo in considerazione come ci arriviamo. Questo, naturalmente, è il modello 0 0 0, ma che numero concettualmente cosa rappresenta? Ebbene, 4 volte 0 e 2 volte 0 più 1 volte 0, aggiungiamo quelli insieme. 4 volte 0 è, naturalmente, 0, più 2 volte 0 è, naturalmente, 0 più 1 volte 0 è, naturalmente, 0. Così ah, questo rappresenta il Numero noi esseri umani sanno come 0. Bene, ora, facciamo molto avanti rapidamente veloce. Se non sto invece che rappresenta 0 0 0, ma facciamolo 1 0 1, che potrebbe essere come Lakisa, in precedenza, sarebbe solo pronunciarlo 1 0 1. Ma ora, come possiamo prendere al più alto livellare il numero di noi esseri umani potrebbero sapere? Allora, qual è questo numero? E '5, il numero che conosciamo come 5. Bene, perché? Beh, possiamo davvero una sorta di camminare attraverso di essa metodicamente 4 volte 1, 2 volte 0, 1 volte 1. Aggiungere quelli insieme, in modo questo è 4 più 0 + 1. E questo è, in effetti, 5. Così si sta facendo un po 'noioso ora facendo ripetutamente l'aritmetica. Ma il processo è esattamente lo stesso. L'unica cosa che ha cambiato nel nostro mondo è che i nostri colonne sono 1, 2, 4, 8, 16, e così via, invece di 1, 10, 100, 1.000. E questo è solo perché il nostro alfabeto ha ridotto da 0 a 9 per solo 0-1. Così come un piccolo quiz qui, come direbbe rappresentate il numero 7 in binario? 0? Ebbene, 0, vuoi dire 0 0 0? Dillo ancora, Karina. Perfetto. Perché? E 'effettivamente 4 più 2 più 1. Così buono. Come si fa a rappresentare un po ' another-- come circa il numero 2? Chiudere, ma all'indietro. Così che cosa è questo? È 4 più 1, in modo che è 5 di nuovo. Così what's-- Mi dispiace, Karina? 0 1 0. 0 1 0 2 sarebbe, perché ancora una volta, anche se una sorta di non salta fuori di te, basta fare la matematica. 4 volte 0, 0, 2 volte 1 è 2, 1 volte 0 è 0. Quindi questo è il numero che conosciamo come 2. Come circa il numero 8? Hm? Buona. Quindi abbiamo bisogno di un altro tipo di segnaposto. Abbiamo bisogno di 1 0 0 0. E questo è vero per la nostra specie del sistema scolastico decimali vecchi. Come si fa a rappresentare il numero 1000? Beh, sembrerebbe essere specie di in una posizione difficile, Se si chiede di rappresentare il numero 1000, perché anche se ti danno come 9 di questi, 9 di questi, 0 di questi, che è il più grande numero che si hanno, non hai abbastanza arrivare a 1.000. Quindi, se si 1.000, basta un'altra posizione, in modo che si può fare 1 0 0 0, ergo il numero di 1.000. Così ora, cerchiamo di questa sorta di mappa discussione concettuale torna a hardware, dove ancora una volta, l'ingresso era solo questo piccolo cavo di alimentazione, energia elettrica entrando ed uscendo. E quindi per questo di essere mappati da qui a lì, beh, che cosa abbiamo veramente bisogno? Ebbene, si può pensare di essere all'interno di un computer, un sacco di lampadine, se vorrai. Sono davvero chiamati transistor. E transistor sono solo interruttori che può essere sia acceso o spento. Così si può pensare ad un transistor che è su sta permettendo di energia elettrica di fluire e un transistor che è fuori come l'arresto di energia elettrica di fluire. E piuttosto che prendere sopra le luci qui, Perché non faccio questo tipo di nuovo stile della scuola. Quindi questo potrebbe essere un 1, una torcia elettrica essendo in poi, solo a mala pena però. E questo potrebbe essere un 0, e ora è fuori. Quindi, utilizzando questo dispositivo fisico, ho ora può rappresentare il sistema binario. Ho solo bisogno di due stati. Non importa ciò che colore è o quello che è. Tutto ciò che conta è che non ho uno stato in un altro stato e fuori. Quindi, utilizzando il mio telefono qui, come faccio rappresentare il numero che conosciamo come 0? O mettere equivalentemente, cosa numero sto rappresentando ora? 0, in quanto il dispositivo è spento. E se faccio questo? E ora, come faccio rappresentare il numero 2? Posso prendere in prestito il telefono qui, come abbiamo fatto ieri? Vediamo, quindi se voglio rappresentare il numero 2, è questo il numero 2? No. Che numero sono io accidentalmente che rappresenta qui? Questo è in realtà il numero 3. Così che uno voglio spegnere? Il telefono nero or-- bene, se they're-- telefono nero o il telefono bianco? Il telefono bianco. Quindi, se mi rivolgo questa via e noi la linea in su qui, abbiamo un 1 al posto del 2 e di un 0 al posto del 1 del. E quindi sono ora che rappresenta il numero 2. E questo, naturalmente, sarebbe il numero 3, perché ora entrambe queste luci sono su. E mi fermo qui, ma è ovvio se voglio rappresentare il il numero 4 o 8 o superiore, Ho intenzione di avere bisogno di altri telefoni. Ma questo è tutto quello che sta succedendo. Quindi, se avete mai sentito dire che all'interno di a-- grazie calcolatore you-- è milioni di transistor, questo è solo milioni di minuscoli interruttori. E non sono la luce lampadine che si accendono e spengono, ma essi permettere l'installazione di energia elettrica a scorrere da qualche parte o fermarlo. E così non c'è la vostra due states-- acceso o spento, acceso o spento. Così avremmo sembra ora di avere questa capacità per rappresentare questo concetto che vorremmo in hardware vero e proprio. Ma tutto quello che abbiamo ora è la capacità per rappresentare i numeri sembrerebbe. Quindi, come facciamo a rappresentare lettere dell'alfabeto, che si sente come il prossimo tipo di funzione che si vorrebbe aggiungere a un computer moderno una volta che hai i numeri? E in effetti, se ci pensate IT, storicamente, computer sono stati introdotti davvero servire calcolatrici numericamente. Ma naturalmente, questi giorni, fanno molto di più. Anche quando l'avvio, si tipicamente vedere una o più parole. Quindi, come si fa a rappresentare parole, Se tutto quello che hai è, ancora una volta, elettricità a fine giorno, o equivalentemente 0 e di 1? Sì. Si, voglio dire, che tipo di fatto ieri in qualche forma, dove ad un certo punto, Credo di aver arbitrariamente Detto questo, se vogliamo rappresentare la lettera A, potremmo chiamare che un 1. Era nel contesto della crittografia, dove abbiamo solo bisogno di un qualche tipo di codice, una sorta di mappatura. Quindi forse A sarà rappresentato come un 1, e B sarà rappresentato come un 2, e Z sarà rappresentata come 26, per esempio. E poi l'unica avvertenza è che se io sono andare per codificare le lettere nella mia e-mail o nei miei messaggi di testo come numeri, tutti voi devono accettare di utilizzare il stesso insieme di convenzioni. E in effetti, il mondo ha fatto esattamente questo. C'è un sistema nel mondo chiamato ASCII, American Standard Codice per scambio di informazioni, che è semplicemente una decisione alcuni anni fa, che gli esseri umani fatti che ha deciso che A sta per eguagliare, non 1, 2, e 26, e così è un forth-- poco different-- ma 65, 66, 67. E io ti tiro su un grafico in un attimo. Ma è arbitrario. Ma non importa che è arbitraria. Il mondo deve essere solo coerenti. Ora, più recentemente, c'è qualcosa di più elaborato chiamato Unicode, in quanto genere al mondo di resi conto, dopo aver inventato i computer, che non c'è più che bene 256 simboli nel mondo che si potrebbe desiderare di rappresentare, soprattutto quando si introducono lingue asiatiche ed altre simbologie che hanno bisogno di più di quanto si espressività può andare bene nella prima versione di questo codice, che è stato chiamato ASCII. Così Unicode permette in realtà di utilizzare più di 0 e 2. In particolare, si continua a sentire il byte di parola nella società e anche solo ieri. E un byte è cosa di nuovo? Che cosa è un byte? E 'solo 8 bit. Così che cosa significa in realtà? Bene, questo significa che, in precedenza, quando eravamo parlando di binario e usavo arbitrariamente tre bit quando eravamo parlando binary-- posto del 1 del, luogo il 2 del, e il 4 del pozzo posto--, un byte significa solo che si sta parlando Non in unità di tre ma quattro, cinque, sei, sette otto, che ci dà luogo 8 di, 16 di 32, di 64, di, e 128 di. In altre parole, un bit non è tutto che utile un'unità di misura, perché è proprio come un piccolo piccolo pezzo di informazione, acceso o spento. Così qualche anno fa, il mondo appena deciso è leggermente più conveniente per parlare in termini di byte, otto cose alla volta. E così così è nato il concetto di un byte. E così abbiamo otto bit qui. E si scopre, anche, per simile motivi, il mondo ha deciso anni fa che rappresentare una lettera ASCII, si sta andando ad utilizzare le unità di 8 bit. Quindi, anche se non lo fai bisogno che molti, sei sempre intenzione di utilizzare 8 bit per rappresentano una lettera dell'alfabeto. E questo è conveniente, perché poi se si ricevere un messaggio che ha un 0 0 0 1 1 1 1 0 seguito da un altro 1 1 1 0 1 0 0 1, quindi se si riceve 16 bit, il mondo può solo supporre che il primo 8 sono una lettera e il secondo 8 sono un'altra lettera. Non importa quanti ce ne sono. E 'solo che conta siamo tutti coerenti quando stiamo interpretando questi bit. E questo era solo casuale. Questo significa qualcosa, ma non lo feci davvero pensare a cosa significa. Quindi è una piccola bugia bianca. In origine, ASCII effettivamente utilizzato solo 7 bit. E l'ottavo bit è chiamato ASCII esteso. Ma il punto è, in ultima analisi, la stessa. Il mondo in generale standardizzato su 8 bit. Quindi questo sembra essere un po ' limitante, perché solo io posso rappresentare maiuscola, capitale B a Z. capitale Ma in effetti non è, se vado a-- c'è un po 'di risorse in linea, per esempio, asciitable.com, questo sta per essere un po ' opprimente in un primo momento. Ma io segnalo ciò che è importante qui. Questo succede solo a essere-- e io walk-- vediamo, se vado qui. Ecco, in decimale colonna, il numero 65. E sulla lettera colonna di destra carattere, Chr, è la lettera A. E si può ignorare, per ora, tutto nel mezzo. Questo è esadecimale, ottale, e un codice HTML. Per questo sito è solo cercando di gettare un sacco di informazioni su di te in una sola volta. Ma tutto ciò che interessa è il decimale colonna e la colonna di caratteri. Quindi, questa logica, ciò che è il numero che il mondo ha deciso rappresenta un minuscolo una? Sì, 97. E proprio per confondere potenzialmente un po ', che numero ha il mondo ha deciso rappresenterebbe il numero 1? A destra, perché we-- 49, a quanto pare qui, giù in basso a sinistra. Ora, quello che voglio dire con questo? Così si scopre che nei sistemi informatici, vi è generalmente una differenza fondamentale tra un numero e un carattere. Un numero è la cosa che imparato crescendo quando siamo rimasti super giovane in grado di scuola. E 'cose che contano con. Ma un personaggio è solo una forma, glifo, per così dire, sullo schermo. Ora, noi esseri umani sorta di vedere qualcosa che assomiglia a questo. E diciamo, oh, che è il numero 2. Ma no, questo è solo un simbolo che sembra come quello che conosciamo come il numero 2. E così non c'è questo distinzione fondamentale tra i numeri reali e personaggi. Questo è un numero. Ma in generale, in contesto di un computer, se invece vede qualcosa di simile quoted-- e non lo fai sempre avere a vederlo citato, ma per il bene di se discussion-- vedi le citazioni intorno al numero, questo è ora un carattere. Quindi questo numero 2 sotto la cappa all'interno di un computer sarebbe rappresentato con un pattern di bit che rappresentano il numero 50 secondo il grafico in linea. Tuttavia, se un computer appena vede questo, questo sarebbe rappresentato con il modello di bit 0 0 0 0 0 0 1 0. Considerando che questo personaggio avrebbe in realtà essere rappresentati as-- e ora, Ho avuto modo di pensare un po 'harder-- quindi questo personaggio sarebbe rappresentato con 0 0 1-- cosa ho bisogno qui? 0 0 1 1 0 0 1 0. Come ho fatto questo? Ebbene questo è il numero 50, se si moltiplicarlo utilizzando queste colonne, questo è il numero 2, e così è per questo che c'è questa dicotomia. E questo è solo un rompicapo ora caratteristiche che esistono in linguaggi di programmazione che ci tocchiamo brevemente più tardi oggi. In linguaggi di programmazione, avete in generale, ma non sempre, le cose chiamare diversi tipi di dati. In altre parole, un programmer-- quando lui o lei sta scrivendo, un programmatore arriva a decidere in quale formato per memorizzare i propri dati. È possibile memorizzare i dati come numeri grezzi, come il numero 2. Oppure è possibile memorizzare come stringhe, o sequenze di caratteri che si sarebbe generalmente esprimere con citazioni nel linguaggio di programmazione. Si possono avere le cose called-- Io semplificare troppo e li chiamo vero numbers-- in modo che i numeri non sono numeri interi, come il numero 2, ma numeri come 4.56. Così i numeri reali possono anche hanno punti decimali, quindi questo è un altro fondamentale piece di dati in un computer. E allora si può anche avere altri tipi di dati ancora. Ecco, questo è solo un teaser davvero di la più semplice delle decisioni di progettazione che un programmatore potrebbe rendere sotto la cappa. Quindi, tutte le domande appena ancora? Quindi cerchiamo di fare questo un po 'più reale. Questo hardware non è tanto più in uso. Ma la maggior parte tutti in questa stanza, probabilmente cresciuto con e utilizza ancora i dischi rigidi in qualche modo. Anche se la maggior parte i nostri computer portatili non è più avere dispositivi che funzionano in questo modo, invece computer portatili oggi in generale avere dischi allo stato solido senza parti in movimento. E che tende ad essere più costosi, purtroppo, ma un po 'più veloce e a-- bene, spesso, molto più veloce, che è uno dei motivi. E anche non lo fa genera calore. Può essere più piccolo, quindi è generalmente una netta positiva. Ma questo ci permette di mappare un poco più concretamente cosa stiamo parlando al 0 e il livello 1 di oggi per un dispositivo fisico. E 'una cosa per me parlare circa 0 e 1 in termini di del mio telefono o astrattamente in termini di interruttori essendo on e off. Ma per quanto riguarda i dischi rigidi? Nel vostro laptop, se si dispone di un vecchio uno, o nel vostro computer desktop, o certamente nei server oggi, dove si ha hard disk che hanno un terabyte di spazio, 4 terabyte di spazio, bene che cosa significa? Un disco rigido con 1 terabyte di mezzi spaziali c'è 1 trilione di byte all'interno di esso in qualche modo, o equivalentemente 8 trilioni di bit all'interno. 1 terabyte sarebbe di 8 terabit o 1 trilione di bit, che significa che se si dispone di un disco unità, avete in qualche modo o altri un trilione di 0 e 1 di all'interno di esso. E se ci limitiamo a dare un'occhiata a un foto arbitraria di un disco rigido rappresentante, questo è ciò che un disco unità potrebbe sembrare tipicamente all'interno. Essa, inoltre, è un po 'come un vecchio lettore grammofono ma generalmente con più record all'interno, in modo a speak-- multipla piatti, come si chiamano, dischi circolari di metallo, e poi un po 'testa di lettura, molto simile a un vecchio giradischi. E che testina di lettura si muove avanti e avanti e in qualche modo si legge i bit. E cosa c'è in questi piatti, anche anche se noi umani non possiamo vederli, sia in realtà o in questa immagine, c'è minuscole particelle magnetiche. E anche se hai a lungo dimenticato come funziona l'elettricità, una particella magnetica che è addebitato in genere ha una estremità nord e una a sud end-- così a nord ea sud. E così il mondo solo deciso qualche tempo fa che, se un protocollo magnetica essenzialmente è allineato come questo, da nord a sud, chiamiamolo che un 1. Se è invece a sud-est, facciamo solo chiamare che un 0. E quindi se avete a vostra disposizione un trilione piccolo piccolo magnetica particles-- e, si spera, l'ingegno hardware Per capovolgere quelli intorno come si vede fit-- se si desidera rappresentano un gruppo intero di 0 di, voi solo bisogno di 8 particelle magnetiche tutti allineati come questo. E se si vuole rappresentare otto 1 di, basta bisogno di 8 particelle magnetiche allineati back to back to back in questo modo. Quello che voglio dire con il particelle magnetiche? Francamente, dopo tutti questi anni, la cosa che mi viene ancora in mente è questo ragazzo, se si cresciuto con questa cosa. Si tratta di un little-- per quelli unfamiliar-- un piccolo giocattolo infanzia che ha questo uomo senza peli qui che ha tutte queste piccolo piccolo nero particelle magnetiche che vengono con esso. E con quel bastone rosso, che è solo un magnete, si può sorta di dargli un paio di baffi o sopracciglia o capelli o nulla su di lui. Quindi, in realtà, se ingrandiamo in, per esempio, questo è il tipo di gioco che si può giocare con Wooly Willy. E questo è solo per dire, questi sono particelle magnetiche molto più grandi che sono in realtà su un disco rigido, e particelle magnetiche molti meno. Ma andiamo a vedere in realtà quindi se si ha minuscole particelle magnetiche in un disco rigido, come si può effettivamente usare quelli per rappresentare i dati. [RIPRODUZIONE VIDEO] -Il Disco rigido è dove il vostro PC memorizza la maggior parte dei suoi dati permanenti. Per fare questo, i dati viaggia da RAM lungo con segnali software che raccontano la disco rigido come memorizzare i dati. I circuiti del disco rigido traducono quelli segnali in fluttuazioni di tensione. Questi, a loro volta, controllare il disco rigido del spostando parts-- alcuni dei pochi in movimento parti lasciate nel computer moderno. Alcuni dei segnali di controllo di un motore, che gira piatti metallizzati. I tuoi dati sono in realtà memorizzati su questi piatti. Altri segnali si muovono le testine di lettura / scrittura per leggere o scrivere dati sui piatti. Questo macchinario è così preciso che un capello umano non poteva nemmeno passare tra le teste e piatti rotanti. Eppure, tutto funziona a velocità formidabili. [FINE RIPRODUZIONE] E si può vedere al coda del video, ci sono generalmente più piatti. E così che la testa di lettura non solo la lettura all'inizio. E 'un po' come tre o quattro o più teste di lettura che si muovono in questo modo, la lettura simultanea dei dati. Quindi c'è un sacco di complessità e sorta di temporizzazione che è coinvolto in un disco rigido. E la cosa è in rotazione in realtà maledettamente veloce, quindi non c'è un sacco di complessità. Ma cerchiamo di zoom in un po 'più profonda e vedere dove sono queste particelle magnetiche E come stiamo ottenendo a loro. [RIPRODUZIONE VIDEO] Lo sguardo di -let a ciò che appena visto al rallentatore. Quando un breve impulso di energia elettrica viene inviato alla testina di lettura / scrittura, si ribalta su una piccola elettromagnetica per una frazione di secondo. Il magnete crea un campo, che cambia la polarità di un piccolo, piccolo porzione delle particelle metalliche che rivestono la superficie di ogni piatto. Una serie modello di questi piccoli aree caricate su su disco rappresenta un singolo bit di dati nella sistema numerico binario usato dai computer. Ora, se la corrente viene inviato uno attraverso la testina di lettura / scrittura, la zona è polarizzata in una direzione. Se la corrente viene inviato direzione opposta, la polarizzazione è invertita. Come si ottiene i dati dal disco rigido? Basta invertire il processo. Quindi è particelle sulla disco che ottiene la corrente Nella testina di lettura / scrittura in movimento. Mettere insieme milioni di questi segmenti magnetizzate, e hai un file. Ora, i pezzi di un singolo file può essere sparsi in tutto piatti di un'unità, un po 'come il disordine di carte sulla scrivania. Quindi uno speciale extra file continua traccia di dove tutto è. Non si desidera si aveva qualcosa del genere? [FINE RIPRODUZIONE] Quindi, essendo accennato lì, forse, è tale argomento da ieri di cancellazione. Quando si elimina un File, ieri abbiamo detto che un computer realtà fa cosa, quando si trascina qualcosa per il cestino o cestino? E 'solo dimentica. Ma lo 0 e di 1, le particelle magnetiche quello sguardo come il rosso e il blu le cose qui, o mio braccio qui, sono ancora lì sul disco rigido. E così esiste software-- Norton Utilities e di ieri e altri più moderni software-- che proprio esplorerà un intero disco rigido alla ricerca a tutti quei 0 e 1., perché risulta che la maggior parte di file disposizioni-- documenti Word, file Excel, immagini, il video files-- tutti hanno certo modelli che sono comuni tra di loro. Ogni file video potrebbe essere di un altro video, ma la prima vari bit sono generalmente gli stessi. O l'ultima più bit di solito sono le stesse. E così con alta probabilità, si può guardare per quei modelli. E anche se il file è stato dimenticato, si può dire con alta probabilità, ma questo appare come un documento Word, lascia recuperarlo e non-dimenticarlo, se vorrai. E così è così che è possibile recuperare dati che sono stati o accidentalmente cancellato o eliminato o deliberatamente cancellato per qualsiasi scopo. Al contrario, la cancellazione sicura fa quello nel contesto di una foto come questa? Esattamente, li rende tutto casuale. Quindi è una sorta di muove alcune delle giù, alcuni di loro fino, lascia alcuni di loro invariato, e generalmente fa rumore casuale fuori di esso, o solo forse rende tutti li 0 di o tutti loro 1 di. E anche questo può generalmente fregare i dati via. Quindi torniamo ora alla questione di pensiero computazionale, per cui abbiamo gli ingressi formula. E algoritmi dà si uscite in ultima analisi. Ci concentriamo ora in poi gli ingressi e uscite, perché ora, ho affermazione abbiamo un modo di rappresentano ingressi e uscite. Stiamo solo andando a utilizzare binario. E non importa quello che abbiamo vuole rappresentare oggi, che si tratti di un numero o una lettera o migliaia loro in una rubrica telefonica o immagini o filmati, alla fine della giornata, è tutto 0 e 1.. E io sostengo che, anche se questo è un mondo super semplice con solo 0 di e 1 di, possiamo costruire noi stessi. E abbiamo visto un esempio di che con le lettere finora. Quindi concentriamoci ora su questo ingrediente centrale, un algoritmo. E torniamo a questo esempio di Mike Smith. Quindi, in questo libro telefono, che è vero, non usiamo più così tanto, c'è un problema da risolvere. Vogliamo trovare qualcuno come Mike Smith. E che cosa potrei fare per trovare Mike? Beh, ho potuto solo aprire questo libro, inizia alla prima pagina, e realizzare, oh, io sono nella sezione A. Mike non c'è. Ho bisogno la sezione S per Smith. Quindi, solo continuare a girare una pagina alla volta. Mi permetta di fingere che questo è tutto pagine bianche e pagine gialle non, perché non stiamo andando a trovare Mike in pagine gialle comunque. Ma io sono nelle pagine bianche. Ed ora, io sono nella sezione B. Io ancora non l'ho trovato. Così continuo a girare una pagina alla volta. Questo è un algoritmo. Si tratta di un insieme di istruzioni per risolvere qualche problema. In altre parole, guarda pagina, se Mike non è su di esso, girare la pagina, e si ripete Ancora e ancora e ancora, idealmente guardando verso il basso, come si sta facendo. Quindi è questo algoritmo, questo processo, giusto? Scusate. No, ho sentito alcuni nn. OK, ma è-- sì, è certamente noioso. Come, saremo qui tutto il giorno, se mi continuare a cercare Mike a questa velocità. Ma lasciate che sostengono che è corretto. E 'stupido, ma è corretto. Alla fine della giornata, lunga come potrebbe Prendo, troverò Mike se lui è lì e sto prestando attenzione. E alla fine ho raggiungere la sua pagina. E se ho troppo lontano, se Ottengo alla sezione T, allora posso leggermente ottimizzare e dire, hm, tutto fatto. Non ho nemmeno bisogno di sprecare tempo andando alla Z di. Ma questo è molto approccio lineare, se si sarà, una sorta di sinistra a destra approccio, una linea retta. E la sua corretta ma lento. Così mi ricordo dalla scuola elementare, una sorta di una ottimizzazione da un primo selezionatore, dove ho imparato a non contare da quelli ma twos-- modo 2, 4, 6. E 'una, molto più difficile da do, ma in teoria, è faster-- 8, 10, 12, 14, e così via. Come su tale algoritmo? È più efficiente? E 'più veloce? PUBBLICO: E 'efficiente. DAVID MALAN: Sì, quindi è def-- è letteralmente due volte più veloce, ho ammesso Non farsi scattato con le dita. E 'due volte più veloce, perché Sto girando attraverso due pagine alla volta invece di uno, ma è potenzialmente in corretto, perché perché? PUBBLICO: Stai saltare alcuni. DAVID MALAN: Destra, che cosa se Mike succede da sandwiched-- forse quando sono più avanti nella rubrica, Mike sembra essere inserita tra queste due pagine, e ho appena saltare ciecamente su di esso. Quindi abbiamo bisogno di un po 'di correzione lì. Una volta mi ha colpito la sezione T, I non si può solo dire con fiducia, non abbiamo trovato Mike Smith. Probabilmente ho raddoppiare indietro. O in realtà, una volta raggiungo qualcuno chiamato S-N, invece di S-M Smith, subito, ho potuto raddoppiare indietro, perché forse lui era nella pagina precedente. Ma io non devo raddoppiare indietro lontano. In teoria, se lo faccio a destra tempo, mi basta andare indietro di una pagina. Quindi è l'aggiunta di un solo passo in più. Così sono andato due volte più veloce, ma mi è costato una pagina in più. Ma che si sente come una vittoria netta. Ma questo non è come la maggior parte delle persone in questa sala possa risolvere questo problema. Cosa sarebbe una persona tipica, forse un Qualche anno fa lo fanno, per trovare Mike Smith? Sì, non ha trovato Mike. Cosa faccio? In modo da ottenere un po 'più vicino, ma lo faccio know-- ciò che è vero su una rubrica telefonica? PUBBLICO: E 'sequenziale. DAVID MALAN: E 'sequenziale. E 'alfabetico. E così, se io sono nella sezione M, Mike è chiaramente a destra, Posso letteralmente strappare il problema in half-- di solito è più facile che lacrima che-- il problema a metà e gettarlo via, così che ora, ho un problema che è non più di 1.000 pages-- che era difficile, perché penso che in realtà ho strappato la rubrica telefonica non tempo-- 1.000 pagine, ma 500. Quindi il problema è letteralmente la metà più grande. E questo è piuttosto interessante, perché con i miei algoritmi precedenti, la versione 1 e 2, stavo solo facendo il problema una pagina più piccoli, due pagine più piccoli Al tempo. Mentre ora, ho fatto 500 pagine più piccolo tutto in una volta. OK, ora, Karim propone che vado alla metà destra. Quindi ho intenzione di andare o meno al centro, più o meno. E se ho fatto questo matematicamente, Potrei andare a destra verso il centro. E ora, mi rendo conto, oh, Sono nella sezione T. Io in realtà andato troppo lontano. Ma posso, ancora una volta, strappare il problema a metà, buttarlo via. E i miei byte non è così grande. E 'solo, che cosa, 256 pagine o 250 le pagine, prendere o lasciare in questo momento. Ma è ancora il modo più di una pagina o due pagine. E così ora, vado più o meno a metà. Oh, non sono andato abbastanza lontano abbastanza ora. Quindi ripeto, ripetere, ripetere, ripetere, fino a quando io sono spera sinistra con una sola pagina. In modo che invita la questione, se io iniziato con circa 1.000 pagine, quanti passi ci sono voluti me con la versione 1 di mio algoritmo? Ebbene, se Mike è nel S sezione, nel caso peggiore, che è abbastanza vicino a la fine dell'alfabeto. Quindi, se il libro telefono è dotato di 1.000 pagine, Troverò Mike all'interno di 1.000 pagine, prendere o lasciare. Forse è come 800 o giù di lì, ma è abbastanza vicino a 1.000. Considerando che, nella seconda algoritmo, quante Pagina gira al massimo potrei richiedono di trovare Mike Smith? C'è 1.000 pagine, ma sono facendo loro due alla volta. A destra, in modo da max come 500ish, perché se vado attraverso l'intera rubrica telefonica, a quel punto, posso smettere. Ma posso radere alcuni da una semplice pausa nella sezione T. Ma è nel peggiore caso 500 pagine. Quindi, quante volte posso dividere una 1,00o-pagina del libro di telefono in una volta e mezzo e ancora e again-- da 1.000 500 a 250 a 125? Quanto tempo prima mi ha colpito una pagina? Sì, si tratta di 10. A seconda di arrotondamento e tale, è circa 10 pagine fabbisogno totale per essere trasformato o elenchi telefonici devono essere strappata. Ecco, questo è abbastanza potente. Abbiamo iniziato con un problema di 1.000 pagine in tutte e tre queste storie. Ma nel primo algoritmo, essa mi ha portato, nel peggiore dei casi, di 1000 pagine si rivolge per trovare Mike. Secondo algoritmo, 500 pagine per trovare Mike. In terzo algoritmo, 10 pagine per trovare Mike. Ed è ancora più potente quando si pensa su una sorta di scenario opposto. Supponiamo che la compagnia telefonica successiva anno fonde forse due città insieme, e la rubrica è improvvisamente questo spessore, invece di questa che, così 2.000 pagine invece di 1.000. Beh, il mio primo algoritmo in cerca di Mike Smith in una rubrica di 2.000 pagine, caso peggiore, sta andando a prendere quanti Pagina trasforma il prossimo anno? rubrica è di 2.000 pagine, so-- bene, non più uno. Se la rubrica è due volte più spessa il primo algoritmo, primo algoritmo, 2.000, giusto? Nel caso peggiore, Mike è veramente vicino alla fine del libro, quindi è di 2.000 giri pagina. Secondo algoritmo che va da due a due, come 1.000 pagine. Ma come circa nel mio terzo e il più recente algoritmo? Se la compagnia telefonica raddoppia la numero di pagine da 1.000 a 2.000, quante altre volte bisogno mi strappo quel libro a metà per trovare Mike? PUBBLICO: Solo una. DAVID MALAN: Solo un altro, perché con una pagina lacrima, Posso letteralmente dividere e conquistare, se si vuole, che problema a metà assunzione una massiccia morso fuori di esso. E così questo è un esempio di efficienza e probabilmente un algoritmo con la quale tutti siamo sorta di intuitivamente familiare. Ma è altrettanto corretto come i miei altri algoritmi con quella Tweak per il secondo algoritmo, ma è così molto più efficiente. E in effetti, ciò che un computer scienziato, o, a sua volta un programmatore, sarebbe tipicamente fare durante la scrittura il codice è cercare di capire, tutto bene, io non voglio che il mio il programma solo per essere corretta, Voglio anche che sia efficiente e risolvere bene i problemi. Immaginate nel mondo reale di oggi, come Google indicizza, ricerche come miliardi di pagine, immaginate se utilizzato il primo algoritmo per trovare i gatti tra un miliardo pages-- guardando la prima pagina nel loro database, il secondo, il terzo, solo guardando per un gatto, in cerca di un gatto. Questo è dannatamente lento sembrerebbe. Potrebbero invece usare qualcosa chiamata ricerca binaria, che c'è bi coincidence-- che significa due, abbiamo continuare a dividere qualcosa in 2, in half-- avrebbero potuto usare la ricerca binaria e magari trovare i gatti ancora più veloce, o qualunque cosa sia che stai cercando. E, francamente, non c'è anche algoritmi amatore che fare molto di più di una semplice dividendo le cose a metà al fine di trovare rapidamente le informazioni. E parleremo un po ' su coloro che dopo il pranzo di oggi. Così mi permetta solo cercare di rappresentare questo. Non abbiamo bisogno di andare in qualsiasi matematica o numeri reali. Possiamo parlare di questo in astratto. Ma lasciatemi propongo, se si stavano avendo una discussione ora con gli ingegneri proponendo questo algoritmo e si sta cercando di fare una decisione calcolata, perché forse il ingegnere dice a voi, sapere che cosa, posso implementare un ricerca lineare in come due minuti. E 'così facile. La ricerca binaria non è che la fantasia, ma sta andando a prendere me come 10 minuti, così 5 volte più a lungo. C'è un commercio qui, anche in termini di decidere quale software per scrivere. Si fa a scrivere l'algoritmo più semplice, che sarà solo si prende due minuti? O si spendono più tempo, 10 minuti, scrivere l'algoritmo più elaborato? Come si fa a decidere che tipo di domanda? Oppure si potrebbe rendere un po 'più reale. Dico al mio capo che sta andando a prendere me uno dei due settimana o 10 settimane per attuare la software in questo modo, come si fa a decidere che algoritmo per luce verde? Karim? PUBBLICO: Il pubblico, immagino. DAVID MALAN: Il pubblico. Che cosa si intende per il pubblico? PUBBLICO: Se è in corso per essere utilizzato da utenti che [INAUDIBLE] dagli utenti [INCOMPRENSIBILE]. Ma se si tratta di qualcosa che ti solo facendo per te stesso per facilitare un problema, [INCOMPRENSIBILE] più veloce. DAVID MALAN: Sì, è rapido e sporco è un buon modo per descriverlo. In effetti, se sei descrivendo molto del mio tempo a scuola grad, per cui spesso i tempi, Ho scritto male il codice consapevolmente so-- almeno, è così che mi it-- razionalizzato consapevolmente così, perché anche se stavo scrivendo codice che era relativamente lento da eseguire, Sono stato in grado di scrivere il codice stesso abbastanza veloce, la spesa a pochi minuti o meno ore di giorni. E si è scoperto, ho di tanto in tanto bisogno di dormire. Quindi, anche se il mio codice richiesto 8 ore per eseguire, così va bene, Andrò a dormire durante l'esecuzione. Così, al momento, ho pensato che questo era molto intelligente, anche se a quanto pare ha lavorato con il mio dottorato di ricerca molto lentamente. Ma l'inverso di quello è che, software se stessi scrivendo per altre persone che importava più di me, beh, averli aspettare 8 ore per tornare loro risultati di ricerca non è poi così interessante. E così trascorrere più tempo in anticipo per scrivere software che è più efficiente, più come il nostro terzo algoritmo, probabilmente benefici gli utenti nel corso del tempo. Quindi in realtà dipende sopra tempo come quei costi si sommano. Se avete intenzione di scrivere software usare una volta, Probabilmente potrebbe anche fare rapido e sporco, come si suol dire. Basta buttare insieme. E 'il codice che imbarazza te, così male, ma ottiene il lavoro fatto correttamente, anche se non è efficiente. Al contrario, si spendono più tempo su qualcosa, farlo giusto. E poi ammortizzato nel corso del tempo, costo che in anticipo di tempo è probabilmente vale la pena, se si mantiene ottimizzazione per il caso comune. E in effetti, questo è un tema in programmazione, o informatica più generalmente, cercando di ottimizzare non per il caso raro ma le case-- comuni quale operazione che sta per accadere ancora e ancora? Se avete intenzione di avere miliardi degli utenti di ricerca sul tuo sito web, probabilmente si dovrebbe spendere l'extra settimane sulla parte anteriore di scrittura software migliore, in modo che tutti gli utenti beneficiano. Ora, proviamo a catturare questo un poco pittoricamente, ma non tanto numericamente. Quindi, ecco un semplice grafico vecchia scuola. E lasciatemi dire che questo è il tempo. E non importa Cosa-- in realtà, no, non tempo. Si inseriscono le sull'altro asse. Diciamo che questo è il tempo, e questo è formato di problema. E un informatico potrebbe chiamare in generale questo solo n. n è come il nostro go-to variabile, in cui n è un numero, n il numero, ed è il numero di qualsiasi input che avete. Quindi, in questo caso, n è il numero di pagine. Così potrebbe essere 1.000 in il caso che abbiamo appena detto. Quindi il tempo può essere qualsiasi unità di misura. Forse, è secondo. Forse, è giorni. Forse, è come pagina giri. Non importa. Qualunque cosa si desidera contare in, che sarà il tempo o il costo equivalente. Quindi, con questo molto prima algoritmo, se, per esempio, aveva una rubrica di 1000 pagine, Io vado a disegnare un punto lì, perché se è 1.000 pagine, ci sono voluti circa 1000 pagine si trasforma, prendere o lasciare. E poi se avessi un 2.000 pagine rubrica telefonica, e sto andando a disegnare un secondo dot qui, perché per 2.000 pagine, è come 2.000 secondi o la pagina si trasforma o qualsiasi altra cosa. E così, quando ho detto in precedenza, si tratta di tipo di una relazione lineare, che è stato intenzionale, perché volevo successivamente on-- destra now-- per disegnare una linea. E 'una specie di una scala rapporto di linea. La pendenza è 1/1, se si vuole. Nel frattempo, il secondo algoritmo Detto questo, se hai 1.000 pagine e si stava utilizzando il secondo algoritmo, dove ho contato da 2 di, girando due pagine alla volta, dovrei disegnare un dot sotto o sopra il mio punto originale? PUBBLICO: Qui di seguito. DAVID MALAN: Qui di seguito, perché, come abbiamo visto, richiede meno tempo, metà del tempo. Così il punto dovrebbe essere a metà alto come l'altra. E lo stesso affare qui, questo dot probabilmente dovrebbe essere più o meno lì. E così il mio secondo algoritmo, allo stesso modo, ha una relazione lineare con il tempo. E possiamo trarre come tale. Così ora, la terza e ultima algoritmo è un po 'più difficile da disegnare. Ma intuitivamente, se ho 1000 pagine con il mio terzo algoritmo, mi dovrebbe solo prendere come 10 passaggi. E se ho 2.000 pagine con il mio terzo algoritmo, che dovrebbe prendere me non 10 passi, ma 11, solo più uno. Quindi stiamo a malapena andando a vedere questo. E si scopre, se Ho ingrandire questa, io sono andare a esagerare per effetto, la forma di quella linea, in ultima analisi, Non è un line-- dritto perché, infatti se fosse, sarebbe più simile alla others-- in realtà è una linea curva che, se focalizziamo l'attenzione, sta andando a guardare molto più simile a questo. It-- bene, OK, ignorare questa parte. Quella era la mia penna andare dell'angolo. Si tratta di una linea curva che è sempre in aumento, sempre, sempre, sempre aumentando, ma solo appena. E così nel corso del tempo, si dispone di una rapporto che è più simile a questo. Sembra quasi dritto. Ma è molto lentamente aumentando. Ma per quasi tutti i punti lungo il asse x, asse orizzontale, è inferiore a quelle altre linee. Quindi questo potrebbe essere un rapporto n, per cui se si dispone di n pagine, si n secondi porta. Questo potrebbe essere un rapporto n / 2. Hai n pagine, ci vuole si n / 2 secondi, la metà come molti. E questo è un logaritmica rapporto, che se vi ricordate, logaritmo in base 2 di n cattura questo tipo di crescita, per così dire. Quindi questo è il tipo di santa graal tra i tre di questi qui, perché è solo così molto di più efficiente, ma senza dubbio più complesso implementare. Qualsiasi domanda? Ebbene vorrei fare questo, permettetemi mi apro una finestra di testo solo così possiamo cercare di formalizzare qualcosa qui. Quindi, mi permetta di andare avanti ora e implementare questo algoritmo per la ricerca di Mike Smith nel codice, se si vuole, il codice pseudocodice. Non ho intenzione di usare Java o C ++. Sto solo andando a utilizzare una sorta di sintassi inglese-like, che noi sarebbe generalmente chiamare il codice pseudocodice. Qui, ho una finestra vuota. E sto dicendo passaggio 1 della molto primo algoritmo è prendere rubrica telefonica. Fase 2 è aperto il libro alla prima pagina. Fase 3 sarà guardare Pagina per Mike Smith. Se a pagina, chiamare Mike. voltare pagina altro e passare al punto 3. Fatto, diciamo. E quindi non è del tutto perfetto, che vedremo tra un attimo. Ma prendiamo in considerazione ciò che concetti ho introdotto qui. Così i punti 1 e 2 e 3 sono praticamente verbi. Sono dichiarazioni, actions-- farlo. E così in una programmazione lingua, ci sarebbe in generale chiamarli dichiarazioni o funzioni o procedure, chiamarli qualsiasi numero di cose. Ma sono solo actions-- fare questo. Fase 4 è fondamentalmente diverso, perché è una specie di fare una domanda. Si sta dicendo che siamo genere pari ad un bivio. Se Mike è sulla pagina, chiamare lui, in modo da girare a sinistra, se si vuole. E se no, tornare a un po ' altro page-- o meglio, mi dispiace, tornare a qualche altro passo, che induce una sorta di loop costrutto. E lo facciamo ancora e ancora e ancora. E in realtà, sai una cosa? Sì. altrimenti se alla fine della fermata libro. Quindi abbiamo bisogno di un terzo tipo condizione, perché si non può continuare a girare la pagina di annuncio fino alla nausea, perché alla fine, io colpire la fine del libro. E un bug in un programma potrebbe essere Non anticipando tale scenario. E poi ho appena realizzato, oh, attendere un minuto, ho bisogno di un terzo scenario. Se sono fuori di pagine, io in realtà dovrebbe solo smettere. Altrimenti, è indefinito. Cosa succederà se continuo dicendo voltare pagina e tornare indietro, Questo è quando i computer congelare o crash, quando si preme qualche situazione imprevista del genere. Ora, che dire di Mike terzo algorithm-- di Smith prendere l'elenco telefonico, libro aperto per first-- a no, non prima pagina questa volta, a middle-- oh, beh, che aveva il secondo algoritmo. Saltiamo al terzo. PUBBLICO: Oh, mi dispiace. DAVID MALAN: Va bene. Saltiamo all'aperto third-- a mezzo e ora guarda per Mike Smith. se a pagina, chiamare Mike. E allora cosa vogliamo dire qui? Altrimenti cosa? Siamo in grado di esprimere questa in qualsiasi numero di modi. Non esiste una risposta giusta. OK, se non nuovo, ma abbiamo bisogno di essere-- OK, noi vogliamo dividere in due, ma vogliamo andare a sinistra o andare a destra? Come esprimere questo concetto? Ebbene, nel caso di Mike, sì, è giusto. Ma OK, in modo che in realtà è un buon punto. Va bene. Vi terremo andando con questa logica. Così-- PUBBLICO: meno della metà. DAVID MALAN: Sì. Quindi, il resto se la pagina è, diremo, meno di Smith, a fianco di Smith, then-- vediamo, è questo va a complicare? altrimenti se la pagina viene prima di Smith, lacrima nel mezzo, buttare via cui la metà? PUBBLICO: Ho pensato che era [INCOMPRENSIBILE]. DAVID MALAN: Ho sentito entrambe le risposte. PUBBLICO: a sinistra. DAVID MALAN: OK, buttare via lasciato a metà, come Lakisa detto in precedenza, la partita la metà, poi ho sorta di vuole andare solo a-- vado a destra. O equivalentemente, e ho fatto un po ' po 'di confusione di inizio qui, Io voglio efficace passare al punto 2 di nuovo, dove aperta al middle-- o open-- Sì, diciamo solo, le pagine a metà. E questo lo ripara. Non è più di un libro. E 'solo la metà di un libro, pagine in modo aperto a metà. else-- erano quasi arrivati. Fase 6, altrimenti se la pagina viene dopo Smith, strappare a metà, buttare via metà destra, quindi passare al punto 2. altro smettere, quarto scenario, se non abbiamo pagine ancora da girare. Così abbiamo potuto pulire questo. E dovremmo pulire questo. Questo è un codice molto pseudocodice, se si sarà, descrizione di altissimo livello. Ma lo fa in genere catturare l'idea. E, ancora, in questo scenario, abbiamo avere la nozione di una condizione, un ramo, un bivio, facendo un decision-- se questo, andare in questo modo, else if, andare in questo modo, else if, andare in quel modo. E questo è molto comune tecnica di programmazione decidere quale direzione di andare, per così dire. E abbiamo anche qualche tipo di looping struttura, dove stiamo facendo qualcosa di nuovo e di nuovo. Ora, si scopre, tanto come in questo esempio, essere super preciso è importante. Ma abbiamo anche visto qualcosa che continuiamo a chiamare astrazione. Che cosa significa per raccogliere rubrica? Siamo solo tipo di presa per scontato in questa stanza che che ha qualche significato semantico. Tutti noi solo tipo di sapere, oh, bene, prendere l'elenco telefonico. Cosa significa in realtà? Bene, questo significa in realtà si estendono mano, chinarsi, estendere le dita, pinch libro tra le dita, stare in piedi, tirare la mano verso di voi. E potremmo essere davvero pedanti su questo, davvero essere super preciso da quello che sto facendo. Ma tutti questi passaggi sono collettivamente cosa vuol dire prendere una rubrica telefonica. E così prima, quando ho detto, ogni di queste prime due istruzioni può essere pensato come procedere o una funzione, in realtà essa rappresenta ciò che mantenere chiamando un'astrazione. E 'come un alto livello concettuale Descrizione di un problema che in realtà comporta un bel paio di passi. E così anche questo è un argomento ricorrente in programmazione, per cui potrei scrivere un programma utilizzando la sintassi come questo-- pick_up_phone_book (). E poi sintatticamente, io sono andando a rubare qualcosa dalla maggior parte dei linguaggi di programmazione. Ora, il punto 1 sembra ancora più simile a una funzione, come programmatore sarebbe chiamarla. Sembra che il codice che qualcuno ha dato un nome a data e a me da utilizzare in altri somehow-- parole, ciò che la linea che ho messo in evidenza rappresenta la funzionalità che forse Non ho nemmeno implementare me stesso. Qualcuno più vecchio, più saggio di me già capito come si esprime il concetto di prendere in mano una rubrica telefonica. Ed è come se i cinque passi che ho appena snocciolato, la parte superiore della mia testa. Ma lui o lei già implementato questo, dato quelle diversi passaggi un nome, pick_up_phone_book. E le parentesi è proprio quello che la maggior parte dei programmatori fare alla fine di dichiarazioni di questo tipo. Ora posso stare in piedi sul suo spalle e mai più, pensare a che cosa significa a prendere una rubrica telefonica. Posso solo dire, prendere l'elenco telefonico. E questo è esattamente ciò che tutti noi esseri umani hanno fatto qui. Quando eravamo probabilmente 1 anni, 2 anni di età, qualcuno doveva insegnarci che cosa lo scopo di prendere una rubrica telefonica. E da allora, abbiamo Sottratto via da quelli molto interessante passaggi meccanici. E non ci resta che un comprensione intuitiva di ciò che significa prendere una rubrica telefonica. E si può estrapolare ora a things-- più complicato costruire un edificio. Come, per alcune persone, che ha effettivamente senso. Per imprenditori, agli architetti, che ha un senso. E avrebbero saputo cosa fare, se Ho detto, vado costruire un edificio. Ma la maggior parte di noi in camera non poteva che fare con quel livello di astrazione. È necessario dire a noi piace andare a prendere la pala e andare a prendere il calcestruzzo e inchiodare i pezzi di legno insieme e quant'altro è coinvolto nella costruzione di un edificio. E questo perché non abbiamo ancora stato programmato per capire cosa significa costruire un edificio. Non abbiamo che l'astrazione. Non abbiamo tale funzionalità. E così quello che vedrete in linguaggi di programmazione, in generale, lingue soprattutto più moderne, come Java, PHP, Ruby e Python, sono molto più maturo di lingue più anziani, come C e C ++ e altri ancora. E così arrivano con più funzionalità incorporata. Più il codice è stato scritto da persone in passato che ora possiamo chiamare o evocare o utilizzare, come sto accennando a questo ha evidenziato la linea qui. E così, anche se non stiamo parlando di linguaggi di programmazione per sé, codice appena pseudocodice, tutte le le idee sono ancora in quella discussione. E si scopre precisione è super importante, come è l'astrazione. E proviamo a comunicare che, come segue. Per sbaglio ho potuto viziati facendo lampeggiare una presentazione sullo schermo prematuramente. Ma permettetemi di chiedere un volontario coraggioso, se non ti dispiace in arrivo. Sareste di fronte alla macchina fotografica, se siete d'accordo con questo. Qualcuno vuole venire e dare istruzioni ai suoi colleghi qui? Basta venire qui e stare qui e dire alcune parole. Victoria sorride più ed evitando gli occhi più. Sareste disposti a venire in su? OK. E se tutti gli altri a portata di posti potrebbe prendere un pezzo di carta straccia, se vorrai. carta a righe va bene. Venite intorno a questo modo. Oppure parte della carta che è stata data ieri, un qualsiasi foglio bianco di carta, se potessi. E se non si dispone di alcuna, semplicemente chiedere al vostro vicino di casa se fosse possibile. Quindi per il momento, per questo esempio, Victoria sta per svolgere il ruolo di un programmatore, un ingegnere, che ha bisogno di programmare tutti voi, come i computer, di fare qualcosa. E vedremo cosa ipotesi si decide di fare. Vedremo come precisa lei sceglie di essere. E se questa dimostrazione va pedagogicamente bene, un sacco di errori saranno effettuati, che saremo poi utilizziamo che come opportunità di discussione. Ma la sfida per voi dovrebbe essere quello di evitare questi errori, essere un buon programmatore. E quindi la sfida a portata di mano, se che ci è piaciuto di camminare qui, è davanti Victoria sullo schermo qui-- e, si spera, nessuno di voi ricordare questo quando ho lampeggiava sullo schermo. E non girare intorno a tutti, perché c'è un altro schermo in questa stanza che posso spegnere. Quindi non girarsi. Davanti Victoria è lo stesso grido. E il suo lavoro ora è quello di dire a tutti voi sul pezzo di carta che cosa disegnare. E vedremo, sulla base di istruzioni verbali da solo, codice di computer, se si vuole, come precisa i disegni are-- tue implementazioni sono. Ha senso? PUBBLICO: Sì. DAVID MALAN: OK, eseguire. PUBBLICO: Disegnare un quadrato. [RISATA] DAVID MALAN: E no le domande possono essere chiesto. Può fare solo quello che ti dicono. Oh, e se si dispone di diapositive di oggi apre in una scheda, non guardare la vostra scheda. ok? PUBBLICO: OK, disegnare un cerchio. Un slope-- posso dire pendenza? DAVID MALAN: fino a voi. PUBBLICO: Un pendio. E un triangolo. DAVID MALAN: Va bene. E stare qui solo per un momento. E ho intenzione di venire intorno in un attimo. E non c'è bisogno di mettere i nomi su di esso. Mi permetta di venire intorno e raccogliere i vostri disegni, se non ti dispiace strappandoli fuori. Ecco cosa siamo tornati. Io proietto sullo schermo. Vedo un quadrato, un cerchio, pendio, e un triangolo. Così che era una risposta c'è. E let's-- urla. Grazie. Ecco un altro assortimento, e uno dietro. Quindi, tutti sembrano catturare lo spirito. Grazie. C'è un altro, ed ecco un altro. L'interpretazione pendenza è un po 'diverso, poco curve. E la più vicina, sia per la meraviglioso specificità con cui hai descritto, o forse si tipo di visto prima, questo è effettivamente ciò che è stato effettivamente Victoria descrivendo. Ma ora, chi di voi non ha ottenuto abbastanza giusto, cerchiamo di offrire alcune obiezioni qui. Così Victoria prima detto disegnare un quadrato. E ora, si può supporre per il bene di oggi che tutti sanno come disegnare un quadrato. Ma non è del tutto chiaro, no? In quale altro modo si potrebbe avere disegnato una piazza, o dove potrebbe essere alcune delle ambiguità qui per il computer? AUDIENCE: Localizzazione e dimensione. DAVID MALAN: Location, giusto? Tutti voi aveva una carta di qualche forma, generalmente rettangoli, ma un po ' misure differenti. Ma certamente potrebbe avere disegnato, se si voleva, una piazza enorme, forse una piccola piazza. Forse, è stato ruotato. Non credo abbiamo visto che. Ma avrebbe potuto essere più di diamanti come ma ancora, comunque, Matematicamente un quadrato. Così che era probabilmente ambiguo. Poi disse, disegnare un cerchio. Alcuni di voi ha tratto accanto a , il che non è irragionevole, perché gli esseri umani tendono a pensare o leggere destra a sinistra nella maggior parte delle lingue, quindi non una cattiva congettura. Ma quel cerchio potrebbe avere stato dentro la piazza, avrebbe potuto essere tutto il piazza, avrebbe potuto essere altrove sul foglio, così probabilmente ambigua. Slope avrebbe potuto essere forse prendendo il maggior libertà verbalmente con che cosa significa. E alcuni di voi interpretato come una linea ondulata o una linea retta o simili. E poi triangolo, troppo, potrebbe avere stato orientato in qualsiasi numero di modi. Così, in breve, anche con qualcosa che si sguardo e siete come, wow, così semplice, un bambino potrebbe disegnare questo, anche non in realtà, a meno che non sei super, super persuasiva e dire al computer esattamente cosa fare. Quindi, se potessimo, se avete un altro foglio di carta, andiamo provare questo ancora una volta. E ho intenzione di dare una Victoria altro esempio sullo schermo qui. E ancora, non girare intorno e non guardare le diapositive. E darò lei un momento di pensare a come descrivere questo. Non lasciare che vedono la paura nei tuoi occhi. [RISATA] E di nuovo, questa volta leva alcune di queste take away e cercare di ottenere quasi tutti almeno la risposta giusta. PUBBLICO: OK, prendere un pezzo di carta, guardare nel mezzo di quel pezzo di carta. Nel mezzo di quel pezzo di carta, disegnare un cubo. [RISATA] DAVID MALAN: Che cosa abbiamo imparato? Eravamo così vicini. OK, ripetere se si potesse, per tutti. AUDIENCE: Nel mezzo del pezzo di carta, disegnare un oggetto, che si presenta come un cubo. DAVID MALAN: OK, questo è tutto si arriva a lavorare. Permettetemi di essere analitico e non tanto critica, ma per rendere la rivendicazione che Victoria sicuramente sembra pensare a molto astrazioni di alto livello, che non è irragionevole. Perché altrimenti, saremmo tutti essere abbastanza disfunzionale, se dovessimo essere sempre così precisi con tutto ciò che facciamo nel mondo. Ma dire andare al I middle-- Pensavo che fossimo su una buona pista così lì, come andare al bel mezzo della pagina, e quindi disegnare un cubo. Quindi lei sta pensando a astrazioni, perché lei è ancora la visualizzazione ciò che è sullo schermo come in effetti un cubo. Ma ci sono così tante opportunità per l'interpretazione lì. E infatti, ci sono così tanti altri modi si potrebbe esprimere questo, che mi propongo in un attimo. Quindi qui abbiamo una incarnazione di colui whoops-- un'Immagine-- incarnazione del quadro, quindi un poco tridimensionalità ad esso, che è bello. Qui è un altro, dove si ha la stesso, anche se è una specie di un cubo aperto. Alcune persone hanno preso un po ' più piatta, bidimensionale. E va bene. Quindi c'è, infatti nel centro del foglio. Questo penso che sarete come, perché se andiamo qui, questo è quello che stava descrivendo. Così ora, mi permetta di proporre in quale altro modo potremmo descrivere questa situazione. Indietro nel giorno, uno dei più modi più comuni per imparare a programmare è stato quello di scrivere codice, scrive linee di istruzioni, che controllavano un po ' tartaruga sullo schermo. Logo e altre varianti di questo era il nome della lingua. E la tartaruga viveva in un mondo. Quindi supponiamo che questo rettangolare lo spazio è il suo mondo. E si dovrebbe iniziare assuming-- I Non so davvero come disegnare tartaruga, quindi cerchiamo di fare in questo modo. E poi lui ha una conchiglia e poi magari alcuni piedi. Così si potrebbe avere questo piccolo personaggio sullo schermo. E l'oggetto di questa linguaggio di programmazione era quello di costringere la tartaruga andare su, giù, sinistra, destra e di mettere la sua penna o ritirare la sua penna su, in modo da poter effettivamente disegnare sullo schermo in questo mondo rettangolare molto piatta. Allora, dove ho pensato che si potrebbe andare, e dove si dovrebbe prendere in considerazione le immersioni fino a quando si descrive mentalmente istruzioni più in generale, Vorrei affermare, è mettere la vostra penna nel middle-- e ci arriveremo eliminare il tartaruga, perché non posso davvero tenerlo disegno molto bene. E ora, in quale altro modo poteva Dico disegnare un cubo? Beh, si potrebbe dire qualcosa di simile pareggio una linea diagonale est, per esempio, o con un angolo di 45 gradi verso l'alto. E che potrebbe mi hanno ottenuto qui. E sono abbastanza lontano da un cubo. Ma ora, potrei dire qualcosa come girare di 90 gradi a sinistra e tracciare una linea di uguale lunghezza nord-ovest. E potrei continuare con le indicazioni simili. E non sarà facile. E, francamente, abbiamo probabilmente sarebbe sono qui da cinque minuti. Ma forse avremmo avuto la possibilità di qualcosa che, alla fine della giornata, finisce per essere un cubo, ma noi tuffato all'interno di quella astrazione di farlo in un momento così bassa livello che non si può davvero vedere che cosa si sta facendo fino a quando l'intero cosa è in realtà lì sulla pagina. E così questo è un principio generale, ancora una volta, di programming-- questa idea di astrazione. E 'così meravigliosamente potente, perché ancora una volta, ha appena detto, disegnare un cubo, che tutti ci sarebbe praticamente Grok molto rapidamente. Vorremmo solo capire, OK, disegnare un cubo. Potremmo non conoscere l'orientamento, così abbiamo potuto essere un po 'più preciso, ma possiamo immaginare in generale o sanno cosa sia un cubo è. E questo è utile, perché se ogni volta che si sedette come programmatore presso la tastiera per scrivere il codice, se si doveva pensare a tale un basso livello, nessuno di noi avrebbe mai fare niente. E certamente, nessuno di noi godere il processo di scrittura del codice. Sarebbe come scrivere in 0 e 1 di, che francamente non era molto tempo fa gli esseri umani stavano scrivendo codice 0 e 1.. E siamo arrivati ​​molto rapidamente con questi languages-- livello superiore C ++ e Java e altri. Quindi proviamo questo ancora una volta solo per capovolgere i tavoli, in modo che tutti noi avere la possibilità di pensare in piuttosto stesso modo. Possiamo avere un altro volontario questo tempo a venire fino al bordo e disegnare, Non recitare? Sì, ok. Ben, vieni su. E, Ben, in questo caso, una volta che affrontare il consiglio, non guardare a sinistra, non guardare a destra. Solo fare ciò che la vostra colleghi qui ti dicono. E per tutti gli altri nel stanza, ora sei il programmatore. E 'il computer. E l'immagine che ho scelto qui in anticipo è questo qui. Stanno solo-- stanno pensando di una battuta divertente è tutto. Così si fa qualcuno vuole volontariato la prima istruzione o dichiarazione che dovrebbe La penna di comando di Ben? E lo faremo insieme, forse un'istruzione da ogni persona. Mi dispiace? PUBBLICO: Disegnare un cerchio. DAVID MALAN: Disegnare un cerchio è la prima cosa che ho sentito. PUBBLICO: Sulla parte superiore. DAVID MALAN: Sulla parte superiore. OK, siamo in grado di farvi eliminare, annullare. E ora, qualcun altro. Dan, vuoi essere comodi offrendo l'istruzione successiva? PUBBLICO: Certo, disegnare il centro del fondo del cerchio, con un small-- un po ' piccolo spazio da quella, tracciare una linea retta fino a tre quarti della strada verso il basso la scheda una leggera angolazione a sinistra. DAVID MALAN: Good. PUBBLICO: Angolo Leggera. DAVID MALAN: Undo, Control-Z. OK. Andrew, si vuole offrire la prossima istruzione? PUBBLICO: Certo. Dal fondo di quella linea, un ulteriore lieve angle-- whoops-- forse circa un terzo della lunghezza [INAUDIBLE], leggera angolazione verso il basso e come un terzo della lunghezza di [INCOMPRENSIBILE]. Quindi sì, da quel punto, disegnare una linea un terzo della lunghezza del precedente linea più a sinistra. DAVID MALAN: Che OK? Retta, va bene? OK, Olivier, vuoi per offrire la prossima? PUBBLICO: [INCOMPRENSIBILE] dal inferiore del cerchio, [INCOMPRENSIBILE]. Disegnare sul lato destro della strada di [incomprensibile] centimetri. [RISATA] DAVID MALAN: Penso che si sta andando a necessario convertire questo è pollici qui. PUBBLICO: Stop. [RISATA] DAVID MALAN: OK. [? Ara,?] Vuoi per offrire la prossima? PUBBLICO: Disegnare un [INAUDIBLE] la parte superiore del [INCOMPRENSIBILE] lo stesso. [INAUDIBLE] cerchio, disegnare al [INAUDIBLE] e disegnare [INCOMPRENSIBILE]. DAVID MALAN: OK, non più disfare. Facciamo uno o due più istruzioni. Chris, si vuole offrire uno? AUDIENCE: In fondo del circolo, [INCOMPRENSIBILE] tracciare una linea slopping pari verso il basso a sinistra [INCOMPRENSIBILE]. DAVID MALAN: OK. Andrea? Abbiamo did-- Karim? PUBBLICO: A partire dalla linea di destra, alla fine della linea di sinistra, il fondo, si sta andando ad andare a destra su la stessa lunghezza di quella linea sei su, disegno a il diritto [INCOMPRENSIBILE]. [INAUDIBLE] gradi, in modo da [INCOMPRENSIBILE] gradi sul lato destro. DAVID MALAN: Va bene. Soffermiamoci. Non girare ancora intorno. Soffermiamoci, e andiamo provare un altro tentativo prima di rivelare a Ben quello che ha il disegno. Si può mescolare Ben a la destra- sopra o addirittura, No, diciamo solo darvi un'altra scheda, ancora meglio. Così sarebbe qualcuno ora vuole prendere più dell'approccio che Victoria ha preso in precedenza, in cui parliamo in un livello superiore di astrazione e in un periodo o due descrivono a Ben cosa disegnare senza entrare le erbacce, per così dire, a questo livello inferiore? Victoria. [RISATA] PUBBLICO: Disegna una figura di un uomo a piedi. E le sue gambe e le braccia devono essere il lato destro. DAVID MALAN: OK, questo è tutto quello che si ottiene. Tutto ok. Perché non rivelare a Ben quello che ha fatto. Quindi un applauso. Questo è stato il più difficile, forse. Così, anche se stiamo parlando in termini abbastanza stupide circa appena disegno le immagini, si spera può davvero apprezzare il grado di espressività che potrebbe essere necessario per raccontare un computer cosa fare. Ed infatti, il fatto che Ben era in grado di disegnare questo così rapidamente è una sorta di testamento di utilizzare un lingua, forse un livello superiore versione di inglese, che gli permette usare solo le parole, o sentire parole da Victoria, che gli consentono questi abstractions-- solo disegnano Una figura a piedi al destra- sopra quella sorta di ha un significato semantico in modo che non sia quasi evidente quando sei solo dicendo, mettere la penna verso il basso, disegnare a destra, disegnare a sinistra. E così anche questo è molto comune in programmazione. Questo sarebbe dire di essere come un linguaggio molto a basso livello, la programmazione a 0 e 1 di se si vuole. E questo sarebbe un livello superiore linguaggio di programmazione in Java, o qualcosa di simile. Un po 'di un semplificazione eccessiva, ma questo è la sorta di emotivo sensazione che si prova quando utilizzando un tipo di cosa o l'altra. Un po 'di frustrazione qui dalla necessità tale precisione, ma la per essere un po 'più ampia con l'interpretazione qui. Ma, naturalmente, insetti può derivare. Se vuoi a home-- noi non fare questo in class-- ma se si desidera portare questa casa, Ho pensato che sarebbe tuffarsi in questa. Quindi, se vuoi giocare a questo gioco con il vostro altro significativo o bambini o simili, si potrebbe godere anche quello. Quindi cerchiamo di andare avanti e guardare a un ultimo cosa qui per il pensiero computazionale. E questo ci porta a John Oliver, non per la clip si potrebbe avere visto la notte scorsa, ma per una questione un po 'recente. Alcuni mesi fa, la Volkswagen ha preso un bel po 'di critiche per quale motivo, se si sa? Che cosa hanno fatto ad ottenere nei guai per? Sì, così si emissions-- sono state cercando di battere le emissioni test di avente essenzialmente la loro automobili inquinano l'ambiente meno quando erano in fase di sperimentazione la propria auto e inquinare l'ambiente più quando non erano in fase di test le auto. E ciò che è sempre più interessante in tutto il mondo, come si può avere inferito dalle discussioni su ciò che è like-- it-- CarPlay, software di Apple per le auto ed il fatto che molti di noi sempre più avere schermi touch nelle nostre auto, c'è una quantità spaventosa di software nel popolo di macchine oggi, che apre francamente un intero barattolo di vermi quando si tratta di sicurezza e di rischio fisico. Ma per oggi, facciamo concentrarsi solo su ciò che è coinvolti nel software di scrittura che avrebbe potuto gamed sistema. Per la definizione del problema, per chi non conosce, diamo uno sguardo a John Oliver. E per chi ha familiarità con il problema, diamo un'occhiata a esso in una lente di divertimento tramite John Oliver pure. Così mi ha colpito il gioco su questo, ho pensare, a tre minuti di introduzione. Accidenti. [RIPRODUZIONE VIDEO] -Automobili-- DAVID MALAN: Ovviamente, su YouTube, it's-- - --I personaggi più intelligenti il film Fast and Furious. Questa settimana, casa automobilistica tedesca Volkswagen si è trovata nel mezzo di uno scandalo di proporzioni potenzialmente criminali. -Volkswagen Sta preparando per miliardi in multe, possibili accuse penali per i suoi dirigenti, come l'azienda si scusa per rigging 11 milioni di auto per aiutarla a battere le prove di emissione. modelli diesel sono stati progettati -Certain con un software sofisticato che Informazioni utilizzato, compresa la posizione del volante e del veicolo velocità, per determinare la macchina era in fase di test delle emissioni. In base a tale circostanza, il motore ridurrebbe le emissioni tossiche. Ma la macchina era attrezzata per bypass che quando è stato guidato. Le emissioni sono aumentate da 10 a 40 volte superiori ai livelli accettabili di EPA. -Wow, Da 10 a 40 volte maggiore della EPA consente. Questa è la cosa peggiore Volkswagen ha mai fatto, è qualcosa che si potrebbe dire se che non avevo mai sentito parlare della Seconda Guerra Mondiale. Ma forse il segno più sicuro di come molti problemi Volkswagen è in, è che le persone a molto top hanno dimesso. Il CEO è dimesso il Mercoledì, dopo rimescolando per fare controllo dei danni, dicendo che era infinitamente dispiaciuto, che sembrava grande fino a quando si è scoperto gli dispiaceva solo il 10% ma aveva truccato la sua bocca per gonfiare artificialmente il suo sorriness. E nel frattempo, di Volkswagen US capo aveva scuse di suo. -let Di essere chiari su questo, la nostra società è stata disonesta. E nelle mie parole tedesche, abbiamo hanno completamente avvitato. -Sì, Ma completamente avvitata up non sono opere tedesche. E la lingua tedesca ha molte belle frasi per descrivere situazioni come questa, come ad esempio [tedesco], che significa grosso modo, la tristezza che deriva da bugie legate al mercato, o [tedesco], che si traduce come vergogna quelli che coinvolgono il padre nuvole di benzina. E 'una bella lingua. Si naviga appena fuori la lingua. E, a proposito, mentre quello dell'uomo scusa può essere sembrata sincera, vale la pena notare che stava parlando ad un party di lancio ufficiale per il 2016 Volkswagen Passat, il che significa che a breve dopo aver detto dispiaciuto, ha detto questo. si -Grazie molto per essere venuti. Godetevi la serata. Fino successivo è Lenny Kravitz. [RIPRODUZIONE DI BRANI MUSICALI] -OK, OK, che termina la vostra scusa con accanto Lenny Kravitz non lo fa urlare la contrizione sobrio. Si urla, abbiamo chiesto Bon Jovi, e lui ha detto di no. marchio Volkswagen ha stato gravemente danneggiato. E, francamente, il loro nuovo annuncio campagna non è esattamente aiutando. - [Tedesco], noi di Volkswagen vorremmo di scusarsi per voi ingannare con i nostri veicoli. [FINE RIPRODUZIONE] DAVID MALAN: Quindi questo è stato un modo indiretto di-- sorry-- questo era un modo indiretto di introdurre un problema fondamentale in software, che è che si necessario rilevare determinate condizioni. E così la questione a portata di mano qui è, come fa una macchina potenzialmente, come attuato nel software da questi programmatori, rileva che in realtà è in fase di test? Quindi, per essere super chiaro, quello che stavano facendo era, in ambienti in cui i programmatori capito la vettura stava comportando testato, hanno in qualche modo fatto la macchina emette meno emissioni, meno emissioni, fumi in modo meno tossici e simili. Ma quando è normalmente guida su strada, sarebbe solo emettono tanto inquinamento come si voleva. Così come potremmo scrivere il pseudocodice per questo algoritmo? Come potremmo scrivere lo pseudocodice per il software in esecuzione in macchina? Insomma, in poche parole, si riduce a qualcosa di simile. se in fase di test, emettono meno. altro emette più. Ma questo è un po ' troppo alto livello, giusto? Proviamo a fare immersioni in quanto a ciò che questo l'astrazione di essere mezzi testati. In altre parole, anche se non si sa nulla di automobili, che tipo di domande potreste chiedere, al fine di determinare se stai fase di test, se sei la macchina? Quali caratteristiche potrebbe essere presentare se una macchina è in fase di test? PUBBLICO: Apparecchiature per il test. DAVID MALAN: attrezzature di prova. Quindi, se l'apparecchiatura di prova nelle vicinanze, quindi emettono meno. Così ho potuto immaginare attuazione che con qualche tipo di telecamere o la rilevazione di ciò che è intorno a voi. E lasciate che propongo, che appena si sente troppo complicato di avere in realtà supplementare hardware solo per questo scopo. PUBBLICO: Se siete in parco, se la cappa è aperto. DAVID MALAN: In parco o cofano aperto, in modo che è buono. PUBBLICO: E macchina in funzione. DAVID MALAN: e questo è un po ' più concrete-- e auto da corsa. Quindi questa sarebbe la congiunzione di un alcune condizioni differenti, se si vuole. Quindi, se l'auto è nel parco, e anche se questa è una cosa molto meccanico in genere, ho potuto immaginare software di scrittura, soprattutto perché non c'è spesso una luce là in questi giorni, Potevo immaginare che ci sia software in grado di interrogare la shifter o no quello, siete nel parco, sono te in auto, si è al contrario. E posso tornare un rispondono che è sia sì o no a questo tipo di domande. E così ho potuto probabilmente anche rispondere una domanda simile, è il cofano aperto. Forse, c'è qualche tipo di sensore che o mi restituisce un 1 o 0, vero o falso, il cofano è aperto. E poi auto da corsa, ho potuto rilevare che in qualche modo attraverso quale meccanismo? Come, la macchina è in esecuzione, ho potrebbe rilevare che è su, avrei potuto rilevare in qualche modo che la vettura è in movimento? Pubblico: RPM. DAVID MALAN: Sì, quindi non c'è sempre che l'ago che ti dice quanti giri al minuto le ruote stanno vivendo. E così ho potuto guardare quella. E se non è 0, che probabilmente significa che la vettura è in movimento. Ma dobbiamo essere un poco attento lì, perchè-- cerchiamo di semplificare questo-- se abbiamo appena detto, se vettura in movimento, noi non vogliamo emettere poco meno, vogliamo che se l'auto è in esecuzione ed è in fase di sperimentazione. Quindi ci sono pochi altri Ingredienti che la gente hanno ipotizzato il software sta facendo, perché assente il codice sorgente, si può solo una sorta di dedurre dal effetti fisici della macchina su ciò potrebbe essere in corso sotto la cappa in software. Quindi, se auto corsa e forse, per esempio, le ruote posteriori non si muove, Potrebbe questo essere indicativo di una specie di test? Quello che sto suggerendo qui? Sì, forse, è su una di quelle cose a rulli, dove come le ruote si stanno rivolgendo nella parte anteriore o nella parte posteriore, a seconda che si tratti di ruota anteriore o trazione posteriore, quindi la metà delle ruote sono in movimento, ma il altri due non sono, che è una situazione strana nel mondo reale. Se si guida sulla strada, che non dovrebbero accadere. Ma se siete in un magazzino su una sorta di sistema di rulli, che potrebbe davvero accadere. Credo che la gente anche proposto che forse, Se l'auto è in esecuzione e dello sterzo ruota non si muove, che Anche potrebbe essere un segnale, perché questo è ragionevole per come un rettilineo su una strada. Ma anche allora, l'uomo è probabilmente spostarlo un po 'o certamente over pochi secondi. Oppure il corso di un minuto, le probabilità sono che non è sta per essere fissata in esattamente nella stessa posizione. In altre parole, può prendere sottrazione, sei in fase di test, e abbattere tale funzionalità in questi ingredienti componenti. E questo è veramente ciò che Volkswagen Gli ingegneri hanno fatto in qualche modo. Hanno scritto software coscientemente rilevare se l'auto è in fase di test, di conseguenza emettono meno, altro emettono nel solito modo. E il problema anche qui, è che il software non è qualcosa che si può veramente vedere a meno che si ha la cosiddetta codice sorgente. Quindi ci sono due diversi tipi di code-- almeno due tipi differenti di codice nel mondo. C'è qualcosa che si chiama fonte codice, che non è dissimile da quello abbiamo scritto, il codice sorgente. Questo è il codice sorgente scritto in un linguaggio chiamato pseudocodice, che è solo qualcosa di inglese-like. Non c'è definizione formale di esso. Ma C e Java, C ++, quelli sono tutti i linguaggi formali che, quando si scrive in loro, quello che hai è un file di testo contenente il codice sorgente. Ma c'è anche qualcosa in mondo chiamato codice macchina. E codice macchina, purtroppo, è solo 0 e 1.. Così codice macchina è quello che macchine comprendono, naturalmente. Il codice sorgente è ciò che gli esseri umani capiscono. E generalmente, ma non sempre, c'è un programma che un programmatore utilizza che prende origine codice e lo trasforma in codice macchina. E questo programma è generalmente detto compilatore. Così il vostro ingresso è il codice sorgente, l'output è codice macchina, e il compilatore è un pezzo di software che fa quel processo. Quindi, questo in realtà le mappe ben al i nostri ingressi, algoritmi, uscite. Ma questo è un'incarnazione molto specifico di quello che vuol dire che, anche se si possiede uno di Volkswagen auto che è colpevole di questo, non è come si può solo aprire la cappuccio o aprire il manuale dell'utente o cercare il codice sorgente, perché quando raggiunge l'auto nel vialetto, E 'già stato convertito in 0 e 1.. Ed è molto difficile, non impossibile, ma molto difficile da raccogliere molto di nulla da solo guardando il alla base di 0 e 1 di. Così si può capire, in ultima analisi, se si capisce come una macchina operates-- Intel inside-- se si capisce l'architettura Intel, ma è molto che richiede tempo. E anche lì, si potrebbe non essere in grado di vedere tutto che il codice può realmente fare. Tutte le domande su questo o questo tipo di processo, più in generale? E in realtà, siamo in grado di legare questa discussione alla discussione di ieri di Apple. Anche questo è il motivo per cui l'FBI non può semplicemente andare a cercare nel telefono del sospetto e di trovare le righe di codice, per esempio, che consentirà il codice di accesso o abilitare che il ritardo di 80 millisecondi. Perché per il momento si tratta di il compagno di iPhone, E 'già stato convertito a 0 e 1.. Bene, cerchiamo di mettere in pausa qui per il nostro guarda pensiero computazionale. Perché non prendiamo una pausa di 15 minuti. E quando torneremo, avremo dare un'occhiata a programmazione stesso e iniziare a mappare alcuni di questi concetti di alto livello un trasferimento reale, se giocoso, linguaggio di programmazione.