[Powered by Google Translate] [MUSICA ROCK] [MUSICA - "HAPPY TOGETHER" LE TARTARUGHE] DAVID MALAN: Oggi iniziamo la nostra esplorazione del fondamenti di informatica e la nostra introduzione, Ora, la tecnica di programmazione, di cui questo è solo un esempio. Ma con lo stesso spirito di problem solving, sa che Giorno Puzzle tradizionale CS50 è domani. Se non hai ancora risposto per questo evento, si può andare a cs50.net/rsvp. È possibile portare squadre di due o tre o quattro. Sarete sfidati con problemi come quello che hai visto lassù all'inizio. Tutti i nuovi problemi di quest'anno se si partecipava l'anno scorso, e si avrà la possibilità poi di vincere fantastici premi. Tra questi, un Wii e alcuni buoni regalo e simili, il tutto mentre in giro con CS50 studenti e compagni di classe e pizza e Facebook. Quindi, più su che domani, se si desidera. Questo è quindi CS50, per quelli di voi con noi per la prima volta. E so che questo corso è particolarmente determinato a ottenere attraverso questo corso al suo fine, a questo punto si avrà non solo la comprensione di questi fondamenti di informatica, ma si dovrà questo insieme di abilità molto pratico che è possibile riprendere a suo reparto, che si tratti di scienze ingegneristiche, matematica applicata, le scienze fisiche, naturali scienza, o simili. In effetti, cosa c'è di così eccitante informatica questi giorni è che è proprio così applicabile a tutti i tipi di campi. E anche se oggi, ci sarà solo graffiare la superficie di un linguaggio di programmazione molto tradizionale conosciuto come C, faremo invece guardate cosa chiamata Scratch, qualcosa con che quella storia d'amore biscotto è stato attuato da uno dei tuoi predecessori negli anni passati, per raccontare storie, per creare giochi, per creare arte interattiva, e di iniziare effettivamente per avvolgere il nostro menti intorno alcuni dei costrutti fondamentali che alla base di programmazione, ma in un contesto, come si vedrà, è molto meno spaventoso, che è molto meno arcano, che si vedrà in breve tempo. E rendersi conto, anche, per quelli di voi solo per noi partecipare a questo semestre, le frasi su cui abbiamo finito lezione di Mercoledì, non è così importante dove si finisce relative alla vostra compagni di classe in questa classe, ma dove, entro la fine del semestre di in settimana 11, finiscono per rispetto a te stesso proprio in questo giorno. Quindi, senza ulteriori indugi, questa è anche la pena notare che quelli meno confortevole, quelli di mezzo, sono inoltre, in base alla progettazione di questo corso, non ad ogni svantaggio vis-a-vis quelli più a suo agio entrando in questa classe. Come si vedrà nel corso delle settimane a venire, ci sono diversi tracce per back background disparati, sezioni per chi meno comodo, più confortevole, quelli da qualche parte in mezzo. Come si vedrà in questo weekend e la prossima settimana, due versioni di maggior parte dei set di problemi sia in edizione standard e hacker in modo che tutti possono auto-selezionare lungo il sentiero con il quale si sono più comodi. Così oggi, ci immergiamo in questa programmazione linguaggio chiamato Scratch. E 'un linguaggio di programmazione grafica, e tuttavia ha il stesse caratteristiche di alcuni dei linguaggi di livello superiore avremo esplorare in seguito nel semestre, tra i quali C e JavaScript e PHP. Ma sta andando per permetterci di evitare alcune delle distrazioni nella fase iniziale della sintassi, cose come punto e virgola, parentesi, e altri dettagli oscuri che, a prima vista, non sono solo a tutti intellettualmente interessante e tendono a entrare in modo da qualche comprensione fondamentale. Per quanto riguarda ora la struttura di supporto in avanti, realizzato questo strumento, CS50 discutere, che sarà collegato sul suo corso la sito web più tardi di oggi, è il forum di discussione on-line in che sarete in grado di porre domande di ogni altro e personale, ed è anche uno strumento, come vedremo la prossima settimana, che useremo molto in modo integrato orario d'ufficio pure. In effetti, orario d'ufficio iniziare lunedì, e, francamente, il primo settimana di ore di ufficio è fondamentale piuttosto bassa. Non credo che troverete tutto ciò che Scratch inaccessibile. E 'piuttosto auto-esplicativo, come vedremo, e quindi ciò che lo useremo per oggi è quello di estrarre una parte del idee fondamentali che, poi, persistono per tutta la resto del semestre. Ma a partire da lunedì, alle 8:00 PM tramite 23:00 sarà orari d'ufficio in oltre Annenberg pausa cervello. Sezionamento due inizierà questa sera, in modo a volte questo fine settimana, andare a cs50.net/section, e ti chiesto una serie di domande. Tra questi, come descriveresti la tua livello di comfort fino ad oggi? Non c'è duro, regola veloce da chi è in cui secchio. E 'proprio il tipo di cosa che probabilmente sapete se si sono tra quelle che la meno confortevole o meno. E ora, procedure dettagliate. Il set di specifiche problema per questa settimana, sia standard e l'edizione per gli stessi hacker, è online all'indirizzo cs50.net fin d'ora. E vedrai che la prima di queste edizioni, il edizione standard ogni settimana, è accompagnata da qualcosa che chiamare una procedura dettagliata codice, una sessione guidata da uno dei compagni di insegnamento del corso di guidare l'utente attraverso, fornire consigli su, e si ottiene un percorso particolare quando si tratta di iniziare questi insiemi di problemi. Quindi, con ciascuno di questi set di problema, se hai mai voglia per te da dove cominciare, si inizia con questi procedure dettagliate. E infatti, mi permetta di introdurre Zamyla Chan, questa anno svolge attività didattica che guiderà ogni una di queste procedure dettagliate. Zamyla? [Applausi] ZAMYLA Chandler: Oh, ciao a tutti. Il mio nome è Zamyla. Sono un giovane studio di ingegneria a Winthrop House. Ma cerco di corrispondere il molti corsi di informatica come ho può, che è per questo che sono davvero entusiasta di essere alla guida di questa quest'anno procedure dettagliate. Procedure dettagliate, per me, erano una parte essenziale del mio CS50 esperienza. Durante la procedura dettagliata, per ogni p-set, andremo attraverso il problema posto insieme, guardare oltre i problemi, specie di dividerli fino a morsi gestibili. Ti darò suggerimenti, tecniche, per ottenere attraverso e iniziare. Spero di vedervi tutti alle procedure dettagliate. Se non è possibile farlo di persona, quindi si prega di fare tune-in online. DAVID MALAN: Eccellente. Grazie, Zamyla. Così si rendono conto che procedure dettagliate sono, infatti, di Venerdì pomeriggio, ma questo è volutamente di progettazione in modo che anche se si preferisce non frequentare le lezioni di Venerdì pomeriggio, i video sarà tutto lo più rapidamente nel il fine settimana. Così si rendono conto che cs50.net sarà tutto di Zamyla di procedure dettagliate. E che ci sia data odierna e l'ora, 3:00 PM, Harberd Hall, 104. E alcuni dei compagni di insegnamento hanno anche preparato alcune osservazioni per voi in contumacia per darvi un po 'di punto di vista di ciò che la loro esperienza in entrata e in uscendo CS50 era come. Quindi, se si potesse abbassare le luci per un attimo, ti do una parte del personale di CS50. JACKSON Steinkamp: ho preso l'anno scorso CS50 come matricola nel cadere, e assolutamente saltato la mia mente. Non avevo mai preso tutte le classi di programmazione prima, e non è mai entrato in con qualsiasi informatica esperienza. E proprio, ho sentito il ronzio sulla classe e deciso di prendere. JULIA Mitelman: E 'stato davvero divertente, molto coinvolgente. Ho ancora, fino ad oggi - Ho da poco visto che ho il floppy disk che David ci ha dato il nostro primo giorno di lezione. Avevo appeso sul mio muro. Questo è probabilmente un po 'nerd, ma ho appeso in sul mio parete durante la classe come un promemoria di quanto freddo è stato. TRAVIS DOWNS: E 'così imbarazzante. JACKSON Steinkamp: Informatica è qualcosa che si dovrebbe provare, anche se non sei uno per le scienze tradizionali. E 'la propria esperienza, e CS50 farà in modo che tu sei supportato bene attraverso di essa con il suo vero e proprio esercito di TF. ALI Nahm: l'ho presa come una matricola, e così ho fatto un sacco di nuovi amici. Ho anche ottenuto introdotto per intero e questa concentrazione intera scuola di ingegneria, e quindi lo consiglio vivamente e vi danno il benvenuto nella nostra famiglia CS50. Yaniv Yacoby: CS50 insegna te come utilizzare gli strumenti che sono ampiamente accessibili. Hai solo bisogno di un computer portatile, è necessario un browser web, e si bisogno di imparare a scrivere del codice, e si può veramente costruire altre belle cose. KAREN XIAO: E 'così bello essere in grado di fare qualcosa di e sono persone lo usano e hanno la gente lo vede, e questo è quello che mi piace molto su di esso. TIM MCLAUGHLIN: - un senso di comunità, credo che, in questo corso più di qualsiasi altro corso che ho preso finora. Lei non è solo prendendo un altro - non si sta riempiendo un altro requisito. Lei non è solo andando a lezioni e andare alla sezione. Ma che stai facendo tonnellate di cose che sono tutti di programmazione e tutto sulla tecnologia, ma non è così veramente sentire come una classe la maggior parte del tempo. DOWNS Travis: E il primo giorno, hanno distribuito torta, e Sono stato subito venduto. JACOB PRITT: caramelle gratis e pizza. ZAMYLA CHAN: - indipendentemente dal tuo livello di interesse, credo che CS50, vi divertirete, e sarete intellettualmente stimolato. MARK GROZEN-SMITH: E 'sempre una festa in classe, ed è un festa ogni sera a lavorare sul set-p. JACKSON Steinkamp: Ogni volta che si finisce un set di problema, è si sente come si è finito un progetto. MELISSA NIU: E 'stato primo anno, e mi è stato fatto shopping. Ho avuto i miei quattro classi pronto, e io ero in Annenberg. E mi imbatto in un amico, e lui dice, ehi, sto acquistando questa classe denominata CS50, e dovresti venire con me. Finito per prendere in modo che cadono, e dopo quella classe, mi pensato che forse ho intenzione di minore CS. Ma eccomi qui, tre anni più tardi, ancora studiando del computer scienza e farlo veramente come un importante, e mi è piaciuto ogni momento di esso. ROB BOWDEN: Non ne ho idea. ALI Nahm: Vediamo un po '. MELISSA NIU: follia. SPEAKER 1: Mi sento come se sarei molto cliché. Vorrei solo dire, come, impressionante. Yaniv Yacoby: Accessibilità. JACOB PRITT: caramelle gratis e pizza. TRAVIS DOWNS: Impossibile rifiutare una classe che distribuisce torta. TIM MCLAUGHLIN: Energetica. VIPUL Shekhawat: Essential. ROB BOWDEN: Fammi pensare a una risposta. Credo di avere qualcosa. Oh, dio. Sì, il mio nome è Rob Bowden, e questo è CS50. [Applausi] DAVID MALAN: Va bene, allora cominciamo a dipingere un quadro della direzione in cui possiamo andare, e introduciamo questo concetto qui noto come pseudocodice. Così pseudocodice non è una programmazione linguaggio a se stessa. Non è niente di tecnica di per sé, ma è solo una specie di modo generale di esprimere se stessi con precisione, abbastanza algoritmicamente, piuttosto procedurale, ma senza doversi preoccupare di quale lingua si sta esprimendo te trovi E 'un po' il modello della lingua inglese e linguaggi di programmazione con che vi capita di essere a conoscenza, in modo da poter iniziare a scrivere questo genere di cose come andiamo. E infatti, Joseph, potrei prendere in prestito fino ad essere sul palco scriba qui? Sono andato avanti qui in anticipo e dimenticato di mettere su un paio di calzini di oggi, e questo sarà tra i nostri più Esempi di ridicolo. Ora, ho bisogno di te qui. Farò la parte calzini. Quindi qui abbiamo un pad piccolo graffio. Questo è letteralmente TextEdit in Mac. Non stiamo in realtà sta per scrivere un programma eseguibile, ma stiamo solo andando a iniziare a delineare basato pseudocodice su alcuni dei consigli forniti dall'utente a me qui. Quindi, ecco la mia pila di calzini a casa. Non ho calze a quando mi sveglio la mattina, e ora bisogno di scrivere un programma, un algoritmo di sorta, con la quale per ottenere queste calze in piedi. E lungo la strada, vediamo se ci inciampare, o di incontrare, alcune delle idee che si sta andando ad avere per iniziare a pensare molto più seriamente quando si programma perché i programmi non si comportano affatto come previsto. Così mi siedo qui. Ho il mio mucchio di calzini. Qual è la prima cosa che un essere umano sarebbe ragionevole fare quando l'obiettivo è quello di mettere su un paio di calzini? Qualcuno mi dia un passo, e solo un passo. Si '? PUBBLICO: Piegare verso il basso. DAVID MALAN: Piegare verso il basso, Ok. Fase due. Fase due. PUBBLICO: Prendi il tuo calzino. DAVID MALAN: Prendi il tuo calzino. Ok, così lieve ambiguità qui, e questo è uno dei primi pietre d'inciampo che dovremmo deliberatamente incontrano qui. E 'un po' ambigua, in modo da scegliere il vostro calzino. Bene, prendo questo, ma un computer, realizzare in un bit, non ha intenzione di avere quel tipo di istinto umano a poco scegliere quello più vicino. Stiamo per iniziare, in breve tempo, esprimendo noi stessi con maggiore precisione. Va bene, allora la fase due è prendere il vostro calzino. Lo prendiamo. Fase tre. Nella parte posteriore. PUBBLICO: Trovare una coppia assortita. DAVID MALAN: Trova una ragazza alla corrispondenza. Ok, quindi questo è un bene. Ho dovuto scegliere questa calza. Quindi l'obiettivo è di trovare un calzino corrispondenza, ora, ma ciò che vuol dire? Un essere umano ragionevole essere, proprio come il Mercoledì, quando ho sapeva come trovare Mike Smith in una rubrica telefonica, solo tipo di è andato con il loro istinto. Ma qui, è ovviamente questa calza qui, ma di un computer non sarà così istintivo. Un computer sta per avere un insieme di bit, come abbiamo discusso il Mercoledì, e questi sono organizzata in qualche modo nella memoria. Ma il punto è che un computer ha solo la capacità di guardare le cose una alla volta, e di fatto, anche noi gli esseri umani - anche se ci si sente come se lo sguardo verso il basso e una scissione secondo dopo So dove il calzino sia, il mio cervello e gli occhi presumibilmente ha un rapido scorrere di quei calzini, e poi bloccata a quello in esame. Quindi se tanto più deliberata ora come un computer, come faccio a trovare questa coppia di corrispondenza? Beh, dobbiamo iterare. Dobbiamo forse ciclo su questo pasticcio di calze sul piano in base al quale io dico una cosa del genere PER OGNI calzino, raccoglierlo , e se la stessa forma e dimensioni, come l'altro, POI dot, dot, dot, continueremo la storia. Così, per ogni calza, quindi prendo questo. Posso controllare è questo uguale a questo. Non è, quindi ho messo da parte laterale. Poi mi scorrere di nuovo. E `uguale uno? No, non è, così l'ho messo da parte. E 'questo? No. Questo? No, e così via. E poi finalmente, si spera, mi incontreranno questa calza qui. Quindi, se è la stessa forma, le dimensioni, la prenda. E ora, che cosa sarebbe il nostro prossimo passo qui? Si '? PUBBLICO: Identificare la destra dalla sinistra. DAVID MALAN: Okay, identificare destra e sinistra, in modo da per fortuna, questo tipo di opere. Un po 'di simmetrico, o ho semplicemente indossato in quel modo. Va bene, così ho identificato il diritto. E ora, prima di procedere, vorrei sottolineare quello che Giuseppe state facendo qui come una sorta di un programmatore esperto. Quindi, di nuovo, non c'è un modo di fare questo, ma oltre la semplice numerare le righe, Joseph ha già iniziato a fare questo sorta di rientro. Infatti, questa è una convenzione molto comune in programmazione, per cui quando si fa qualcosa di iterativo, looping stile, come stiamo implicando con la frase inglese "PER OGNI calza, "la convenzione in pseudocodice e, come vedremo, linguaggi di programmazione normali, è di appena rientro. Premi la barra spaziatrice un paio di volte, premere il tasto Tab o simili, in modo che nidificato sotto "PER OGNI calzino" è il pezzo di roba che avete bisogno di fare come a causa di tale ciclo. Ecco, questo è tutto ciò che è trasporto semanticamente. Ora invece, il "Se è la stessa forma e dimensione," l' fatto che "Take" è rientrato ulteriormente significa solo questa è l'unica cosa che si dovrebbe fare se tale condizione, se quel ramo, che bivio, è in effetti vero. Così ora qui, siamo in quattro fasi, identificare destra e sinistra. Ho identificato destra. Dammi punto cinque. E tecnicamente, potremmo davvero chiamare la per ogni cosa - probabilmente si dovrebbe numerare tutte le linee, se stiamo andando a fare questo. JOSEPH: [incomprensibile] DAVID MALAN: [incomprensibile]? Ok, va bene, va bene, lo faremo il vostro senso. Va bene, allora passo cinque, come si fa a fare la calza giusta? Come procedere dopo, qui? Sì? PUBBLICO: Sollevare la gamba destra. DAVID MALAN: Sollevare la gamba destra, Ok. Fase sei? Rapidamente. Gia '. PUBBLICO: Trova una estremità aperta della calza. DAVID MALAN: Okay, trova l'estremità aperta della calza. Così buono. Così qui, onestamente, un istinto molto comune sarebbe solo messo in calza destra, ma anche questo è abbastanza ambiguo. A meno che il computer o umano sa esattamente che cosa significa, non sarà per l'esecuzione che, ecco, ho trovato l'apertura del magazzino. Passo sette? PUBBLICO: Toccare le dita dei piedi. DAVID MALAN: dita Touch. Bene, ora andiamo - Va bene, ho intenzione di prendere alcune libertà qui. Grazie. Passo otto? Indossare calzino. Bene, ora io, che siamo abbastanza vicini per ordinare di prendere questo a casa. Va bene, quindi questo sale. Prenderò alcune libertà con ciò che significa, in realtà. Mettere il calzino su. Va bene, ora passo nove? PUBBLICO: Metti piede. DAVID MALAN: Grazie. Passo nove, messo piede, e ora, possiamo ripetere. Quindi presumibilmente, ora possiamo andare in punto 10 e dire identificare sinistra calzino, ma questo è presumibilmente già fatto. E così poi, posso ordinare di ripetere la procedura. Ma questo tipo di pone la questione. Prima, l'ultima volta che abbiamo voluto ripetere qualcosa, ha fatto in modo iterativo, ancora e ancora, un ciclo FOR Ogni ciclo per così dire. Avrebbe senso utilizzare un ciclo, al fine di gestire sia la sinistra e la destra calzino? Perché ci si sente come queste operazioni sono più o meno identiche tranne per il fatto che uno inizia qui e uno inizia da qui? Abbiamo loop, o dobbiamo solo continuare a passi di scrittura 10 e 11 e 12? PUBBLICO: Loop. DAVID MALAN: Ok, quindi ciclo. Io in realtà potuto dire solo andare avanti. Allora, perché è questo il caso? Beh, questo è in realtà il primo della nostra non ovvio decisioni di progettazione, e in effetti, uno dei parametri con cui inizieremo a valutare, per noi e per voi, il qualità del programma è proprio come è ben progettato. Hai fatto la minima quantità di lavoro necessario per ottenere il lavoro fatto più velocemente, sia in termini di il vostro tempo o, in termini di tempo di esecuzione del computer? Quante operazioni ci vuole per eseguire? Quindi probabilmente, questa è l'occasione per un ciclo perché appena comincio a copiare e incollare, come Giuseppe efficace sarebbe iniziare a fare in un attimo, sei una specie di sprecare il vostro tempo, e sei stato doppiamente espressiva. Ma, allo stesso tempo, questi sono in realtà solo due speciali casi, sinistra e destra. E mentre prima, potrei avere 10 o 20 o più calzini in una pila, fa decisamente senso di non avere 50 linee di codice di controllo dicendo questa calza, quindi il prossimo, poi il successivo. Ecco, è un po 'meno ovvio, e mi ha proposto che abbiamo potuto andare in entrambi i modi. Potevamo o avere quel ciclo, anche se solo i loop due volte, o potremmo semplicemente copiare e incollare solo un po ' qui, al fine di ottenere il lavoro fatto. Ma questo programma è bacato, per così dire. Potrebbe avere alcuni errori, errori o casi d'angolo, in modo da dire, che non abbiamo davvero anticipare. Nulla è andato storto questa volta, ma quello che poteva andare storto durante l'esecuzione di questo programma? PUBBLICO: Non ci sono calzini. DAVID MALAN: Quindi ci potrebbe essere senza calze lì sorta. Quindi consideriamo questo caso angolo. Quindi, se si potesse scorrere indietro fino al punto uno, quindi passo uno è stato piegare verso il basso, in modo che i controlli fuori. Fase due, prendi il tuo calzino, ma poi trovare corrispondenza calzino, identificare destra. Abbiamo fatto una specie di sacco di ipotesi, e questo è, francamente, perché a volte in crash del programma. Se si, il programmatore, hanno fatto alcune ipotesi, come sicuramente ci sarà calzini o sicuramente ci sara ' per essere memoria disponibile nel computer, sicuramente ci sara ' ad essere lo spazio su disco a sinistra sul disco rigido - Beh, se si fanno queste ipotesi, e che non è, in realtà, la realtà, che sa a volte ciò che del computer intenzione di fare? E a volte, quando si ottiene la palla che gira spiaggia o la congelati di Windows o simili, è proprio perché alcuni programmatore non ha previsto i cosiddetti casi d'angolo. Che altro poteva andare storto in questo programma? Si '? PUBBLICO: Non si dispone di una gamba destra e gamba sinistra. DAVID MALAN: Okay, non potrebbe disporre sia di una gamba destra e una gamba sinistra, e quindi il programma potrebbe non essere universalmente applicabile. Altri? PUBBLICO: Si potrebbe avere preso un calzino orfano. DAVID MALAN: avrei preso un calzino orfano, quindi un non corrispondente calzino che ha appena non fratelli perché ho perso, è strappata, è ancora nel lavaggio, o simili. Così che, anche, non è stato realmente gestito. Si '? PUBBLICO: Si potrebbe già avere calzini. DAVID MALAN: Potrei già calze. Io in realtà non controllare. SE non si dispone di calze, quindi procedere a fare linea uno e due. E che potrebbe accadere. Si addormenta con i tuoi calzini e simili, in modo da anche questo, un caso d'angolo molto ragionevole. E forse altro? PUBBLICO: La calza è dentro e fuori. DAVID MALAN: Quindi il calzino è dentro e fuori, quindi abbiamo fatto nessun errore controllo, insomma. Non abbiamo controllato se lo stato del mondo è come ci aspettiamo. Non abbiamo controllato se in realtà abbiamo trovato quello che stiamo cercando. E anche se questa è una sorta di un esempio ridicolo coinvolgendo calzini, alla fine della giornata, questo è esattamente l' tipo di mentalità è necessario avere durante la scrittura di programmi, anche in Scratch così come in C, in JavaScript, in PHP, perché altrimenti, i vostri programmi esporrà la equivalente di quel pallone da spiaggia filatura o semplicemente cedere risultati imprecisi. Ringraziamenti vanno qui per il nostro scrivano di Joseph. [Applausi] DAVID MALAN: Va bene, allora ciò che è, in Infatti, un programma per computer? Bene, diamo una rapida occhiata a un rappresentante uno qui. Quindi questo è un programma scritto in un linguaggio chiamato C. C è lingue più recenti piuttosto vecchie in questi giorni, ma molti sono costruiti su di esso. In effetti, PHP, uno dei web-centric lingue faremo usare verso la fine del periodo, si ha quello che viene chiamato un interprete, un programma che è scritto in C, ma più su quello in molte settimane da oggi. Ma questo programma, e questo è ciò che significa scrivere un programma, anche se molto semplice. Abbiamo un po 'di sintassi piuttosto criptico qui, ma è possibile intuire, anche se non hai mai programmato prima, che cosa questo programma fa. In effetti, io non so che cosa è printf, ma di certo la stampa evoca l'idea di stampare qualcosa. E quindi sì, questo programma è in ultima analisi, andando a stampare le parole "Hello, World". Ora, se si dispone di un Mac o di un PC o un computer Linux, le probabilità sono, almeno se si è scaricato un po 'di libertà software disponibile, si sarebbe potuto scrivere programmi su il proprio computer portatile per un bel po 'di tempo. In Mac OS, per esempio, c'è questo programma chiamato Terminale che viene fornito con un Mac, che di solito è nel vostro Cartella Utilities, e si apre in genere un bianco e bianco o una finestra bianco e nero in cui si dispone di un richiedere a cui è possibile digitare dei comandi. Quindi, questo è in realtà ricorda ciò che i computer usato per essere prima utente grafica interfacce GUI, è arrivato. Ora, in Windows, si dispone di un meccanismo simile nella forma del prompt dei comandi. Ma che cosa ho intenzione di fare è aprire, diciamo, TextEdit di nuovo, quindi lo stesso programma che stavamo usando per pseudocodice un momento fa, e ho intenzione di andare avanti e scrivere il mio primo programma. Include stdio.h, qualunque cosa significhi, int main vuoto, qualunque cosa significhi, e poi in mezzo qui, printf ("ciao, mondo."). E poi citazione vicino, chiudere parentesi, punto e virgola. Ora ho intenzione di andare avanti e basta premere Comando-S. Vado di andare avanti e salvare questo come hello.c, in modo che la convenzione in il mondo della programmazione C è il nome del file del punto c. Ho intenzione di mettere solo nella directory Home John Harvard, qui, fare clic su Salva, e ora ho intenzione di andare oltre a questo finestra di terminale, che è di nuovo presente in bianco e nero rapida dove posso eseguire i comandi. Posso eseguire programmi digitando il loro nome, non per doppio clic icone nel senso comune del termine. Ma la cosa è di circa C è che un linguaggio come C prima si presenta in questa forma, qualcosa chiamato codice sorgente. Qualcosa che sembra un po 'come l'inglese, ma è sicuramente meno come l'inglese di un pseudocodice Giuseppe momento fa. E 'un po' di più arcano. Sembra seguire alcuni schemi o regole. Il fatto che ho parentesi graffe, punti e virgola, le citazioni, parentesi angolari, si sente come un computer si avvicinò con questo genere di linguaggio. Ma se vado, adesso, a questa finestra di terminale, posso eseguire un comando che sta per convertire il codice sorgente è qualcosa chiamato codice oggetto. Che sta per convertire inglese sintassi simile a zero e quelli, lo stesso tipo di zero e uno noi parlato di Mercoledì. Ora, ho intenzione di eseguire un comando chiamato Clang. Maggiori informazioni su questo nelle settimane a venire, ma è un programma con che posso convertire hello.c in un sacco di zero e uno. Ora, ho eseguito questo comando. Ho eseguito Clang, e poi ho detto correre da soli su questo file chiamato hello.c, che ho creato un momento fa, e nulla sembra accadere. Ma in effetti, se io curiosato mia home directory, vedrei che questo programma a.out stupidamente chiamato ora esiste. Questo è solo il nome di default per un programma quando si scrive in C. Siamo in grado di eseguire l'override di questo alla fine, ma è il a.out nome del programma che ho appena convertito in zero e uno. E ora che si tratta di zero e uno, il mio Mac, in questo caso, o PC Windows, in grado di capire i bit, quelle zero e uno. E così, quando ho colpito Invio, vedo "ciao, mondo!" Ma è un po 'bacato. Non riusciva a dire "ciao, mondo: aria: - jharvard." Aria è il nome del mio computer. Jharvard è il nome dell'account, quindi quello che ho chiaramente omettere dal programma? Una specie di interruzione di riga. Non ho colpito l'equivalente di Enter o il ritorno a capo, e questo è, ancora una volta, testimonianza del fatto che i computer possono solo fare quello che dicono loro di fare. E il fatto che non ho detto il computer spostare il cursore sulla riga successiva - beh, non è certo intenzione di farlo e basta presuntuosamente per me. Quindi, se torno al mio programma, e dico \ n - Quindi \ n, come vedremo presto, è la via della rappresentare le cose strane come caratteri di nuova riga, cose che altrimenti essere il risultato di premendo il tasto Invio. Ma per ora, è sufficiente sapere che premendo il tasto Invio si solo fare il nostro codice in modo strano, così il mondo ha deciso, lo sai ciò che, per mantenere le cose più belle, di tenerlo su una riga, facciamo solo dire \ n rappresenta una nuova riga. Vorrei salvare nuovamente il mio file, tornare alla finestra di terminale, e re-run a.out, Invio. Ancora buggy, ma perché? PUBBLICO: [incomprensibile] DAVID MALAN: Sì, quindi ho bisogno di ricompilarlo. Quindi, per compilare un programma significa semplicemente convertirlo da fonte codice al codice oggetto il codice sorgente, di zero e uno. Ora, il solo fatto che mi ha colpito in questo Salva TextEdit non ha cuscinetto su questi zero e uno, perché ho bisogno di tell Clang hey, ho cambiato le righe di codice, il codice sorgente. Hai bisogno di rigenerare a.out. Niente sembra essere successo, ma in un computer, dalla riga di comando, per così dire, in cui non accade nulla, di solito significa che tutto va bene. Quando qualcosa accade, significa che hai sbagliato, in generale. Quindi cerchiamo di andare subito ad a.out, e in effetti ora, ho "ciao, mondo. " E ora, che dire di questi zero e uno? Dove, infatti, sono quelli? Beh, non posso davvero solo tipo di poke in giro molto efficace. Vorrei aprire TextEdit. Ecco a.out. Lasciatemi andare avanti e aprire questo, e questo è ciò che il mio apparentemente programma è simile. Così ho aperto, non hello.c, ma a.out. Ma questo non è in realtà quello che il mio programma è in realtà. Chiaramente, questo è una sorta di caratteri alfabetici. Non vedo zero e uno, ma questo è perché a.out è un programma. Zero e uno - ma TextEdit, come suggerisce il nome, è proprio come Blocco note di Windows, è solo un editor di testo, in modo che sia confondendo tutti questi zeri e uno in se fossero, che cosa? Caratteri ASCII. Così ricordo il Mercoledì, abbiamo appena si avvicinò con questo mappatura arbitraria di numeri, o bit, alle lettere dell'alfabeto alfabeto e simboli di punteggiatura e simili. Così TextEdit, che si tratta di un editor di testo viene erroneamente interpretato quei modelli di zero e uno, che si suppone essere Parole di stampa, come "ciao, mondo". E 'loro visualizzazione come ASCII, ed è per questo che sembra un po 'disordinato. Ora, ci sono alcuni suggerimenti di correttezza a qui. Notate se evidenziare, vi è un accenno di realtà "ciao, mondo ", così da qualche parte in questo programma è la frase che ho scritto. Ma andiamo avanti e ora vedere con un programma diverso. Questo non è quello che utilizzeremo spesso, ma si tratta anche di un Mac e sarà all'interno dell'apparecchio CS50. Lasciatemi andare avanti e aprire con un programma chiamato XXD. Indietro nel giorno, la maggior parte dei programmi sono stati nominati piuttosto criptico, e così la tendenza continua. Ma-b significa sputare questo programma come binario. Non eseguirlo. Mostra a me come zeri e uno, e questa è la C programmare abbiamo appena scritto. Ora, io, come un essere umano qui, onestamente non so cosa questi modelli diversi di zero e uno rappresentano. Indietro nel giorno, io, con le mie schede perforate o simili, sarebbe in realtà hanno a cercare ciò che questi diversi modelli di 01111000, rappresentano di fatto. O peggio, avrei bisogno di fare la punzonatura o la creazione di questi modelli di zero e uno. Ma per ora, prendere sulla fede che una CPU, Intel all'interno, in modo a parlare, all'interno di tutti i nostri computer in questi giorni, lo sa come interpretare questi zero e uno. E alcuni zero e uno significa di stampa. Alcuni zero e uno significa riprodurre un suono. Alcuni zeri e di uno significa prendere l'input dell'utente da una tastiera. Ci sono tutti i tipi di modelli diversi, ma noi per fortuna, come esseri umani, solo in generale bisogno di preoccuparsi di programmazione in questo livello piuttosto elevato. E in altre classi CS si può scavare verso il basso più profondo e guardare le cose come quelle zero e uno, o ancora altre cose ancora. Quindi ora cerchiamo di convertire questo. Passiamo molto rapidamente dalla C e passare a qualcosa di un poco più confortante, un po 'più eccitante, in quanto possiamo tornare le nostre animazioni e suoni e simili, che chiaramente ci hanno specificati in piuttosto interfaccia primitiva. Quindi questo stesso programma in C può essere rappresentato ora in questo linguaggio di programmazione chiamato Scratch come segue. Questo è l'equivalente di questo programma ciao mondo scritto in questo puzzle in stile linguaggio pezzo intitolato Scratch. Permettetemi quindi di andare avanti e di aprire questo programma molto. E 'di nuovo chiamato Scratch. E 'liberamente disponibile, e questa è la stessa cosa che iniziato oggi. Quindi questo qui è Scratch, ed è suddiviso in alcuni diversi pezzi. Sulla destra cima, abbiamo la cosiddetta fase, e anzi, è lì che i biscotti eseguito solo un po 'fa. E su quel palco sono cose chiamate sprite, caratteri o oggetti, o entità. Non ha molta importanza come si pensa di loro, ma sono programmabili, cose mobili, e in questo caso, questo programma che il nostro studente ha scritto ha un paio di pan di zenzero biscotti, un paio di biscotti circolari, un grosso insieme di cuori, un grosso insieme di occhiali. A causa di questo, egli o ella è in grado di programmare ciascuno dei singoli caratteri separatamente. Ora, che cosa significa programmare questi personaggi? Beh, lasciatemi andare avanti e fare clic su questo cookie mano sinistra e scorrere verso l'alto a sinistra qui. In alto a sinistra del mio schermo ora è il cosiddetta zona di script. Questa è una sorta di tabula rasa, inizialmente, su cui posso trascinare e rilasciare i pezzi di un puzzle che, francamente, non esattamente quello che dicono. Nella parte superiore di questa pila di pezzi del puzzle è la parola Quando Bandiera Verde clic, e se non hai notato prima, il modo in cui ho iniziato a quella canzone cookie è stato clic, letteralmente, una bandiera verde. Così quel pezzo di puzzle in alto a sinistra ci indica quando il clic umani la bandiera verde, proceduto a fare le seguenti cose. Ora, che cosa hanno fatto biscotto procedere a fare? Io non so davvero come interpretare questo ancora, ma la biscotto apparentemente impostare la sua gola a zero, poi attese tre secondi, poi cambiato gruppo a uno, allora aspettò un attimo, poi ha cambiato il suo solco posteriore a uno. E poi questo si presenta come un po 'di un bug, non dovrebbe cambiare la sua gola ancora e ancora meno che non sia essere cambiato altrove, ma questa serie di passaggi è ciò che è dettando il comportamento di questo particolare biscotto. Quindi cerchiamo di fatto scorrere avanti e non guardare qualcosa proprio così complesso ma. Lasciatemi andare avanti e andare su File, Nuovo, e ottenere una tabula rasa. Così ora, ho effettivamente un'area vuota dello script, uno stadio vuoto, Scratch con la nostra impostazione predefinita sprite, e in alto a sinistra sul mio schermo ho la paletta di tutte le loro pezzi del puzzle disponibili. E non passerà attraverso quasi che molte di queste cose oggi, perché, ancora una volta, la maggior parte sono auto-esplicativo, ma lo faremo cercare di classificarli e di evidenziare le somiglianze con queste lingue in futuro a cui ci si immergerà. E in alto a sinistra qui è la prima volta Bandiera Verde clic, per cui vorrei trascinare questa qui, diminuire un po '. E se clicco la bandiera verde, non succede nulla proprio perché Non ho attaccato ogni logica, ogni dichiarazione per così dire, a quella bandiera verde, per cui vorrei andare fino alla categorie qui. Sono attualmente nella categoria di controllo. Ho invece intenzione di andare verso il basso per la categoria Aspetto e c'è un sacco di cose qui che dire, dì, Pensate, Cambia colore, Costume Switch. Così si possono fare cose stupide con costumi e suoni e simili. Lasciatemi andare avanti e dire Say, e ora notare come mi trascina e rilasciare questo pezzo di puzzle, sta andando a voler a scrocco nella forma corrispondente. Così, quando ho andare avanti e lasciare andare il mio mouse, si bloccano insieme, e ora se vado qui e fare clic sulla bandiera verde, il gatto è in realtà dire ciao, perché questo è ciò che è dentro di questa scatola bianca. Vedremo che questa finestra di bianco è quello che si chiama un argomento, o un parametro. E 'un modo di cambiare il comportamento, in questo caso, un pezzo di puzzle, ma se voglio dire esattamente quello che ho detto prima, dire ciao, mondo, ora posso tornare qui, cliccare play, e "ciao, mondo" è quello che ha detto. Quindi siamo letteralmente programmazione ora. Non è tutto ciò che convincente di un programma, ma almeno si tratta di un qualcosa di più convincente di quello sembra, a prima vista, come questo. E siamo in grado di ottenere molto rapidamente tanto più espressiva perché in Scratch, come in altre lingue, c'è tutto i tipi di dichiarazioni, non basta dire o la stampa qualcosa, ma si possono fare cose come in attesa, come abbiamo appena visto con il cookie, un certo numero di secondi. È possibile riprodurre i suoni in un ambiente di Scratch solo come si può in un normale riproduzione audio programma per computer. È possibile controllare le cosiddette espressioni booleane. Così ora, cominciamo ad aggiungere al nostro kit di strumenti un po 'di terminologia che riguarda in realtà l'esempio che Joseph e l'ho fatto qui con i calzini. Quindi le dichiarazioni sono solo dichiarazioni di fatto. Fate questo. Una direttiva per lo sprite, o me l'umano, di fare qualcosa. Un'espressione booleana è qualcosa che ha un valore, un cosiddetto valore di verità, che è uno zero o uno, false o vero, acceso o spento, no o sì. Non importa come si pensa di questo, ma è un binario Stato. Nate Come discusso nel video di Mercoledì, due cose diverse. Quindi, in Scratch, espressioni booleane capita di guardare come questi oggetti blu qui, e in questo caso, la domanda marchio implica che si sta facendo una domanda. È il gatto, o lo sprite, toccando il puntatore del mouse? Quindi questo è solo un esempio di un blocco Scratch che sta per permetterci di controllare sì o no, è il mouse tocca il sprite sullo schermo? E questo può essere utile se si vuole realmente fare le cose con il mouse. Oltre alle espressioni booleane, abbiamo cose come è il mouse verso il basso, in modo da poter rilevare questo tipo di mettere in discussione pure. Siamo in grado di fare matematica se si vuole realmente, e non c'è usi in realtà più interessanti per questo che solo pura aritmetica, come vedremo. Pseudo casualità e rendere il vostro programma sembrano pensare o si comporta in modo diverso sulla base di alcuni valori apparentemente casuali, e poi ci sono cose come espressioni booleane come AND. Quindi, se si vuole realmente controllare due valori, vedremo in Gratta che si può effettivamente verificare se questo è vero e questo è vero. Ad esempio, nel caso dei miei calzini, avrei potuto in molto fine ha fatto la domanda se calza a sinistra è a destra e calza è su, chiudere. Hai fatto tutto per il giorno, in modo che sarebbe un possibilità per tale. Quindi cerchiamo di andare avanti e cercare di mettere insieme alcuni di questi e andare in un paio di esempi più convincente di questo. Permettetemi quindi di andare avanti qui e aprire alcuni degli esempi che sarà sempre sul sito web del corso, come bene, e aprire hello2. Quindi, in hello2 qui, abbiamo un programma che sta facendo alcuni cose, ma non lo fa nel modo più efficace come si potrebbe. Così qui si dice "ciao, mondo" per un secondo e poi aspetta per un secondo. E poi fa di nuovo, e poi lo fa di nuovo. Quindi, se clicco la bandiera verde, dice Scratch "Ciao, mondo. Ciao, mondo. Ciao, mondo. "E questa è, ovviamente, candidato ora miglioramento. Qual è il miglioramento marginale, si spera, siamo in grado di ora fare se Scratch supporta il concetto? Una specie di loop. Una specie di ripetizione, ora, sarebbe bello, così mi lascia effettivamente provare che. Lasciatemi in realtà andare a spostare questo. Quindi bando può staccare i blocchi con la stessa facilità è possibile aggiungere al allegate. Lasciami andare sotto controllo, scorrere verso il basso qui, e anzi, c'è questo pezzo di puzzle qui, ripetizione e sempre e Se per sempre. Quindi c'è un certo numero di modi di esprimere costrutti di loop in Scratch. Quello che probabilmente vuole qui non è per sempre, perché ho solo voglio che questo accada per tre volte, ma probabilmente Ripeti. Permettetemi quindi di trascinare Ripetere qui, drag and drop, e ora invece di dire "ciao, mondo" tre volte separate, vorrei trascinare questo pezzo del puzzle qui. E anche se non sembra in forma, il programma è intelligente per rendersi conto che crescerà a riempire, quindi è il forme che la materia e non la dimensione assoluta. Vorrei cambiare la ripetizione a tre, e ora lasciami andare avanti e trascinare attendere un secondo in là pure. Sta per scattare in pure, e così ora ho intenzione di trascinare questi ragazzi qui da noi e solo buttare via perché mi non ne ho più bisogno. Fammi zoom indietro e fare clic sulla bandiera verde ora, e abbiamo lo stesso programma, ma, come previsto prima, meglio progettato perché si può immaginare quanto male questo programma otterrebbe, sicuramente esteticamente, se si doveva avviare la copia e incolla, copia e incolla, o trascinando le stesse cose darn ancora e ancora. Ora, semplicemente dicendo cose sullo schermo, la stampa su schermo, in realtà non è poi così eccitante, quindi cerchiamo di aprire un varianza terza quivi. E ora, come si vedrà, questo prende subito fastidioso - [MEOW] DAVID MALAN: - ma è anche carino. [MEOW] DAVID MALAN: Okay, quindi meglio, e possiamo certamente utilizzare che stessa transizione di questa suddivisione in blocchi in su in un loop struttura, ma cerchiamo di renderlo più interessante ancora. Lasciatemi andare avanti e aprire una varianza quarto qui, dove ho prendere le cose un passo avanti. Quindi, secondo questo, sciocco anche se questo è in un primo momento sguardo, che cosa è questo programma intenzione di fare? Sta andando a miagolare una volta. Perché? Bene, uno è, per quanto ne so, sempre meno di due. Non c'è concetto di casualità qui. Ho letteralmente hardcoded uno e due, ma questo è un esempio ora effettivamente utilizzando un'espressione booleana. Molto simile a come fece Giuseppe nel suo pseudocodice, il rientro IF a trovare calze di corrispondenza quindi effettuare le seguenti, qui abbiamo un'espressione Se uno è inferiore a due POI - e infatti abbiamo anche un po 'di rientro, dove il viola è leggermente rientrato verso destra - Allora si sta andando a giocare il miagolio suono. Ora, in questo caso, che si è sempre inferiore a due, in modo tale è una specie di perdita di una condizione. Ma saremo in grado, come vedremo, di inserire altre cose in questi segnaposto dove uno e due sono ora. Quindi cerchiamo di ora passare esempio cinque di questi diversi saluti e guardare a ciò che questo programma sta per fare. Così ora, in una frase in inglese, come fa questo programma si comportano? PUBBLICO: miagolii la metà del tempo. DAVID MALAN: metà Meow di tempo, quindi questo è un modo di trasmettere un'idea molto semplice. Anche se ci capita di utilizzare alcune disuguaglianze qui in alcuni numeri, questo è davvero solo un programmatico modo, un modo preciso, di dire se la moneta viene testa, andare avanti e meow. O al contrario, se la moneta viene croce, non miagolare. E in questo caso, come possiamo esprimere questo? Ci scegliere un numero casuale da 1 a 10, e se questo numero è inferiore a 6, andare avanti e miagolare. E come ha fatto questa a entrare? Bene ancora una volta, si noti solo il trascinamento della selezione e cose scatta in posizione. Così ora vediamo se funziona questa casualità. Lasciatemi andare avanti e fare clic sulla bandiera verde. [MEOW] DAVID MALAN: Okay. [MEOW] DAVID MALAN: Okay. Ok, bene, così abbiamo ottenuto teste, teste, le code in modo efficace. Tails. [MEOW] DAVID MALAN: Bagni. [MEOW] DAVID MALAN: Eccellente. E 'sempre imbarazzante quando solo statisticamente si ottiene un cattivo eseguito, ed è tutte le teste, e il programma in realtà non lo fa funzionano come ci si speranza. Ma questa volta, ha funzionato, e ci sembra di avere, se abbiamo fatto questo un numero infinito di volte, il 50% delle quote. Ora di nuovo, non tutto ciò che interessa, solo fare i gatti meow, così vediamo se non possiamo avanzare questo un po 'più qui in versione sei. Così ora, abbiamo la versione davvero fastidioso - [Miagolii ogni pochi secondi] DAVID MALAN: - e questo è ciò che è noto, in generale, come ciclo infinito. Così ciclo infinito, in questo caso si sente male. E 'sicuramente per avviare il suono male, ma infinito cicli non sono sempre male. Riuscite a pensare contesto in programmi per computer in cui ci si in realtà vuole un loop infinito? Si '? PUBBLICO: Quando si desidera controllare una condizione. DAVID MALAN: Ok, quando si desidera mantenere il controllo di una condizione? Per esempio? PUBBLICO: [incomprensibile] DAVID MALAN: Ok, bene, quindi se hai avuto qualche programma, un po 'di genere di cose domotica, in cui si desidera costantemente monitor è qualcosa di così. Sono le luci accese? Le luci accese perché forse si ha un timer, e si desidera loro di andare via, potrebbe essere necessario fare qualcosa ancora e ancora. E infatti, parlando di timer, qualcuno di voi che hanno orologi sul computer o orologi digitali, che è un ciclo infinito. Continua ad aggiornare l'ora, perché è costantemente controllo e verifica e controllo ha il tempo di cambiata, e se sì, oh, mio ​​dio. L'orologio è finalmente cambiato. Ha bisogno di visualizzare tale valore per voi. Quindi, considerando che la maggior parte dei loop temporali infiniti sono un errore, o per lo meno una decisione di design povero, a volte lo fanno hanno il loro valore. Bene, cerchiamo di avanzare ulteriormente qui per hello7. Così ora il programma un po 'più interattivo. Vorrei ingrandire qui, e ancora una volta, questo è ciò che è bello su Scratch. E lo useremo per essere chiari, Scratch, proprio oggi e in problema della prossima settimana impostato. Ma il Lunedi, ci immergiamo in C. In questo programma, lo fa, sempre, il seguente. SE toccare il puntatore del mouse - ora, chi è il contesto qui? Beh, e notare che chi è selezionata qui in basso è proprio il gatto, sprite uno, così questi script, questo programma, vale per lo specifico. Quindi, se questo gatto è a contatto con il puntatore del mouse, quindi sta andando per giocare a questo verso il basso e attendere due secondi, e quindi ripetere fino alla nausea. Quindi cerchiamo di andare avanti e ha colpito il gioco. Non succede nulla, ma se voglio il pet gatto ora, posso solo. [MEOW] DAVID MALAN: adorabile. [MEOW] DAVID MALAN: Okay, meno fastidioso, ma diventa anche noioso, quindi cerchiamo di andare avanti e vedere se non si può iniettare una logica poco più. E 'stato ad esempio sette. Qui a esempio otto, andremo a introdurre una condizione ELSE. Quindi, molto simile a un bivio letterale della strada, in cui si può andare a sinistra oppure si può andare a destra, una condizione in un linguaggio di programmazione lingua come Gratta e Vinci, o come vedremo C, può permettere di andare in una direzione o in un altro tramite un IF ELSE costruire. Così letteralmente, se toccando puntatore del mouse, questo riprodurrà un suono, ELSE è andare a giocare a questo altro suono, miagolio. Ora, se si può dedurre dal nome di questi suoni, è possibile probabilmente pensare che questo programma è destinata ad evocare l'idea. Questo gatto è miagolando felicemente. [MEOW] DAVID MALAN: Fortunatamente, ma non lo fa piace molto essere toccato. [Roars] DAVID MALAN: Così ora abbiamo un gatto che griderà contro di voi. Va bene, un ultimo esempio con i gatti qui, e cerchiamo di versione open nove di questo qui. Così ora, abbiamo il suono successivo più fastidioso che ho potuto trovare, quindi abbiamo un tricheco o leone di mare qui che sta per effettuare le seguenti operazioni. [CORTECCIA SEAL] DAVID MALAN: Ok, questo andrà avanti fino a quando non capire come questo programma funziona. Così questa volta, questo animale ha due script, e ciò che è interessante è che questi script sono in corso di esecuzione in parallelo. Quindi, perché entrambi iniziano con una bandiera verde cliccato, è come andare in questo modo, entrambi i programmi e iniziare a correre è una volta anche se sono loop per sempre. Così nello script in alto, ho un po 'logica. Quali caratteristiche che forniscono fino lì? [CORTECCIA SEAL] PUBBLICO: [incomprensibile] DAVID MALAN: Se si tratta di che cosa? [CORTECCIA SEAL] PUBBLICO: Se disattivato a zero, sta andando a continuare a giocare il suono. [CORTECCIA SEAL] DAVID MALAN: Ok, bene. Quindi, se disattivato, qualsiasi cosa sia, questa cosa arancione è pari a zero, Quindi riprodurre il suono leone di mare e pensare "Oh, ciao, "per due secondi. Ora, io non so cosa è disattivato, ma nulla evoca l' idea di false o off. Quindi, se disattivato è falsa, quindi se non disattivato, mantenere la riproduzione del suono. Va bene, come possiamo disattivare questa cosa? Bene, diamo un'occhiata al secondo script laggiù. Il secondo script dice impostato su disattivato a zero. Nota è anche arancione, quindi cosa Scratch fa è che i colori blocchi dello stesso colore, se è una specie di logicamente correlati. Così come rabboccare sordina era arancione, è così mute qui menzionato nel blocco arancione. Ma questo è un assegnazioni delle variabili, così come in algebra, si ha x e y e z, nella programmazione è necessario variabili, ma sono in genere - Soffermiamoci per un momento e figura come per fermare questo abbaiare. Come posso fare questo? [CORTECCIA SEAL] DAVID MALAN: Okay. Si è fermato. Va bene. Così come in algebra si dispone di variabili x, y, z, ma in programmazione, avente come variabili x, y, z ed è generalmente visto di buon occhio perché non sono per niente espressiva. Essi non hanno alcun significato semantico di sorta, così nella maggior parte linguaggi di programmazione, le variabili possono avere piena veri e propri nomi, parole o frasi, come in sordina, a dire quello che fanno. Quindi questo secondo script è stato anche ascoltare per sempre, e ha detto se la chiave, la barra spaziatrice della tastiera, è premuto, il punto interrogativo. Quindi c'è una condizione con una espressione booleana che è andando a rispondere a una domanda sia veritiero o falso, allora che ho dentro di esso se il tasto viene premuto e lo spazio SE sordina è pari a zero, impostare sordina a uno, ELSE impostare sordina a zero. Così questa altra forcella nella strada, e notate come ho nidificato le due condizioni IF, è un modo di controllo è il Space Bar premuto perché in tal caso, sia io voglio andare questo modo o in quel modo. E come faccio a invertire il valore disattivato? Devo controllare è pari a zero? Se è così, ne fanno uno, altrimenti lo rendono lo zero per passare quindi i suoi due stati. Va bene, quindi abbiamo poi alcuni di questi fondamentali costrutti. Ci sono espressioni booleane, e realizzare, anche, questi sono non è poi così sconosciuto. In realtà, questa è una schermata veloce suo corso Harvard CS50 strumento commerciale, e qualsiasi sito web là fuori che ha caselle di controllo e menu a discesa sono davvero, per tutto questo tempo, usato Espressioni booleane. In questo caso qui, se si fa clic sulla casella di controllo accanto a Ovviamente maggiore o uguale a 4,5, o la prossima stesso facoltà, si sta specificando una espressione booleana. Mostrami corsi per i quali tale espressione è vera. Oppure, a destra, non è in contrasto con i corsi che sono prendere, se è selezionata, allora sì, si desidera controllare questa condizione, altrimenti si desidera ignorarlo. Le espressioni booleane Così sono una sorta di tutto, ma quando li mettiamo in condizioni, se le condizioni IF, IF Altre famiglie, o si può anche simulare più profonda livelli, IF ELSE IF ELSE - in modo che una specie di stato ternario. Si può andare in questo modo o in questo modo o in questo modo. Siamo in grado di mantenere le cose di nidificazione di andare in direzioni diverse. Così Scratch ha questi cicli, come sempre. Ha queste caratteristiche come ripetizione 10, un po 'di numero finito di volte. Abbiamo la possibilità ora di impostare le variabili, in questo caso Ho dichiarato, ad esempio, una variabile chiamata calzini. Ho inizializzato a 0, e questo è ancora un altro senso abbiamo potuto prendere qui con Giuseppe, per cui forse basta tenere traccia del numero di calzini che ho su e terminare il programma quando il valore che la variabile è 2. Questo sarebbe un altro modo di generalizzare tale tipo di problema e fare qualcosa di nuovo e di nuovo. Bene, andiamo avanti e ora introdurre un paio di cose nuove. Così quelli di voi con precedente esperienza di programmazione sarà So che un sacco di lingue hanno array, o vettori o liste, e in effetti, Scratch ha qualcosa di simile, anche. Quindi cerchiamo di vedere se non possiamo prendere le cose al livello successivo qui. Se ho la possibilità, ora, con questi pezzi di puzzle per aggiungere qualcosa, come una parola o un numero, a una variabile, posso iniziare ad accumulare cose. E questo è in realtà a proposito belle per cose come i giochi, giochi di ruolo in cui sei una specie di giro un mondo di fantasia raccogliere le cose, raccogliendo le cose, accumulare punti, o simili. Si potrebbe desiderare di tenere traccia di un qualche tipo di inventario, e in effetti, questo è quello che uno dei nostri ex studenti qui fatto con qualcosa chiamato Fruitcraft RPG. Permettetemi quindi di andare avanti e di aprire questa cosa qui, e in Fruitcraft, abbiamo questo mondo fino in cima. Permettetemi quindi di andare avanti e fare clic sulla bandiera verde. Si noti in alto a sinistra è una sorta di inventario. Questo è implementato in Scratch come quello che chiameremo un array o un elenco, e ora abbiamo questa piccola animazione. Così come abbiamo iniziato prima, con questa storia d'amore cookie, e poi abbiamo avanzato ai gatti e leoni marini, ora siamo in grado di avere cose che sono ancora più interattivo. E questo piccoletto blu, posso iniziare a muoversi intorno al suo casetta qui. Quindi sembra che lui ha una via d'uscita verso il basso qui, quindi sto usando i tasti freccia, su, giù, sinistra destra. E ora sono fuori, quindi cerchiamo è quello che abbiamo qui. Sembra un arancio, e in effetti, non appena tocco la arancione, si lasciò cadere nel mio inventario. Se vado qui per le ciliegie, ora ho qualcosa altro nel mio inventario. E questo è tutto bello e carino, ma pensare a come, ora, questa è implementato. Beh, abbiamo questa idea di una lista, e questo è apparentemente un pezzo di puzzle che basta dire quello che vuoi aggiungere ad essa, aggiungere arancia, aggiungere le ciliegie. Ora, che cosa è questo piccoletto blu facendo? Beh, e 'un folletto. E presumibilmente, l'arancia e le ciliegie - essi stessi erano sprite separati. E l'utilizzo di condizioni di espressioni booleane, le studente era probabilmente in grado di esprimere IF ragazzo blu è ciliegie che toccano poi aggiungere le ciliegie parola al suo inventario, e quindi anche nascondere lo sprite ciliegio. Quindi, sotto il cofano, probabilmente è ancora una ciliegia sprite lì. Abbiamo appena detto di diventare effettivamente invisibile. Ora, se io continuo a camminare qui, possiamo anche farlo cosa prossimale, dove posso andare a leggere il cartello. Quindi, se tizio blu toccare segno, possiamo avere questo blocco Say proprio come il gatto ci ha parlato in parole, ciao, prima, "Got un po 'di frutta? Portare al posto della frutta. "Va bene, così ora, a quanto pare, Io ho le mie indicazioni. Posso andare qui al posto della frutta, in fila me up con la porta. Ora, io sono qui. Posso salire l'uomo al bancone. Egli rileva che sono vicino a lui, in modo che non deve essere tutto identico toccare, e ho vinto la partita. Così ci abbiamo Fruitcraft RPG. Così siamo in grado di fare le cose ancora più avanzate di questo. Siamo in grado di aggiungere suoni. Possiamo aggiungere casualità pseudo. Possiamo aggiungere complessità. Lasciami andare avanti qui, e piuttosto che fare da solo, ti faccio vedere uno dei mezzi più sofisticati abbiamo ottenuto lo scorso anno da una persona di nome Blake. Possiamo avere un volontario che è comodo che figurano fotocamera e per la riproduzione di un gioco? Che ne dici proprio lì? Vieni su. Va bene, allora il gioco che avete appena inconsapevolmente volontari per giocare - [Applausi] DAVID MALAN: - è una cosa di altri tempi chiamato "Frogger". Qual è il tuo nome? RENDA: Renda. DAVID MALAN: Redna? RENDA: E 'come Brenda con una b. DAVID MALAN: Okay, Renda. David. Lieto di vederla. Quindi, qui a "Frogger", e se potessimo alzare il volume appena un po ', tu sei questo piccolo rana verde sul fondo. È possibile utilizzare sinistra, destra, su e giù, e il vostro obiettivo è quello di attraversare la strada, attraversare il fiume, e toccare il giglio pad in alto. Aw. Una t più - rifare, va bene? Fermiamoci successo. Nessuno ha visto. [Applausi] [Applausi] DAVID MALAN: Già. Molto ben fatto. Eccellente, grazie. In modo che non vi era Frogger. Ora che sapete che cosa hai ottenuto in voi stessi, un altro volontario per una diversa gioco presentato da un altro studente. Vuoi venire in su? Qual è il tuo nome? RICHARD: Richard. DAVID MALAN: Richard. Va bene, Richard, vieni su. [Applausi] DAVID MALAN: Tu hai qualcosa che ti suona familiare presto, per cui qui sono le vostre istruzioni. Quindi, in un momento, alcuni pezzi del puzzle stanno andando a scorrere verso l'alto dalla schermata che sembrano sia a sinistra o destra verso l'alto o verso il basso. Stai andando ad avere per colpire i tasti freccia in modo che corrisponde a quei pezzi del puzzle in fila con i segnaposto in alto. Così, quando si vede una freccia a sinistra, e si allinei con la sinistra freccia, premere la freccia sinistra. Si può iniziare. [MUSICA - "PIU 'FORTE" Kayne West] DAVID MALAN: Va bene, grande applauso per Richard. [Applausi] DAVID MALAN: Molto ben fatto. Grazie. [Applausi] DAVID MALAN: divertente e, apparentemente, una sorta di intimidatorio come potrebbe essere quello di realizzare qualcosa di apparentemente sofisticati come questo, si rende conto che lo studente non ha indicato e solo scrivere tutto questo in una sola volta. Piuttosto, è possibile scomporre un problema apparentemente complesso come tale in pezzi molto più piccoli, e anche questo è Sarà un tema. La cosa peggiore che si può fare in scrittura di un programma nella maggior parte qualsiasi linguaggio è quello di sedersi, ottenere davvero eccitato, scrivere il tutta la dannata cosa, e quindi spero solo che funzioni dal volta che si è finito di scrivere. Piuttosto, il processo di programmazione deve generalmente essere molto consapevole, molto iterativo, per cui è sufficiente impostare piccoli passi per voi stessi, dimensione di un boccone vuoi mordere, e in modo da avere queste sanità mentale controlli, le tappe piccoli si possono incontrare. E poi si costruisce rispetto a quelle per creare più cose ancora più sofisticati. Così, per esempio, come potremmo fare per l'attuazione di un gioco come questo? Beh, francamente, avrei certamente iniziare da solo sostenere un tasto alla volta. Diciamo solo implementare il supporto per la freccia sinistra. Così lo studente ha dovuto creare in qualche modo in Photoshop, o in Gratta stesso utilizzando il piccolo editor grafico, un freccia che assomiglia a quello in alto a sinistra lì, proprio il segnaposto grigio. Poi lo studente doveva capire cosa x, coordinata y metterlo, dove metterlo nella finestra. 0, 0 è qui, in modo da avere per capire il numero di pixel, o punti, a compensare quella freccia da la parte superiore dello schermo. E poi una volta che è in atto, il programma non fa in realtà fa ancora nulla, quindi è quindi necessario uno sprite secondo, per esempio una freccia verde che è anche verso sinistra, e si quindi bisogno di iniziare a scrivere alcuni script per questo. E si nota, forse, che queste cose cominciarono ad arrivare a velocità diverse, ed i colori erano diversi luoghi, e questo perché lo studente ha utilizzato un po 'di pseudo casualità. E da pseudo casualità, voglio solo dire scegliere un numero tra qualcosa e qualcosa perché è possibile iniziano a cose spilli, come se il numero è compreso tra uno e cinque, beh, facciamo la cosa verde. Se è tra 6 e 10, facciamo il pezzo del puzzle rosso invece. Finché si dispone di un modo di generare un qualche tipo di casualità, è possibile prendere decisioni in base a tale casualità. E continuo dicendo pseudo casuale, perché c'è un piccolo sporco segreto. I computer non può venire con numeri casuali. Essi possono solo fare quello che viene detto, perché sono artificiali dispositivi. Non possono indovinare un numero come noi esseri umani sentire come possiamo. Un computer ha a che fare qualcosa di matematica per evocare la illusione di numero matematico, a volte usando il giorno corrente del tempo come un input per capire cosa numero di tornare, ma più su che un'altra volta. Per ora, è sufficiente sapere che siamo in grado di generare pseudo casualità. Quindi, una volta che ho la possibilità per la freccia a sinistra per avviare la appare in tempi diversi e con velocità diverse, allora Posso tornare indietro e aggiungere un po 'di queste condizioni IF. Se questo sprite sta toccando l'altra, e la freccia sinistra tasto è stato premuto - quindi tre condizioni in quel caso. Posso usare che e bloccare forse, in questo caso - Poi voglio andare avanti e incrementare il punteggio. E in alto, abbiamo un punteggio, abbiamo Awesome, Cool, buona, e Boo. Quindi c'è apparentemente cinque variabili che questo studente utilizzato per tenere traccia di questi parametri diversi. Così, in breve, il risultato finale è sorprendente. E 'divertente, è divertente da giocare, è coinvolgente, ma questo non è in cui lo studente ha avuto inizio. Lui o lei ha iniziato ad un set più piccolo di passaggi. Ma quali sono alcuni altri blocchi da costruzione che possiamo tessere in questi programmi? Beh, c'è questo altro concetto nella maggior parte delle lingue, Gratta tra di loro, noto come thread. Quindi, un computer non può fare le cose in realtà molto di più in un tempo, almeno non solito. Piuttosto, un computer ha generalmente solo una CPU, e persino se i computer sono super veloci e possono dunque, creare l'illusione di fare le cose in una sola volta - controllare la vostra posta elettronica, ottenendo un istante messaggio, la stampa di un documento - in realtà, un computer è solo saltando dalla stampa alla IMing all'invio, indietro e avanti e avanti e indietro così veloce che abbiamo lenti esseri umani stupidi non si rendono conto che in realtà è l'esecuzione di tali programmi un po 'alla volta. Ora, questo un po 'di bianco, si trovano in questi giorni perché, al giorno d'oggi, molti nostri computer sono ciò che sono chiamati multi-core, in modo da hanno una CPU, ma più core, che è un po 'come con più CPU. E così a volte, i computer possono davvero fare le cose più alla volta, ma generalmente all'interno di un programma, programmi affidamento su queste cose chiamate thread. Quindi un thread è un po 'come un programma in miniatura che può coesistenza di un altro programma in miniatura e può funzionare in parallelo, o almeno può essere eseguito con l'illusione che sono in esecuzione simultaneamente. Così Scratch supporta queste cose chiamate thread. È possibile disporre di più script in esecuzione in una sola volta, proprio come noi fatto con il lupo di mare, e questo ci permette di realtà poi interazioni tra questi sprite. Lasciami andare avanti qui e tirare su, diciamo, fili, e giocare a questo come segue. Abbiamo due sprite, ciascuno dei quali vedremo ha un solo script. E si nota sembra che ci sia un po 'di intelligenza nel gatto in questo perché si sta avvicinando - [Roars] DAVID MALAN: - e più vicino alla uccellino. Così come è il sistema operativo uccello? Bene, diamo uno sguardo al primo uccello. Lo script uccello ha detto che quando la bandiera verde si fa clic, andare a x uguale negativo 115 e y è uguale a 150. Così ho capito una posizione casuale in cui ho voluto il uccello per iniziare, e io lo mise lì per impostazione predefinita. Poi, sempre se non si toccano gatto, quindi questo è un altro tipo di costrutto di ciclo, ma la stessa idea, farlo di nuovo e ancora e ancora. Fino a quando non si sta toccando il gatto, spostare tre passi, e se siete al balzo bordo,, dove è una specie di riflessione nel senso biliardo. È così che l'uccello si muove intorno tipo di apparentemente in modo casuale, ma è solo perché è rimbalza le pareti in questo caso. Ora il gatto, invece, è una specie di truffa. Il gatto, quando la bandiera verde si fa clic, si, inizia a una certa posizione, una posizione casuale - almeno in parte secondo il pick casuale blocco verde lì - e poi per sempre se toccando l'uccello, riprodurre il suono leone, e poi fermarsi script. Così, quando ho detto terminare o uscire prima, c'è un puzzle pezzo in Scratch che sarà solo uccidere il programma in questione punto perché è una specie di logica fatto. Ma per il resto, qui, notare ciò che sta per accadere. Punto verso l'uccello e si muovono un passo. Quindi questo punto verso l'uccello è una specie di un vantaggio del gatto ha in che è homing in su l'uccello in movimento, e possiamo ora fanno di questo programma ancora più interessante. Invece di muovere un passo alla volta per ogni ciclo della CPU, per colpire pedaggio della campana, per così dire, lasciatemi andare avanti e spostare, diciamo, cinque punti in un tempo come il gatto. Fare clic su Esegui, e ora si trova proprio lui in fretta. Se raddoppiamo ulteriormente per 10 passi, che tipo di va giusto per lui. Ora, siamo in grado di dare l'uccello, forse, un po 'di vantaggio. Andiamo l'uccello e dire invece di spostare tre fasi, andiamo avanti lo 30 gradini. Ma ancora stato preso alla fine. Ecco, ci sono due thread. E 'rinchiuso in Scratch con due script e due sprite, ma l'idea in altre lingue è che si può scrivere, in sostanza, troppi programmi come questo e hanno eseguirli realmente o immaginariamente, in parallelo. Ora, c'è anche questo concetto in programmazione nota come eventi, e questo è qualcosa che non vedremo in C, i lingua conosciuta come C. Lo vedremo verso la fine del semestre nella programmazione web, quando si introduce JavaScript e il concetto di costruzione di pagine web che sono dinamici e interagire con gli utenti. Quindi, in questo caso, abbiamo un esempio molto semplice di due sprite, ragazzo e ragazza, ciascuno dei quali hanno il loro rispettivo discussioni, ma in qualche modo questi due sono comunicanti tra loro per mezzo di una cosa chiamata eventi. Permettetemi quindi di andare avanti qui e ingrandire sceneggiatura del ragazzo, che assomiglia a questo. Quando si fa clic su bandiera verde, per sempre effettuare le seguenti operazioni. Se lo spazio delle chiavi, o la barra spaziatrice, si preme dire Marco per due secondi, che è puramente estetica sul schermo, un po 'fumetto, ma poi in onda. Così trasmissione è un altro pezzo che è Scratch rappresentativo di una classe di funzionalità in programmazione che permette ai programmi diversi, filati diversi, per inter-comunicare, di inviare in qualche modo messaggi, uno ad un altro. Il passaggio di un pezzo di carta in classe è una sorta di low tech equivalenti. Così evento di trasmissione. Posso inviare questo messaggio, e l'evento parola è del tutto arbitraria. Scratch ha a volte questi elenchi a discesa, quindi ho appena si avvicinò con una parola a caso come evento perché ora, quello che il ragazzo non fa quando si preme il tasto è che trasmette questo evento. E se guardo ora lo script della ragazza, il suo script è super semplice, perché tutto quello che deve fare è non agire quando la bandiera verde si fa clic. È progettata per azione quando riceve citazione, unquote, "Evento", e, a quel punto, sta ascoltando quindi per il cosiddetto evento ripetutamente. Appena riceve questo caso, sta per gridare Polo per due secondi. E così si può forse dedurre da questo esattamente ciò che il risultato successivo sarà. Permettetemi di fare clic sulla bandiera verde. Non succede niente perché ho bisogno di fare che cosa? PUBBLICO: barra spaziatrice. DAVID MALAN: barra spaziatrice. Ragazzo dice Marco, ragazza dice Polo. Ma non è difficile codificato per sé. Questo è inter-comunicazione tra gli script, così ora abbiamo hanno la capacità di rendere i programmi ancora più complesso in cui questi due sono in qualche modo comunicanti tra loro. Quindi, in quali direzioni si può prendere questo? Beh, in set problema 0, in realtà, l'obiettivo è quello di divertirsi con Scratch. Per l'edizione hacker, avrete invece divertirsi con una più versione sofisticata di Scratch chiamato BYOB, Build I blocchi, ma l'idea è la stessa. Sarete in grado - Sì, era intenzionale. E 'venuto da Berkeley. BYOB è la versione pirata di questa edizione, ma entrambi demografia, edizione standard e l'edizione per gli stessi hacker, il obiettivo a portata di mano per la prossima settimana è in realtà solo di immergersi in profondo, sporcarsi le mani con la programmazione, e fare qualcosa di interessante, fare qualcosa di interattivo, si faccia qualcosa di artistico, fare qualcosa di divertente in realtà dimostrare, in modo che entro la fine della settimana, avrai un progetto, non solo per la tua prima CS50 pset, ma avrete un po 'di qualcosa che si può mostrare in Annenberg per amici o addirittura parenti di caricarlo al sito del MIT. E così come ho detto il Mercoledì, ci aspettiamo che il 90% della classe, in generale, a fare le edizioni standard. Rendetevi conto che c'è anche questo sbocco per quelli di voi che altrimenti potrebbero trovarvi un po 'annoiato con le basi e tanta voglia di tuffarsi dentro e realizzare una visione che già hanno con precedenti conoscenze di questo più accogliente ambiente. Permettetemi quindi di tirare su un altro esempio che uno dei nostri ex studenti qui fatto e raccontare un po 'di qualcosa attraverso il canto. Che allo stesso modo, come questo gioca, pensare a come si va su attuazione del presente programma usando proprio questi stessi blocchi, un po 'di casualità, e una pseudo po 'di canzone familiare. Se potessimo alzare il volume solo un po '? [MUSICA - "Piove Men" The Weather Girls] DAVID MALAN: Questo è tutto per CS50. Ci vediamo il Lunedi. [Applausi]