[VIDEO PLAYBACK] [Bildøra stenge] [Bilmotoren START] [MUSIC SPILLE] -Moving Rett sammen i søke av gode tider og gode nyheter. Med gode venner kan du ikke tape. -Dette Kan bli en vane. -Opportunity Slag La oss bare komme ut og hente den. -Ja! -Sammen vi skal fakke den. -Vi Haike, buss, eller gul cab det. -Dammit. -Vi Flytte rett sammen. -Footloose Og fancy gratis. -Komme Det er halve moroa. Kom dele det med meg. -Vi Flytte rett sammen. -Vi Kommer til å dele lasten. -Vi Trenger ikke et kart til få dette showet på veien. -Hei Fozzy, jeg vil du skal ta til venstre Hvis du kommer til et veiskille. -Ja Sir. Ta til venstre ved veiskille. Ta til venstre. -Jeg Tror ikke det. -Cruising Rett sammen fant vi lysene på motorveien. -Og Vei eller min måte. -Så Stole på min navigasjon. -kino Stjerner med prangende biler og livet med toppen og ned. -Vi Storming de store bakkene. -Ja, Er storm rett. Bør det snør? -Nei, Jeg tror ikke det. -Moving Rett sammen. -Footloose Og fancy gratis. -Du Klar for den store tid. -Er Det klart for meg? -Moving Rett sammen. Flytte rett sammen. Flytte rett sammen. Flytte rett sammen. -Jeg Tror du bedre trekke over. -Ja Sir. [END PLAYBACK] [APPLAUSE] DAVID J. MALAN: Dette er CS50. Og dette er slutten av uke 0, men starten på et vakkert vennskap. Vi er så glade for å være her ved Yale University for aller første gang med vår venn Scaz, og Jason, og Andy. Alle 40 av CS50 TF s og CA er her på Yale. Og alle dere. Og faktisk, er det nok på tide to-- [APPLAUSE] Så selv om de fleste av forelesningene vil faktisk være i Cambridge i år, realiteten er at ved design, og veldig mye bevisst i CS50, Jeg tror vi nærmer oss punktet teknologisk og pedagogisk, der det kan være en overordnet pedagogisk erfaring til å engasjere seg med noen av kursets materiale på nettet. Faktisk reality-- og hvis jeg tror dette philosophically-- er at forelesningene er ikke en særlig effektive midler for å levere ganske kompleks informasjon. Absolutt over time pluss lange spenn av tid. Og faktisk hver noen minutes-- Jeg husker meg selv i college-- du sonen ut et øyeblikk, du savner noen komplisert emne, og du er borte ganske mye i de neste 45 minutter. Og realiteten er at om du er her i New Haven eller Cambridge eller utover, enkelheten av å ha muligheten til å pause og spole fremover, spole tilbake, hyperlink til relatert ressurser, søk fulltekst transkripsjoner og lignende, er det en mulighet Jeg tør si for våre online studenter godt utover New Haven, gir dem en mulighet å virkelig ta tak i konseptuelle materiale som vi introdusere i forelesninger alle bedre. Men til syvende og sist i CS50, er studentenes opplevelse karakteriseres så, så mye mer ved kursets oppgavesett, eller ukentlig programmering prosjekter, kursets seksjoner ledet av undervisningen stipendiater, nattlig kontortid ledet av kurs assistenter og undervisning stipendiater, og faktisk slik hendelser som CS50 Puzzle Day, CS50 er Hack-a-thon, den CS50 Fair, ukentlige lunsjer, og så mye mer. Og så om du er her i New Haven, eller tuning i langveis fra, i dag i Cambridge, og vi ser deg igjen snart, realiteten er dette er en og samme klasse. Og vi er så glade for å være her alle sammen i dag. Og så på slutten av semesteret, enten her eller afar, godt forhåpentligvis du bærer stolt, lykkelig, og kanskje med litt lettelse, skjorten som vitner til du har tatt CS50. Så der gjorde vi la ut på onsdag? Vi tok en titt på beregnings tenkning. Og det er mot hva vi destillert informatikk til, minst for nå. Men vi destillert det litt lenger inn minst tre komponenter elementer. Innganger, så hva er det Problemet vi prøver å løse? Utganger, hva er svarer vi håper å få? Og representasjon der av. Og vi vil ikke dvele her på etter på binære, eller ASCII, og lignende så mye, men heller ta for gitt at vi kan representere denne informasjonen, fordi de langt mer interessante delene av disse problemer er ikke bare innganger og utganger, men algoritmer som går inn i å løse disse problemene. Og du kanskje husker fra her om dagen at vi tok en ganske tradisjonell begrepet ser noen opp i en ganske stor telefonboken, eller mer generelt digitalt i disse dager, bare et meget stort datasett. Et virkelig stort kontaktlisten, med massevis av navn alfabetisk sortert. Og vi innså at mens jeg kunne nærme seg dette problemet ganske enkelt ved anvendelse av en lineær approach-- side for side, eller to er på en tid-- vi innså at jo mer intuitive algorithm-- bare slags dele og erobre problemet igjen, og igjen, og igjen-- halvere den med hver tid, ga oss denne grønne resultat. Og det er så mye flatere fordi det antyder at selv som dette problemet blir større og større, slik tilfellet er i disse dager med dataene sett og reality-- Facebook og Google søkeresultatene og like-- gjør vår algoritme utføre like effektivt med de større biter som det gjorde selv med mindre biter. Nå ber det spørsmålet, hva kan vi faktisk løse tilsvar med denne typen intuisjon? Denne typen divisjon og erobre? Vel, vi kunne gjøre noe som dette i dag her. Vi kunne ta frammøte. Så kanskje som 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11-- ikke kommer til å være alt som effektiv. Så vent, grunnskolen. 2, 4, 6, 8, 10, 12, 14, 16, 18 og så videre. Men kan vi gjøre det litt bedre? Jeg er ganske sikker på at jeg ikke kan gjøre dette alene. Så hvis du vil humor oss for bare et øyeblikk, vi tok med oss en algoritme som er bare fikk tre trinn, men det require-- hvis du ikke mind-- oss alle stå opp, hvis du ville. Så, med oss ​​alle nå står, step en av denne algoritmen er følgende. Stå opp og tilordne selv nummer 1. Så på dette tidspunktet, bokstavelig talt alle i dette rommet forhåpentligvis tenker på seg selv, imidlertid forkjært, nummer 1. Nå trinn to av denne algoritmen er kommer til å involvere følgende. Trinn to, koble av med noen stående, legge dine tall sammen, og vedta summen som din nye tall. Hurtig tilregnelighet sjekk. Hvilket nummer er alle tenker på nå? Så to, unntatt kanskje for en, vanskelig, ensom person. Hvis vi har et oddetall av mennesker i rommet. Så en person kan fortsatt være nummer 1, er det helt greit. Men trinn tre her, en dere bør sette seg ned. Den andre bør gå tilbake til trinn to, og gjentar, hvis du ville. Så hvis fremdeles står, bør du være blant de som skal tilbake til trinn to. Fortsett. Noen få mennesker fremdeles står. Så, hvis det fortsatt står, koble opp med noen. All right, minkende ned. Noen få mennesker fremdeles står. Jeg skal hjelpe hvis behovet være. Husk nøkkelen takeaway her, er hvordan mye raskere er dette enn meg å telle. Så la oss se. Jeg kan hjelpe til. Så hva nummeret er du fortsatt tenker på? PUBLIKUM: Jeg er på 44. DAVID J. MALAN: 44, så du gå videre og sette seg ned. Hvilket nummer er det du tenker på? PUBLIKUM: 74. DAVID J. MALAN: 74. All right, gå videre og sette seg ned. Hvem andre står fortsatt? 86. Og er noen andre fortsatt står? Hvilket nummer? Jeg hørte 67. Og deretter i toppen? 32. Alle andre som fremdeles står og tenker på et tall? Å, hei. Unnskyld. Straks tilbake. 42. Noen andre? PUBLIKUM: 47. DAVID J. MALAN: 47. Er det noen andre som fremdeles står som ikke er blitt tellet? Så det endelige antall mennesker i et rom som har 497 seter er-- som alle er filled-- er 390. Så dette er flott. Vi vil snart diskutere begrepet av en feil i et dataprogram. Men vi vil komme tilbake til det før lenge. Men i teorien, hvilken kanskje ha skjedd akkurat nå? Så selv om det var tre store trinn til denne algoritmen, hver av disse var bare slags en stor operasjon. Og det var denne syklisitet til det i at hvis du ble fortsatt stående, du holdt gå fra trinn tre til to, trinn tre til to, trinn tre til to. Men hva holdt skjer på hver iterasjon? Hver syklus av denne sløyfen? Hva som skjedde andre steder i rommet? Ikke bare det samme, men hva skjedde med halvparten av dere? Sitte ned. Og så er det i løgn denne innsikten, omtrent som telefonboken eksempel i at hvis halvparten av dere er sitte ned hver gang, problemet begynner med kanskje 400 mennesker, deretter til 200 personer, 100 personer, da 50 mennesker, og så videre. Og så vi spikke ned i teori til bare én person, tenker på den totale verdien av alle. Nå virkeligheten, noen sosiale dynamikk, og noen regnefeil kan bidra til at ultimate bug. Men i teorien, mens jeg ble fortsatt teller unna, ta flere dusin trinn, eller hundrevis av trinnene å telle selv, å telle et rom fullt av 500 eller så folk burde ha tatt langt færre trinn, fordi du bare kan dele 500 og 1/2 så mange ganger. Og så akkurat som med telefonen bestille eksempel her om dagen, vi har noe logaritmisk så å si, der hvis vi var alle opererer i samklang, og ignorerer tillegg feil, ville vi har oppnådd nøyaktig den slags kjøretiden? Nå for å være rettferdig, type jukset, i at jeg leveraged annen ressurs. Mens det er bare en av meg, Jeg leveraged hundrevis av deg. Men som kan sies å være en eksempel på parallell prosessering, eller en tilstand av kunst veldig mye på moten hvor datamaskiner i disse dager har flere prosessorer, eller mer teknisk, mer flere kjerner, og kan virkelig gjøre flere ting på en gang, akkurat som deg alt vi gjør der, parallelt. Men husker at det vi også gjorde på onsdag ble prøve å fange denne intuisjon og formalisere det i kode. Noe som pseudo-kode. Og faktisk, og jeg håper du vil tilgi, er det som 80 grader her inne. Så jeg kommer til å ta dette off for bare en liten bit. Det jeg trodde vi skulle gjøre, er overgangen nå til et program der vi igjen engasjere publikum, men skrive et program på engelsk lignende syntaks, som å løse dette problemet her. [VIDEO PLAYBACK] -Det Er peanut butter jelly tid. Peanøttsmør gelé tid. Peanøttsmør gelé tid. Way ya! Way ya! Way ya! Way ya! Nå er det du går! Der du går! Der du går! Der du går! Peanøttsmør gelé! Peanøttsmør gelé! Peanøttsmør gelé! Peanøttsmør gelé! Peanut, peanut butter jelly! Peanøttsmør gelé! Peanøttsmør gelé med et balltre. [END PLAYBACK] DAVID J. MALAN: --that video, men det er litt vanedannende, hvis ikke en smule irriterende. Men for å gjøre dette, tenkte jeg hva vi hadde gjøre er å prøve å skrive et program sammen, for som vi trenger tre frivillige. Nødt til å være komfortabel på kamera og internett. Sam, kom opp. Lilla skjorte, akkurat her, kom opp. Og fra over her, la meg gå litt lenger tilbake. Crimson og blå skjorter, kom opp. Perfekt. Kom igjen nå. Kom opp, kom opp. Og hva heter du? Erica. David, hyggelig å møte deg. Hvis du ønsker å ta dette setet her. Dette er Sam. Hva er navnet ditt? Antonio. Antonio, hyggelig å møte deg. Erica og Sam, hvis du hadde liker å ha en plass her. Hva vi har kommet forberedt med, som disse gutta oppdager, er ingrediensene som å gjøre en peanut smør og gelé sandwich. Nå kan dette være noe som du tar veldig mye for gitt. Men vi har gitt hver enkelt av våre tre frivillige her-- to frivillige og Sam her, en brød hver, en plate, en kniv, en krukke med gelé eller syltetøy, og en krukke med peanøttsmør. Og målet for hånden nå kommer til å være for disse tre for å lage en peanøttsmør og gelé sandwich. Men hva vi skal gjøre er å forvente den audience-- siden alle dere sikkert vet hvordan du gjør dette så godt i reality-- kommer til å gi oss den trinnvise instruksjoner. Pseudo-kode, hvis du vil. Så jeg skal spille rollen som skriver her. Og jeg har fått en liten liste over gjøremål, og slik at hver av dere, en om gangen, roper en potensiell instruksjons, vil jeg skrive det ned, gjenta det etter behov. Og så dere kommer til å gjøre en peanut smør og gelé sandwich bare ved å gjøre det du blir fortalt. Så tenk på dere selv som datamaskiner. Du kan bare gjøre det du blir fortalt. Ingen forutsetninger, ingen spørsmål. Du trenger bare å gjøre det. Så hvem vil våge den første instruksjon for å lage en PBJ smørbrød? På balkongen er det. PUBLIKUM: Åpne pose med brød. DAVID J. MALAN: Åpne pose med brød, hvis du vil. Så la oss se. La oss iterere, og få litt mer presis. God måte å begynne skjønt. Trinn to, noen andre. Nå ingen ønsker å jobbe frivillig. Trinn to i front. PUBLIKUM: Åpne det indre pose med brød også. DAVID J. MALAN: Åpne indre sekk av brød også. Flott, vi lærer. Litt mer presis. La oss få dette arbeidet. Ja, i grønn skjorte. PUBLIKUM: [uhørbart] DAVID J. MALAN: brødskiver. Forsiktig fjerne to skiver brød. Det er bra. Trinn fire, noen andre? Over her, ja? PUBLIKUM: [uhørbart] DAVID J. MALAN: Place brød på plate. Trinn fem? Trinn fem, ja? PUBLIKUM: [uhørbart] DAVID J. MALAN: På toppen of-- oh, hånd. Plasser hånden på toppen av peanøttsmør. Er det det jeg hodet? PUBLIKUM: Ja, og skru. DAVID J. MALAN: og-- si det igjen. PUBLIKUM: [uhørbart] DAVID J. MALAN: Og sette lokk ved siden av peanøttsmør. Lett plassere hånden på toppen av peanøttsmør, og skru, og legg lokk ved siden av peanøttsmør. OK, trinn seks. Trinn seks, noen andre. Yeah? PUBLIKUM: [uhørbart] DAVID J. MALAN: Si det igjen. PUBLIKUM: Gjenta trinn fem igjen. DAVID J. MALAN: And gjenta trinn fem igjen, som kommer til å skape litt av et problem nå hvis vi gjør dette steg for steg. Så nå går vi tilbake til trinn fem. Lett plasserer hånden på toppen peanøttsmør og skru og sette lokk ved siden av peanøttsmør. Deretter tar du tak i peanøttsmør og gjenta trinn fem igjen. Så vi vil overstyre det uendelig loop, hvis du vil. Trinn sju, noen andre. Ja, i ryggen. PUBLIKUM: [uhørbart] DAVID J. MALAN: --På toppen av andre. PUBLIKUM: [uhørbart] DAVID J. MALAN: På Derimot på den andre toppen. Vil du bare komme opp her? Hvordan avslutte jeg undervisningen? Hva er resten av undervisningen? PUBLIKUM: Ignorerer den delen. DAVID J. MALAN: Ignorerer den delen. La oss starte på nytt. Trinn syv. PUBLIKUM: [uhørbart] DAVID J. MALAN: Ta tak med opposisjon hand-- dette er bra. Dette er faktisk bra. PUBLIKUM: [uhørbart] DAVID J. MALAN: Og plast jar-- PUBLIKUM: [uhørbart] DAVID J. MALAN: Og twist-- PUBLIKUM: [uhørbart] DAVID J. MALAN: For to sekunder. Bare åpne peanøttsmør jar. Jeg håper du vil tilgi. Så la oss anta at vi fikk det. Åpne peanøttsmør jar. [APPLAUSE] DAVID J. MALAN: Trinn åtte, la oss gå. Trinn åtte, ja, i ryggen. PUBLIKUM: [uhørbart] DAVID J. MALAN: Good. Trinn ni, ja? PUBLIKUM: [uhørbart] DAVID J. MALAN: --out av peanøttsmør jar. Og-- og hva? PUBLIKUM: [uhørbart] DAVID J. MALAN: Og sette kniv tilbake i peanøttsmør. Trinn ti. Trinn ti. PUBLIKUM: [uhørbart] DAVID J. MALAN: Sett kniven ut, og deretter fjerne forseglingen. Fin. Av peanøttsmør. All right, trinn 11. PUBLIKUM: [uhørbart] DAVID J. MALAN: OK, grå datamaskin følg blå eller rød datamaskin. Good. [APPLAUSE] DAVID J. MALAN: Ta med oss ​​hjem. Par flere trinn. Hva blir det neste? Trinn 12. Trinn 12. Yeah? PUBLIKUM: Sett en av skiver brød forsiktig på en av hendene. DAVID J. MALAN: En av dine hender. Og så, trinn 13. Yeah? PUBLIKUM: [uhørbart] DAVID J. MALAN: --På brødskive. Good. Ganske bra. Trinn 14, ja. PUBLIKUM: Angre trinn 13. DAVID J. MALAN: Angre trinn 13. La oss gå videre til gelé. Det er en 100- trinns program, men vi var på trinn 15. Yeah. PUBLIKUM: [uhørbart] DAVID J. MALAN: 7 til 13 ved hjelp gelé, fordi de gikk så bra. Gjenta trinn 7 til 13, ved hjelp av gelé. Så ta tak i nedre halvdel av gelé krukke med en hånd på toppen. På den annen side av andre toppen, ignorerer den delen, gripe med motstridende hender, lokket og plastkrukke på bunnen, og vri i to sekunder. Deretter åpne gelé jar. Og til slutt, la oss prøve å gi oss noe spiselig. Trinn 16. Så hvorfor ikke vi la den være der. Tusen takk til våre tre frivillige. [APPLAUSE] Vi har en liten CS50 stress ball for deg. Det skulle være en smørbrød men-- så hva var poenget, utover å ha en litt moro med algoritmen? Men realiteten er at selv når du programmere en datamaskin, du må være super presis. Så komplisert eller skremmende som din egen datamaskin kan godt være for deg, på minst når noe går galt, realiteten er det en ganske dum enhet som ble oppfunnet av oss mennesker, og kan bare gjøre et delsett av det vi do-- noen ganger absolutt faster-- men det vet ikke hvordan å gjøre antagelser. Det betyr ikke vet hvordan du skal være på samme bølgelengde som deg. Det vil bare gjøre nettopp hva du forteller det. Og du vil bli rammet, kanskje, som vi starter skrive selve koden med første oppgavesett og utover, hvor enkelt det er å lage en antagelse som et menneske, og ikke forventer jeg trenger for å håndtere dette tilfelle, eller i det hjørnet fall så å si, som kan veldig godt oppstå hvis for eksempel Sam hadde den eneste squeezable glass av gelé, mens alle andre hadde noen glasskrukker som godt. Så før vi slår vår hensyn til noen faktiske koden, tillate meg å introdusere kursets hoder her på Yale. Våre venner Scaz, Andy, og Jason til å komme opp og si hei. [APPLAUSE] SCAZ: Vi har mistet Jason midlertidig. Hei igjen, alle sammen. Mitt navn er Scaz. Jeg har vært lærer på Yale siden 2001. Og når jeg ikke lærer, min forskning er i robotikk og kunstig intelligens. Og kunngjøringen om at jeg har i dag er at å starte i et par uker, vi kommer til å være å bringe noen supplerende materiale til CS50 å snakke om intelligence-programvare. Vi kommer til å snakke om hvordan steder som Netflix og Hulu kan anbefale filmer kan det være lurt å se på. Hvor vi skal snakke om hvordan fører mindre biler faktisk fungerer. Og vi vil være i stand til bakken disse tingene i begrepene at du lærer i denne klassen i dag. Fordi alle disse tingene er bygget på det samme grunnlaget. Og det er hva dette serien vil utforske. Så jeg ser virkelig frem til å se mer av deg alt, og du kommer til å få til se mer fra oss alle veldig snart. La meg så introduserer Jason. JASON: Hei alle. Mitt navn er Jason. Jeg dessverre gikk til Harvard som en undergrad. Det kommer til å bli kuttet ut av selve strømmen. Og nå er jeg her som foreleser i datavitenskapsavdelingen. Og jeg hjelper kjøre kurset med Scaz, David og Andy. ANDY: Hey guys. Jeg heter Andy. Jeg er faktisk den eneste Yale student på scenen akkurat nå. [APPLAUSE] Jeg er i Berkeley College, opprinnelig fra Solon, Ohio. Og jeg var en av de barna hvor, når jeg kom til Yale, Jeg trodde virkelig at jeg ville aldri nødt til å se på en rekke igjen. Og så skjønte jeg at du trengte både vitenskap og QR credits å oppgradere. Og så min freshman våren, tok jeg en klasse, en CS, intro CS klasse her ved Yale. Jeg var som, dette er som faktisk ganske kult. Og mens jeg faktisk endte opp med å erklære Som en global samanheng stor, ferdigheter Jeg lærte i CS og programmering er så gjelder for ethvert felt du velger å gjøre. Og de ansatte her ved Yale, vi har vært så hardt på jobben å forberede dere. Og vi ser frem til å se alt i seksjon og arbeidstid. Så ja. [APPLAUSE] DAVID J. MALAN: Takk. Så like før timen begynte, vi hadde en mulighet å gå rundt campus med en mobiltelefon og ta noen selfies i video form av virkelig min første tur til Yale campus her. Og så vi tenkte vi skulle dele en grov kutt av akkurat dette som Scaz og Andy og Jason tok meg rundt campus. [VIDEO PLAYBACK] [SIRENS] -David. -Velkommen Til Yale. -Godt å se deg. -Hyggelig å se deg. -Kan Vi gå på en tur? -La Oss gå på en tur. -Road tur. -Dette Skiltet har vært der en stund. -Whah, CS50. -Hurry! Gå, gå, gå, gå. Du bør [uhørbart] Harkness Tower. -Og Så vi at et par ganger. [APPLAUSE] -Se Opp for sykkel! Ahh! Hei Frank. -Hva skjer folkens? -Hvordan har du det? -Godt å se deg. -Velkommen Til videoen. Ikke handle for opphisset. -Jeg Elsker Silliman. Ahh! -Det Har vært ca tre timer siden Jason hadde iskrem og Nutella. Så vi er nødt til å stoppe tilbake på Silliman for en liten bit. -Det Er ikke engang [uhørbart] ennå, bare det faktum at de har det her er så utrolig. Dude, det er Nutella til hvert måltid. -Det Var i fjor også. -Ja. -Fortell mye om Yale så langt. Men jeg vet nå at TD der borte. Og det er ansett som off campus. -Her Har vi gotisk arkitektur. Verdensberømte. Vi har noen mer gotisk arkitektur. Og konstruksjon, og mer gotisk arkitektur. Hei. Det er der vi har kontortid Tirsdager gjennom torsdager i Galtvort, som [uhørbart]. -Greit. Det er det for turen. Vi er på Yale University Law School, hvor dagens forelesning er i ferd med å skje. La oss dra i. [END PLAYBACK] DAVID J. MALAN: And som bringer oss her nå. Så så langt, har vi vært fokus på pseudokode, som er denne engelsk-lignende syntaks. Det har ingen foreskrevne spesifikasjon. Det er bare du bruker noen intuitive språket hvis du ønsker å forklare hva du vil gjøre. Men la oss begynne nå til overgangen å kode, som de fleste ville si. Men mer presist, noe kjent som kildekoden. Dette er språket som mennesker skrive at datamaskiner ultimately-- eventuelt etter et antall steps-- slutt forstår slik som å vite hvordan du gjør noe. At du så et glimt av dette er kanskje på onsdag. Dette er et eksempel på at utrolig, uimponerende når det kjøres bare sier "hello world". Og det er skrevet på et språk som heter C, noe som er svært lik syntaktisk til en rekke andre språk som du kanskje ikke vet, men har kanskje hørt om som Java, og C ++, og Python og Ruby, og lignende, og ja, vil vi tilbringer mye av semesteret ved hjelp av C, og så mot slutten av semester, og bygge på det, og innføre noen rekke andre språk. Blant dem PHP og Javascript, et databasespråk kalles SQL. Men med C, hva vi vil ha Dette bottom-up forståelse av nøyaktig hvordan datamaskiner fungerer, hva du kan gjøre med dem, og hvordan du kan løse problemer enda mer effektivt ved denne lagdeling som vi diskuterte på onsdag, og stående på skuldrene til andre. Men mer om det som kommer. I dag ser vi på en enklere miljø, men et fundamentalt identisk miljøet kjent som Scratch av våre venner på MIT Media Lab. Dette er en grafisk programmeringsspråk, Scratch, hvor du kan dra og slippe ting som ser ut som puslespillbrikker som bare sperre hvis det gjør logisk eller programma fornuftig å gjøre det. Men det kommer til å tillate oss å ha en samtale om alt av samme programmerings grunnleggende at noen av dere kanskje vet allerede, at mange av dere kanskje ikke vite noe om uten å ha å overbelastes ned ærlig, i intellektuelt uinteressant syntaks av semikolon, og parentes, og sitater og lignende. Alt dette, tidlig videre, er en distraksjon å hva er interessant og genuint nyttige ideer. Så la oss ta en rask blikk på miljøet her, slik at du vet hva som venter. Og faktisk, blant spillene vi kan spille er noen programmer skrevet av CS50 egne tidligere studenter. En av dem, meg selv, vil jeg være denne ene skrevet i gradsstudier for meg. Hvis jeg kunne ta en frivillig som er villig til å spille et spill for aller første gang. Sure. Kom opp. Hva er navnet ditt? PUBLIKUM: Angela. DAVID J. MALAN: Angela, kom opp. Så Scratch har vært ute i et par år. Og da jeg var student, Jeg var kryss registrert ved MIT, tar professor Mitchel Resnick s kurs om pedagogisk teknologier. Og vi var blant de aller første studenter i verden til faktisk beta test Scratch. Og prosjektet mitt var hva Angela har nå graciously frivillig å spille kalt oscartime. Så jeg kommer til å gå videre og dobbeltklikker du på ikonet her. Det kommer til å åpne opp et programmerings miljø som vi snart dykke inn. Jeg kommer til fullskjerm det for Angela, her. Jeg kommer til å treffe den grønne flagg i bare et øyeblikk. Og så en hel masse søppel kommer til å falle ned fra himmelen. Og du kommer til å bruke musen her å faktisk dra og slippe søppelet i Oscars søppelbøtter. Så hvis du ønsker å gå videre og klikk det grønne flagget, vil spillet begynne. [MUSIC SPILLE] Å, jeg elsker søppel. Noe skittent eller snusket eller støvete. Noe fillete eller råtten, eller rustne. Ja, jeg elsker søppel. Hvis du virkelig ønsker å se noe unyttig, se på dette. Jeg har her en sneaker det er fillete og slitt. Det er alle fulle av hull innehar og blonder er revet. En gave fra min mor den dagen jeg ble født. Jeg elsker det fordi it's-- DAVID J. MALAN: --green disse dager bare være å kaste alt i søpla. Og så hva en av CS50 egne ansatte did-- Jordan, som du kanskje møte today-- har faktisk oppdatert dette for dagens tider. Og så tillate meg å åpne opp en remix i stedet for Angela. Og vi skal spille dette i stedet for en liten stund der nå er du nødt til å bestemme seg mellom om å kaste noe i søpla, eller resirkulere den, eller kompostere det. Så det er litt av press på deg for å få denne rett foran 392 til 497 klassekamerater her i hallen, hvis du ville. [VIDEO PLAYBACK] [MUSIC SPILLE] -Å Jeg elsker trash. Noe skittent eller snusket eller støvete. Noe ujevn eller råtten eller rustne. Ja, jeg elsker søppel. Hvis du virkelig ønsker å se noe unyttig, se på dette. Jeg har her en sneaker det er fillete og slitt. Det er alle fulle av hull og blonder er revet. En gave fra min mor den dagen jeg ble født. Jeg elsker det fordi det er søppel. Å, jeg elsker søppel. Noe skittent, eller snusket, eller støvete. Noe ujevn eller råtten eller rustne. Ja, jeg elsker søppel. Her er litt mer råtten ting. Jeg har her noen newspaper-- [END PLAYBACK] DAVID J. MALAN: --are faktisk komposterbare. Men takk til våre frivillige, Angela. Vi har en stress ball for deg her også. Så takk. Så dette ble skrevet av meg. Men nå en etter en faktisk tidligere student som implementert dette, noe som er et spill. Alt i dette språket kalles Scratch, at vi snart skallet tilbake lag av. Men hvis vi hadde like-- hvordan om en annen frivillig? Høyre. Kom opp. Hva er navnet ditt? Blikk? Lance. Lance, kom opp. Hyggelig å møte deg. Kom på denne måten. Så dette kan ha en Temaet er kjent for noen av dere. Men du vil se for at det kan være interaktivitet, der du kan faktisk være rollen til karakteren flytte rundt. Hyggelig å møte deg. David. Jeg gir deg, Pikachu. Instruksjoner vil om komme på skjermen. Men kort sagt, du kommer til å ønsker å fange velsmakende ting, og unngå bomber og andre ting. Med pekere helt. Så traff mellomromstasten. -Pikachu. DAVID J. MALAN: Catch ting på venstre side, fanger ikke ting til høyre. [MUSIC SPILLE] Så en siste her. Hvis vi kunne ha en mer frivillig her. Vi trodde vi skulle gjenskape noe from-- i den gule shirt-- fra onsdag. Hva er ditt navn? Mary, kom opp Mary. Og husker på onsdag vi introdusert begrepet binære, og binære pærer. Dette er faktisk nå en implementering av det samme grensesnittet som vi hadde på iPad med lys pærer, men her gjengis digitalt. Og i stedet gjøre en stress ball-- hyggelig å møte deg, David. Vi tok et par lys pærer fra Cambridge. Hvis du kan klikke på dem pærer for å slå dem av og på, komme opp med den binære representasjon av si 256. Og du vil se i midten dagens telleapparat. Slik at man er på. Så venstre biten er på. MARY: Ja, [uhørbart] DAVID J. MALAN: Vel, så vi har just-- oh. Dette er altså 128 kolonnen. Så vi er opp til 128. Vi må få til 256. Og du kan tinker på og av, ingen big deal. Eller du kan treffe at 128 flere ganger hvis du vil. Greit, bra. 24. Ja, nærmer seg. Nærmere! Oh, hva er problemet da? Så hva er problemet? Så hva trenger vi å løse dette problemet? Så vi trenger en annen bit. Og dette er helt rimelig i virkeligheten, ikke sant? Hvis du ønsker å telle fra antall 1 til 2 3 til 4 til 5, 6, 7, 8, 9 å faktisk rulle over til 10, er du kommer til å trenge en ekstra bit. Så la oss faktisk spole tilbake her, og komme opp with-- det var tydeligvis ment å være et sett opp. Du kan ikke gjøre 256 med bare en pære. Så hva med bare nummer 50? Nummer 50. Utmerket. En stor applaus for Mary og hennes også. Takk. Så dette topic-- tilsiktet som som var-- faktisk vil gjenta seg. Den største verdien som du kan representerer med åtte biter, eller en byte, er faktisk 256. Men ikke hvis du starter å telle fra 0, som vi ser ut til å fortsette å gjøre ved å ha alle disse bitene av. Men nå la oss dykke inn i den underliggende Gjennomføringen av dette miljøet, og erte hverandre litt av disse ideene. Så i et øyeblikk vi er i ferd med å se en noen forskjellige programmeringsfundamentale forhold. Den første av disse vil vi kaller uttalelsen. Sortering av verb, om du vil. Handlinger. Ting som bør gjøres. Og i et øyeblikk vil du se blokker som ser ut som dette. Si "hello world", for eksempel. Eller vente ett sekund. Eller spille av lyd meow. Og faktisk miljøet som vi kommer til å gjøre dette kalles Scratch. Og hvis jeg trekker opp Scratch uten preloading noen faktiske koden, la oss ta en rask titt på denne brukergrensesnitt, så å si. Kontrollene som vi samhandler. På toppen igjen her av skjermen, under menyene, vi har på scenen, så å si. Så Scratch er hva vi kaller Sprite. Det er et tegn. Og han kan være styrt av skrive programmer mot ham. Og han vil være i stand til å bevege seg opp og ned og venstre og høyre i dette miljøet, ikke bare ved å flytte mus, men programmatisk. Jeg kan fortelle ham gå rett, walk venstre, opp, ned eller lignende. Og jeg kan introdusere andre sprites eller tegn i tillegg. Faktisk, på bunnen her er der vil du se listen over sprites. For øyeblikket har jeg bare en, men jeg kan lage mer, og de vil vises nøyaktig der nede. Så hvis du spole tilbake for et øyeblikk, som Oscartime-- for eksempel, Oscar, til venstre, søppel kan, var en sprite. Og ting i midten, resirkulering bin, var en annen sprite. Og kompostbingen var en annen sprite. Og hvert stykke søppel eller resirkulerbare materialer som var falt fra himmelen er også en sprite, som hver for seg ble programmert individuelt. Hvordan programmere du? Vel, over her til høyre side er skript området. Og det er her vi kan dra og slipp brikkene. I en uke, kommer det til å være hvor vi equivalently skrive kode med mer av et tastatur, men for i dag vil det være å dra og slippe brikkene, den paletter som kan alt bli funnet her midt i midten. Faktisk, i midten her er det en hel haug kategorier av puslespillet stykker eller blokker. Ett er relatert til bevegelse, utseende, lyd, en penn går opp og ned, data, events kontrollere. Ikke helt sikker ennå hva alle disse betyr, men du vil se at de har pent blitt kategorisert. Og for å skrive et program i Scratch, la oss gjøre akkurat det. Jeg kommer til å starte i henhold Events, og drar denne her. Når grønt flagg klikket. Nå hvorfor den? Vel husker at våre frivillige kom opp, var det første jeg eller de gjorde var å klikke på den grønne flagg i øverste høyre hjørne. Og det betyr bare starte programmet. Så når hendelsen skjer, hva ønsker jeg å gjøre? Jeg kommer til å gå under Looks, og jeg kommer til å gjøre "si hei." Og jeg kommer til å endre dette og si noe sånt som "hei Yale." Og nå kommer jeg til å zoome ut, klikker du på det grønne flagget, og voila, jeg har skrevet et program. Det er ikke alt som er spennende ennå, men dette er akkurat der hver av de som forfatter startet, både med Pikachu, og binære pærer, og oscartime, og så mange flere eksempler. Du starter super enkelt, og så du begynner å lag, og legge på funksjoner og funksjonalitet. Så hva er disse lagene kommer til å bestå av? Vel, utover uttalelser, vil vi også har ting som er litt mer fancily kalt boolsk uttrykk, etter noen som heter Bool. Og en boolsk uttrykk er rett og slett en uttrykk som er enten sant eller usant, ja eller nei, 1 eller 0. Eventuelle motpoler sånn. Det er enten sant eller ikke. Men vi kommer også til å se de som kan se slik ut. Så for eksempel, er musen ned? De er liksom spørsmål, om du vil. Musen er enten ned, sant eller er det ikke, falsk. 1 eller 0, om du vil, tendens til å være kartleggingen. Sann er 1, er falsk 0. Vel hva med mindre enn dette? Eller så er dette mindre enn dette? Det er et spørsmål av former. Og hvis du legger to Tallene i det, enten x kommer til å være mindre enn eller y y lik eller større enn y, men denne blokken vi får se, er bare kommer til å svare på spørsmålet, dette er mindre enn det? Vi kan også se noe som dette. Rørende musepekere. Så i Scratch, kan du spørre spørsmålet er Sprite berøre musepekeren? Med andre ord, er markøren svever over lokket, eller tilsvarende? Vi får se Anding ting sammen. Du kan stille to spørsmål, og sørge for at de begge gi deg ja eller sanne svar før en beslutning om å gjøre noe. Men hvordan tar du avgjørelser? Vel, vi har disse forholdene. Og vi så dette i vår eksempel på telefonboken. Ser til venstre eller rett for Mike Smith. Og i den tilstanden, du gjøre noe potensielt, hvis en boolsk uttrykk er sant. Og ja, merke figurene nå. Det er denne plassholder akkurat nå på overhead hvor vi kan fit-- hvis jeg spole man slide-- den formen. Det er ikke helt det samme størrelse. Og ja, vil du se at Scratch skale ting dynamisk å passe brikkene, men Formen er det som er viktig. Denne saken ser ut det, og faktisk er det omtrent samme form som skal passe inn der. Og hvis vi ønsker å gjøre noe denne måten eller på den måten, hvis eller annet, vi har dette puslespillet brikke i Scratch også. Nå antar du ønsket å gjøre hvis, annet hvis, eller annet. Med andre ord, en treveis veiskille. Og hva kan du gjøre bare ved å kaste et blikk på dette? Jeg kan ta dette puslespillet stykke, og det ser ikke ut til å passe, men igjen, er Scratch kommer å re-size pent for oss. Jeg kunne begynne å lag disse tingene sammen. Så nå har jeg en treveis gaffel Hvis dette er sant, gjør dette. Annet hvis dette andre ting er sant, gå denne veien, ellers går dette andre veien. Og i The Muppet Movie, den veiskille, så å si, mellom Yale eller Stanford, var akkurat det, bare to forhold. Enten gå denne veien, ellers går den veien. Vel, løkker også eksisterer i programmering. Og vi har brukt disse allerede i klasse og i pseudokode, og sikkert i de Skrape programmer for alltid. Scratch har dette puslespillet stykke som vil bare la deg gjøre noe for alltid. Og noen ganger du ønsker å gjøre noe for alltid. Det er ikke nødvendigvis en bug, det er fordi du vil ha en klokke å holde det gående, eller et spill for å fortsette å spille. Eller du kan angi et endelig antall trinn, som med dette gjentar blokken her, noe som vil gjenta noe 10 ganger. Vi kan sette variabler, vil vi snart se. Og med variabler, tilsvarende i ånden til algebra, som x, eller y eller z. Det er noe symbolsk som kan lagre noen verdi, noen opplysning, som du kanskje ønsker å huske til senere. Beste eksempel på dette kan være et spill der du har en poengsum, som i Pikachu. Hvor mange stykker av kaken og whatnot fikk du ta? Vel, det kan være en variabel heter poengsum som starter på 0. Og så hver gang vi fanget en stykke kake eller godteri, eller lignende, det blir økes. Det blir tilsatt til en om gangen. Og så en variabel lagrer en opplysning sånn. Så er det arrays, og vi vil komme tilbake til disse i en uke eller to tid, men en rekke er typen som en inventar eller en veske, inne som du kan sette virtuelle ting. Den lar deg lagre mer enn en opplysning. Og det kan være nyttig hvis du er i spillet, er du slags vandre rundt plukke opp ting. Og kanskje du vil beholde alle disse stykker av kaken rundt, og ikke bare spise dem en etter en. Og så er det en mer avansert konstruksjon vi vil kommer til å kalles funksjoner eller prosedyrer. Og selv om vi kommer raskere her, vil vi ser at dette er en meget naturlig løsning på problemer at vi skal møte. Som våre programmer starter får større vi vil begynner å legge merke til mønstre i koden som vi skriver, brikkene vi er å dra og slippe. Og så snart du oppdager deg selv å gjøre noe igjen og igjen, eller enda verre kopiere og lime inn programmering kode som du har skrevet, det er sannsynligvis en mulighet til å faktor ut uansett hva du holder kopiering og lime, og la ballen i noe som kalles en "funksjon". Men mer om de i mye nærmere før lenge. Og så er det enda mer avansert funksjoner. For de av dere mer komfortabel, eller tar APCS eller tilsvarende, Scratch faktisk støtter ting som tråder og hendelser og mye mer. Så skjønner at det har et ganske høyt under taket, selv om det er også veldig bredt tilgjengelig for folk som aldri har programmert før. Så ja, la oss ta en titt ved et enkelt program eller to. Vi har allerede sett på hvordan vi kanskje si hei med Scratch. La meg gå videre og åpne opp en litt mer interessant program som jeg skrev på forhånd. Og dette tallet kalt Pet Cat. Alle disse programmene vil være tilgjengelig på CS50 hjemmeside. Faktisk allerede der. Så du kan laste ned dem, og leke med dem, og med Problem Set 0, som er også på kursets hjemmeside, du oppfordres til å gå gjennom disse. Og dessuten har vi en antall walk-gjennom videoer online der jeg og CS50 team virkelig gå gjennom hver av disse eksemplene på en mye langsommere tempo, en svært rask fremførbare, eller omvikles tempo, slik at du kan gå gjennom disse på fritiden også. Så her er Scratch til venstre. Her er et program til rett at jeg allerede har pre-laget. Så la meg zoome inn på dette. Og kunne noen på engelsk, vel vitende hva du vet, bare fra nå som til hvordan Skrape verk, liksom si i en engelsk setning eller setning, hva betyr dette programmet tilsynelatende gjøre? Ja, i orange skjorte. PUBLIKUM: [uhørbart] DAVID J. MALAN: Ja, hvis din markøren er på Scratch katten, spille en mjauende lyd. Men legg merke til hvordan vi uttrykker det. Det er tydeligvis en sløyfe der, alltid. Og så er det en tilstand, hvis uttrykket. Og kollektivt, hva de mener? Det betyr dette programmet er bare alltid kjører, og det har bare alltid venter og se og høre for meg å flytte musen over katten. Fordi hver gang jeg gjør det, så du foreslår, det kommer til å gjøre dette. La meg starte programmet. Ingenting ser ut til å være skjer, men legg merke til hvordan det er fremhevet nå i en gul linje. Det betyr bare at den kjører. Og fordi det er en evig loop, er det fortsatt kjører. Så la meg flytte min markøren over Scratch. [MEOW] [MEOW] Og hvis jeg flytter den av, [MEOW] nå stopper det, men programmets fortsatt kjører. [MEOW] Og så søt. [MEOW] Så la oss åpne opp litt mer avansert eksempel kalt Ikke Pet Cat. Og nå la oss se hva skjer her. [MEOW] mjauende. Så det er litt på auto pilot, hvis du vil. --pet katten. Jeg lurer på hvorfor. [ROAR] [MEOW] Så hvordan gjorde dette arbeidet? Vel, du kan slags grunn gjennom det intuitivt, kanskje. Men la oss se på selve koden. Så igjen, når det grønne flagget klikkes, gjør dette for alltid. Hva ønsker du å gjøre for alltid? Vel, hvis rørende mus pekeren, og deretter spille en lyd som er tilsynelatende kalt Lion 5, som er inne i dette prosjektet, annet spille av lyd meow, og deretter vente to sekunder, så at det ikke mjauende ustanselig. Faktisk kan du raskt begynne å irritere deg selv og dine romkamerater. La oss fjerne denne blokken. Og legg merke til hva som er fint om Scratch. Ting bare slags drag og slippe og interlock. Så igjen, det vokser til fylle det du ønsker. Men hvis jeg fjerner denne, og deretter hit lek, [COMPUTER blip SOUND] --det er slags snuble over seg selv, fordi det er bokstavelig talt gjør hva jeg sier. Det er å si alltid spille denne lyden, men Jeg gir ikke det en sjanse til å fullføre. Og så det ville være en feil. Og det er derfor vi hadde denne tingen her nå. Så la oss faktisk starte fra scratch-- slags ordspill litt intended-- hvor vi nå har katten flytte. Så jeg kommer til å gjøre dette på sparket. Jeg kommer til å zoome inn her, bare å få meg i gang på Events. Og grønt flagg klikket. Og det er andre måter å starte skript. Vi kommer til å holde det enkelt her. Og nå kommer jeg til å gå fremover og gå under kontroll. Og igjen, hvis du glemmer hvor ting er, klikker du bare rundt, og til slutt du finne dem igjen. Så jeg ønsker å alltid gjøre hva? Jeg ønsker å bruke bevegelse blokk som jeg vet eksisterer, flytte 10 trinn. Så la oss se hva som skjer her hvis jeg spiller dette spillet. Heldigvis det ikke går for langt. Jeg kan fortsatt slags hente ham i halen og dra ham tilbake. Men programmet fortsatt kjører, så han er litt slåss meg. Men det ville være slags hyggelig hvis jeg betinget fikse dette i kode. Fordi dette er not-- faktisk dette er virkelig ikke et morsomt spill for alle i alle aldre. Så la oss prøve å fikse dette ved ha en slags betingelser. Så jeg kommer til å gå under Kontroll, og hvis. Jeg liker denne ideen. Så etter flytting 10 trinn, if-- la meg ane hvor jeg er. Jeg kommer til å gå under Sensing, og så det ser jeg kan gå her. raden til form kamper. Størrelse ikke, men det er kommer til å vokse å fylle. Og nå er dette en liten meny. Og nå mus pointer-- jeg ikke vil musen, jeg vil ha den kanten. Så Scratch er smart nok til å vite når en sprite berører kanten. Hva ønsker jeg ham å faktisk gjøre? La meg gå videre og endre bevegelse. Vet du hva? Jeg kommer til å ha ham snu. Så på 15 grader er ikke virkelig kommer til å hjelpe meg. Jeg vil ha ham til å snu og gå den andre veien. Så la oss se hva som skjer her, hvis jeg treffer Spill nå. OK, litt dumt å se, men det gjør akkurat det jeg sa. Og det er å rotere hele sprite. Nå viser det seg at jeg kan fikse dette. Og jeg visste ikke hvordan å fikse dette først. Jeg slags måtte klusse rundt og se den beste måten å gjøre dette. Men hvis jeg går to-- la oss se, bevegelse. Åh, jeg fant dette. Egentlig Sett Rotasjon stil. Venstre, høyre, eller ikke rotere, eller rundt. Og det viser seg det er det jeg vil. Og jeg kommer til å sette dette er ikke min loop, fordi jeg ikke trenger å sette rotasjonen stil flere ganger. Jeg skal sette det helt på toppen av dette programmet slik at det blir satt en gang, og deretter husker. Og nå kommer jeg til å prøve dette igjen. La meg stoppe programmet. Og nå som løst denne feilen. Så jeg iteratively bedre på dette. Programmet blir en litt mer komplisert og større, men jeg tar baby trinn så å si, og små biter ut av problemet for å få det bedre og bedre. Men også dette er slags halt. Vet du hva? Ville spørre noen med en virkelig god, skrekkelig stemme liker å komme opp? Noen med en stemme. Uh, ja. Kom opp. I grønn skjorte. Så det viser seg at det er noen andre morsomme ting, estetikk og høres likt. Her er meow. Jeg klikker på kategorien Lyder. [MEOW] Det er meow. [MEOW] [MEOW] [MEOW] --actually posten noe av vår egen her. Så la oss gjøre akkurat det. I stedet for å bruke denne katten lyd, la oss gå videre her, og hva heter du? Nick, hyggelig å møte deg. Det er David. Så i et øyeblikk, jeg kommer å treffe på opptaksknappen. Og hvis du kan bare hyle inn i bærbare, "au", som om du bare gikk inn i veggen, som vil være mye verdsatt. 1, 2. NICK: Ouch! DAVID J. MALAN: Awesome. Og nå kan gjøre litt redigering her. Kommer til å kvitte seg med de rolige delene. Og jeg tror det er bra. Tusen takk. NICK: Pleasure. DAVID J. MALAN: Jeg har bare omdøpt den "au", men nå kommer jeg til å gå tilbake til mine skript. Og legg merke til det er faktisk lyd her. Og jeg kommer til å gå videre og spille av lyden ouch, og jeg kommer til å gjøre det hvis det berører bare kantene. Og så kommer jeg til å har det snu. Så la oss se hva som skjer her. La oss gå full skjerm. [VIDEO PLAYBACK] -Au! Au! Au! Au! Au! Au! Au! Au! [END PLAYBACK] DAVID J. MALAN: Så du skjønner at vi får en litt heldig. Jeg kommer til å ha ham flytte som 100 skritt om gangen. Effekten av som nå går å be-- [datamaskin svikt SOUND] Så innenfor rimelighetens grenser. Så en mulighet til å avgrense det videre hvis vi virkelig vil. Så nå kan vi presentere et annet konsept. Å la meg gå inn i en som heter Counting Sheep og bruk noe kalt en variabel. Dette er en søt liten sau, og Jeg endret sitt kostyme så å si. Så selv om standarden er en katt, kan du laste opp, kan du tegne, du kan gjøre en rekke tegnene på den sprite. Her er et program som er kommer til å gjøre det på engelsk? Basert igjen på akkurat det du vet nå. Hva er dette programmet gjøre? Ja, det kommer til å telle. Ett nummer om gangen. Vi har tilsynelatende har dette settet teller. Jeg vet ikke hva det er, men kanskje det er en variabel. Det er bare en container, x eller y. Men ordet telleren er mer beskrivende enn matematiker er x eller y. Så vi kan bruke engelske ord for ting. Evig, betyr bare fortsette å gjøre dette. Si teller. Nå hvor kom denne fra? Vel, det viser seg at telleren er en variabel. Så det er bare en annen puslespill stykke jeg laget på forhånd. Og selv om det skjer ikke å være den samme formen her, normalt du ville si noe sånt hei her. Du kan også dra en variabel slik at det er det som blir sagt. Så jeg venter på et sekund, jeg endre telleren etter en, økes det ved å legge en. Slik at nettoeffekten er denne bedårende telle sauer. Selv om han teller seg selv. Nå er det veldig fort kommer til å bli kjedelig fordi han kommer til å gjøre dette virkelig for alltid, men det er akkurat hva det programmets utforming foreskriver. Lar nå prøve et annet eksempel som utnytter en variabel. Dette kalles Hi Hi Hi, at får irriterende raskt. Nå er dette en har to skript. Og så igjen, tar vi baby trinn. Vi startet med noe super liten, lagt til det, lagt til det. Nå ønsker jeg å gjøre noe enda mer dynamisk, så jeg ønsker å bli lyttet til to forskjellige ting om gangen. Så til venstre, når grønt flagg er klikket, Jeg satt en variabel som jeg skrev på forhånd kalt dempet. Og jeg vilkårlig satt den til 0. Så Scratch ikke har sant og false, men det har 0 og 1. Så jeg kan tilnærmet den samme ideen. Og så for alltid, hvis mellomromstasten er trykket, og deretter sette variabelen til 0. Eller lei meg. Hvis Space trykkes, og hvis dempet, variabelen, er 0, deretter satt dempet til 1, annet satt dempet til 0. Dette virker liksom som vi er bare gjør og angre arbeid. Men hva er effekten? Hver gang jeg treffer på mellomromstasten, hva skjer med min variabel kalt dempet, logisk? Liksom blir snudd. Det forandrer seg fra 0 til 1, eller 1 til 0. Så det tok et par kvartaler å uttrykke det, men all Jeg gjør er veksling staten denne variabelen til 0 eller 1, eller 0 eller 1 hver gang jeg treffer på mellomromstasten. Nå over her, hva er dette å gjøre? Forever er 0 hvis dempet, så hvis dempet er falsk. Så hvis det ikke er dempet, er semantikk der, spille av lyd sjø løve, og tror Hi Hi Hi for to sekunder, vent to sekunder. Så oppdager nå disse skript er effektivt kommer til å løpe parallelt, slik at man kan lytte til én handling, den andre å ta en beslutning basert på handlingen. Og det kan gjøre dette for alltid. [SEA LION BARKING] [SEA LION BARKING] Det kommer til å gjøre dette for alltid og [SEA LION BARKING] som jeg nettopp har gjort. Og nå er det fortsatt kjører men jeg har "dempet" spillet. [SEA LION BARKING] Og det er all denne fyren gjør nå også. La oss åpne et annet eksempel her. La meg gå inn i Events, og nå denne bedårende også. Men legg merke til den har to sprites. Så det er ikke bare to skript med én sprite, men to sprites. Og hvis jeg klikker på den blå fyr som jeg allerede har, ser jeg han som ett program her oppe som bokstavelig talt bare sier dette, når jeg mottar en hendelse, si "Polo" i to sekunder. Så hvis du noen gang har spilt i et basseng, spillet Marco Polo, hvis den oransje fyren skriptet er noen indikasjon, tilsynelatende hver gang jeg treffer på mellomromstasten, hva er den oransje fyren kommer til å gjøre? Han kommer til å si "Marco." Og så er dette en ny blokk. Vi har ikke sett dette før, men kringkaste en hendelse. Og jeg kan kalle det event noe vi ønsker. Vi vil komme tilbake til dette kanskje før lenge. Men kringkasting en hendelse er en måte for en sprite å snakke med en annen av i det vesentlige passerer den en melding. Det er ikke en melding du ser. Det er ikke noe visuelt. Det er liksom en datamaskin melding at den andre fyren lytter etter. Fordi ja, den blå fyr, tilbakekalling ikke har når grønt flagg klikket. Han har i stedet, når jeg mottar en hendelse. Når han får overlevert dette notatet i klassen, så å si, bør han si "Polo". Og så nettoeffekten er at når jeg treffer det grønne flagget, skjer det ingenting. Men når jeg treffer på mellomromstasten, sier han "Marco", han svarer med "Polo". Men den eneste sprite jeg er samspill med er den orange. Så dette er en måte å slags passerer meldinger mellom sprites og ha dem kommunisere med hverandre. Nå la oss se på en siste ett her kalles tråder. Og legg merke til dette ved å spille det. Så disse er to sprites. Fuglen er slags flyr rundt. Han spretter. Det er ingen "au", men samme idé. Men katten virker ganske smart. Hva er katten tydeligvis gjør? Og vente på det. Hva er katten tydeligvis gjør? Det er ikke bare hoppende. Han følger fuglen. Og så tilsynelatende, det er en måte med en kombinasjon av blokker her-- og la oss se på katten virkelig fort. For alltid, hvis berøre fugl, og deretter spille lyden Lion 4, uansett hva det er. Vi hørte det en gang. Ellers peker mot fugl, og flytt ett trinn. Nå det faktum at det er en trinnet er det som gir fuglen litt av en fordel i utgangspunktet, men hvis vi i stedet gjør denne 10, for eksempel, så at hver iterasjon av loopen han er flytte 10 trinn av gangen. Så mer plass. La oss se hva som skjer da. [LION ROAR] Ikke alt så mye bedre. Så nå la oss prøve å forbedre på disse litt iterativt, og komme tilbake til det oppfatningen av en funksjon. Og faktisk en av de grunnleggende gatekjøkken i klassen design. Ikke bare skrive programmer som fungerer og det er riktig, men er vel utformet. Og design er mye mer subjektive, og du vil bli bedre på det over tid. Men la oss ta noen baby skritt mot starter med et program som fungerer, absolutt, men det er ikke veldig bra. Det er ikke veldig godt skrevet. Så her er et program som gjør dette. Hoste, hoste, hoste. Hva gjør programmet se ut? Ser riktig ut for meg. Det sier sofaen for en andre, deretter venter det. Så det sier det igjen, så den venter. Så det sier det igjen, så den venter. Og så programmet implisitt slutter, fordi det er ingen loop. Men hvorfor er dette et dårlig skrevet program? Selv om du aldri har programmert før? Liker, hva gnir feil måte, kanskje her? Yeah? PUBLIKUM: [uhørbart] DAVID J. MALAN: Nettopp. Du gjenta deg selv igjen og igjen. Og bokstavelig talt, jeg kopiert og limt to av disse blokkene igjen og igjen. Og det er akkurat den slags mental helse sjekk at du bør gjøre. Vent et minutt. Bør jeg virkelig gjøre dette? Så hva er dette hva er åpenbare løsningen kanskje? Har en slags loop. Og jeg ikke helt husker hva puslespill brikke er, men hvis jeg ser på neste iterasjon her, ja, det er ikke bare evig loop, det er gjenta noen antall ganger. Og så jeg har spesifisert tre. Og nå merke til hvor mye strammere, hvordan mye mer konsis dette programmet er. Og på en måte, hvordan mye mer vedlikeholdsvennlig. Hvis jeg ønsker å endre ordet fra hoste til noe annet, som Achoo, som han nyser. Deretter endrer jeg det i ett plass, og ikke tre. Så dette føles allerede som litt bedre design. La meg i stedet åpen hoste 2, vår tredje eksempel. Legg merke til som en datamaskin vitenskapsmann, Jeg begynner å telle på 0, typisk. Nå ser litt skumlere på første, men effekten er den samme. Hoste, hoste, hoste. Men hva synes å være fundamentalt nytt i den øverste del av programmet? Jeg har fjernet si. Jeg har fjernet ventetiden. Og hva har jeg plugget i stedet? En funksjon. En hoste blokk. Jeg mener, ærlig, synes jeg slags av en idiot hvis jeg ikke bare starter med blokken som er tilsynelatende kalt "hoste", hvis det er alt jeg vil ha ham til å gjøre. Men som ikke finnes i Scratch. Heller jeg gikk til en i palett kalt flere blokker her, og jeg drar denne store lilla tingen her som lar meg definere en funksjon. Det lar meg egentlig lage mitt eget puslespill brikke som kan kalles noe jeg vil, kan det gjøre hva jeg vil, men det gir den et navn. Det gir meg en ny, lilla puslespill brikke som nå gjør alt jeg ber den om. Så dette lilla brikke her tilsvarer dette en her. Og hva gjør den? Det sier hoste for en andre, og deretter venter det. Og nå har jeg liksom opprettet mitt eget puslespill brikke, slik at den oppfører seg akkurat det samme måte. Så jeg kan fortsette å gjøre dette. Og ja, det kommer til å bli mer og flere muligheter for modularisering, og for lagdeling, kompleksitet oppå hverandre. Men denne grunnleggende ideen, faktisk i problem sa 0. Hva kommer du til å bli utfordret til å gjøre er å laste ned Scratch, eller bare bruke den på nettet, og bare ha det gøy med det. Vi vil gi deg et sett med krav, å ha en lyd, og noen flere puslebiter. Men du vil gjøre akkurat dette. Og vil du innse at du kommer til å ønsker å ta noen små steg i utgangspunktet, før programmet blir mer og mer kompleks. Men vurderer dette er det beste måten jeg kunne gjøre dette? Kan jeg unngå dette instinktet kanskje, for å kopiere og lime inn? Men før Problem Set 0, og før vi utsette, tenkte vi skulle ta opp ett mer frivillig hvis vi kunne, for en endelig program det er kanskje den mest fitting i det hele tatt, gitt dagens arena. Kom ned. Yeah. Ja. Hva er navnet ditt? UH oh. Det er greit. Begge kommer ned. Og jeg har vil håndtere dette liksom innen det neste ti sekunder. Så kom ned. Kom ned. La meg komme opp hit. Kom igjen. Greit. La oss se her. Så merker virkelig fort her, Hvis du ønsker å komme videre opp. Vi vil gjøre to runder med dette. Og hva heter du? SABRINA: Sabrina. DAVID J. MALAN: Sabrina og? YING GEE: Ying Gee. DAVID J. MALAN: Ying Gee. Hyggelig å møte dere begge. David. Så vårt siste eksempel her er heter Ivy Hardest Game. Og hvorfor gjør vi ikke at dere skal gjøre Nivå 1, og du gjør nivå to. Og vi får se hvor langt utover at vi faktisk går. Skrevet av en student fjor, remikset av meg så at dette ville gå over godt i New Haven. Og jeg gir deg et spill som kommer til å innebære flytting pilene opp og ned, og får Yale til mållinjen. Here we go. [VIDEO PLAYBACK] [MUSIC - NFL ON FOX kjenningsmelodien] [MUSIC - MC HAMMER, "U kan ikke røre  DENNE "] -U Kan ikke røre dette. U kan ikke røre dette. Kan ikke røre dette. Min, min, min, min musikk treffer meg så hardt, gjør meg si, oh, min herre. Takk for at du velsigner meg med en tankene å rime og to hype føtter. Det er bra når du vet du er nede. En super dope homeboy fra Oaktown. Og jeg er kjent som sådan, og dette en beat uh, kan du ikke røre. Jeg fortalte deg homeboy U kan ikke røre dette. Ja, det er hvordan vi lever og du vet U kan ikke røre dette. Ser i mine øyne, mann. U kan ikke røre dette. Yo, la meg bust funky tekster. U kan ikke røre dette. Friske nye spark og bukser. Du fikk det sånn og du vet at du wanna dance. Så flytter ut av setet og få et fly jente og fange denne beat. Mens det rullende tak på pumpe litt litt og la dem få vite hva som skjer. Slik. Slik. Kald på et oppdrag så trekke på ryggen. La dem vite at du er for mye og dette er et trekk uh du ikke kan røre. Yo, jeg fortalte deg U kan ikke røre dette. Hvorfor du står der mannen? U kan ikke røre dette. Yo, høres klokke skolens inn, sucker. U kan ikke røre dette. Gi meg en sang, en rytme som gjør dem svette det er hva jeg gir dem nå. De vet når du snakker om Hammer du snakker om et show som er hyped. Og stramme sangere er svette så sende dem en mikrofon. Eller en tape for å lære hva det kommer til å ta og nå han kommer til å brenne på hitlistene. Legit enten jobbe hardt eller du kan like godt slutte. Fordi du vet U ikke kan røre dette. U kan ikke røre dette. Bryte det ned. Stoppe. Hammer tid. Gå med strømmen i spinn hvis du ikke kan flytte til dette så har du sannsynligvis er døde. Så bølge hendene i luften [uhørbart] Dette er det for en vinner dans til dette, og du kommer til å bli tynnere. Flytt gli rumpe bare for et minutt la oss alle gjøre bump. Yeah. U kan ikke røre dette. U kan ikke røre dette. Du bedre få hyped Gutten U kan ikke røre dette. Ring gongongen skolens tilbake igjen. Bryte det ned. Stoppe. Hammer tid DAVID J. MALAN: Det er det for CS50! Takk så mye for å bli med oss! Se deg utenfor. [END PLAYBACK] [VIDEO PLAYBACK] [MUSIC - "SEINFELD" kjenningsmelodien] -Hei David. -Hei, David. Hvordan går det? -God Jobb, i dag. -Så Har du tenkt på hva du kommer til å gjøre for ut vitser? -Nei, Jeg fikk ingenting. -Hva If-- hva om dette er ute spøk? -aktig, Utpakking vognene? -Uh-He. Du vet, det handler om ingenting. -Så Liker, ingen historie, ingen konflikt, ingen løsning. Jeg forstår ikke. Hva handler det om da? -ingenting. -Så Vi har ut spøk handler om ingenting, og vi har ingen skuespillere. Hvem kommer til å være i dette? -Nei nei nei. Jeg mener, jeg skal være i det. -Du Være i det? -Ja! Folk er alltid forteller meg at jeg er et tegn. -Vel, Jeg mener, det er sant. Men hvem andre kommer til å være i det? Det kan ikke bare være deg. -Du Vil være i det, Gavin, Dan, Dan, Colton, Z'Myla, Alysse, Doug, David, alle sammen. -Så Det handler om ingenting, og alle er i den? -Helt ingenting. -Dette er latterlig.