[Musikk spilles] -Alright! -Dette er CS50. -Dette er CS50. -Dette er CS50. [MUSIC - IGGY Azalea, "fancy"] -Min Favoritt minne fra CS50 var da jeg gikk til Puzzle Day. -Antagelig Bare tid medgår til oppgavesett med mine venner og folk som wold slutt bli mine blockmates. -Min Beste minne fra CS50 er Hackathon. -The CS50 Hackathon. -Hackathon. -Hackathon. -Hackathon. -The Hackathon -Rob Bowden. Bare alt om ham. [MUSIC - IGGY Azalea, "fancy"] -Min Favoritt minne er da jeg var på stadium og jeg spilte den prestisjetunge rollen av en node [? i Linked?] [? List. ?] -Når Vi alle fikk gratis Dropbox plass og David var som, se under setene. Og det var som, plass for alle! [MUSIC - IGGY Azalea, "fancy"] -Min Råd for alle innkommende student ville være å virkelig jobbe med P-sett med venner. -Office Timer er veldig mye din venn. Klikk mest mulig ut av din erfaring og møte så mange mennesker som mulig. -Ikke Vær redd for å be om hjelp. -Start P-sett tidlig i uken. -Jeg tror den største tingen er å dra nytte av alle ressurser at CS50 har. -Gå Til kontortiden tidlig i uken. -Definitivt Se shorts. -Ikke Utsette på P-sett. Klikk for at du finner en stor gruppe av folk til å jobbe på P-sett med. Du kan ha mye moro og få arbeidet gjort sammen. -Ikke Være redd for å presse deg selv. Gå for hacker-utgaven noen ganger. -Skriv Ting på papir før du noen gang berøre datamaskinen. -CS50 Er virkelig store på gi måter å få hjelp. -Min Ett råd er å sove. Har noen sagt det? Søvn, sikkert. Det er lett å ikke gjøre, men du er nødt til å gjøre det, tror jeg. -Jeg Ville si egentlig være mentalt forberedt fordi du kommer til å elske det. [MUSIC - IGGY Azalea, "fancy"] -Dette er CS50. -Dette er CS50. -Dette er CS50. [MUSIC - IGGY Azalea, "fancy"] -Dette er CS50. [APPLAUSE] DAVID J. MALAN: Så dette er CS50 og dette er slutten av uke 0. Og det var bare noen av CS50 ansatte som venter deg ikke bare i seksjoner og arbeidstid, men, også, denne kommende helg på CS50 Puzzle Day. Som, igjen, er ikke alt om programmering. Faktisk, er det forventet at du slipper å programmere noe, men heller løse problemer ved hjelp kløkt og venner sammen med deg. Vi får selskap av noen av våre venner på Facebook-- hvis du registrerer her-- som for de siste årene, har faktisk vært å skrive disse utfordringene med oss. Og så vil de være de slutt kjører Puzzle Day. Og så vil du bli utfordret med nettopp den slags ting og problemer som folk på Facebook liker å tenke på. Så det er i morgen. Registrer deg hos cs50.harvard.edu/register. Nå et ord på et par av personalet spesielt. Dette her er Ansel Duff, som er faktisk en av medforfatterne av disse binære pærer som vi så på onsdag, i tillegg til CS50 egen Dan Bradley. Ansel Duff var også en tidligere freshman advisee av meg 3 år siden og han faktisk selv bygget denne talerstol. Han har gått på å gjøre tekniske fag og mer. Nå er hans bilde her faktisk Ansel tre år siden på CS50 Hackathon da han lånte en av våre ballonger, stakk den til sin laptop, og, for de neste 12 noen odde timer, fokusert på hans siste prosjekt, tar pauser bare for å åpne poser med godteri på Hackathon. Men han gikk på mer nylig til tilbringe denne siste sommeren med oss, siden CS50 for sine ansatte, og nå studenter dette semesteret, har sin egen 3D-skriver. Og i et nøtteskall en 3D-skrivere er en enhet som ser helt som dette. Du fyller den med en plastsnelle som er smeltet ned ved anordningen og du bygger ting bokstavelig talt fra ingenting. Mye som en blekkskriver, begynner du spytter ut små prikker av plast at skjemaet sammen for å danne hele objekter. Og så Ansel for eksempel, tidligere denne sommeren, har en iPhone 5 og besluttet at han virkelig ønsket å støtte den opp på pulten hans. Men han ønsket ikke å gå ut og kjøpe noe fra Apple Store eller lignende, så han satte seg ned og begynte å tegne noe. Han tok noen målinger som til hvor tykk og hvor bred sin iPhone var, han tegnet dette bildet her, bestemte han seg for at han ville å ha en 75 graders vippe som det ble stirret på ham på hans skrivebord der. Han snudde dette, bruker programvare, til en 3D CAD-modellen som så litt noe sånt som dette. Og da han gikk videre, slutt, for å faktisk lage den. Så faktisk, hvis noen av dere her, kanskje på rad at jeg kan kaste til, har an-- der har vi folk med iPhone 5, og her har vi to til. Nå, for ikke å være dårligere, CS50 egen Cheng Gong også satt ut i sommer å bygge ganske mange ting og, faktisk, av grunner som fremdeles er uklart, har vært sakte skriver ut en hær av elefanter med svingarmer og badebukser. Et par av dem er faktisk her hvis noen ville nå like-- en elefant. Greit,. men hva Cheng gjorde også for oss er han meget vennlig satt opp et kamera fordi at elefanten, tro det eller ei, tar litt to og en halv time å skrive ut. Selv iPhone stativ tok en og en halv time å skrive ut. Og hva Cheng gikk videre og gjorde ble satt opp et fint kamera foran av dette 3D printer, filmet i en time og en halv som Ansel design skrives ut. Vi kledde noen sexy musikk til det for for å gi deg dette å se på hvordan 3D-utskrift fungerer. Og selv om dette er faktisk i plast, innse at hvis dette er et område av interesse for deg faglig, det finnes folk blant dem Jennifer Lewis her ved School of Engineering, som er faktisk jobber med 3D-utskrift av plastgjenstander. Men selv i økende grad biologiske materialer for å løse fysiologiske problemer for mennesker. Men her er en liten noe fra CS50. [LOUD mekanisk støy] DAVID J. MALAN: Det høres ikke noe sånt i virkeligheten, men det er mye kulere å se den på den hastigheten, og med den lyden. Nå på onsdag, hvordan fikk vi først komme hit? Vi begynte å snakke om datamaskinen vitenskap og vi spurte hva det var. Og det handler om en rekke ting, og det er så mange forskjellige retninger der kan du ta turen etter et kurs som CS50. Faktisk, hvis du plukket opp en av disse uoffisielle guider til CS utenfor, heftet som vi har gitt, enten du er tenker på å ta bare CS50, eller kanskje gjør en sekundær, eller kanskje til og med å konsentrere i CS, trenger bla gjennom det. Og du vil se et diagram mot slutten at viser deg de mange forskjellige retninger i CS at du kan gå ned i. Men for i dag, vil vi fokusere, igjen, på virkelig en av de grunnleggende synspunkter, kanskje, der du har innganger på problemer, du har utganger fra problemer, og du har algoritmer som å skape disse utganger fra disse innganger. Og et slikt eksempel, var av Selvfølgelig, dette telefonboken her. Og vi brukte som et eksempel for å gå gjennom en algoritme som var riktig. Og så en annen en var riktig, men litt raskere. Og så en annen som var litt mer dramatisk, men fundamentalt raskere. Høyre, denne telefonen boken vi hevdet hadde ca 1000 sider. Og hvor mange ganger har jeg har å rive telefonboken i halvparten å finne noen som Mike Smith, maksimalt, i 1000 siders bok? Så, 10 gi eller ta. Og så når jeg rev denne tingen i halvparten, eller rett og slett, mer modent, delt i to, er det bare 10 sider av 1000. Og hvis du ekstrapolere, litt urealistisk for en telefonbok, men hvis dette telefonboken hadde noen 4 milliarder sider i den, så helt uhåndterlig fysisk, hvor mange ganger dele du en 4 milliarder siden telefonboken i omgang? Så det er faktisk 32, gi eller ta. Og så 32 ganger bare, ut av 4 milliarder sider, kan du finner noen som Mike Smith. Og det er effektivitet. Det er en god algoritme, daresay. Men da vi flyttet fra det å prøve å formalisere det. Og jeg foreslått denne pseudokoden. Pseudokode er ikke noe formelt. Det er ikke noe du huske. Det er bare noe du uttrykker ganske intuitivt å bruke engelsk, eller hvilket som helst språk egentlig, at formidler dine ideer konsist. Men hva er nøkkelen om pseudokode er at du forsøke å forutse alle mulige tilfeller som kan skje. Og ja, i dette pseudo kode, var det egentlig tre tilfeller hver gang jeg delt telefonboken. Mike kan være til venstre. Mike kan være til høyre. Eller han kan være rett på siden jeg er på. Eller en fjerde hjørnet sak, så å si. En dårlig scenario kan være en which-- hva som skjer? Mike er bare ikke i telefonboken i det hele tatt. Og når programmer crash-- når Mac og PC-programvare som dere kjøre på datamaskinene noen ganger henger eller avslutter uventet, som generelt medfører at noen programmerer, noen mennesker som deg snart, bare skrudd opp og gjort noen feil. Kanskje ikke hadde forutsett at kanskje det er ingen Mike Smith i telefonboken. Og hvis du ikke egentlig skrive kode for å håndtere situasjoner som det, generelt uforutsigbare ting kan skje. Maskinen kan fryse. Det kan starte på nytt. Programmet kan slutte. Og slik at alle disse dumheter som du kan har møtt i din faktiske liv bare ved hjelp av datamaskiner, vil i økende grad være like forklares bort av denne intuisjon og denne forståelsen av hva som er faktisk skjer under panseret. Nå prøver vi å ta en titt på et mer generelt problem. Snarere enn å ta oppmøte på et sted som dette, noe som vil være ganske langsom å gjøre en, to, tre, fire. Eller kanskje to, fire, seks, åtte. La oss fokus, i stedet, på hvordan vi kan formalisere algoritmen av prosessen ved som vi kunne ta frammøte. Og langs veien, la oss starte å bruke noen nomenklatur som vi bruker i dag når vi faktisk starte programmering på et språk. Så jeg gir dere nå, en fire minutters video at vi satt sammen med våre venner fra TED, organisasjonen. Hvor vi leverte et manus og de brakte sine animatører å bære, og faktisk skapt en 2D animasjon av hva en algoritme er. Hvis vi kunne dempe lysene. [Musikk spilles] FORTELLER: Hva er en algoritme? I informatikk, en algoritme som er et sett instruksjoner løse noen problem trinn-for-trinn. Vanligvis er algoritmer utført av datamaskiner, men vi mennesker har algoritmer også. For eksempel, hvordan ville du går om å telle antall personer i et rom? Vel, hvis du er som meg, ville du sannsynligvis peke på hver person en om gangen og telle opp fra null. En, to, tre, fire, og så videre. Vel, det er en algoritme. Faktisk, la oss prøve å uttrykke det en litt mer formelt i pseudokode. Engelsk-lignende syntaks som ligner et programmeringsspråk. La n lik 0. For hver person i rommet, satt n lik n pluss 1.. Hvordan tolke pseudokode? Vel linje en erklærer så å si, en variabel kalt n og initialiserer verdien til 0 Dette bare betyr at på det begynnelsen av vår algoritme, ting som vi er telling har en verdi på 0. Tross alt, før vi begynner å telle vi har ikke regnet noe ennå. Ringe denne variabelen n er bare en konvensjon. Jeg kunne ha kalt det mest noe. Nå linje to demarks starten av en løkke, en sekvens av trinn som vil gjentas et antall ganger. Så i vårt eksempel, det skritt vi er tar er å telle mennesker i rommet. Beneath linje to er linje tre som beskriver nøyaktig hvordan vi skal gå om å telle. Innrykk innebærer at det er linje tre som vil gjenta. Så med pseudokoden er sier er at etter starter på 0 for hver person i rom vil vi øke n med 1 Nå er denne algoritmen riktig? Vel la oss banke på det litt. Fungerer det hvis det er to personer i rommet? La oss se. I tråd én initial vi n til 0. For hver av disse to personer, vi deretter øke n med 1. Så i den første turen gjennom loop, oppdaterer vi n fra 0 til 1. På den andre tur gjennom denne samme sløyfe, oppdaterer vi n fra 1 til 2. Og så, etter denne algoritmen er enden, n er 2, som faktisk samsvarer med antall av mennesker i rommet. Så langt, så bra. Hva med et hjørne tilfelle skjønt? Anta at det er 0 personer i rommet-- foruten meg, er hvem gjør telling. I tråd ett, vi igjen initial n til 0. Denne gangen om, linje tre utfører ikke i det hele tatt siden det ikke er en person i rommet. Og så n fortsatt 0, noe som faktisk passer antall personer i rommet. Ganske enkelt, ikke sant? Men å telle folk en om gangen er ganske ineffektiv, også, nei? Sikkert vi kan gjøre bedre. Hvorfor ikke telle to personer på en gang, i stedet for å telle en, to, tre, fire, fem, seks, sju, åtte, og så videre. Hvorfor ikke telle to, fire, seks, åtte, og så videre? Det høres enda raskere. Og det er sikkert. La oss uttrykke dette optimalisering i pseudokode. La n lik 0. For hvert par av mennesker rom, sett n lik n pluss 2. Ganske enkel endring, ikke sant? I stedet for å telle personer en av gangen, vi i stedet telle dem to om gangen. Denne algoritmen er således dobbelt så rask som den forrige. Men er det riktig? La oss se. Fungerer det hvis det er to personer i rommet? I tråd ett, vi initial n til 0. For at ett par av mennesker, vi deretter øke n med 2. Og så ved denne algoritmen er ende n er 2, som faktisk samsvarer med antall av mennesker i rommet. Anta at ved at det finnes null personer i rommet. I tråd én initial vi n til 0. Som før, linje tre utfører ikke alt siden det ikke er noen par av mennesker i rommet, og så n fortsatt 0. Som faktisk matcher antall personer i rommet. Men hva om det er tre personer i rommet? Hvordan virker denne algoritmen fare? La oss se, på linje en, vi initial n til 0. For et par av dem, vi deretter øke n med 2. Men hva så? Det er ikke en annen full par personer i rommet, slik linje to ikke lenger gjelder. Og så ved denne algoritmen er slutt, n er 2, som fremdeles ikke er riktig. Faktisk sa denne algoritmen er å være buggy fordi den har en feil. La oss oppreisning med noen nye pseudokode. La n lik 0. For hvert par av mennesker rom, sett N lik n pluss 2. Hvis en person er fortsatt uparet, satt N lik n pluss 1.. For å løse dette problemet, vi har introdusert på linje fire en tilstand, ellers kjent som en gren, at bare Utfører hvis det er en person vi kan ikke pare med en annen. Og så nå, enten det er ett eller tre, eller ulikt antall personer i rommet, denne algoritmen vil nå telle dem. Kan vi gjøre det enda bedre? Vel, vi kunne stole på treere, eller firere, eller til femmere og tiere, men utover det, det kommer til å få litt vanskelig å peke. På slutten av dagen, enten henrettet av datamaskiner eller mennesker, algoritmer er bare et sett med instruksjoner med å løse problemer. Disse var bare tre. Hvilket problem ville du løse med en algoritme? DAVID J. MALAN: Så bevisst, en meget enkel program en meget enkel algoritme, for å oppnå noe meget enkel, telle antall personer i rommet. Men la oss erte hverandre noen av de representative funksjoner her som faktisk er kommer til å være nyttig, selv når implementere den mest kompleks av programvare. Så for eksempel, i denne første linje, har vi det vi kaller variabelen, og fra algebra, er du generelt kjent med x og y og z noen ganger, og så videre. Men i programmering, variabler fremdeles, ved slutten av dagen, meget lik den som er. Men det er kanskje enklere å tenke av en variabel som bare en beholder. Og, faktisk, er det noen antall bits implementert en eller annen måte på harddisken eller i datamaskinens minne, men mer om det i fremtiden. Det er bare en beholder. Og hvis du sier noe som la n lik 0, vel det er som å kalle dette glasset bolle her n, bare et vilkårlig navn, og sette ingenting i den i utgangspunktet. Så verdien av denne bollen er akkurat nå null. Og selvfølgelig hvis du oppfatter i en etterfølgende linje, å faktisk øke noen linje av kode, som i denne tredje linje her, med 1, er som å si hva er det nåverdien av n, er det 0, pluss 1, sette noe sånt som en ping pong ball i her. Nå verdien av denne variabel er ganske enkelt ett. Og du kan veldig raskt ekstrapolere, men nå er det to, nå er det tre, og så videre. Så det er alt en variabel er. Det er et stykke lagringsplass til faktisk lagre noen data. For nå er det en ping pong ball. Det er det et tall. Men det kan være ord i en ordbok, som stavekontrollen Jeg antydet onsdag for en av fjorårets oppgavesett. Nå en annen viktig idé, som på samme måte er ganske intuitiv Jeg vil hevde, er som en løkke. Og sløyfen i prosessen for å telle alle er, selvfølgelig, gjør det samme ting igjen og igjen-- enten en på en gang eller to om gangen. Og du kan uttrykke dette på engelsk, eller pseudokode, i en rekke måter, men ved hjelp av denne preposisjonen "for" er en svært vanlig måte å gjøre det. For hver person i rommet, gjør dette. Igjen og igjen. Og det faktum at det finnes innrykket linje tre, betyr bare at det du er ment å gjøre er ting som er rykket inn under linjen to verket. Bare en menneskelig konvensjonen, men en vanlig en som vi skal se i faktiske høyere nivå programmeringsspråk. Nå litt mer interessant er når du kommer i et hjørne tilfelle. For eksempel, et hjørne tilfellet var når det var tre personer, eller fem, eller syv, eller ulikt antall personer i rommet, fordi du gjør at to og to bremser slutt fordi du kommer å gå glipp av noen, enten på helt i begynnelsen eller helt på slutten avhengig av hvordan du gjør det. Og så, nå har jeg denne grenen, eller tilstand, hvis en person er fortsatt, deretter gå videre og håndtere at en ensom person som ikke fikk sammen med noen andre. Så det er det vi vil kalle en tilstand, eller en gren. Nå pseudokode Mer generelt kan bli skrevet for å løse en rekke problemer. Og det jeg trodde vi skulle gjøre her er å ta et øyeblikk å invitere skal vi si CS50 er eier Rob Bowden på scenen å ha med to frivillige, som har ingen anelse om hva som venter. En hånd gikk ned så snart jeg sa det. Hva med deg på ende her, kom igjen opp. Og hva med fra lenger bort, hva med veien på baksiden. Tilbake rad, kom opp med hendene over hodet. Alright, og hva heter du? ANITA: Anita. DAVID J. MALAN: Anita. Ok, hyggelig å møte deg. La meg introdusere deg til Rob Bowden. Dette er Anita. Og hva er ditt navn? Kiersten: Kiersten DAVID J. MALAN: Kiersten. Kiersten, kom opp og møte Rob Bowden og Anita. Hyggelig å møte deg. Kiersten: Hyggelig å møte deg. DAVID J. MALAN: Alright, Rob. ROB BOWDEN: Hyggelig å møte deg. DAVID J. MALAN: Anita. Kiersten: Hei Anita. DAVID J. MALAN: Og din flere hundre klassekamerater. Så nå la meg gå videre og trekke opp bare et enkelt program her på Mac OS som vil la meg faktisk døyt noen notater ned. Og hvis dere vil hver ta en stilling ved en av disse skoler der, la meg gå videre og starter en liste av pseudokode, hvis du vil. Og hva jeg ønsker å gjøre her, til syvende og sist er typen for deg noen instruksjoner om at vår publikum er faktisk kommer til å resitere for oss. La meg gå videre og bare endre dette til en nummerert liste å matche hva vi gjorde der oppe. Og hva jeg skal gjøre med din hjelp, er å skrive et program i pseudokode, som disse gutta kommer å gjennomføre en peanøtt smør og gelé sandwich. Så det er kanskje apropos til viser noe noen av dere kan ha sett på internett for bare en kort irriterende øyeblikk. [MUSIC BUCKEWHEAT BOYS, "peanøttsmør  JELLY TIME "] DAVID J. MALAN: OK. Det er nok av det. Så her i mellomtiden, jeg har en par av Google briller som vi vil sette på CS50 egen Rob Bowden å se verden gjennom hans øyne. Og vi vil gjøre vårt beste i innlegget produksjon til faktisk veve opptakene av hva Rob er å se nå, i denne selve forelesningen video med våre to frivillige ved siden av ham. Så hva jeg skal gjøre er, vil jeg være kontordame. Vi har mål her av faktisk å skrive et program med å gjøre, til slutt, en peanøttsmør og gelé sandwich, men disse tre kommer til å oppføre seg som om de er datamaskiner. Og datamaskiner, ved slutten av dagen, er faktisk ganske dumme enheter. De er super rask, men de kan bare gjør det, bokstavelig talt, hva de blir fortalt. Du kan ikke bare si lage en peanut smør og gelé sandwich. Du må programmere dem til å gjøre det. Du må fortelle dem med presisjon hva de skal gjøre, mindre noe går fryktelig og, forhåpentligvis, amusingly forkjært. Så med det sagt, trenger vi én samtale-out fra publikum for hva som bør gå man være, hvis målet her er å lage en peanut smør og gelé sandwich. Ja? PUBLIKUM: [uhørlig] pose med brød. DAVID J. MALAN: Åpne pose med brød. Så hvis de tre deltakerne ville liker å fortsette å gjøre det bokstavelig. Åpne pose med brød. [Publikum Ler] DAVID J. MALAN: Så la oss jobbe med det. Greit. Så trinn to, how-- la oss ta dette videre. Ja, i front. PUBLIKUM: [uhørlig] brødet. DAVID J. MALAN: Hva er det? PUBLIKUM: Fjern brød. DAVID J. MALAN: Fjern brød. Tilsvar fyndig. Takk. [APPLAUSE] DAVID J. MALAN: Det er det? OK, så trinn to kommer å være fjerne brød. Alright, noen ønsker å skrive oss en lengre setning? Noen andre? Litt mer [uhørbart]. Nei, ingenting nå. Ja? PUBLIKUM: Place to skiver ved siden av hverandre. DAVID J. MALAN: Place to skiver ved siden av hverandre. [Publikum Ler] DAVID J. MALAN: Place to skiver ved siden av hverandre. Trinn fire. Ja? PUBLIKUM: Ta din hånd og satte den lett på toppen av peanøttsmør lokket. [Publikum Ler] PUBLIKUM: [uhørbart] ved siden av peanøttsmør. DAVID J. MALAN: Hva? Si det igjen. PUBLIKUM: Skru av lokket og sette den forsiktig ved siden av peanøttsmør. DAVID J. MALAN: Sett den forsiktig ved siden av peanøttsmør. OK, fremdrift. Trinn fem. Utmerket. Ja? Plukk opp kniv. DAVID J. MALAN: Plukk opp kniv. OK, trinn seks. Yeah? PUBLIKUM: Hold kniven i håndtaket. DAVID J. MALAN: Hold kniven ved hjelp av håndtaket. Hold kniven etter håndtaket. Trinn syv. Ja? PUBLIKUM: [uhørlig] kniv i peanut smør og så lite ut [uhørbart]. DAVID J. MALAN: Sett kniven i-- jeg hørt "sette kniven i peanøttsmør og ta ut så lite som mulig. " Forresten, fjerne papiret først. Greit, trinn ni. Trinn ni. Trinn ni. Vi har faktisk ikke gjort en sandwich ennå. Ja? PUBLIKUM: Ved hjelp av kniv i peanøttsmør, gjelder peanøttsmør på nevnte brød. DAVID J. MALAN: Bruke kniv i peanøttsmør, gjelder peanøttsmør på sa brød. [Publikum Ler] DAVID J. MALAN: Greit trinn 10. Trinn 10. Ja? PUBLIKUM: Taste peanut smør for å sikre kvalitet. [Publikum Ler] DAVID J. MALAN: Trinn 11. Trinn 11. Trinn 11. Kom igjen. Yeah? Akkurat der. PUBLIKUM: Nøye plukke opp gelé. DAVID J. MALAN: Nøye plukke opp gelé. OK, og deretter en annen hånd var opp. Rett bak deg. Ja, i blått. PUBLIKUM: Greit, fjern lokk fra [uhørbart], ja, fjerne lokket fra gelé. [Publikum Ler] DAVID J. MALAN: Fra gelé. Ha ha. [Publikum Ler] DAVID J. MALAN: Og? PUBLIKUM: Og knapt feie noe [uhørbart]. [Publikum Ler] PUBLIKUM: Of course, før [uhørbart], fjerne papiret fra gelé. DAVID J. MALAN: Fjern papiret fra gelé. Trinn 14. Vi er nesten der. Ja? PUBLIKUM: Invert gelé flaske før alt faller ut. DAVID J. MALAN: Invert gelé flasken før gelé faller ut. Trinn 15. PUBLIKUM: Sett lokket. DAVID J. MALAN: Sett lokket. Trinn 16. Yeah? PUBLIKUM: [uhørbart] DAVID J. MALAN: Si det igjen. PUBLIKUM: Ta lokket av av gelé. DAVID J. MALAN: Av ditt gelé. Så really-- Oops. Kom igjen. Sett på lokket. Sett cap-- Du sa fjerne hetten fra gelé. Føler at vi er i en bit av en loop. Trinn 17. Ja? PUBLIKUM: [uhørbart] DAVID J. MALAN: Si det igjen. PUBLIKUM: [uhørbart] DAVID J. MALAN: Gå tilbake til step-- PUBLIKUM: [uhørbart] DAVID J. MALAN: Fjern cap fra peanøttsmør. Ja? PUBLIKUM: Slipp alle gelé på brød. DAVID J. MALAN: Slett alle gelé på brødet. DAVID J. MALAN: Vi er nesten der. Trinn 19. PUBLIKUM: Fjern overflødig gelé. DAVID J. MALAN: Haha, gelé. [APPLAUSE] DAVID J. MALAN: Hvorfor ikke we-- ett skritt til å ta dette hjem. Ett skritt til og deretter vi vil tjene smørbrød. Ja? PUBLIKUM: [uhørbart] DAVID J. MALAN: Mens noen smørbrød remains-- la oss innrykk dette-- spise. [Latter] DAVID J. MALAN: Greit, takk til våre frivillige her. [APPLAUSE} DAVID J. MALAN: Vi har noen fine avskjed gaver til hver av dere. Din egen peanøttsmør, gelé, og brød å ta med hjem. Takk. Kiersten: Takk. DAVID J. MALAN: [uhørbart] velkommen. [APPLAUSE] DAVID J. MALAN: Så dette er, av Selvfølgelig et latterlig eksempel. Høyre? Men det gjør slags avsløre hvordan vi mennesker bare ta klarhet for gitt. Og det faktum at jeg har vært å snakke med et annet menneske, han eller hun bare vet hva du mener. Datamaskiner er ikke til å vite hva du mener, selv ved bruk av, som vi er i ferd med å gjøre i dag, programmere noe i Scratch, en dra og slipp, puslespill brikke stil språk. Selv designet for unge barn, har du å være så eksplisitt og så bokstavelig med hva du vil at programmet skal gjøre. Nå til slutt, vi er kommer til å bli programmering ikke i pseudokode, Engelsk som syntaks, men kode, eller mer korrekt, kildekoden. Kildekoden er bare fancy måte for å beskrive koden du faktisk skrive med et tastatur som er ikke på engelsk per se. Det er i C eller Java eller C ++ eller noe sånn, så vi vil snart se. Og faktisk, bare for å skremme en få av dere, ved første øyekast, Dette er et program som er skrevet i et språk kalt C. Men for å un-skremme noen av dere, du vil helt forstå hva som skjer på kommer neste mandag når det kommer til noe som dette. Oppriktig, dette er en eldre språk. Det er ganske uforståelige, men det er representativt av en rekke språk i disse dager som har mange parenteser og krøllete bukseseler og anførselstegn og semikolon. Og mange av denne syntaktisk ting som ikke er i det hele tatt intellektuelt interessant. Faktisk, det er en absolutt distraksjon fra de helt enkle ideer som stirrer oss i ansiktet. Dette programmet, som du kanskje bare gjette, utskrifter til noens dataskjerm ordene "Hei komma verden." Det er det. Så klart, det er en masse ting som er komme i veien for noen selvfølgelighet der, men det kommer til å veldig raskt skli bort og være helt intuitivt. Ja, hva vi skal gjøre i dag er destillere dette ganske komplisert ser programmet, som igjen vil du komme å forstå raskt, men til noe mye enklere. La oss bare si hva vi mener. La oss tegne et bilde av hva vi mener, ved hjelp av disse brikkene her. Så dette er et programmerings språket kalles Scratch. Den ble utviklet av MIT Media Lab. Og hva du vil se i oppgavesettet null, som vil bli utgitt senere i kveld, vi vil ha deg gå til denne URL her scratch.mit.edu. Og de har en web basert grensesnitt via hvilke du vil skrive ditt første program. Eller de av dere med før erfaring, andre programmer, men i et miljø som er trolig litt uvant, og at vil presse deg til å skape noe ved hjelp av denne svært visuelle miljøet. Nå, til hva jeg skal gjøre her er å åpne opp selve programmet. Den eksisterer ikke bare som en nettleser, men også som et nedlastbart program slik at du faktisk kan bruke den hvis du ikke har tilgang til internett. Og jeg kommer til å gjøre det her inne, i Sanders, bare i tilfelle Wi-Fi ikke samarbeide super godt. Og hva jeg skal gjøre er å peke ut noen funksjoner i dette programmet. Så, for å være klar, har jeg bare dobbelt klikket på ikonet på skrivebordet mitt, eller ekvivalent gått til scratch.mit.edu, og det er trukket opp dette vinduet. Dette er et programmeringsmiljøet. Det er et stykke programvare som noen av våre venner på MIT skrev at la oss oss og du skriver programmer i et språk som heter Scratch. Nå er dette skjer for å være en katt som er også kalt Scratch og dette er hans verden der han bor. Dette er scenen, så å si, at rektangel på øverst i venstre hjørne. Og han trenger ikke å se ut som en katt. Du kan gjøre ham ser liker noe, og du kan ha mange slike sprites, eller tegn, i et program. I mellomtiden, over her på langt høyre, er en stor blank tavle. Og det er her, i et øyeblikk, vi kommer til å starte programmering ved å dra og slippe disse grafisk puslespill stykker som er riktig her i midten. Og det er mye mer av dem enn vi vil bruke tid på her i klassen fordi du vil finne at de er alle ganske intuitivt. Igjen, er den utformet for barn, men vi bruke den til å erte hverandre noen av dem grunnleggende ideer om variabler, løkker, forhold, og snart, ting som funksjoner og hendelser og tråder og andre fancy ting vi vil komme til før lang tid å faktisk lage noe fra bunnen av. Pun intended. Nå, hva jeg skal gjøre her er klikk på ikke bevegelse, men kontroll. Og dette er bare en kategorisering av her-- og jeg ser en annen farge satt av blokker. Men legg merke til noen kjente ord. "Hvis" og "else if" og "repeat". Og du kan sikkert gjette som minner om den grenen, eller forholdene vi så, og selv looping konstruere. Så vi har lignende blokker her. Men det mest interessante en er dette en her. Når denne grønne flagget er klikket, dette, for de med forhånds programing erfaring, er tilsvarende til en hovedfunksjon. Men for de som ikke kjenner, Dette er puslespill brikke som vil sparke starte hele programmet. Det betyr bokstavelig talt når jeg går, i dette program, og klikk på en grønn flag-- som du kan se her oppe i øverst i venstre hjørne av UI, så ser det grønne flagget ved siden av det røde stoppskiltet? Når jeg klikker det, min Programmet kommer til å kjøre. Nå skal jeg gjøre noe super enkelt med Scratch. Jeg kommer til å gå videre og gå til utseende panel her, hvor jeg har en haug av lilla brikkene, og jeg kommer til å gå videre og gjøre noe super enkelt som, si. Og then-- varsel dette tekst i den hvite boksen er editable-- jeg kommer til å si "Hei verden", akkurat som vi gjorde i det tekstlige versjon for et øyeblikk siden. Og nå hvis jeg går og klikker på denne grønt flagg, Jeg har nå programmert. Det er ikke et spesielt interessant program, men jeg gjorde maskinen gjøre noe. Jeg startet et program, og det gjorde det jeg ble fortalt at det skal gjøre. Nå kan jeg fortsette å dra og slippe flere og flere av disse brikkene og de kommer til å sperre, men la oss klapse noen terminologi på her at vi får se gjentakende i løpet, og egentlig hele informatikk og programmering mer generelt. Denne "si" blokk, i lilla, la oss bare begynne å kalle en uttalelse. Det er som en uttalelse om faktum. Gjør dette. Så det er en kategori av instruksjoner som du kan mate en datamaskin som en del av et program eller en algoritme. Og for å være klar, har du trolig tatt for gitt at du har programmer på datamaskinen. Og de er slags algoritmer, men en Programmet er egentlig en haug av algoritmer at noen mennesker skrev. De pakket den opp og de solgte det så du, eller de lagt ut på en nettside du kan laste ned. Derfor, er et program bare hel haug med nuller og enere at en eller annen måte, mennesker skapt. Og disse mønstrene av nuller og de representerer ting, til slutt, som "sier hello world" eller "play denne musikken "eller" spille denne videoen " eller "send en e-post." Men vi vil komme tilbake i måten mer detalj hva et program er når du, selv, skrive dem. Her er en annen statement-- "Vent ett sekund." Jeg brukte ikke dette ennå, men hvis jeg vil mitt program for å ta en pause for et øyeblikk å gjøre noe, kan jeg fortelle det til å gjøre det. Vent ett sekund. Nå en annen kan være "spille av lyd." Så, dette er unikt for Scratch, det har evne til å spille av lyden. Så, en uttalelse jeg kan bruken er, her, "spille av lyd." I mellomtiden, boolsk uttrykk, så dette er en mer avansert ord oppkalt etter bare en fyr som heter Mr. Bool, og dette handler om et spørsmål. Sant eller false-- er musen ned? Et boolsk uttrykk er bare noen uttrykk på engelsk som er enten sann eller usann. Enten på eller av. Enten en eller null. Du kan tenke på det på en rekke måter, men det er enten sant eller denne falske, til slutt. Så "musen ned spørsmålstegn," som ville være et Boolsk uttrykk. Og du kan tenke på andre, kanskje. For eksempel, "er den venstre rekke mindre enn riktig nummer? " Som også ville være en boolsk uttrykk. "Mindre enn" er en boolsk uttrykk. Dette også, "rørende musepekeren." Jeg er ikke sikker på hvorfor de kalte det musepekeren. Det betyr bare, er markøren, er det pil på skjermen, berører katten, for eksempel. Eller noen andre aspekter av skjermen. Og det er et spørsmål, igjen, og som betegner en boolsk uttrykk. Noe som du kanskje ønsker å bruke i en tilstand. Så vi kommer til det i bare et øyeblikk. Du kan "og" ting sammen. Så, hvis du ønsker å sjekke om dette er tilfelle, og det er tilfelle, du kan bruke en "og" blokk som dette. Og her er den tilstanden. Legg merke til formen på den lille åpningen i toppen av denne gule puslespill brikke, det er som minner om formen at vi nettopp så et øyeblikk siden. Hver av disse boolske uttrykk har disse spisse kanter på venstre og høyre. Og det er fordi MIT folk besluttet at ved å visuelt formidle former, du kan slags hjelpe folk, studenter og barn, å slags fylle ut feltene bokstavelig. Nå som puzzle-- at Åpningen er litt liten, og som vi vil se i programmet, i Scratch, vil den vokse til å passe. Det vil opprettholde sin form, til slutt. Så en tilstand lar deg bestemme "Skal jeg gjøre noe eller ikke?" Et boolsk uttrykk er den aktuelle spørsmålet du bruker til å bestemme går jeg til Venstre eller må jeg gå til høyre når jeg opplever dette såkalte veiskille? Du kan ha to grener. Hvis noe er sant, gjør dette, ellers går den veien, eller du kan bare gjøre ingenting alt, som denne blokken underforstått. Likeledes kan vi reir disse tingene. Så hvis du ønsker å tredoble gaffel i veien, enten gjøre dette eller dette eller hint, du kan bare hekker disse tingene sammen. Og det begynner å bli litt stygge, til slutt, sikkert, men logikken er fremdeles det samme. Du kan bokstavelig talt lese denne topp til bunn og det står hva det means-- hvis dette er sant, gjør dette, annet hvis annet. En løkke blir ikke enklere i Scratch. Alltid gjør følgende. Nå kan du kanskje ikke tror du kan gjøre mye fordi det ikke er mye plass mellom den øvre og den nederst på denne puslespill brikke åpning. Men du vil se Scratch kommer til å vokse til å passe så mange puslebiter som du ønsker å stappe i det. En annen sløyfe kan være uttrykkes med gjentakelser. Hvis du vet på forhånd, "Jeg ønsker å gjøre noe 10 ganger, " du kan bare fortelle Scratch å gjøre noe 10 ganger. Og, i mellomtiden, kan vi ha variabler. Så her er en vilkårlig en, det orange i dette tilfellet, og dette er en rask tur. Igjen, vil du finne dette svært tilgjengelig når du begynner å peke og klikke. Jeg har kalt min variabel n, men jeg kunne ha kalt det noe jeg vil, og jeg setter den her, i Dette vilkårlig eksempel til null. Nå ser et program som hallo verden er ikke alle som overbevisende, så la oss faktisk åpne opp noe at en tidligere student gjort. La meg gå videre og åpne opp, for eksempel, denne her, for som jeg ville elske å ha en frivillig. Greit, hvordan om-- la oss gå lenger. Ja, kom igjen opp. Hva heter du? ABBY: Abby. DAVID J. MALAN: Abby, kom opp. Så har du noen gang spilt dette spillet før? ABBY: Nei DAVID J. MALAN: All right. David, hyggelig å møte deg. Kom over. Og hva er din programmering bakgrunnen, hvis noen. ABBY: Jeg har lært noen C ++. DAVID J. MALAN: Du har lært noen C ++. Og hva er ditt spill spille bakgrunn? ABBY: Ikke mye. DAVID J. MALAN: OK, så vi tar den. Så her er hvordan spillet kommer til å fungere. Jeg kommer til å gå videre og Klikk på den grønne flagg, som er opp her øverst til høyre. Nå din forgjenger i klassen har gitt deg noen instruksjoner her. Og i løpet av et øyeblikk, det sier "plass å begynne." Så gå videre og traff mellomromstasten. Pc spill: Pikachu. DAVID J. MALAN: Og målet er å fange mat, som avbildet der til venstre. Og til [uhørbart] [GAME musikk spilles] DAVID J. MALAN: Aww, vel, takk for å spille. Vi har her en liten avskjeds gave til deg. Vi har CS50 stress ball, Hvis du ønsker å velge. Ok, godt å møte deg. Takk for at du kommer og utfordrende. Så vi har mer stress baller, så la oss gjøre et eksempel for å motivere. En frivillig? Greit, hva med rett her foran. Hva heter du? PHILLIP: Phillip. DAVID J. MALAN: Phillip. Kom opp, Phillip. Så, Phillip kommer til å være utfordret med et annet spill at en av dine forgjengere skrev som en del av oppgavesettet null, kalt Ivy Hardest Game. Og vi får se i løpet av et øyeblikk hva som menes med dette. Phillip, hyggelig å møte deg. Hva er din bakgrunn? PHILLIP: Ferdig mye koding. Gjort litt gaming, også. DAVID J. MALAN: OK. Fikk en masse gaming, også. Og har du spilt dette spillet før? PHILLIP: Nei DAVID J. MALAN: All rett, så here we go. Jeg kommer til å gå videre og klikk på den grønne flagg. [Spillmusikk] [MUSIC MC Hammer, "U KAN IKKE røre denne"] PHILLIP: [uhørbart] DAVID J. MALAN: [uhørbart] PHILLIP: [uhørbart] [Ler] [MUSIC MC Hammer, "U KAN IKKE røre denne"] DAVID J. MALAN: [uhørbart] Pløye gjennom den. PHILLIP: [uhørbart] DAVID J. MALAN: Sett i gang. [MUSIC MC Hammer, "U KAN IKKE røre denne"] DAVID J. MALAN: All right. Gratulerer. [APPLAUSE] DAVID J. MALAN: Vi vil innlegg som online senere så at du kan utsette med det også. Princeton kommer opp neste, etter det. Så nå la oss faktisk gå å starte fra scratch, så å si, og faktisk bygge opp til vi kan skille fra hverandre noen av disse ideene og få til noe enda mer komplisert ved utgangen. Jeg kommer til å gå over her, og jeg kommer å gå videre og opprette en ny fil. Så igjen, vil problemet sett gå deg gjennom noen av disse trinnene. Men, alt jeg gjorde var å gå til Fil-menyen, og jeg sa "ny", så mye som Microsoft Word, eller hvilket som helst program sånn. Og la oss gå videre now-- og vi implementert "Hello world" for et øyeblikk siden, men la oss gjøre noe litt søtere. Jeg kommer til å gå opp til hendelser. Og jeg kommer til å gjøre "når grønt flagg klikket. " Og så kommer jeg til å bruke, skal vi si, en gren. Så jeg kommer til å bruke en "hvis" tilstand. Og legg merke til hvordan så snart jeg kommer nær til det, ønsker den å klikkes sammen. Så jeg la gå, og det klikker sammen. Og nå kan jeg gjøre noe interessant. Hvis jeg blar gjennom her, jeg kommer å se en hel haug med blokker. Hvis jeg går til "data" - la meg zoome i-- det er noe med variabler. Hvis jeg går til "bevegelse", kan du tilsynelatende snu ting rundt. Hvis jeg går til "operatører" - oh, er dette interessant, Jeg kan plukke et tilfeldig tall. Så la meg gjøre noe med bare en viss sannsynlighet, bare fordi. Jeg kommer til å gå videre og dra denne puslespill brikke, dette er at mindre enn blokk, så det er bare "Er dette tallet mindre enn det en?" Men jeg vil ikke ha en hard kode et nummer fordi det være ganske meningsløst. Så jeg kommer til å dra dette stykket her, og legge merke til hvordan den smetter inn, og nå la meg gå videre og si "hvis nummeret som er plukket tilfeldig er mindre enn seks, gjør følgende. " Nå hvorfor mindre enn seks? Hva sannsynligheten er dette effektivt kommer til å gi meg, bare intuitivt? Om lag 50%, ikke sant? Hvis nummeret som oss gjette tilfeldig mellom 1 og 10 er mindre enn seks, klart det er en, to, tre, fire eller fem. Og så det kommer til å gi meg en 50% sannsynlighet for hva som skjer? Vel la oss gjøre noe sånt dette, "spille av lyd meow." Og legg merke til, igjen, puslespill brikke vokser for å passe til, så lenge formene overens. Det er det som er viktig. La meg gå over til Scratch her og klikke på "play". Ingenting skjer. Er det en bug? Nei, ikke nødvendig. Det kan bare være at en større antall ble valgt. Så la oss gjøre det igjen. Ingenting. [MEOW] DAVID J. MALAN: Det er det. [MEOW] DAVID J. MALAN: Again. Nei [Meowing] DAVID J. MALAN: Så hvis du har noen gang spilt et spill, selvfølgelig, der ting skjer tilfeldig, som skurkene kommer eller ikke kommer på skjermen, eller ting faller eller ikke faller, det er bare fordi noe super enkelt som dette skjer. Plukk en tilfeldig tall, og hvis det er mindre enn en viss verdi, kanskje gjøre dette, eller kanskje gjøre det. Vi kan innlemme det inn i en tilstand. La oss gjøre noe annerledes. La meg kaste det bort. Du kan bli kvitt ting ved bare dra den av til venstre og la gå. La meg gå videre og gjøre en evig blokk og svært raskt gjøre noe irriterende. La meg gå videre og si "spille av lyd meow." Men jeg vil ikke at dette skal være for irriterende, så la meg ta denne blokken, "Vent ett sekund", og varsel det er ikke mer plass for den. Men hvis du går nær nok, den ønsker å gå dit. Så jeg la gå, og det vil vokser for å fylle blokken. Så nå, er dette en løkke. [Meowing] DAVID J. MALAN: Jeg er bokstavelig talt gjøre dette for alltid. Igjen og igjen. Det er bare ikke naturlig klingende. La meg gå videre og endre dette å ikke ett sekund, til to sekunder og trykk Enter. Og hva er fint om Scratch er som du kan programmere interaktivt. Gjøre en endring, kanskje trykk Enter eller Play igjen, og det vil bare holde det gående. Vel, nå er hvorfor ikke vi gjør noe litt søtere? Snarere enn å gjøre alt fra bunnen av, la meg gå videre og åpne opp et forskudd gjort en, at jeg pre-baked, kalt "Pet katten." Og vi vil legge ut alle disse filer på nettet, og oppgavesettet null vil fortelle deg hvordan å få tilgang til dem og åpne dem opp. Og legg merke til, dette er ganske enkel. Men på forhånd, synes jeg å ha fanget en "evig" blokk, så jeg har fått en løkke. Og så har jeg fått en "hvis" tilstand. Jeg har en boolsk uttrykk. Så i engelsk, bare skotter på dette, spesielt hvis du aldri har programmert før, bare intuitivt, hva dette kommer til å gjøre, dette programmet? [Publikum SKRAVLE] DAVID J. MALAN: Hvis du klapper katten, katten kommer til å mjaue, ikke sant? Fordi "forever fjerne merkingen" er musepekeren berøre katten. Så for å være klar, og jeg ikke si dette før, alle disse pusle stykker og manuset som vi har kombinert dem i, så å si, er synonymt med et skript program, egentlig, tilhører denne katten. Og grunnen er-- fordi varsel hvordan dette samme katt her er uthevet, her nede du kan opprette en andre katt eller hund eller virkelig alt du vil grafisk. Du kan importere noe fra Photoshop, eller lignende, og integrere noe hvis du ønsker å gjøre det til et prosjekt. Og hva du finner, til slutt, er at du kan legge til skript, legge puslespill stykker, til individuelle tegn. Så disse tilhører alle denne spesielle katt. Så nå hvis jeg går videre og spille dette programmet, er ingenting skjer. Men det er i gang. Programmet er i denne evig loop, slags venter på hva du skal skje? [Publikum SKRAVLE] DAVID J. MALAN: For å klappe katten. Så hvis jeg flytter min mus mot han-- [Meowing] DAVID J. MALAN: Så nå Jeg klappe katten. I mellomtiden kan vi ha en dobbel gren. La meg gå videre og åpne opp ikke klappe katten. Vi vil legge dette på nettet også. Dette er en litt mer kompleks, men uten å si du kan gjette kanskje hva kommer til å skje. [Meowing] DAVID J. MALAN: Cat er mjauende, grand old time. Men dette programmet er selvsagt kalt "Ikke Pet katten," så klart, jeg ønsker å klappe katten. [ROARING] DAVID J. MALAN: Ikke klappe katten. Nå, la oss ta en titt på et annet eksempel her. Dette vil bli kalt "Hei, hei, hei," grunner som vil være klart, fordi så snart jeg kjøre denne thing-- [SEAL BARKING] DAVID J. MALAN: Veldig lett å skrive irriterende Scratch programmer. [SEAL BARKING] DAVID J. MALAN: Nå vil ikke vi gå i stor detalj med alle av disse, men merker det er en par nye funksjoner her. Det er en variabel, kalt "dempet", og så er det en haug med forhold. Og for nå, la meg bare erte deg ved å si at hvis denne fyren blir for irriterende, Jeg kan trykke på mellomromstasten, og han stopper. Fordi rollen som spilles av disse to prosedyrer er som følger. En av dem er å gjøre det bjeffer hvert få sekunder. Den andre er bare venter for meg å treffe mellomromstasten. Og hvis jeg treffer på mellomromstasten, det kommer til å endre tilstanden av denne variable, verdien av denne variabelen, er det tilsynelatende kalt "dempet" Jeg ropte ikke det noe kjedelig som n, Jeg kalte det et engelsk ord, "dempet". Fra 1-0 eller 0-1. Fra tro mot falsk eller usann til sann. Og så kan du faktisk se nå, at du kunne ha to skript, to programmer som kjører samtidig, og begge kan bli sittende i en sløyfe gjør noe. Venter på det menneskelige å gjøre noe som treffer mellomromstasten. [SEAL BARKING] DAVID J. MALAN: Og nå han er på vei igjen. [SEAL BARKING] DAVID J. MALAN: Så hva annet kan vi gjøre med disse eksemplene? Vel, la oss gå videre og gjøre en eksempel med å telle sauer. Vi vil fortsette dette langs linjene her of-- la oss åpne opp sauene eksempel. Og legg merke til, mye som før, dette, heldigvis, er litt mindre irriterende. Når jeg traff spille her-- Å nei, dette er irriterende. Han kommer til å bæ med en viss sannsynlighet. La oss spille dette igjen. [SHEEP bleeting] DAVID J. MALAN: Den eneste forskjellen er vi har endret drakt, så å si, og vi halvere og si hva det faktiske antallet er. Vel la oss gå videre og ta dette ett skritt videre. Og la meg erte deg med en annen funksjon her. La oss gå videre og åpne opp et program kalt tråder. Så mye som du kan ha én sprite, har flere skript, du kan ha to sprites, en fugl i en katt, som hver har sitt eget manus. Og hver av dem kan operere samtidig. Hvis du noen gang har hørt Ordet "multithreading" en datamaskin er "flertrådede" betyr det kan gjøre flere ting på en gang, og, ja, så kan ripe. Og nå merker fuglen er slags dum. Det er bare å gjøre ting tilfeldig, spretter ut av skjermen. Tydelig at katten har blitt programmert å slags få som søker evner å hjem på fuglen fordi han har alltid peker på ham. Inntil endelig, han fanger selve fuglen. Så jeg vil ikke dvele ved detaljene her, men du kan slags skimte de samme formene, noen "Hvis" forhold, noen variabler, kanskje noen looper, er slutt å gjøre det samme. Nå la meg gå videre og åpne opp noe helt annet, å erte noen av dere, spesielt de mer komfortable, hva du faktisk kan gjøre med dette. Jeg kommer til å gå videre og åpne opp Button her. Og dette er en super enkelt-tilsynelatende program, men se hva som skjer når jeg-- Se hva skjer når jeg åpner denne versjonen av det, her i nettleseren, scratch.mit.edu. Og når jeg klikker på denne store røde knappen, legge merke til hva som skjer. Så hva er det som skjer her? Det er faktisk mye mer kompleksitet skjer under panseret, selv om jeg har implementert dette, eller ærlig, Dan Bradley har implementert dette så enkelt. Han har utviklet en tilpasset Scratch puslespill stykke, kjent som en Scratch forlengelse, han kalte det Toggle. Og hva Toggle gjør er det sender en melding over internett. Og at meldingen selv ser litt kryptisk. Men også dette, vil du forstår med begrepet slutt. Meldingen han faktisk sender ser litt noe sånt som dette. Det er bare tekst. Cryptic. Du vil forstå det etter den tid vi få problemet satt sju. Det er bare å sende en tekstmelding over internett til en server. Og at serveren er, til slutt, å snakke med denne lyspære, som har en av de fancy lyspærer i det det, i seg selv, snakker til Wi-Fi i nettverket her, hvor en lokal enhet ned her-- og, til slutt, det er faktisk snu det lyset av og på. Men vi kan gjøre mer interessante ting fortsatt. Legg merke til hva Dan også gjorde for oss. Han gjorde flere sprites, hver av som har et script venter på et klikk. Og hvis jeg klikker rødt, går det rødt. Hvis jeg får blå, går det blåaktig. Grønn, gul, oransje. Og alt dette skjer ved går entret internett, nedover ryggen her til lyspære, på og av. Og hvis du kan tro it, og dette er kanskje en av de mest komplekse Scratch prosjekter noen har implemented-- han gjorde det, i rettferdighet, på en dag. Og det var den utfordringen vi kastet ned Dan da vi så har binære pærer, vi har Scratch, hvordan kan vi kombinere dem? Og, ja, dette er helt noe alle i dette rommet kunne gjøre etter semesters end-- Er han reimplemented binære pærer bruker det samme grensesnittet som var på vår iPad på onsdag. Så det nå, hvis jeg faktisk Klikk pluss over her, vi har en, to, tre. Jeg kan trykke på 16 og slå at en på. 128, og så videre. Nå hvis det alene har og blåst tankene dine, du kunne gjøre ting langt mer tilgjengelig, ikke medfører hardware sikkert. Bare ting på skjermen selv. Og, ja, hva de fleste studenter ende opp med å gjøre er noen form for spill, noen stykke kunstnerisk arbeid, eller en slags interaktiv animasjon. Og jeg vil si at en av våre favoritter har vært denne. Og jeg tenkte at hvis vi kan dempe lysene, vi vil ta en kikk på denne finalen Scratch prosjekt i konklusjonen. Men hva du bør huske på, som Jeg kan erte deg med en siste detalj, seksjonering vil begynne neste uke. Arbeidstid vil begynne neste uke. Problem satt null vil bli lagt ut CS50.harvard.edu senere i dag. Og du vil bli møtt i oppgavesettet null til CS50 egen Zamyla Chan, som guider de fleste av våre walkthroughs. Disse er innebygd video i oppgavesett som vil holde hånden din gjennom mye av den første satt opp og gjennom mange av de mulige design beslutninger. Så hvis du noen gang har hatt den følelsen når du plukker opp en hjemmelekse og lurer på, hvor skal jeg begynne? Hun vil ha det svaret for deg. Og nå, endelig program fra en av dine forgjengere i svaret på spørsmålet "Hva sier reven?" [MUSIC Ylvis, "HVA ER DET FOX si?] Ylvis: (synger) Hund går woof. Katt går meow. Bird går tweet og musen går knirker. Ku går moo. Frog går kvekk. Og elefanten går Toot. Ducks si kvakksalver og fisk går blub. Og forseglingen går ow ow ow, men det er en lyd som ingen vet, hva sier reven? Og DAVID J. MALAN: Det er det for CS50. Vi vil se deg på Puzzle Day og på mandag. [APPLAUSE] [MUSIC Ylvis, "hva gjør FOX SAY?"] FORTELLER: Og nå dypt tanker, etter Daven Farnham. I dag fikk jeg truffet i ansikt med en telefonkatalog. Forvirrende, som jeg er på hjemme å se på nettet.