[RIPRODUZIONE DI BRANI MUSICALI] Questo è CS50-- Harvard l'introduzione di Università per l'intellettuale aziende di informatica e l'arte della programmazione. E il mio nome è David Malan e Stavo pensando di questa mattina, è stato incredibilmente 20 anni oggi dal momento che l'ultima seduta in cui voi ragazzi fare ora. Era il 1996. Ero al secondo anno, e stavo prendendo CS50 per la prima volta. E io non avevo ancora ottenuto il coraggio a prendere io stesso anno da matricola, in parte a causa del tempo. informatica a me è stato un po 'come, meh. Ero un po 'di un geek in crescita up, ma non ho davvero avere alcuna intellettuale interesse per quello che sembrava di essere solo un insieme di la gente di programmazione per tutto il tempo. E avevo paura di essere onesti. Il corso e informatica più generalmente avuto e in una certa misura, ancora ha questa reputazione di un campo per attenzione, se non altro perché tanti di noi non hanno familiarità con essa e sicuri di esso. E in realtà non era fino a quando ho fatto acquisti questa classe che sophomore fall-- e anche allora, ho solo iscritto perché il professor-- uno dei miei primi mentori, Brian Kernighan ora a Princeton-- mi ha permesso di prendere il passaggio di classe sicuro. E infatti, ecco perché oggi permettiamo e incoraggiamo agli studenti di prendere questa classe sat / UNSAT. E solo allora, dal fine del semestre mi sono reso conto come, wow, questo non era un campo così poco familiare. Infatti, questo era un molto potente campo, e più eccitante, in particolare in seguito, come ho preso corsi di Arte Drammatica 101 e latino A e poi alla fine archeologia anno di dottorato, ho davvero iniziare a vedere il intersezioni di questo campo, calcolatore la scienza, con le discipline umanistiche, scienze naturali, le arti, la medicina, e simili. Ed è quello che è solo così accurata circa informatica in ultima analisi, come ci auguriamo che see-- è la sua applicabilità a questi altri campi, e come si può prendere un po 'di oggi e il semestre di le idee e le competenze pratiche di nuovo al vostro proprio dominio, ed effettivamente esplorare questa intersezione delle arti liberali e le scienze. Quindi, il 73% di voi, se l'ultima anno è alcuna indicazione, non hanno mai seguito un corso CS prima. Quindi se, come me, siete sensazione un po ' paura, o francamente non sei davvero sicuro perché sei ancora qui. Forse solo un po 'di seguito amici oltre a Sanders adesso. Questo è totalmente bene. L'obiettivo è quello di agganciare si e rassicurarvi che se si guarda a sinistra ea destra, si sta andando a vedere i compagni di classe con come poco o tanto esperienza che lei stesso potrebbe avere. E in effetti, noi condivideremo alcune statistiche più tardi di oggi Quanto a quello che i dati demografici dei la classe tipicamente assomigliare. E come ha aggiunto reassurance-- e questo ci voglio dire da quando ho assunto nel corso alcuni anni fa, si era in programma del corso è questo-- che ciò che in ultima analisi, le questioni in questo corso non è tanto dove si finisce up relativi ai vostri compagni di classe, ma dove in settimana 11, la fine del semestre, finiscono per rispetto a te stesso in settimana 0, che è dove siamo qui oggi. E questo è quello che ho capito tanti anni fa. E so che un sacco di classi dicono questo, ma è particolarmente vero in informatica. Alla fine della giornata, questo campo è poco familiare come lo era per me e potrebbe essere a voi, è davvero solo di problem solving. E come tale, non ha questa applicabilità per ottenere altri campi. Ed infatti, se abbiamo provato di distillare ciò che questo significa, questo è la soluzione dei problemi nella sua essenza, oserei dire. C'è input-- così qualunque cosa è che si sta cercando di risolvere. Non c'è uscita, che è si spera la soluzione a questo problema. E poi, come faremmo dire in informatica, c'è questa scatola nera in mezzo che non necessariamente devono preoccuparsi di come funziona. Tu stesso alla fine potrebbe implementare cosa c'è dentro quella scatola. Ma per scopi di oggi e di più in generale nella vita, tutto ciò che interessa è che questi problemi vengono risolti. E che questo corso è in ultima analisi, circa sta esplorando l'intersezione di questi ingressi e uscite, e questi cosiddetti algoritmi, come vedremo tra poco, che implementano ciò che è sotto lì, la cappa. Ma questi ingressi e questi outputs-- cosa vuol davvero dire? Ebbene, alla fine della giornata, abbiamo bisogno un modo di rappresentazione delle informazioni. Questo è particolarmente vero in un computer, che come fantasia e complesso come potrebbe sembrare, è un dispositivo abbastanza stupida. Prende electricity-- se da un cavo o una batteria come input-- e quindi produce alcuni risposte preprogrammato sullo schermo. Ma come si arriva da iniziare a finire lì? Ebbene, che cosa è un problema da risolvere? Beh, forse potremmo, a all'inizio di ogni semestre, cercare di prendere presenze in una stanza come questa. Così potrei fare come uno, due, tre. O forse, se l'ho fatto per una sorta di tenere traccia di myself-- per tenere traccia di things-- Potrei correre rapidamente fuori dita. Così potrei solo fare hash marks-- persona, due, tre, quattro, cinque, sei, sette otto. E tutti noi abbiamo probabilmente fatto questo, se sulle mani o su un foglio di carta. E questo è in realtà solo qualcosa chiamato notation-- unario dove se si dispone di una sola lettera nel vostro alfabeto, uno o hash mark in questo caso, per ogni ingresso che si desidera contare, è necessario mettere giù uno di questi letters-- uno di questi segni. Tutto ok. Questo è tutto bello e buono e non tutto ciò che complicato. Ma i computer non sono tutti che molto più complicato. In effetti, la maggior parte di voi probabilmente sapere anche se non hai veramente considerato che cosa questo significa, che i computer capiscono solo zeri e ones-- il cosiddetto sistema binario. Noi esseri umani, al contrario, sono così molto più sofisticata misura come ci fa capire zeri attraverso nove. Ma anche se binario è, in prima sguardo, non tutto ciò che familiare, si scopre che è proprio come i sistemi e le idee che già conosciamo. Così, per esempio, prendere in considerazione questo. Questo è solo una sequenza di simboli. E tutti voi, quando guardando, probabilmente pensare 123-- nulla davvero interessante lì. Ma perché è questo numero, 123? Questi sono solo glifi il screen-- solo modelli che qualcuno potrebbe aver disegnato o digitato. Ma se siete come me, ricordano probabilmente dalla scuola elementare che ci sono specie di colonne o posti qui. C'è posto e del si posto dieci del luogo e il centinaio di. E la ragione per cui questo è 123 e non solo un modello di tre simboli è perché, ovviamente, se avere uno collocati centinaia, fate i conti di 100 volte uno, e poi due al posto dei dieci del. Ecco, questo è 10 volte 2, e poi tre in il posto del uno e questo è 1 volte 3. E quando si aggiungono tutti coloro up, di Naturalmente, si ottiene 100 più 20 più 3. Così abbiamo iniziato con solo un modello di symbols-- un alphabet-- ma poi abbiamo mappato significato su esso per mezzo di queste colonne. Beh, si scopre che computer non sono realmente così diverso da te e me. Ma invece di utilizzare potenze di 10, così speak-- 1, 10, 100, 1000, 10.000 posto e così forth-- in realtà basta usare poteri di 2-- così uno, 2, 4, e poi se mettiamo più cifre, 8, 16, 32, 64, 128, e così via. E così questo è come un computer rappresenterebbe il numero 0, proprio come noi umani. 0, 0, 0-- e probabilmente si può intuire quale schema di zero e uno, se un computer può solo parlare 0 o 1-- cosa modello sta per rappresentare il numero che gli esseri umani sanno come 1? Yeah-- 0, 0, 1. Tutto ok. Così 0, 0, 1 è il modo in cui rappresentiamo 1, per cui si potrebbe essere inclini poi per rappresentare il numero 2, se avete luogo le quattro del luogo e le due di come l'unico luogo, si potrebbe dire, beh, se abbiamo avuto un 1 in di un unico luogo, e ora vogliamo contare fino a 2, si potrebbe fare questo e lasciare che questo è uno zero. Ma naturalmente questo non è il modo il sistema decimale funziona sia. Se si mette una cifra in entrambe le colonne, hai avuto modo di fare la media aritmetica. Allora, cosa ha fatto il numero che accidentalmente solo rappresentare? Quindi è 3, perché 2 volte 1 più 1 volte 1, naturalmente, ci dà tre. Quindi questo sarebbe due. Il bit sorta di lancia, per così dire, come 0 diventa uno, molto simile a un 9 ruoli oltre e diventa un 0 quando si trasporta il 1. Questo allora sarebbero tre naturalmente. Four-- un'altra cosa interessante accade, dove quelli rotolano e si portano il 1, per così dire. Quindi questo, naturalmente, è 4. Ma se l'avanzamento veloce ora, qual è il più grande numero di andare essere che un computer può rappresentare? Quindi è solo sette in questo caso, giusto? Perché avete un uno su quattro, uno in due, uno in uno. Ecco, questo è 4 più 2 più 1. In modo che ti dà sette. E in effetti, sarebbe sembrare a prima vista che i computer possono contare non superiore a questa. Ma questo naturalmente non è vero. Che cosa ci fanno gli esseri umani quando vogliamo a contare più alto come 999? Basta portare il e proprio aggiungere una quarta cifra a sinistra. E così in effetti abbiamo potuto. Potremmo avere un otto di luogo e posto di un 16 °, e il luogo di un 32 di, 64, 128-- e può solo continuare ad andare avanti fino all'infinito. Così questi zeri e ones-- il cosiddetto system-- binario sono ciò che un informatico sarebbe generalmente chiamare un po ', o cifra binaria. Ma ora, come si arriva dalla concetto o la grafica di queste cose a un computer vero e proprio? Ci sembra di essere saltare un passo qui. Ebbene, l'unico input alla fine del giorno, al mio portatile qui è questo flusso di energia elettrica. Anche se è stato un lungo tempo da quando hai pensato di o mai pensato come l'elettricità funziona, c'è elettroni che scorre in o fuori, e questo è il mio tipo di input. Quindi, se questo è tutto ciò che siamo ricevendo come input qui, cosa possiamo fare con queste informazioni? Beh, si potrebbe pensare ad uno zero come solo una mancanza di energia elettrica. Nulla è flowinw, nulla è in movimento, non sta succedendo niente. Questo è solo il default state-- zero. Ma se c'è energia elettrica che scorre, perché non è vero solo in modo arbitrario, ma a livello globale coerentemente, chiamare che uno. Così semplicemente sprovviste di alimentazione, abbiamo uno zero, sì il potere, abbiamo un tra-- nessun potere, sì il potere. E in questo modo, utilizzando qualcosa più fisico o elettronico iniziamo a implementare questo concetto di qualcosa sia essendo uno o uno zero. In effetti, potremmo farlo qui. Non in questo caso, ho tre, ma otto lampadine, ciascuna delle quali dispone di un proprio interruttore. E così, se ho voluto rappresentare il numero sette qui, Potrei girare su questi tre lampadine. E in effetti, all'interno di il mio computer è milioni, miliardi di cose che sono solo più piccolo di quello, detti transistori, interruttori, che basta accendere e spegnere. Quindi questi sono relativamente big-- interruttori big-- dentro la mia laptop-- sono molti, molti, molti, molti altri interruttori. Ma tutto quello che fanno è esattamente che-- girare qualcosa, girare qualcosa fuori. E come tale, un computer può rappresentare, con quei milioni o miliardi di transistor, e un sacco un sacco di zero e uno. E c'è ancora un altro hardware che consente di memorizzare le informazioni a lungo termine, in modo che quando si tira il spina, non si perde. Ma questa è una storia per un altro giorno. Quindi cosa possiamo fare con questi bit? Potremmo solo per prendere la pressione di me-- Potrebbe qualcuno vuole venire qui e offrire una demo? Ho visto la prima volta questa mano. Come ti chiami? Maday: Maday. DAVID MALAN: Maday, vieni su. Piacere di conoscerti. Maday: Piacere di conoscerti. DAVID MALAN: Da questa parte. Non avrò a labbro in su. Tutto ok. Così qui, abbiamo, notice-- uno, two-- faremo di modifica che fuori-- uno, due, quattro, otto, 16, 32, 64, 128. Questo è intenzionale. C'è otto bit qui-- binario zeri digits-- e uno. E un bit è un'utile unità di measure-- non come utile unità di misura su se stessa. Di solito si vuole almeno otto di queste cose, pseudonimo un byte. Quindi abbiamo un byte di bit qui. Quindi, se volessimo sfida con, per esempio, enunciando, in binario, questo valore qui-- 42. Vuoi prendere una pugnalata a che? Maday: [INCOMPRENSIBILE]. DAVID MALAN: Sì, basta premere il piccoli interruttori bianchi di fronte. E si desidera precisare fuori 42, e in palio è questo stress CS50 palla se si ottiene questo. Tutto ok. In modo da avere 32. Stiamo andando ad avere bisogno 42. Ecco, questo è un otto, così che è 40. E eccellente-- molto ben fatto. Grazie. [APPLAUSI] Tutto ok. Così abbiamo ancora una palla antistress. Facciamo così una volta di più, se possiamo. Un altro volontario? palla senza stress, palla senza stress. OK. Nel corso qui in mezzo, vuoi venire giù? Tutto ok. Lo so. Ecco quà. Così i numeri qui-- venire in giù. Come ti chiami? DAVEY: Davey. DAVID MALAN: Davey. OK. Vieni su, Davey. Piacere di conoscerti. E quello che stiamo andando ad avere te spell-- se si poteva indugiare lì per un solo moment-- è il numero 50. Ma, ma, ma, ma, ma, questi sono magneti della scuola elementare per un motivo. Appena ricevuto un po 'più difficile, va bene? C'è ancora otto. Tutto ok. Quindi, che cosa abbiamo in là? Abbiamo 32. Bello. 32 più 16 ci dà 48-- così vicino. E meraviglioso. Congratulazioni a Davey pure. [APPLAUSI] Tutto ok. Così possiamo fare questo per tutto il giorno, e non ottiene tutto che molto più interessante e più impegnativo. Ma questo è davvero il Point-- è come relativamente semplice è, alla fine della giornata, che computer fa per memorizzare le informazioni, memorizzare ingressi ed infine memorizzare o rappresentare queste uscite. Ma i numeri da soli non sono tutto ciò che interessa. Così gli esseri umani, alcuni anni fa, deciso, sai una cosa? Sarebbe bello se i computer non erano solo calcolatrici per l'aritmetica operazioni, ma in realtà potrebbe fare le cose come l'elaborazione di testi, o e-mail, o incarnazioni più moderne di questi tipi di tecnologie. E così il mondo ha deciso arbitrariamente, ma universalmente, che, se si desidera memorizzare la capitale la lettera A in un computer, sai una cosa? Diciamo solo tutti d'accordo per memorizzare qualche modello di zeri e ones-- bits-- che alla fine rappresenta il numero decimale 65. Dobbiamo solo tutti d'accordo su questo. 66 rappresenterebbe B, 67 rappresenterebbe C, e ci sono mazzi di altri modelli di zero e uno, o numeri sottostanti, che rappresenterebbe altre lettere ancora. Quindi, se si tipo di mente assorbire questo per un momento, Ho volutamente messo su da A I, dove H a 72 e mi è 73. Se un computer poi, nel contesto un programma di elaborazione testi o di una e-mail, rivelato sotto la cappa di avere questi modelli di modello bits-- di bit che rappresentano 72, poi 73, poi 33-- Cosa potrebbe significare in quel programma? Quindi ciao, e poi qualcosa. Non necessariamente lo sappiamo, ma anzi 33-- non sulla carta earlier-- era semplicemente un punto esclamativo. Così 72 era H, 73 sono io, 33 accade per essere un punto esclamativo ancora. Ma questo è tutto bello e buono, e infatti oggi, piuttosto che basta usare sette o otto bit, grazie a qualcosa chiamato Unicode in contrapposizione in ASCII back in the day, abbiamo effettivamente in grado di rappresentare ancora di più personaggi interessanti che solo questi originale inglese lettere prevenuto. Ma possiamo anche rappresentare anche le cose più ordinato come i colori. Se hai mai sentito l'acronimo RGB, rosso, verde, blu, che significa solo che un computer in genere utilizza tre set di bits-- un numero di bit che rappresentano un numero per quanto rosso che si desidera, un altro insieme di bit per la quantità di verde che si desidera, e un altro numero fisso per la quantità di blu che si desidera. Così un gran numero significa un sacco di rosso, piccolo numero significa che non rosso. E così questi sono specie dei valori medi qui. Quindi, dammi un po 'rosso, dammi un po' verde, e mi danno un po 'di blu. E se si mescolano i tre tonalità di colore insieme, in questo caso, si ottiene questa tonalità torbida di giallo o marrone. Ma questo modello di otto più otto più eight-- così 24 bits-- sinistra a destra, è come un computer rappresenterebbe quel colore particolare. Ora, questo è solo un punto su uno schermo. Se si guarda davvero da vicino il televisore vostra del computer, vedrete punti o pixel. E se si dispone di una intera griglia di pixel, orizzontalmente e verticalmente, hai delle immagini. E poi se si prende un'immagine e poi lavare mostrare se stessi un'altra immagine, un altro immagine, un'altra immagine, un'altra immagine, veramente veloce, è naturalmente avete film. E così notare da dove siamo partiti. Abbiamo iniziato con questi zero e uno. Abbiamo lavorato da lì a decimale numeri, come li rappresentano. Ora abbiamo lettere dell'alfabeto. Ma in altri contesti aspettare, possiamo usare Ancora qualche bit e rappresentare i colori. Non appena si ha la capacità di rappresentare i colori, si avrà la possibilità di rappresentare fotografie e gif animate e altri tali caratteri sullo schermo. E quando si ha un sacco di immagini che vola dal umana in una sola volta, sembra che le immagini in movimento, e in modo da ottenere video pure. Quindi, utilizzando questi molto semplici primitive fanno noi avere il modo di rappresentare infine tutte queste forme di media. E abbiamo ancora Sottratto e ancora e ancora, fino a quando non ottenere dal livello più basso a questo livello più alto. In modo che ci dà questa idea generale di astrazione. Ma abbiamo iniziato qui. Qui ora, potremmo rappresentare in un computer i nostri ingressi con zero e uno, le nostre uscite in zero e uno, ma ciò che accade dentro la scatola? Ecco dove calcolatore la scienza si fa interessante. Ecco dove realmente portare il menti da tenere per risolvere i problemi. Possiamo ora stabilire, per la resto del semestre, sì. So come funziona binari. Ricordo come ASCII o Unicode-- la mappatura di letters-- opere. E com'è certamente per ragione per cui noi potrebbe rappresentare rosso e verde e blu, e rappresentano multimediale pure. Ma questa è la roba interessante. Questo è ciò che rende qualcuno capace di risolvere i problemi. E un tale problema ci piace fare, anzi, sta prendendo presenze, o facendo questo algoritmicamente. E ancora, potrei farlo. Potrei fare uno, due, tre, quattro cinque, sei, sette, otto nove. E potrei scriverlo giù per tenere traccia di esso. Ma questo è solo come vorrei rappresentare le informazioni. Oppure potrei fare questo faster-- due, quattro, sei, otto, dieci, 12, 14, 16, 18, 20, 22-- ci si sente come due volte il più veloce ma è ancora andando a prendere un sacco di tempo. Ma si scopre, se facciamo leva ancora un altro computer resource-- e in effetti in questi giorni hanno più CPU o il cervello. Si scopre computer può fare un sacco di cose in una volta, e in effetti noi, in questa sala, potrebbe rappresentare esattamente questo. Quindi è un po 'socialmente imbarazzante, ma se si farebbe mi umorismo solo per un processo in tre fasi, per non mi chiedono tutti nel posto lì solo a stare in piedi per un momento. In piedi. Quindi, pensare a te stesso, il numero tra-- in modo che tutti in questa stanza, tranne le persone che non hanno oblige, stanno pensando numero uno. Quindi, questo è il vostro numero di adesso. Questo è il primo passo, o come informatico o di un programmatore tipicamente avrebbe fatto, stiamo andando iniziare a contare da zero. Se il numero più piccolo possibile rappresentare con quelle lampadine è pari a zero, semplicemente lasciandoli il tutto, mi potrebbe anche solo iniziare il conteggio da zero è invece di uno. Ed è quello che scienziati informatici fanno. Così passo pari a zero, alzarsi in piedi e pensare al numero uno. Il passo successivo è questo-- coppia via con qualcuno in piedi e aggiungere i numeri insieme. Meraviglioso. Quindi in questo momento nel tempo, letteralmente tutti i partecipanti sta pensando il numero 2, ad eccezione per una persona strana se abbiamo un numero dispari di persone nella stanza. E ora il terzo passo qui sta per essere questo-- uno di voi deve sedersi. Uno di voi dovrebbe sedersi, e se si sta ancora in piedi, tornare al punto uno. Tutto ok. Tutto ok. Così sempre più persone dovrebbe essere seduti. Si noti che questo ha indotto un loop-- una sorta di ciclo. Alcuni di voi dovrebbe essere goffamente bloccato, andando avanti e indietro tra il passo uno e due, uno e due, uno e due. Va bene. Il nostro primo errore. Ci occuperemo di questo. Tutto ok. Vorrei cercare di stimolare le cose insieme. In teoria, solo una persona è in piedi come tutti continua ad accoppiarsi. Ma mi permetta di accelerare le cose con le persone ancora in piedi. Che numero stai pensando? 46. OK. Andare avanti e sedersi. Voi ragazzi sono ancora in piedi. Chi è ancora in piedi? Che numero stai pensando? OK. Quindi torneremo a voi. Nella parte posteriore? Cos'è quello? 22. OK qualcun altro fino top-- sì? 34. OK. Qui sul mio destra- sopra qui? 132, molto bello. 22? OK. E che è ancora in piedi? Qui? 46, molto bello. 72. Non riesco ancora a lungo in stallo. Sì? 30, piacevole. Qui? 23? 23. E penso che sia tutto tranne voi ragazzi, nessuna pressione. Oh, aspetta. 28? Solo otto. OK. Solo otto. Qui sotto? 30. 23. 24. 18. Questo è il peggior attuazione di questo algoritmo mai. OK. Così chiunque altro? Chiunque altro? OK. Uno di più. 16? OK. 16. Tutto ok. Quindi, se non ho perso nessuno in il bagliore qui, quando ho colpito Enter, vedremo, algoritmicamente, la numero totale di persone a Sanders. Perché ancora una volta, è come se tutti come si sedette, superato il proprio numero off a qualcun altro, a qualcun altro, a qualcun altro, in modo che, in teoria, alla fine, solo uno scomodo persona dovrebbe essere lasciato in piedi. Ma va bene. Abbiamo accelerato le cose manualmente. E 'particolarmente difficile da vedere in questo particolare spazio. E il numero totale di persone pensiamo che ci sono qui è 546. Il numero totale mi è stato consegnato dai compagni di insegnamento, chi l'ha fatto il vecchio scuola di modo lento, era 820. [Ride] [APPLAUSI] Va bene. Quindi sicuramente poi, ci sono questi bug. E va bene. E così ripensare a questo la prima volta qualcosa si scrive non necessariamente funziona. Questo è successo a me qui. Ma andiamo ora considerare come potremmo applicare questa stessa idea di qualcosa si potrebbe avere visto prima, che è questa vecchia tecnologia qui-- scuola una rubrica molto grande. E pensare che questa rubrica ha 1.000 pagine e 1.000 nomi e numeri alfabetico all'interno di esso. Beh, potremmo specie di applicare una simile idea a questo problema molto fisico, solo a me usando. Ho solo un po 'barato sfruttando tutti voi con un sacco di diverse CPU o cervelli esecuzione di qualche algoritmo. Ma se è solo poco vecchio me, posso ancora sfruttare la stessa essenza di un'idea di dividere e conquistare quel problema ancora e ancora, per cui la metà di voi, la metà di voi, metà di voi, metà di voi, teoricamente tenuto seduto, fino a quando ci hanno lasciato, in teoria, con una sola persona. Quindi, in questo vecchia scuola tecnologici, quali non lo facciamo bisogno di questo map-- questo La tecnologia vecchia scuola, potremmo iniziare la ricerca di qualcuno come Mike Smith, una pagina alla volta. E vedo che nessuno, Mike non è qui. Sono ancora nella sezione A. Alla fine, ho trovato io nella sezione B. E questo è un algorithm-- passo-passo le istruzioni. Inizia la pagina di inizio e uno alla volta, cercare Mike Smith. È questo correct-- questo algoritmo o metodo? Sì, è corretto. Se Mike è qui, alla fine Io riesco anche a lui. Ma non è efficiente. È ovviamente molto lento. Quindi posso sfruttare la stessi twosies avvicinano. Posso fare una sorta di due, quattro, sei, otto, 10, 12. E 'due volte più veloce. Ho intenzione di arrivare a Mike più velocemente se lui è lì. È corretto? Sì, ma ho sentito un no little--. Ora ho sentito un no. Sì. C'è un bug potenzialmente. Forse Mike ottiene solo accidentalmente inserita tra due pagine, perché sto volando attraverso questo due alla volta. Così almeno abbiamo bisogno di qualche tipo di correzione condizionale. Ho bisogno di dire, hey, se ho colpito qualcuno il cui nome inizia con T invece di un S, E 'meglio il doppio di nuovo almeno una pagina. Così buggy in un primo momento, ma risolvibile. Ma nessuno di noi stanno andando a cercare Mike Smith attraverso un telefono di 1000 pagine prenotare una pagina alla volta. Che cosa è una persona normale intenzione di fare? Hai intenzione di andare alle S di, se si sapeva dove le S di. Si potrebbe andare o meno a metà o leggermente sbilanciata verso la fine. E guardo qui e Sono nella sezione M. Ma che ne sai su questo problema ora, che non abbiamo necessariamente sappiamo prima con tutti noi stessi solo contando equivalentemente? Beh, Mike è chiaramente andando essere in questa metà del libro se lui è qui a tutti perché è ordinato. E così si può molto dramatically-- [Senza fiato] Lo so. [APPLAUSI] In realtà è molto semplice, se lo si fa lungo la spina dorsale lì. Ma si può poi gettare metà del problema di distanza. Ora, io sono rimasto con la stessa problem-- trovare Mike Smith in un telefono book-- ma ora l'elenco telefonico inizia a M e va a Z, ma è la metà più grande. Ma questo è ciò che è impressionante. Proprio come nella teoria, ragazzi, quando si sedettero tutti solo mezzo alla volta, il problema ha ottenuto la metà più grande, la metà più grande, ancora e ancora. Così è diventato il problema della stesso problema, ma la metà più grande. Ora si tratta di un problema di 250 pagine. Appena mi rendo conto, oh, io sono nella sezione T accidentalmente. Sono andato troppo lontano. Posso buttare che la metà della rubrica via. Ora, io sono fino a un quarto del problema. E si può ripetere, ripetere, ripetere fino a quando, in teoria, sei sinistra con una sola pagina. E se Mike è su quella pagina, Ora posso risolvere questo problema. Ma quanto velocemente ho risolverlo? Nel primo caso, ci ho messo come forse 1.000 passaggi per trovare Mike Smith. Potrebbe aver preso me-- Ho preso l'elenco telefonico e ho iniziato a guardare una pagina alla volta, e Mike potrebbe essere 1.000 pagine dopo. Secondo approccio forse mi porta a 500 punti, perché sto volando attraverso due alla volta. E il terzo approccio, però, è particolarmente potente. Ma prendiamo in considerazione ciò che realmente ha fatto con questo terzo approccio. Avrò quello che chiamerò appena questi qui le istruzioni, uno alla volta. Prendete una rubrica telefonica. Aperto al centro della rubrica telefonica. Guardate i nomi. E poi le cose si fanno un po ' intellettualmente più interessante, se ancora semplice. Se Smith è tra i nomi su quella pagina corrente, poi fare qualcosa in modo condizionale. E 'come un bivio. Chiama Mike. Se Mike è tra i nomi su quella pagina, chiamato Mike. Ma solo fare la linea a quattro se la linea albero, se si vuole, è vero. La risposta a questa domanda è sì. Altrimenti se Smith è prima nel book-- in altre parole, se sono nella sezione M e sto cercando qualcuno per sinistra, allora quello che dovrebbe fare è qualcosa di molto simile. Poi dovrei aprire a metà della metà sinistra del libro. Quindi, andare a sinistra, e poi tornare al passo due. Guardate i nomi lì. Quindi, in altre parole, fare la stessa cosa, ma su un problema che è stato dimezzato. Sai cosa altro? Se Smith è più avanti nel libro sulla base della pagina che sto guardando, aperto al centro del metà destra del libro e poi tornare di nuovo al punto due, else-- c'è una quarta possibilità qui. Mike sia qui oa sinistra oppure a destra o meno. E qui è meglio considerare questo. E infatti, se hai mai avuto il computer solo in crash su di voi, cioè a volte, ma non sempre, il risultato di solo un programmatore umano non realizzando, oh sparare, non c'è In realtà questo quarto scenario. E se non si scrive il codice per gestire questo scenario, a volte non si sa ciò che il computer potrebbe fare. E infatti un programma potrebbe bloccarsi. Ma in questo caso, ho pensato a questo proposito, e ho detto, altrimenti uscire, perché questa è la quarta logica scenario possibile. Ora, facciamo solo aggiungere un vocabolario così abbiamo può iniziare a gettare intorno termini che sono altrimenti abbastanza intuitivo. Tutte le cose che ho appena evidenziato in giallo qui, Sto solo andando al funzioni o delle procedure. Sono solo tipo di azioni. Così pick up, aperto a, guardare a, chiamata, aperto, aperto, quit-- queste sono solo le azioni, o faremo li chiamano più formalmente, funzioni. Nel frattempo, oggi in giallo, Ho evidenziato le cose che-- facciamo solo iniziare a chiamare loro condizioni o rami. Questi sono i punti di decisione in cui si potrebbe andare in questo modo, in questo modo, o qualche altra direzione ancora. Quindi, quelli saranno le condizioni. E ora questo è un po 'più elaborato. Chiamiamo queste domande espressioni booleane, dopo che qualcuno con un cognome Bool. E una espressione booleana è solo qualcosa questo è vero o falso, sì o no. Quindi è la domanda la cui risposta si cura di, in modo da in una condizione fare una decision-- tornare una risposta, e poi andare a sinistra oa destra, o qualcosa del genere un'altra cosa. E poi, infine, questi Linee qui-- risalgono al punto due, tornare indietro al punto two-- Potremmo implementare questa idea in modi diversi. E poi quelli di voi con esperienza di programmazione avrebbe potuto fare o può immaginare di fare questo in modo diverso. Ma per scopi di oggi, e ' solo l'idea che conta. Questo è ciò che induce ci generalmente chiamiamo un loop-- una sorta di ciclo, perché è facendomi fare qualcosa di nuovo. Così ora, facciamo solo in considerazione quanto è buono questo algoritmo è. È corretto. Se Mike nel libro, è uno dei quei quattro scenarios-- ancora e ancora e ancora una volta, lo troveremo. Ma quanto è buono è? Beh, non abbiamo di essere troppo formale qui. Ma facciamo solo localizziamo qualcosa, X e Y, per ottenere un senso della forma di questo problema. Su l'asse x è qui la dimensione del mio problema. E un asse y qui sarà il tempo di risolvere. Quindi forse questo è il numero di pagine. Forse questo è secondi o Pagina turns-- qualunque. Tuttavia si desidera contare è cosa questa immagine rappresenterà. E questo primo algoritmo, sto andando descrivere come solo una linea retta. Se c'è n pagine la rubrica telefonica, allora mi potrebbe prendere come molti come n passi per trovare Mike. Se Verizon o la società telefonica aggiunge un altro pagina il prossimo anno, potrebbe prendere me uno più step-- un'altra unità di tempo per trovare Mike. Quindi c'è solo questo rapporto uno a uno. Si tratta di un pendio linea retta. Nel frattempo, che secondo algorithm-- se sono andare a due a due tempo-- due, quattro, sei, otto, o double-- passando attraverso le pagine di due volte alla volta, due alla volta, è ancora retta. C'è ora un 1-2 rapporto, ma solo un po 'più basso. Quindi, se c'è questo molte pagine sul grafico qui in giallo, che mi potrebbe prendere questa molti passi o secondi, altrimenti è andare a prendere me il doppio sulla linea rossa. Ma la linea verde è il vero asporto. Questo è ciò che generalmente chiamare un registro logorithm-- di n, dove n è il numero di pagine. Ma è la forma che conta oggi, perché non abbiamo di pensare anche a tracciare punti. Pensate a uno scenario estremo. Supponiamo che Verizon domani raddoppia la numero di pagine che guida telefonica, da 1.000 a 2.000. Nel primo algoritmo, I potrebbe perdere un extra di 1.000 passi alla ricerca di Mike, solo perché Verizon ha raddoppiato le dimensioni del libro. Il secondo algorithm-- Potrebbe portami un extra di 500 gradini. 1.000 più pagine, ho andare a due a due tempo-- 500 più passi per trovare Mike. Ma questo terzo algoritmo è una specie di magico. Verizon raddoppia il numero di pagine da 1.000 a 2.000, Ma quanti più passaggi fa mi ci vorrà per cercare per Mike? E 'solo uno, perché posso solo strappare la rubrica una volta di più da un problema 2.000 pagina ad un 1.000 problema pagina, e voilà. Ho preso un morso enorme fuori di esso. E se si va veramente estrema, supporre che la rubrica telefonica società aveva qualcosa di folle come una rubrica 4 miliardi di pagina. Bene quanti passi Potrebbe prendere trovare Mike Smith in 4 miliardi Pagina rubrica telefonica? E 'un grande numero, ma solo 4 miliardi di 2000 a 1000 milioni a 500 milioni, 250 million-- ancora suona come grandi numeri, ma io sono molto rapidamente arrivare a valori più bassi. E infatti, se faccio la matematica a destra, posso dividere solo 4 miliardi da circa 32 volte prima Scendo a uno solo. Quindi, se questo fosse rubrica 4 lungo miliardi di pagine, un grosso problema. In pochi secondi, forse 32 secondi, ho potuto dividerlo a metà e, infine, trovare Mike o concludere che lui non c'è. E questo è l'essenza di un algorithm-- un buon algoritmo. E questo è uno dei obiettivi di una classe come questa, sta cercando di capire come faccio risolvere il problema non solo correttamente, come ho sempre saputo come fare uno pagina alla tempo-- ma correttamente e bene. Come faccio a progettare bene soluzioni ai problemi? Quindi cerchiamo di prendere un momento qui e vi darà un senso ora del CS50 corso itself-- introdurre i membri del personale un paio di corsi. Poco prima di 02:00, faremo prendere una breve pausa in modo che quelli di voi che sono lo shopping può anatra fuori e prendere un guardare qualche altra classe e guardare il resto di questa linea. Ma per ora, mi permetta di introdurre CS50, la classe stessa, e in particolare ciò che è nuovo. Così la scorsa primavera, abbiamo trascorso un bel po 'di tempo-- il personale del corso e I-- pensare su ciò che vogliamo CS50 sia, e tornare a prima principi, per così dire, da considerare che cosa è che vogliamo questo corso per assomigliare ed essere come per i suoi studenti. E così vedrete nel problema set a zero, così, un invito a dare un'occhiata a quel URL che riassume alcune delle motivazioni che stanno dietro la le seguenti caratteristiche di caduta 2016. Quindi, come si può avere spigolato dal TL: volantino DR, il programma di oggi, così come da il catalogo dei corsi, quest'anno in CS50, ci si aspetta solo di partecipare oggi-- bene così lavoro done-- e l'ultima lezione il 21 novembre. E tu sei il benvenuto, ma non dovrebbe partecipare a tali lezioni nel mezzo, perché quello che stiamo facendo quest'anno, sta girando in tempo reale materiale del corso. Quindi, tutto rimarrà corrente e incorporato come meglio can-- eventi in corso e le conversazioni che la gente potrebbe essere avere nell'industria in mondo, ma facendo che il materiale disponibili, di conseguenza, anche earlier-- completo di trascrizioni di testo completo e di ricerca e la collegamenti ad altre risorse. E in effetti, siamo stati protestando per un po 'di tempo e noi ora crediamo questo, che possiamo creare, in digitale, un più coinvolgente, una più convincente esperienza educativa, al contrario a raccogliere qui circa 23 volte di persona, qualcuno sentendo come me semplicemente parlare di informatica, al contrario di un impegno più attivo. Così si vedrà nel programma del corso uno schizzo del semestre qui, insieme a quando lezioni saranno essere filmato, a cui si è benvenuti, ma non ci si aspetta, e quando lo faranno essere rilasciato sul sito web del corso. E quello che faremo qui Mercoledì partire dalla prossima settimana, è molto più intimamente, con la sola quelle persone che vogliono partecipare, è una cosiddetta passeggiata, dove io e le teste del corso sarà effettivamente fare le cose un po 'più intimo qui in orchestra sezione, hanno ancora qualche tecnologia e camminare attraverso il problema set di settimana corrente, e offrirvi particularly-- se tra quelli meno comfortable-- tanto più una guida che si potrebbe desiderare o necessità di sfida della settimana. E allo stesso modo, per coloro che non possono partecipare a quelli di persona, un grosso problema. Ci saranno allo stesso modo guidata da uno del personale di alto livello del corso, Zamalya, la stessa opportunità incorporato nel problema si pone. Problema imposta quest'anno sarà rilasciato il venerdì e non più fare sette giorni più tardi, ma 10 giorni later-- deliberatamente sovrapposizione con ogni problema impostare, in modo da accogliere meglio, ci auguriamo, flusso e riflusso in orari degli studenti, soprattutto quando midterms o l'atletica o accademici o extracurriculars tendono ad andare e venire soprattutto di metà semestre. Questo dovrebbe dare un po 'di più discrezione, come se si frontale caricare la settimana con CS50 o del carico posteriore sul fine settimana successivo, invece. Quindi guardare al programma del corso qui per il programma della stessa. E si noterà anche tra i cambiamenti di quest'anno, per quelli più familiarità con programmazione in passato, inizieremo il semestre come ci sarà oggi in Scratch, concentrarsi soprattutto sulla lingua chiamato C, e poi non transizione per PHP, ma di un linguaggio chiamato Python verso la fine del semestre nel contesto della programmazione web, insieme a SQL e JavaScript, HTML, CSS, e ancor più. E in risposta ad una FAQ, è infatti il ​​caso che CS non è così spaventoso come una volta pensava che fosse, ma è tanto il lavoro come avevo sentito che potrebbe essere. Ma questo è il dire che qui sono alcuni statistiche autunno 2015 corpo studentesco, per cui le linee blu orizzontali rappresentano il numero medio di ore segnalati. E vedrai una media di da sei a 10 per 12-- forse 16 o così e così via, ma con alta varianza per essere chiari. E così rendersi conto che non c'è solo studenti più comodo e meno confortevole in corso, ma un corrispondente supporto struttura per ottenere quegli studenti attraverso il semestre con successo. Infatti, in risposta ad una FAQ, dovrebbe si prende CS50 come un primo anno? Assolutamente. E infatti, io mi pento Non avendo trovato la mia strada o trovato un nuovo campo quel primo anno pure. E si dovrebbe prendere CS50 con altri corsi, certamente well-- come e il consiglio generale si potrebbe dare agli studenti, che probabilmente è CS50 non il tipo di classe o di classe intro che si dovrebbe prendere con tre altra o le altre quattro classi P-SET. Ma se si sta prendendo altri due p-set classi, qualcosa d'altro, e CS50, assolutamente gestibile. Ho avuto molti studenti del passato fatto così con successo. E per arrivare verso quella traguardo con successo, fa il corso ha sections-- diverse tracce per gli studenti meno comodo, più confortevole, e da qualche parte in mezzo, per cui nel corso del primo set problema, ti verrà chiesto di descrivere se stessi. E se siete tra quelli meno confortevole, è il genere di cose che hai appena piuttosto sapere. E in effetti, questo è stato il crescita demografica in CS50 per parecchi anni. Come lo scorso autunno per esempio, 58% della categoria si è definito come tra quelli meno confortevole, con il 9% tra quelli di più comodo, e poi gli altri studenti lì a rosso descrivere se stessi come una via di mezzo. E vedrete qui gli argomenti complessiva e lo schema di sezioni, tutte sono offerti in prima persona, in in tempo reale, con il corso di sorprendente il personale di compagni di insegnamento e gli assistenti dei corsi, alcuni dei quali si incontra in un attimo. stessi sezioni, come si vedrà, sarà essere lunedì e il martedì e il mercoledì, in modo da consentire di immergersi in dopo coinvolgente, se lo scegliere, nel corso del lezione in precedenza che settimana. E poi l'orario di ufficio, che Certamente, con il passare degli anni, sono stati non meno di un lottare per il corso. E quest'anno, non siamo in programma solo dalla carica hours-- uno su una opportunità di aiuto per gli studenti il ​​mercoledì giovedì e la domenica, l'ultimo di questi essendo nel pomeriggio in base alla progettazione di ridurre alcuni dello stress che invariabilmente si pone con a tarda notte p-settting con una scadenza looming-- ma l'orario di ufficio sarà anche offerto il lunedì e il martedì e il Il mercoledì e il venerdì e il sabato, grazie ai nostri amici di HSA. CS50 ora ha il suo spazio per gli studenti e il personale CS50, in cima 67 Mount Auburn Street, proprio lì in Harvard Square. La visione per la quale è che CS50 di TF e CA per tutta la settimana, più o meno per la maggior parte giorni, sarà lì per il supporto. Quindi, se hai un po ' domanda su un P-SET o ti senti un po ' bloccato o un po 'confuso, e diamine, hai un'ora o mezz'ora tra le classi, soprattutto nel square-- può voi pop e hanno risposto a questa domanda di avere quella confusione clarified-- molto nello spirito, si ha familiarità, della matematica proprio centro di domande di matematica di reparto, ma praticamente tutto il giorno per [? Gcal?] Che verranno pubblicate on-line. Tutoring è disponibile anche per quelli studenti, liberamente dal corso del personale proprio se si desidera più intimo uno contro uno, o solo due o tre compagni di classe, di lavoro con uno dei membri dello staff del corso. E in effetti, questi qui sono solo alcuni dei membri dello staff del corso, alcuni dei quali avrete incontrare in un attimo. In realtà, la propria CS50 insegnamento collega testa, e naturalmente la testa assistente e maestro, potrebbe venire su, consentire loro di dire ciao. [APPLAUSI] SPEAKER 1: [INCOMPRENSIBILE]. [APPLAUSI] SPEAKER 2: [INCOMPRENSIBILE]. [APPLAUSI] SPEAKER 3: [INCOMPRENSIBILE]. [APPLAUSI] DAVID MALAN: E ci permette di portare a bordo due dei CS50 di più personale dirigente, Rob e Zamayla pure. [APPLAUSI] In effetti, sia Rob e Zamayla sono stati con noi per così tanto tempo, che ho potuto di andare in archivi di CS50 e trovare questo molto SD filmati di loro partecipare in scena se stessi alcuni anni fa. ROB: [INCOMPRENSIBILE]. [APPLAUSI] ZAMAYLA: [INAUDIBLE] [APPLAUSI] DAVID MALAN: Grazie. Quindi, in aggiunta a questi i membri del team qui, CS50 ha un team di quasi 100 membri dello staff, i quali sarà disponibile per sezioni e l'orario di ufficio e molto altro ancora. E come dice anche Rob, questo è la revisione più significativa dei CS50 nei 10 anni che Sono stato in [INCOMPRENSIBILE]. [INAUDIBLE] concentrato soprattutto nel fornire una struttura di supporto, rifilatura via un sacco di la massa che è stata accumulata in 10 anni sviluppi di iterativi sui set il problema del corso. Così quest'anno, non solo in classe, ma anche nella forma del problema del corso set, si dovrebbe trovare cose da essere più snella, trimmer, molto più maneggevole di negli anni passati, come noi gettare un po 'del bagaglio che è sviluppato dalla natura di anno in evoluzione dopo anno e iterazione. Così il nuovo e migliorato inizia oggi. Potrai incontrare un po 'di Lo staff di corso nel [INAUDIBLE] alle 2:30, dove viene servita, come tradizione, torta. C'è un po 'di più la torta Oltre a questo, ma vi si incontrano Erin e Tobias e altri ancora. E lasciate che vi dia un giro prima di sentire da alcuni degli altri membri del personale nella classe, di ciò che attende pure. In realtà, partiamo sempre CS50 di semestre il prossimo Sabato, con quello che viene chiamato CS50 Puzzle giorno. Non ha nulla a che fare con informatica per sé, ma con circa problema risolvere più in generale. E se lo si sceglie di partecipare, per alcuni degli inviti, si potrebbe avere visto porta caduto o sul palco qui, si tratta di una opportunità in squadre di due o tre o quattro, a partecipare per i puzzle e pizza e premi e more-- questo Sabato, Restate sintonizzati per ulteriori. Troverete anche che ogni Venerdì, a Fire and Ice, non CS50 portare un intero gruppo di studenti a pranzo, per fare un grande Classe sentire più intimo, e in generale riunire ex-alunni e amici provenienti dall'industria per parlare di quello che hanno fatto da quando la laurea. Allo stesso modo, quest'anno, saremo inaugurerà il primo CS50 50 codifica contest-- una metà semestre possibilità di permettere a tutti su un opt in base ad un sfida di ingegni contro compagni di classe, nuovo in gruppi di due o tre o quattro, utilizzando solo che la programmazione savvy che poi avete sotto la cintura dopo appena sei o sette settimane della classe, e la partecipazione in questo tipo di competizione online-- se vuoi per affinare il proprio abilità tanto più in quella sfida. Alla fine del semestre è il cosiddetto CS50 Hackathon-- un'opportunità che inizia alle 7:00 PM termina alle 07:00, e lungo la strada sono 12 ore serali in cui tuffarsi in project-- finale del corso l'opportunità di progettare e implementare la maggior parte qualcosa di interessante a voi con il vostro insegnamento la guida di colleghi. Intorno 09:00 dobbiamo tipicamente servire la pizza, 01:00, Philippe, e pochi di noi che sono ancora sveglio alle 5:00 del mattino, sono shuttle arrivavano giù per la strada per IHOP per la prima colazione. E poi un paio di giorni più tardi è il cosiddetto CS50 fare-- una mostra di fine semestre, in celebrazione di quanto lontano tanti di CS50 studenti sono venuti da settimana di zero fino a settimana, e tenendo presente che il 73% di quelli compagni di classe e il tuo quest'anno hanno mai preso una classe di CS prima. Infatti, per sottolineare nuovamente quanto, qui è un paio di facce da parte del personale di CS50. SPEAKER 4: [INCOMPRENSIBILE]. SPEAKER 5: [INCOMPRENSIBILE]. SPEAKER 6: [INCOMPRENSIBILE]. SPEAKER 7: [INCOMPRENSIBILE]. SPEAKER 8: [INAUDIBLE] SPEAKER 9: [INCOMPRENSIBILE]. SPEAKER 4: [INCOMPRENSIBILE]. SPEAKER 10: [INCOMPRENSIBILE]. SPEAKER 11: [INCOMPRENSIBILE]. SPEAKER 12: [INCOMPRENSIBILE]. SPEAKER 13: [INAUDIBLE] SPEAKER 14: [INCOMPRENSIBILE]. SPEAKER 13: [INCOMPRENSIBILE]. SPEAKER 15: [INAUDIBLE] SPEAKER 16: [INCOMPRENSIBILE]. SPEAKER 11: [INAUDIBLE] SPEAKER 5: [INCOMPRENSIBILE]. DAVID MALAN: alcuni dei team sono essi stessi lo shopping classi. Ma se quei membri del personale CS50 sono qui, potrebbe venire in su per un attimo. di CS50 TF e CAS e [? personale ?] membri qui-- questi sono solo alcuni del faces-- uno dei quali è sufficiente ha visto, e qualche other-- e pochi altri ancora. Perché non andiamo avanti e permettiamo voi ragazzi una pausa di cinque minuti. Se avete bisogno di anatra fuori per classi negozio, va bene. E in cinque minuti, ci riprendiamo, dare un'occhiata a Scratch-- primo del nostro linguaggio di programmazione, si incontrano il personale del corso qui un po 'di più, e concentrarsi in ultima analisi, il problema set a zero. Così saremo di nuovo in cinque minuti. [APPLAUSI] Tutto ok. Quindi siamo indietro. E nel nostro rimanenti il tempo oggi, l'obiettivo è quello di livellare il campo di gioco in termini di alcuni termini, in termini di alcune idee. Poiché infatti, secondo alcuni grafici precedenti, ci sta per essere un intervallo di i livelli di esperienza nella classe, di cui alcuni studenti hanno preso un po 'di programmazione prima, alcuni dei quali non hanno. E così con questo primo problema set e con questa prima lingua Non abbiamo l'opportunità di iniziare dare per scontato dopo oggi un po 'di vocabolario e un'idea comune. E lo faremo attraverso prima languages-- del corso oltre a C e Python e JavaScript e SQL e HTML e CSS, ci concentreremo inizialmente e solo per il problema del punto zero su questo linguaggio grafico, chiamato Scratch, sviluppato da MIT Media Lab lungo la strada, per aiutare studenti e bambini soprattutto esprimersi algorithmically-- in modo più coerente con quello che potremmo chiamare pensiero computazionale. Ed è un linguaggio utile perché molto rapidamente la prossima settimana in settimana uno, facciamo la transizione ad una più lingua tradizionale e arcana chiamato C, che è puramente testuale. Si usa solo la tastiera in Per scrivere le istruzioni come questi sullo schermo. Ma anche se non avete mai visto un linguaggio di programmazione prima, in un semplice sguardo alla questo, tutto che si tratti criptico, probabilmente si può intuire che Probabilmente stampa Ciao Mondo. Ma c'è un sacco di spese generali sintattica lì. C'è l'hash strano simbolo o hash tag sulla parte superiore. Ci sono le parentesi angolari, un po ' parentesi, parentesi graffe, semi-colon-- c'è solo così tanto visiva sintassi che si mette di mezzo. Si comincia con il corso Scratch in modo da ottenere passato tutti quelli intellettualmente distrazioni poco interessanti, e concentrarsi invece sulle idee. In realtà, questo potrebbe essere prima. Questo, per questo, la settimana sarà dopo. Questo, in questa grafica lingua Scratch, è come si potrebbe implementare la stessa program-- un programma che, quando eseguito, dice semplicemente ciao mondo. E ciò che è bello di Scratch è che è questa programmazione grafica ambiente che utilizza pezzi del puzzle o blocchi, che solo interblocco insieme se ha senso logico per farlo. E con Scratch si può sviluppare animazioni e giochi interattivi e l'arte, e qualsiasi numero di cose che si potrebbe immaginare nella vostra mente, e la loro attuazione, semplicemente trascinando pezzi di un puzzle. E infatti, avremo la possibilità esprimere alcune delle stesse idee che ho appena citato un attimo fa nel contesto di Mike Smith e la ricerca di cose un telefono book-- come funzioni, solo le azioni, cose come i cicli che fanno cose ancora e ancora, variabili, che è qualcosa che presenteremo, ma è familiare, forse da algebra-- solo una sorta di segnaposto per memorizzare un certo valore si potrebbe bisogno di espressioni booleane later--, dove chi si no o vero falsi domande da prima. Le condizioni sono tali forcelle nel strada-- quei rami così dire. E poi ci sono alcuni più operato caratteristiche che vedremo ancora oggi, chiamati array e fili e eventi, che faremo poi rivisitare oltre tempo in diverse lingue. Ma Scratch ci permette di esplorare tutti questi. Così qui in Scratch, questo viola blocco è quello che una funzione è tipicamente andare a guardare come. Questo pezzo di puzzle viola che ha un certo parola come esempio, che è l'azione, e allora potrebbe avere argomento o un parameter-- qualche modo di tipo di personalizzazione cosa che fa blocco in modo che non è pre-determinato MIT che cosa questo blocco viola dice. In realtà, si vedrà in un momento che sono in grado di digitare le parole come ciao mondo, o ciao David, o ciao Zamayla, o quello che voglio, nell'argomento a quel puzzle piece-- la scatola bianca Là. Nel frattempo, se voglio un ciclo, faremo vedere che non c'è pezzi di un puzzle che guardare un po 'arancione come questo. E loro forma tipo di suggerisce che succede qualcosa di nuovo e di nuovo in un ciclo. Quindi, se ho avvolgere un blocco dire ciao mondo con una sempre bloccare in Scratch, è solo andando a continuare a dire ciao mondo per sempre, letteralmente. Nel frattempo, c'è un altro tipo di ciclo a Scratch che saremo see-- una ripetizione block-- dove, se si sapere in anticipo quante volte si desidera che il ciclo di esecuzione un numero finito di volte in voi fact-- può specificare che digitando un numero o anche collegare una variabile, come X o Y come vedremo. In effetti, variabili come i in questo caso, che è un nome comune per un variabile intera che solo memorizza un number-- un intero potrebbe essere, Per utilizzare questo blocco arancione qui per impostare una variabile come ho a zero. Ecco un esempio in verde di un espressione booleana in Scratch. Anche se questo sembra un matematico formula, le disuguaglianze di matematica come questo in realtà sono espressioni booleane. Questo è vero o falso. Mi è inferiore a 50. E 'sia un sì o un no o risposta vero o falso. E noi generalmente chiamiamo quelle espressioni booleane. E non deve essere 50. Può essere x inferiore y, maggiore di y, uguale a y-- qualsiasi numero di altri le domande possono essere poste. Ora, a prima vista, questo potrebbe sembrare improvvisamente abbastanza audace qui, e lo è. Ma il concetto saggio, è abbastanza familiare da prima. Se x è minore di y, che dire altrettanto. Altrimenti se x è maggiore di y, quindi dire altrettanto. Altrimenti dire x è uguale ay. Così abbiamo un esempio là di una terza scenario-- l'unico terzo possibility-- x è o superiore, inferiore o uguale a. Così abbiamo una forchetta a tre vie in mezzo alla strada. E notare ciò che è cool qui-- Scratch, sembrerebbe, ha solo un puzzle piece, in questo caso, se blocco else. Eppure che sembrerebbe implicare si può hanno solo una forchetta bidirezionale nella strada. Si può andare a destra oa sinistra, ma che dire di quel terzo scenario? Che cosa succede se x è uguale a Y? Nessun grosso problema. Prendete un pezzo di puzzle, mettere un altro suo interno per creare l'equivalente semantico di se, else if, else-- e ora si avere la forchetta a tre vie in mezzo alla strada. E come vedremo, la pezzi del puzzle Scratch può essere allungato e crescere, così come di stipare più roba in loro. Non è necessario per adattarsi tutto ciò nella sua dimensione predefinita. Questo è qualcosa faremo presto si chiama un array. E 'come un list-- un modo di memorizzazione di più pezzi di informazione in una variabile, non solo un numero. Questi vedremo un rappresentante una cosa chiamata multi-threading. In realtà, tutto il vostro Mac e PC in questi giorni supporto multi-threading, il che significa che si può letteralmente fare più cose alla volta. È possibile disporre di Microsoft Word nella primo piano, lavorando su alcuni saggio. Si potrebbe avere un browser nell'apertura sfondo G-mail o Facebook o simili. Il computer può fare più cose oggi, perché è multi-threaded, ed i programmi sono in in particolare sono anche multi-threaded. Ci sono cose chiamati eventi come bene nel mondo di Scratch, e poi c'è un modo troppo, per fare i nostri pezzi del puzzle personalizzati, se le cose in realtà non esistono in anticipo. Quindi cerchiamo di motivare questo come segue. Alcuni anni fa, quando ho prima scoperto Scratch, quando ero in realtà un laureando al MIT, abbiamo noi avevano il compito di fare i compiti a casa. E io implemented-- che, in retrospettiva, è stata una decisione molto povera, perché è la canzone più irritante del mondo ad ascoltare per otto ore mentre si lavora sul homework-- ma qualcosa che avevo chiamato Oscar Tempo, che è forse una canzone familiare. CS50s possiedono Jordan Hayashi, uno dei i nostri più membri del personale di alto livello, ha aggiornato per il 2015 e ora 2016, dal momento che di nuovo nel corso della giornata, Avevo tutto solo andando in cestino di Oscar. Ora noi sosteniamo il riciclaggio e il compostaggio. Ma per dipingere il quadro di ciò che possiamo fare qui e motivare alcune delle esempi di livello inferiore, potremmo ottenere un altro volontario per venire solo su un massimo e giocare il mio primo compito a casa mai? Vieni su. Come ti chiami? HENRY: Henry. DAVID MALAN: Henry, vieni su. Vieni su. Testa in entrambi i casi, e vedrete in un momento, Ho intenzione di andare avanti e colpire il bandiera verde nella mano in alto a destra angolo, il che significa andare. L'icona segno piccola fermata sta per dire basta, e che quando si inizia a e arrestare il programma. Piacere di conoscerti. Tutto ok. Quindi stiamo andando a vedere le istruzioni sullo schermo in un attimo. E proprio per questo gioco per pochi secondi-- fiducia in me, non stiamo andando a voler giocare tutto il modo per la end-- si vuole avere un'idea di cosa fa il programma. E più che concentrarsi su Henry essere buono o cattivo a questo gioco, messa a fuoco e come è stato implementato da me Originariamente e poi da Jordan. In altre parole, dove sono le variabili? Dove sono i loop? Dove sono le funzioni? E vedremo se non vediamo quelli sotto la cappa. Basta fare clic e trascinare spazzatura al raccoglitore appropriata. [RIPRODUZIONE DI BRANI MUSICALI] Tutto ok. Ciò è molto buono. Perché non ci fermiamo lì. Grazie. Congratulazioni a Henry. Grazie. [APPLAUSI] Provate a immaginare il debug quel programma. Se c'è un problema a due minuti dall'inizio della song-- ma così cosa sta succedendo qui davvero? Così complicato come si potrebbe iniziare a sembrare per ottenere nel corso del tempo, infatti sempre più roba ha iniziato a cadere, ciò che è interessante questo tipo di example-- e vedremo alcuni others-- è che se si guardare oltre la complessità o la la raffinatezza del gioco, c'è un edificio molto semplice blocchi che play-- tutte, se li distillare a quelli blocchi di costruzione, sono molto accessibili e implementabile a se stessi. Per esempio, è stato un po 'di tempo, ma sono abbastanza sicuro di quello che inizialmente fatto quando rendendo questo gioco per la prima volta ero completamente come procrastinato. Non mi concentro a tutti sul logica o i pezzi del puzzle, Mi sono concentrato sulla grafica e scoperta il palo di strada e il cestino e tutto questo. Ma quelli erano requisito gli ingredienti in un primo momento. E una volta che ho finito procrastinare e recante il quadro generale, Ho deciso, vorrei solo fare una pezzo di caduta spazzatura dal cielo. E vedremo Scratch sostiene cose chiamate caratteri che possono sprites-- hanno costumi diversi in modo da un aspetto diverso. E così ho messo un cestino costume in una di queste sprite. E ho appena avuto bisogno a cadere dal cielo. E così si scopre, Scratch, come la maggior parte dei linguaggi di programmazione, supporta numeri casuali o numeri casuali tecnicamente pseudocodice cosicché trascinando e far cadere alcuni pezzi del puzzle, Sono stato in grado di avere il cestino provenire da sinistra a prima. E allora la prossima volta è caduto, da destra e poi dal mezzo. E tutto il gioco si era solo hanno spazzatura che cade dal cielo. Non si poteva puntare a esso o fare clic su di esso. Non si poteva aprire il cestino. Non si poteva fare nulla. Ma è stato un passo bambino verso la mia visione finale. E dopo che, in realtà ho implementato qualche tipo di rilevamento in modo che se è stata selezionata e trascinare sul pezzo di spazzatura il cestino, Oscar coperchio sarebbe aprire e chiudere. Nulla sarebbe accaduto nel cestino, ma almeno il coperchio si apre e si chiude. Così quindi controllare, passo a due di due. E questo è ciò che sta per essere chiave sia problema impostato a zero e in programmazione, più in generale, è di prendere questi piccoli passi molto intenzionali. Perché non solo si consente di sento onestamente realizzato molto di più quickly-- è il cosa peggiore del mondo per cercare di implementare tutti Oscar tempo, poi ore più tardi ha colpito la bandiera verde, e nulla funziona come previsto perché dove si fa anche cominciare a debug o per risolvere i problemi che il programma? E 'solo schiacciante. E così veramente abbracciare questa idea di prendere di nuovo piccoli passi steps-- e again-- costruzione qualcosa che è, alla fine, davvero impressionante e complessa, ma in un primo momento, non è quasi tanto così. In realtà, cerchiamo di fare questo. Lasciami andare avanti e- Scratch stesso esiste sul web a Scratch.MIT.edu, e ti verrà detto come molto di nuovo nel problema set a zero, la specifica per che è già sul sito di CS50. Ma questo è ciò che Scratch è di per sé. E c'è davvero solo tre aree principali. In alto a sinistra c'è è la cosiddetta fase. Si tratta di Scratch. Il costume di default è un gatto. E questo è il mondo rettangolare il quale è possibile move-- su, giù, sinistra, destra e alcune altre cose. Nel mezzo ecco le nostre categorie o ai nostri pallet di pezzi di un puzzle, e colori diversi significare cose diverse. E se si frugare, vedrete cose come i cicli e condizioni e variabili e altri ingredienti. E poi qui è la zona script. Questo è dove posso trascinare e rilasciare quei pezzi del puzzle per fare le cose. Quindi cerchiamo di fare una cosa del genere. Lasciami andare avanti e- e so dove si trova. Quindi ho intenzione di cliccare immediatamente sul dove So che le cose sono pronti per essere, ma puntando e cliccando e rovistando sono inevitabili. Così, quando la bandiera verde cliccato, cosa voglio fare? Ho intenzione di fare questo. Ho intenzione di trascinare questo puzzle viola pezzo, dire ciao per due secondi, e mi permetta di Zoom avanti. E ho intenzione di cambiare questa per essere quello che voglio essere-- Ciao mondo per due secondi va bene. Ora, ho intenzione di fare clic sul bandiera verde, o se voglio davvero, Posso schermo intero e poi tornare indietro. Sarà solo continuare tutto in una finestra. Verde mondo ciao flag--. Tutto ok. Non tutto ciò che interessante. Quindi, mi permetta di andare avanti e fare questo. Vorrei cercare un altro. Quando bandiera verde clicked-- facciamo fare qualcosa di simile a un suono. E notare che fuori la casella libera si ottiene un suono gatto, così come lo sprite di default. Così ora lasciami andare avanti e ha colpito la bandiera verde ora. [Miagolando] Aw. È adorabile. Sto programmando. Allora, cosa ho fatto? Questo è l'equivalente di un programma. E 'ovviamente super semplice. Non ha davvero prendere più di tanto sforzo e MIT fatto maggior parte del lavoro, ma vi ho chiamati una funzione. Ho usato una funzione. Ho fatto qualche azione, usando solo che un pezzo di puzzle viola. Beh, se voglio fare tre miagolii di fila? Mi permetta di andare avanti e fare due e tre. E notare che quando si librarsi nei pressi di un pezzo di puzzle, viene visualizzata una piccola linea bianca sorta di magneticamente, e si aggancerà insieme quando si lascia andare. Vediamo cosa succede qui. [Miagolando] C'è un bug. Ho sentito solo un miagolio. Perché che potrebbe essere? Sì? Sì. Noi in realtà non lo sentiamo, ma questo è un buon intuito. Sono tutti a giocare allo stesso tempo. Perché? Ebbene, il computer è solo andare di fare ciò che si dice di fare. Quindi, se si dice, il suono del gioco, riprodurre l'audio, riprodurre l'audio, ma non si dice di giocare fino a quando il gioco è fatto, giocare fino a quando il gioco è fatto, sta andando a soffiare il programma veramente veloce e non solo quello che si dice di fare. Così ho davvero bisogno di risolvere il problema questo in un paio di modi. Ho potuto solo fare questo, sbarazzarsi di questo. Fammi provare questo Puzzle piece-- riprodurre meow suono fino al fatto, e quindi trascinare tre questi e fare clic su Play. [Miagolando] Non è proprio very-- grazie you-- molto naturale. Allora, perché non lasciare che I-- andare a controllare qui. Bello. Aspetta un secondo, e ora lasciami andare indietro ai suoni, e il suono del gioco fino al fatto, e poi mi permetta di ottenere attendere un secondo. E poi mi permetta di andare a prendere una più sana, e qui andiamo. [Miagolando] Un po 'più naturale, ma questo non è molto efficiente. Come stavo annoiando, essere tutti in breve, cliccando avanti e indietro e davvero duplicare il mio work-- praticamente copia e incolla. Infatti, Se controllo cliccato o destra cliccato, Avrei potuto semplicemente copiato e incollato. Quale potrebbe essere una migliore costrutto da usare? Che idea da prima? Sì, così un ciclo. E infatti, se ci curiosato, potremmo trovare esattamente questo. Lasciami andare a Eventi o meglio, di controllo. Quindi repeat-- non lo faccio voglio che sia 10 volte. Che sta per ottenere fastidioso rapidamente. Ma io ripeterò tre volte. Mi permetta di tornare a suonare e riprodurre il suono fino a quando il gioco è fatto. Mi permetta di tornare a controllo e aspettare un secondo. E preavviso, si potrebbe penso che non va bene, ma ancora una volta, se si lascia che magneticamente scatto in atto, che crescerà a riempire. Com'è giocare ora? [Miagolando] OK. Bello. E questo è quello che sarebbe stato chiamato un programma che è anche corretto. Si miagolava tre volte abbastanza naturalmente, ma è meglio progettato. Sto usando meno la ridondanza. Io non copiare e incollare qualsiasi cosa. Ho appena usato una migliore idea. Ora, questo non è ancora tutto quello interessante con Scratch non fare qualsiasi cosa. Quindi cerchiamo di fare qualcos'altro. Facciamo qualcosa per sempre. E sai una cosa? Movimento sembra interessante. Diamo farlo muovere 10 passi e ha colpito il gioco ora. OK. Bene possiamo tipo di trascinamento indietro, e lui è ancora esecuzione perché sta facendo questo per sempre. Così il ciclo sta facendo quello che sta dicendo di fare, ma questo non è tutto ciò che interessa. Facciamolo. Permettetemi di aggiungere un blocco di controllo, e utilizzare una tali condizioni per la prima volta. Così sta andando a muoversi 10 steps-- 10 punti, 10 pixel sul screen-- poi sta andando a fare questa domanda. Se qualcosa è vero, allora fare qualcosa dentro questo blocco. Così si scopre rilevamento ha un intero mucchio di expressions-- booleano domande del sì no o vero falso form-- mi permetta di fare questo. Se touching-- e poi c'è questo piccolo menu a discesa. Posso parametrizzato. Se toccando il edge-- facciamo fare qualcosa di simile. Quindi, se toccando edge-- mi permetta di tornare a movimento. E perché non abbiamo solo girarsi di 180 gradi? Tutto ok. Così per sempre, spostare 10 passi. Se stai toccando il bordo, girare di 180 gradi. E non è la fine del programma perché sei in un sempre bloccare, quindi è intenzione di andare di nuovo e Ancora e ancora e ancora. Quindi vediamo cosa succede. OK. Un po 'buggy, ma genere di freddo. E possiamo aggiungere a questo alcune cose stupide che non sono tutti che intellettuale interessante. Ma se ci ha colpito questo piccolo microfono button-- ouch. Mi permetta di pulire questo. Mi permetta di migliorare questo come avrebbero detto in TV. Pulire che fino, Salva, e ora salire agli script. E ora, lasciami andare a suonare. Permettetemi di fare un nome. Chiamerò questo Ouch. E ora giocare ouch suono. Si noti che viene visualizzata nella piccolo menu a discesa. Vediamo. [AHIA] [Ride] Ma possiamo cambiare t sua al volo. Possiamo essere due volte più fastidioso. [AHIA] Oppure, se facciamo come 1.000 passi alla tempo-- OK. Quindi stiamo andando a lasciare che uno solo. Così ancora una volta, la costruzione I blocks-- iniziare con qualcosa di super semplice, e poi ho aggiunto una funzione, aggiunto una funzione, ha aggiunto una caratteristica. E non ho più bisogno di preoccuparsi di come il primo di tali caratteristiche è stato implementato come continuo per sovrapporre le cose in cima. Quindi, in realtà, mi permetta di fare un altro qui. Lasciami andare avanti e aprire un file che Ho portato in anticipo, chiamato pecore. Così ha una leggermente diverso personaggio che assomiglia a questo. E vediamo se non ci riesco fare qualcosa utilizzando un contatore in questo case-- una variabile cosiddetto. Ho intenzione di andare avanti e sotto Events-- mi permetta di ottenere una bandiera verde cliccato. Poi lasciami andare a Data, che so da solo giocando intorno prima, è dove le variabili sono. E ho intenzione di andare avanti e trascinare questo. Quindi una variabile chiamata contatore, e Ho intenzione di inizializzare a zero. Posso chiamarla anything-- xo y o z-- ma in programmazione, chiamando qualcosa in un semanticamente modo utile, come contatore, che descrive quello che è, si tratta di un molto più facile da leggere il codice di seguito. Mi permetta di andare avanti e ottenere un blocco per sempre qui. E mi permetta di andare agli sguardi pagina e fare un blocco di Say. Ma cosa c'è di fresco sulle variabili sono io non c'è bisogno di digitare semplicemente a qualcosa come ciao mondo, che abbiamo già fatto, posso invece andare a dati e trascinare la mia variabile, e anche se la forma non abbastanza guardare come dovrebbe andare bene, che crescerà da riempire. E mi limiterò a dire il contatore per un spoiler-- secondo-- ha intenzione di contare. Lo diremo per un secondo. Poi ho intenzione di andare a lo hanno aspettare per un secondo, in modo che non conta troppo in fretta. E poi, infine, cambiare contatore da tra-- in altre parole, incrementare il contatore di uno valore aggiunto e fare questo per sempre. Così le pecore troppo, come un programmatore, conta da 0. E se aspettiamo abbastanza a lungo, farà questo per sempre. Ma non è esattamente vero, perché In realtà, come scopriremo nella prima settimana, interi e computer più in generale, tecnicamente avere solo un finite-- bene, piuttosto, quando i computer essi rappresentano numeri interi, hanno solo un numero finito di bit. Quelle lampadine lì può contare solo così in alto prima sei fuori di lampadine. E un computer troppo, ha solo tanta memoria, ha solo tanti transistori, quindi può contare così elevato solo. Così si scopre che le pecore, Penso, in grado di contare fino a 2 miliardi o qualcosa di abbastanza grande. Quindi non stiamo andando a aspettare che questo accada. Ma alla fine un po 'di bug accadrà che può avere qualche mondo reale ramificazioni. Ma al di là delle pecore, che solo introduce una variabile. Andiamo avanti e aprono qualcosa che ho fatto in anticipo qui chiamato Pet il Cat-- Pet il gatto qui. E notare qui è poco blocchi, ma quando la bandiera verde cliccato, sempre facendo quanto segue. Se stai toccando il mouse pointer-- modo che il cursore sullo schermo, il gioco arrow-- miagolio suono e quindi attendere due secondi. E proprio fare questo per sempre. Basta aspettare costantemente per vedere se il pointer-- se il gatto è a contatto con il puntatore. Così mi ha colpito il gioco. Niente sta succedendo. Ma, come ho spostare il cursore sopra il gatto, [Miagolando] E se allontanarlo, non accarezzare il gatto più. Così alcuni logica condizionale nidificato all'interno di un ciclo. Che ne dite di questo esempio, deliberatamente Non chiamato Pet il gatto? Che cosa è questo andando a fare? [Miagolando] Perché si deve non accarezzare il gatto? [Miagolando] OK. Quindi questo è un esempio di un altro caso. E 'un punto di decisione e perché è seduto nel ciclo, sono entrambi sempre controllato. È vero? È vero? È vero? È vero? E infine, uno dei coloro sta per applicare e così si sente sia il miagolio o il ruggito del leone in questo caso. Bene, facciamo un un po 'più di fantasia che ho fatto in anticipo too-- discussioni. Quindi un filo è solo uno cosa che un computer può fare. Quindi un programma multi-threaded è un programma che può fare più cose contemporaneamente. E tutti questi esempi finora hanno avuto un solo script, per così speak-- un programma come questo qui. Ma notare questo programma ha due sprite, due caratteri. Uno è un uccello. Uno è un gatto. E notare quando clicco su questi giù sinistra, ognuno ha i propri script o programmi ad essi associati. E sia di quelli programmi, avviso, avvio Con Quando la bandiera verde clicked-- diamo un'occhiata al cat-- quando la bandiera verde cliccato. E così in effetti, quando ho colpito il gioco ora, due cose stanno per accadere in una sola volta. Il gatto e l'uccello sono entrambi andando a operare simultaneamente per creare questo effetto. E si può immaginare cosa sta succedendo. C'è un ciclo e l'uccello e il gatto sono in un ciclo. L'uccello è solo rimbalzando come Ero prima quando ho detto ahi. Ma il gatto ha chiaramente un vantaggio. C'è un altro blocco di rilevamento che punta deliberatamente il gatto l'uccello in questo caso qui. Così abbiamo potuto prendere in giro a parte, cercando attraverso quei blocchi, cosa sta succedendo. Ma l'ingrediente chiave qui è uno. L'uccello, in modo che questo gioco non è completamente boring-- o questo animation-- inizia ad una direzione casuale. E il computer è in ripresa un numero compreso tra 90 e 180 in sostanza, in modo che sia leggermente diverso l'animazione ogni volta. E poi notare qui, se il gatto è a contatto con l'uccello, poi giocare il leone quattro sound-- il rombo. Ma intanto nel uccello tavolozza, abbiamo questo. Per sempre, se non toccare il gatto, basta continuare a muoversi tre passaggi. E poi ecco un altro pezzo del puzzle. Se siete sul bordo, di rimbalzo. Così l'uccello è solo tipo di badando il proprio business, solo che volano intorno e rimbalzare, ed è davvero il gatto che ha avuto la logica condizionale per determinare se avesse catturato l'uccello. Tutto ok. Allora, facciamo un altro qui, questo essere chiamato Hi Hi Hi. E questo qui solo fa questo in un ciclo infinito. Ma notice-- come possiamo fermare questo programma molto fastidioso? Ha colpito la barra spaziatrice. Perché se lo faccio, il program-- mano sinistra si noti che è costantemente listening-- è lo spazio premere il tasto. Se la barra spaziatrice premuto, e se sì, che cosa fa? Lo fa una tecnica molto comune. Si imposta una variabile uguale a un valore. Ma alterna quel valore. [? Così aspetto?] basato sul I shape-- avere una variabile che ha scritto in anticipo chiamato Sordina, che dice semplicemente sì o no. È il suono silenziato o no? Vero o falso? E notate, sto dicendo questo-- se sordina è pari a zero, poi cambiare a uno, altrimenti impostare muto a zero. Quindi, basta capovolgere il valore da zero a uno. Avrei potuto done-- cambiarlo da due a tre e 01:57 o quattro a cinque o quattro a sei. Ma non importa quello che i numeri che uso, finché io continuo cambiando il contrario. E la maggior parte qualsiasi programmatore sarebbe solo scegliere zero e tra-- falso e vero, off e on-- per rappresentare questo. E questo è ancora in esecuzione. Se mi ha colpito di nuovo la barra spaziatrice [SEAL SUONI] Il programma è ancora in esecuzione. Perché c'è questo altro script che dice, sempre fare quanto segue. Se la variabile è uguale sordina zero-- quindi se non siete in MUTE è il logic-- se è falso o no, quindi riprodurre il suono, perché non siete disattivato. Si dovrebbe riprodurre il suono e poi pensare hi hi hi per due secondi e poi aspettare e farlo Ancora e ancora e ancora. E in questo modo abbiamo un modo per persone a-- per i programmi di interagire. E non devono essere come datato come gli altri. In realtà, frugando around-- no pun intended-- qualcuno ha speso una quantità enorme di tempo su internet attuazione PokemonGo in Scratch. Ti geolocates anche in Cambridge o Allston qui. Quindi, se volete vedere anche ciò che la gente può fare è questo-- menu molto di fantasia. Clicca qui. Questo mi è con i miei tasti freccia ora. Ho intenzione di andare dopo questo. Clic. E ora si fa clic sul Pokeball. Voglio dire, penso che tu sia dovrebbe fare clic sul Pokeball. Tutto ok. Così ho fatto. Posso andare qui. E questa persona implementato ancora un po ' Pokeballs oltre qui-- tre Pokeballs. Postiamo un link a questo on-line in modo da poter giocare. Ma notate c'è solo alcuni elementi di base. Sembra molto più elaborato, e lo è. Questo è impressionante e molto altro ancora di quello che sarebbe normalmente aspetta, certamente per il problema del punto zero. Non ho idea di quanto tempo questa persona ha speso on-line. Ma è tutto solo un ciclo. C'è un gioco suono. C'è una specie di cappio ascoltando se sono colpendo la freccia verso l'alto o verso il basso il freccia o la sinistra e la destra, e poi, in caso affermativo, si sta muovendo è un numero di pixel. E poi se clicco su un altro sprite, c'è una sorta di se la condizione là. Sì, questo sta diventando troppo intenso. Stiamo andando a fermarsi. E 'tutte quelle componenti di base. Non ci sono altri ingredienti altri rispetto a quelli che abbiamo già esaminato. Eppure qui, mi permetta di fare una serie finale di esempi che dipinge un quadro troppo di che cosa si può fare qui. Ecco un programma molto semplice che appena fa questo-- tosse, tosse, tosse. E solo in base abbiamo esaminato finora, dove è l'ovvio possibilità di miglioramento. Questo programma è corretto. Tossisce tre volte, che è quello che intendevo. Ma è mal implementato. E 'mal progettato. Perché? Sì. Non è un ciclo. E non è tanto che non è un ciclo, è che c'è un sacco di ridondanza. Ci viene copiato e codice incollato, per così dire. E la soluzione probabilmente è infatti un ciclo. Quindi, mi permetta di andare avanti e migliorare su quella. E ho intenzione di trascinare questi qui. Mi permetta di andare avanti e ottenere una ripetizione blocco, cambiare questo a tre. Ho intenzione di buttare via alcuni di questi blocchi. E si noterà che è abbastanza intuitivo. Si trascina e cose appaiono e scompaiono alla fine. E posso solo trascinare questo qui, e ora ho una versione più pulita ancora. Ma sai una cosa? C'è questa opportunità ora abstraction-- per iniziare a definire un nuovo vocabolario che il MIT non anticipare. C'è aspettare e ripetere e per sempre e se, ma cosa succede se voglio introdurre la parola tosse come blocco? Cosa succede se voglio un pezzo di puzzle il cui scopo nella vita è quello di tosse? Bene, diamo un'occhiata a questa versione qui, che ho fatto come segue. Magicamente, ho creato questo pezzo di puzzle qui, che Scratch ti permette di fare. E in effetti C e Python e JavaScript sono andando a consentire di fare questo. È possibile creare il proprio personalizzato pezzi che si chiama quello che vuoi. In questo caso, tosse sente come una definizione ragionevole. E poi con questi pezzi verso il basso qui si può definire che cosa significa. Ho trascinati da questa palette qui-- più blocks-- questo grande viola blocco, dove ho digitato tosse come il nome del mio nuovo pezzo di puzzle. E poi sto dicendo ogni volta che un utente chiama questo nuovo pezzo di puzzle tosse, fare un dire e un'attesa. E così qui nel mio blocco di ripetizione, Posso solo tosse tre volte. E direi, soprattutto se ora si nasconde questo dettaglio. Chi se ne frega di come la tosse è implementato? Tutto mi interessa come programmatore che posso tossire. Non mi importa come dice è implementata. Ho appena attenzione che il gatto può dire qualcosa. Posso astrarre quel dettaglio e concentrarsi solo su ciò che è sullo schermo qui. Ma posso prendere questo un ulteriore passo avanti. Si noti che qui, ho attuato il ciclo tre volte. Ma cosa succede se invece prendo questa versione? E se invece in questa versione qui, Mi limito a cambiare il mio pezzo di puzzle di prendere un argomento e l'ingresso a se stessa? E questo ingresso può essere un numero come tre. Così ora, se sto scrivendo un programma e voglio che il gatto a tossire, Posso realmente dire il puzzle piece quante volte a tossire, perché in fondo qui, un fancier versione di questi pezzi del puzzle personalizzato Consente che specificare che tosse in realtà prende un input-- prende un argomento come questo. E sai una cosa? Forse mi rendo conto, aspetta un attimo. La tosse è il stesso-- è fondamentalmente la stessa idea come starnuti. E 'solo un diverso parola sullo schermo. Posso astrarre e l'attuazione questa versione finale di un tosse, che a prima vista è molto più complessa cercando. A meno di notare quello che ho fatto. Ho ora generalized-- genericized really-- questo pezzo di puzzle di essere chiamato dire parola n volte. E ora ho due nuovi pezzi del puzzle qui definire tosse n volte. E che cosa fa la funzione di tosse fare? Che cosa significa il mio pezzo di puzzle personalizzati fare? Si chiama semplicemente il blocco per dire, passando la parola che voglio dire, passando il numero di volte che voglio dire. Perché ora posso realizzare starnuto semplicemente dicendo achoo, in questo caso, un numero di volte. E così sto stratificazione e stratificazione. E ancora una volta, la chiave qui non è come ho implementato, ma il fatto che se ho appena letteralmente spostarli fuori dallo schermo, guarda come se non semplice piuttosto il mio programma ora sembra. Perché si fa quello che dice, ho astratte via ciò che è dentro quella scatola nera. capita di essere una scatola viola qui, ma ho ostruito via quello che c'è dentro perché non mi interessa come funziona. Ho appena importa, ora che funziona. E infatti, nel problem set a zero, questo è esattamente il tipo di stratificazione di aggiornamento! hanno l'opportunità di esplorare. E 'esattamente l'opportunità di applicare le tecniche di problem solving, a ciò che è probabilmente un ambiente non familiare. E se non avete programmato prima o programmato prima, troverete che non c'è un po 'di qualcosa in questo ambiente per tutti. E con il problema set uno in una settimana, saremo la transizione alla messa a fuoco su un linguaggio di alto livello chiamato C-- o meglio una più bassa linguaggio di livello chiamato C-- che è ancora più potente, anche se è un po 'più criptico a prima vista. E vi renderete conto per TL di oggi: DR, che questo problema insieme ha una più breve finestra di tempo di quelli futuri, semplicemente perché si dovrebbe trovare abbastanza accessibile. E non preoccupatevi se si aggiunge la classe in ritardo. Ci rivolgiamo che tra non molto. E prima di rinviare per la torta, andiamo finire con un solo sguardo di due minuti a quello che vi aspetta qui a CS50. [RIPRODUZIONE DI BRANI MUSICALI] Tutto ok. Questo è tutto per CS50. Ci vediamo presto. La torta è ora servito. [RIPRODUZIONE DI BRANI MUSICALI] SPEAKER 17: Avete sentito di un anno sabbatico, capo? SPEAKER 18: Forse c'è più sotto il cofano.