[BAKGRUNNSSTØY] Virker det? PATRICK REBESCHINI: Vi kan komme i gang. OK. Flott. La oss komme i gang. Så det er min største glede å ønske dere alle her i dag for første forelesning av, vel, Innledning til Computing og programmering. Også kjent som CS50 eller godt, CPSC 100, offisielt her på Yale. Så vi kunne ikke være mer begeistret å ønske dere alle her. Mitt navn er Patrick Rebeschini. Jeg er leder instruktør for klassen. Jeg er her som representerer en gruppe på ca 60 ansatte som vil jobbe med deg gjennom hele semesteret. Dette tallet er nesten 60 av oss. Likevel langs den ekstraordinære nivå av forpliktelser som vi legger inn i dette klasse, gjør CS50 klassen ved Yale University som tilbyr størst grad av støtte til dere alle. Og vi kunne ikke vært mer stolt av tilbyr denne klassen her igjen. Faktisk, så vil du snart oppleve, CS50 er mye mer enn en klasse. Det er et fellesskap. Og du vil bli en del snart av dette fellesskapet. Dette er andre året at Yale tilbyr denne klassen. Vi bygger på det ekstreme suksess i fjor, hvor for første gang, her på dette universitetet, lavere læringsassistent ble vedtatt i klasserom. Det hele startet med denne klassen i fjor. Så som du vet, er klasse undervises sammen med Harvard University. Å lære dette kurset vi er relying-- vi kan regne med stor kompetanse David Malan og Harvard-teamet. Så David har vært undervisning CS50 for godt, 10 år nå. Og hvert år han har vært presser grensene og forbedre klasserommet erfaring. Igjen, vi kunne ikke være mer fornøyd med å fortsette dette samarbeidet med dem. Faktisk er en av de mest interessante delene, Jeg vil si å kjøre denne klassen nå, både ved Harvard og her på Yale, er det virkelig utrolig kryssbefruktning av ideer, som tar sikte på å bedre lærerik opplevelse for dere alle. Så som et resultat av dette omfattende Samarbeidet mellom de to universitet, er CS50 stolte av å kunngjøre den nye versjonen i år med merkbare endringer. David vil alle fortelle oss om dem nå. Så please-- dette vesenet sa, kan du bli med meg og velkommen til å gi en stor applaus å ønske David og Harvard-teamet her ved Yale. [BIFALL] DAVID MALAN: Takk. Takk. Dette er CS50, Harvard University og Yale University introduksjon til den intellektuelle foretak av informatikk og kunsten programmering. Og hva det betyr er at dette kurset slutt, handler om problemløsning. Faktisk mange av dere kanskje har kommet ut av videregående skole eller har brukt de siste par årene lurer på hva noen av vennene dine gjorde i fjor eller i andre klasser. Og likevel, virkeligheten er, uansett hva vi gjøre på slutten av dagen i denne klassen, det kommer til å være om problemløsning. Og som sådan, kanskje ta noen forsikring i det faktum at 73% av studentene som ta denne klassen, både her ved Yale samt ved Harvard, har aldri tatt en CS klasse før. Så hvis du sitter her i salen som lurer hvorfor du sitter her i salen i dag, eller kanskje du bare fulgt sammen med noen venner, eller kanskje du har vært en litt nysgjerrig på hva informatikk og programmering er, innser at de fleste av dine klassekamerater til venstre og til høyre for deg er veldig mye i den samme demografiske. Og ja, hvis vi ser På fjorårets statistikk innenfor studentmasse på CS50, både her og på Harvard, 58% av elevene beskriver seg selv som mindre komfortabel. 9% er mer behagelig. Og så 33% er et sted i mellom. Og det er ingen formell definisjon av hva disse bøtter betyr. Du vet liksom du er mindre komfortabelt hvis du er. Du føler deg litt urolig med kanskje være i klassen. Du er ikke helt sikker på om en datamaskin vitenskap klasse er slutt for deg, og innse at du er i veldig godt selskap. Og faktisk gradering, og vurderingen, og tilbakemeldingene, og alle som bærekonstruksjonen i klassen er slutt svært mye individualisert. Mer enn de fleste noen andre klasse ved design. Og ja, det som til slutt saker i denne klassen er ikke så mye hvor du ender opp i forhold til andre, men hvor du, i uke 11 eller sist, og i forhold til deg selv i uke 0 her vår første. Så hva betyr det? Vel, betyr dette av dem 73% av studenter i fjor som aldri hadde tatt en CS klasse før, ved semesterstart de ble dabbling i et språk heter Scratch, som vi selv vil se her i dag. Og ved utgangen av semester hadde de gått gjennom hele denne listen over utfordringer. Starter med et språk som heter c. Implementering, hva er ved første øyekast, kommer å være litt av en utfordring for noen, men ganske gledelig når du får Super Mario hopp opp og ned en pyramide implementert, riktignok med bare noe som kalles ASCII kunst. Implementering siste year-- hva studentene i fjor da fikk etter at ble gjennomføre sin egen cæsarchiffer og vigenèrechifferet. Så krypteringsalgoritmer som du kan rykke ut informasjon og deretter unscramble informasjon til å sende hemmelige meldinger. Spillet av 15. Hvis du husker fra barndom eller noen part favør, det lille plast spill hvor du beveger tallene opp, ned, venstre og høyre å prøve å få dem i rekkefølge, faktisk gjennomføre det spillet og løse logikken som kreves der. Og da har vi syslet i etterforskning i fjor. Så ved mid-semester, studenter som hadde aldri brukt sine keyboards for dette formål før, skulle skrive programvare å komme seg, så å si, JPEG eller fotografier at vi hadde et uhell slettes fra et digitalt minnekort fra et kamera. Gjenopprette hemmelige meldinger fra innsiden av et punktgrafikkbilde, og andre slike typer av grafikk i tillegg. Vi deretter overført til å gi hele klassen en ordbok. Bare en virkelig stor tekstfil med 150.000 engelske ord. Og alle ble utfordret å liksom lese, så å si, disse ordene i minnet. Inn i datamaskinens minne. Og så svare på spørsmål av skjemaet, er dette et ord? Er dette et ord? Er dette et ord? Egentlig bare å implementere en stavekontroll. Og så utfordre hverandre andre med en stor board-- en ledertavlen for å se hvem som kunne bruker minst minne, i minst mulig tid til å faktisk stavekontroll store dokumenter. Vi overført fra da til implementere sin egen web server. Så det er ikke å lage websider på språk som HTML og CSS, hvis du er kjent. Men faktisk implementere serveren som lytter på internett for forespørsler fra nettlesere og deretter svare på disse forespørslene. Deretter implementere vår egen e-handel som nettsted, hvor studenter kunne kjøpe og selge aksjer. Tegning i nesten sanntid aksjekurser fra Yahoo Finance. Og slik at studentene skal se hvordan deres portefølje utvikler seg. Og så til slutt en mash up Google News og Google Maps der studentene av sikt ved vilkår slutten hadde evnen til å klikke, og runde, og søk på et Google-kart. Og så ser alle nyhetsartiklene er proksimale til disse bestemte områder. Så virkelig går fra null til 60. Og underveis har det vi hadde i fjor ringte, hacker tillegg. At heve bar videre for de av dere som kan godt ha en god mengde erfaring å være i at 9% av mer behagelig. Så skjønner at det er et svært høyt tak selv innenfor de utfordringer for studenter kommer fra en annen bakgrunn. Fordi på slutten av dagen, vi er i siste instans fokusert ganske enkelt på dette. Men hva betyr dette mener, problemløsning? Så la oss foreslå at vi destillere det sånn. Så problemløsning er virkelig nettopp denne typen bilde. Så du har innganger til noen problem, noe du faktisk ønsker å løse. Målet er å få utganger, en løsning på det problemet. Og deretter i midten er hva vi kaller en svart boks. Du trenger ikke nødvendigvis vet eller om hva som er inni den svarte boksen. Alt du vet er at når du mate innspill til det, du forhåpentligvis få utgang eller en løsning av den. Og mens det i dag vil vi se både ved inn- og utganger, vi vil på lang sikt, og over løpet av hele semesteret, fokusere på hva som er inni den boksen. Og der vil ligge noe som kalles algoritmer. Trinnvise instruksjoner for faktisk løse noen problemer. Men hva er et eksempel på noen innspill? Så kanskje en enkel ting på start av hvert skoleår, noen kan det være lurt å ta oppmøte. Så vi kan gjøre en, to, tre, fire, fem, seks, og hvordan ville jeg holde spor av denne informasjonen. Jeg kan bare gå én, to, tre, fire, fem, seks. Og bare bruke slags enkelttall. Eller jeg kunne faktisk ta opp dette litt lengre sikt. Og hvordan gjør jeg representerer alle menneskene i dette rommet? Vel, jeg kan gjøre noe sånt, OK. Jeg ser en person. Greit. Jeg ser en annen person, en tredje person, og så videre. Men ingen teller folk som dette. Så bokstavelig talt, de fleste av oss hvis vi er selv kommer til å trekke noe i det hele tatt, sannsynligvis kommer til å gå en to tre fire, kanskje få en litt fancy, fem, seks, syv, åtte, ni, ti og så videre. Og det er faktisk en Systemet kalles enhetlige. Uno, som uno antyde en, der du bare har én bokstav i alfabetet. Du har akkurat denne hash mark. Og jeg, for effektivitet, nettopp tegnet disse hash merker, til slutt som rette linjer. Men jeg kunne ha trukket dem så lite stick tallene. Hvor å representere en person, en inngang, Jeg bare trekke en pinne figur eller en hash mark. Men dette er ikke alt som uttrykksfulle. Hvis alt jeg har er disse hash merker, enn si stick figurer, hvordan kan jeg representerer noe som nummer 15? Eller 15 personer i rommet? Jeg kan ha å gjøre noe sånt som en, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15. Det bare ikke skalerer godt. Som inngangene få store, vi trenger et bedre system enn dette. Og det viser seg at system som datamaskiner bruker er ikke så forskjellig fra hva du og jeg vet. Faktisk, de fleste i dette rommet, selv om du er blant de mindre komfortabel, ikke nødvendigvis vet hvordan din Mac eller PC virkelig fungerer, du har sikkert minst hørt, at under panseret er 0 og 1-ere. Den såkalte binære system. Så ja, datamaskiner har mer enn bare hash merkene i deres vokabular, men ikke så mye av en vokabular som vi mennesker. Faktisk trenger vi mennesker ikke bruke binære. Bi betyr 2, 0 og en. Men desimal, deca noe som betyr 10, 0 til 9. Så vi har mye mer uttrykks evner i vår normale menneskelige verden. Men jeg vil hevde at disse systemene, binær og desimal, og alt i mellom og utover, er faktisk alle ganske kjent. For eksempel vurdere dette eksempelet her, 123. Så dette egentlig er, selvfølgelig, et tall vi kjenner som 123. Men alt jeg trakk bare var nettopp dette mønster av symboler, symboler så å si. Sortering av figurer i styret i kritt. Men hvorfor gjør vi umiddelbart og intuitivt forstå dette som 123? Vel, hvis du var som meg i grunnskolen, har du sannsynligvis lært at dette er 1s kolonne, er dette den 10s kolonnen Dette er den 100s kolonnen. Og hvorfor er det nyttig? Vel, det er enkel aritmetikk deg nå gjøre for å komme seg fra et mønster av symboler til et tall vi forstår intuitivt. Er hva, 100 ganger 1, og deretter 10 ganger 2 og 1 ganger 3, som selvfølgelig er bare 100, og dette er 20, og det er tre. Og så hvis vi legger de together-- ah. Så der ligger den slags resonnement bak hvorfor dette settet med symboler betyr noe ekte og numerisk. Vel, datamaskiner gjøre akkurat det samme, men de bare kan telle så høyt som én. Mens jeg var i stand til å telle så høyt som tre. Og faktisk, hvis jeg holdt jeg kunne gå så høyt som ni i dette systemet. Datamaskiner har bare nuller og de i sin alfabetet. Så hva betyr det? Vel, det betyr bare at hvis en datamaskin ønsker å representere, sier tallet 0, kanskje ved hjelp av tre characters-- tre bokstavene i alfabetet så å si, det er hvordan en datamaskin er 0. Så det er ikke alle som skremmende så langt. Det er akkurat hva vi mennesker ville gjøre. Og faktisk, de fleste av oss ville bare ignorere de ledende nuller uansett. En datamaskin, hvis den ønsker for å lagre nummeret 1, viser seg kommer til å gjøre dette. Og en datamaskin til å lagre antallet 2 ikke er kommer til å gjøre det enhetlige systemet, som jeg antydet tidligere. Det er faktisk kommer til å gjøre dette. Og dette er trolig hvor mønsteret starter å bli mindre opplagt for de fleste folk. Det er to, er dette tre. Merkelig, dette er nå fire. Og nå er det virkelig ser ut til å være kanskje kryptisk, men det er ikke om vi anser hva binær egentlig betyr. Det betyr at du har to bokstavene i alfabetet. Så to mulige tegn for hver plassholder. Så det egentlig betyr at vi kommer til å trenge et 1s sted, eller 2s sted, en 4s sted og deretter 8, og 16, 32, og 64. Og hva er forskjellen der? Som disse er 1, 2, 4, 8, 16, 32, 64. Og før vi hadde 110, 100 000, 10 000. Hva er likheten der? Og hva er mønsteret? Yeah. STUDENT: Powers av 2 i stedet for krefter 10. DAVID MALAN: Ja. Powers av to i stedet for krefter av 10. Og så hvis jeg ønsket å holde går, 8, 16 og så forth-- men nå hvis du har denne typen holdepunkt, nå det binære systemet er faktisk ganske grei. Hvorfor er dette mønsteret av 0-er i verden av datamaskiner 0? Vel, fordi det er 4 ganger 0, 2 ganger 0, 1 ganger 0 og du får 0. Hvorfor er dette tallet 1? Samme resonnement, men nå er vi har en i en kolonne. Hvorfor er dette to? Vi har en 1 i 2s kolonnen. Og hvordan så gjør jeg representerer si, tallet 7 i binær? Si høyere. STUDENT: Tre 1s. DAVID MALAN: Tre 1s. Så 1, 1, 1 fordi vi bare trenger 4 pluss 2 pluss 1 gir meg 7. Greit. Så derfra hvordan gjør vi representerer 8 med 3 plassholdere? Yeah. STUDENT: 1, 0, 0, 0. DAVID MALAN: Ja 1, 0, 0, 0. Og likevel kanskje, jeg slags av teknisk trenger å legge til en annen plassholder til styret. Hvis jeg ønsker å passe på at jeg faktisk trenger å gjøre noe som dette. Så jeg faktisk trenger å bruke nå den 8s kolonnen, og det er fint. Men merkelig ting i databehandling er at det kommer til å koste oss noe. Du trenger mer RAM i datamaskinen nå. Du trenger mer minne fordi du trenger noe fysisk å lagre det ekstra bit, så å si. Binære siffer. Og ja alt som har skjedd her, som titallssystemet, Hvis vi holder å legge tallene opp og opp og opp, går vi til 5-6 til 7-8 det er som å bære en, bokstavelig talt. Og så alt annet går tilbake ned til null. Men hvordan gjør vi faktisk representerer disse tingene fysisk i en datamaskin? Vel, på slutten av dagen, den eneste fysisk innspill kommer inn i datamaskinen min her er denne strømkabelen, så elektrisitet eller elektroner fra veggen. Og så hvordan får jeg fra noe fysisk som det å faktisk representerer en idé som dette stedet. Vel, hva kan vi gjøre? Vi kan vurdere det, all right, kanskje hvis det går strøm Jeg kunne lagre den og holde på den. Og hvis jeg holder på til noen elektrisitet, som bare kommer til å vilkårlig representerer en 1. Og hvis jeg trekke pluggen og det er ingenting der, du vet at bare kommer å vilkårlig representere en 0. Så hvis noe er der, en. Hvis ingenting er der, 0. Eller du kan gjøre dette litt mer visuell. Her er en 0. Det er ikke noe interessant som skjer på om baksiden av telefonen min. Men hvis jeg gjør en liten bit av strøm til å flyte, selv om det er litt lys her, min lommelykt gikk på. Så jeg lagrer en ladning og ergo, denne telefonen representerer nå en 1. Så 0 1. Så med en iPhone hvor høyt kan jeg telle ved hjelp av denne typen tilnærming? Jeg mener å en. Det er ikke alle som overbevisende. Så hva mer kan vi gjøre? Vel la oss se, er noen på deres telefonen akkurat nå at jeg kunne låne? Alle som har en telefon med en lommelykt innebygget? Kan jeg låne? Jeg trenger ikke låst den opp. Greit. Takk skal du ha. La meg låne dette. Greit. Så hvis jeg nå blar opp og her, hva er det jeg representerer nå? Yeah. Så det er et tre, fordi dette er i 1s kolonne, er dette i det 2s kolonnen. Så en pluss to er tre. Og så hvis vi prøver å få virkelig creative-- oh, takk. Veldig forkjøpsrett. Greit. Jeg har nå tre iPhones. Greit. Og nå dette-- vil jeg ikke gjøre noe mer enn dette. Hva er det jeg representerer nå? Bare syvere. Men jeg trengte fysisk mer minne i dette tilfellet. Men det er alt det er. Du kan tenke på hva som skjer on-- takker you-- innsiden av telefonen som bare å være en bryter som er blir slått av og på. Og hvis du noen gang har hørt ordet transistor. Eller hvis du noen gang har hørt markedsføring snakke Intel inne, som taler til den slags maskinvare som er inne i datamaskinen. Intel gjør CPUer, prosessorer, som er som hjernen innsiden av datamaskinen. Og disse CPUer og ting de er koblet å ha mange og massevis av små brytere. Millioner, milliarder av brytere som kan enten være av eller på. Så datamaskiner, heldigvis, som våre Mac og PC, kan telle måten høyere enn 7 eller 8 fordi de har mye mer enn tre eller fire biter. Måten mer enn tilsvarende av tre lommelykter som vi nettopp har hatt. Men nå begynner det å bli ganske uinteressant raskt. Hvis jeg ønsker nå å faktisk være i stand å gjøre noe mer interessant, Jeg ønsker å være i stand til å hoppe til noe sånt som dette. Så ASCII, er det ikke egentlig en nyttig akronym, men American Standard kode for Information Interchange. Det betyr bare noen år siden vi mennesker besluttet, Vet du hva, ønsker vi å være i stand til å gjøre mer med datamaskiner enn bare tall. Vi vil ikke ha dem til å bare være dyre kalkulatorer, vi vil gjerne være i stand til å gjøre ting som tekstbehandling, riktignok veldig enkelt. Senere hadde vi e-post og andre slike medier. Og så verden bestemte seg for noen år siden i henhold til dette systemet ASCII, vet du hva? I visse typer av programmer som helst du se tilsvarende antall 65, som mønsteret av biter. Og vi kunne gjøre matte her på bordet. Mønsteret av biter som representerer 65. Ikke tenk på det som 65 i desimal. Tenk på det som vilkårlig, men globalt, konsekvent som hovedstad EN. Og da verden besluttet, vet du hva? La oss ta et annet mønster av biter. Og hvis vi noen gang se den nummer 66, la oss bare antar at det er den kapital B. Spol frem til H og jeg, hvis du ser 72 eller 73, som bør være en H, og en I, respektivt. Og så så lenge hele verden er enige på dette. Slik at når du mottar en e-post, eller du vil få en fil på en USB-pinne, eller noe sånt at-- når du ser at mønsteret av biter, du vet at det skal være dette brev eller en annen bokstav. Men det er sammenheng spesifikke, ikke sant. En e-post-programmet kan tolke disse tingene som tegn, men en grafisk kalkulator eller Kalkulatoren kan representere eller tolke disse tingene, selvfølgelig, som bokstaver. Så med det sagt, rask liten gjennomgang. Dette er kanskje en tre karakter e-post som er sendt til meg. Under panseret er det alt i 0'er og 1'ere, men vi bryr oss ikke. Vi kommer til å begynne å abstrahere over 0'er og 1'ere til bokstaver. Og hvis jeg ser et mønster av 0'er og 1'ere som virkelig representerer 72, hint, hint, 73, og deretter 33, hva er budskapet? STUDENT: [uhørbart] DAVID MALAN: Så hvis du tror tilbake bare et øyeblikk siden, HI var budskapet jeg prøvde å kommunisere her fordi H er 72, Jeg er 73, og nå 33-- du ville ikke nødvendigvis vite dette på forhånd, men det viser seg hvis du faktisk se mer av kartet og systemet at menneskeheten avtalt år siden, det er bare et utropstegn. Og ja, det er et mønster av symboler og tall for hver karakter som du kan ha på tastaturet. Greit. La oss abstrakt videre. Hvis vi ikke ønsker å bare ha ting som tall og bokstaver, vi faktisk ønsker å gjennomføre grafikk. Vel, hvis du har noen gang hørt forkortelsen RGB. Det er slags datert nå, men det er fortsatt litt der. RGB er rød, grønn, blå. Og det er bare et system å si, vet du hva, la oss bruke tre sett med bits. Et sett på 8 biter, et annet sett med åtte biter, og et annet sett på 8 biter. Og la oss bruke disse bitene å lagre hvor mye red vi ønsker på vår skjerm, hvor mye green vi ønsker på vår skjerm, og hvor mye blått vi ønsker på vår skjerm. Og dette betyr bare at hvis du har en lot-- et stort tall for rød, det betyr gi meg mye rødt. Hvis du har et stort tall for grønn, gi meg en masse grønt. Og hvis du har bare en liten bit av blå eller et lite antall som 33, gi meg en liten bit av blått. Og hvis du tilfeldigvis å kombinere de tre størrelser, så å si, du får dette-- du kan knapt se på projektoren her, men dette skummel nyanse av gult eller brunt. Men dette er å si, ved hjelp av at mønster av åtte pluss åtte pluss pluss 8-- dette mønsteret av 24 bits Slik en datamaskin ville lagre som nyanse av gult i ett liten prikk en piksel på skjermen. Så vi har gått fra 0'er og 1'ere til desimal numre til bokstavene i alfabetet. Eller mer interessant, fargede prikker. Vel, hva selvfølgelig deretter kommer neste? Vel, hva er et bilde som du se på Facebook eller komme i en e-post? Eller lignende? Hva er definisjonen teknisk sett av et bilde? Yeah. Hva er et bilde sammensatt av hvis du ser virkelig tett på skjermen din? Yeah. Det er bare en hel haug med piksler. Faktisk, hvis du tar deg laptop kanskje senere, og ser virkelig tett at it avhengig på hvor dyrt den bærbare datamaskinen er, og hvor høy kvalitet skjermen er, du kan godt se alle de små prikker på skjermen. Og disse punkter eller piksler, som betyr at det finnes 24 bits som representerer hver piksel i det Bildet som du ser på Facebook, eller at du bare tok på din iPhone nylig. Og så det er hvordan vi får til ting som grafikk. Vel, hva er en video? En video er bare et sett av grafikk flying av skjermen igjen og igjen og igjen. Og så videoer egentlig, er bare mønstre bit som representerer rutenett, rader og kolonner med prikker, flyr av skjermbildet, etter bilde, etter bilde, også kjent som Levende bilder. Så det er det for innganger og utganger. Alt vi trenger nå er en antagelsen om at du Vet du hva, hvis vi ønsker en datamaskin å representere informasjon, vi har et system for å gjøre det. Vi kan gjøre det med 0s og 1s på slutten av dagen. Men vi kan abstrakt, så å snakke, på toppen av det slik som å representere mer interessante ting. Og her på ut i CS50, og i informatikk mer generelt, vi nå står på skuldrene av alle de menneskene som kom før oss som har funnet det ut. Og nå bare anta at datamaskiner kan representere innganger og utganger. Men la oss nå faktisk gjøre noe med dem. Slik at en algoritme er bare et sett av instruksjoner, trinn for trinn, for å løse noen problem. Og hva kan et slikt problem være. Så dette er en gammel skole teknologi, en telefonkatalog. Og inne i en telefonboken er en hel haug med navn og nummer. Og disse navnene er generelt sortert alfabetisk. Så hvis jeg ønsket å finne noen i denne telefonen bok som Mike Smith, hva er en typisk menneskelig kommer til å gjøre? Vel, du kan bare åpne den opp, se på den første siden. Jeg ser ikke Mike Smith. Sving til andre siden, Jeg ser ikke Mike Smith. Og bare fortsette og fortsette. Er dette trinnvis tilnærming riktig? Yeah. Det er litt dumt, ikke sant. Det er ineffektivt, ikke sant. Fordi det kommer til å ta en evighet å få til Mike, men det er riktig. Fordi hvis Mike er her Jeg skal finne ham. Så hva er en litt mer rimelig person kommer til å gjøre? De kan fortsatt åpne til fronten, og kanskje fly gjennom telefonboken to sider om gangen. To, fire, seks, åtte. Jeg kan faktisk ikke fysisk gjøre det veldig bra. Men i teorien skal dette være dobbelt så fort, to sider om gangen. Er denne algoritmen riktig? STUDENT: [uhørbart] DAVID MALAN: Ikke nødvendigvis. Flink. Hvorfor det forbeholdet? STUDENT: Fordi han kan være på en av sidene som du hopper. DAVID MALAN: Ja. Så selv om jeg kommer nærmere og nærmere. Hva om han bare tilfeldigvis, ved dårlig Lykke til, klemt mellom de to sidene at jeg flyr over? Så vi trenger en løsning på dette. Vi trenger faktisk å så si, vent litt, kanskje hvis vi går for langt, kanskje hvis vi treffer T seksjon, for T kommer etter Smith, da vi skulle minst dobbelt tilbake minst én side. Så rettes, men det finnes en betinget problem der. Så det er dobbelt så rask, men du kan må doble tilbake bare en liten bit. Men ingen i rommet hans, selv om du trenger egentlig ikke bruke telefonen bøker lenger, kommer til å begynne på begynnelsen. Hva skal du gjøre etter Mike Smith? Du kommer til å gå omtrent til S '. Eller hvis du ikke egentlig har jukse ark på papir, du kommer til å gå minst omtrent til midten. Og absolutt ikke å forsiden av boken. Du kommer til å se ned. Og matematisk er du sannsynligvis kommer til å se M-delen, som er omtrent i midten. Og så kommer du til å skjønner, hva som er sant? Hvor er Mike? STUDENT: [uhørbart] DAVID MALAN: Ja. Så han er over på denne siden. Og så hva kan du gjøre? Vel, både billedlig og bokstavelig kan du rive problemet i halv gang? Og da vet at du kan kaste denne halvdel av problemet bort. Og nå er vi igjen med fundamentalt det samme problemet, men det er halvparten så stor. Og så nå hva er sett med instruksjoner? Hva er algoritmen for å finne Mike Smith? Det er akkurat det samme. Nå skjer dette for å være M seksjon, og dette er den Z-delen, men den fundamentale Formelen er fremdeles det samme. Gå omtrent til midten, se ned, oh, darn det. Nå er jeg i T seksjon, Jeg har gått for langt. Men også her kan du bruke den samme logikken. Kast halvparten av problemet unna, og nå er vi igjen med et problem som er en fjerdedel av den størrelse. Og vi kan gjenta, og vi kan gjenta, og vi kan gjenta til teoretisk det er bare en side igjen på som Mike enten er eller ikke er. Så hva er så kraftig om denne ideen? Jeg mener tross alt, det er ganske intuitivt. Ingen kommer til å starte på begynnelsen av telefonboken og vende 1000 sider for å finne Mike Smith. Mest alle i dette rommet kommer for å gjøre omtrent den slags algoritmen lagre for rive. Og så hvorfor gjør vi det? Vel, vurdere effektiviteten. Tenk hvor mye bedre denne algoritmen var ved å bryte det ned i sine enkelte bestanddeler. Så hva gjorde jeg først gjøre? Jeg plukket opp telefonboken. Og en datamaskin vitenskapsmann, og en programmerer, mer generelt det viser seg, kommer å begynne å telle alt på 0. Hvorfor? Vel, det er litt rart at vi mennesker telle, generelt, å starte fra en. Fordi det er det minste tallet vi kan tydelig representerer basert selv på vår gamle barneskolen matematikk? Vel, det var 0, enten det er i desimal eller binær. Og så vil du se i verden databehandling og programmering, spesielt, starter vi teller alt fra 0. Så jeg plukket opp telefonlisten trinn 0. Jeg kommer til å åpne for midt i telefonboken. Og det er faktisk en uttrykk for hva jeg gjorde. Og så trinn to var å se på navnene. Trinn tre er litt forskjellig konseptuelt. Jeg spør meg selv et spørsmål. Hvis Smith er blant navnene, Jeg kommer til å ta en beslutning. Hvis han er blant navnene, så jeg kommer til å ringe Mike. Og jeg kommer til å ta en beslutning basert på at opplysning. Imidlertid, hvis ikke, hvis Smith tidligere i boken til venstre, Jeg kommer til å åpne til midten av den venstre halvdelen av boken. Og så her er kløkt, Jeg kommer til å gå tilbake til trinn to. Jeg kommer til å sortere av stå på egne skuldre og bare gjenta det siste arbeidet jeg gjorde. Men det arbeidet jeg har igjen er mindre, og mindre og mindre. Men det er fortsatt kommer til å fungere. Men hvis Mike, i stedet, er senere i boken til høyre, Jeg kommer til å åpne til midten av den høyre halvdel av boken, deretter gå tilbake til trinn to. Men det er faktisk en fjerde scenario. Mike enten her, eller her, eller her, or-- STUDENT: Ikke der. DAVID MALAN: Ikke der. Og ja, hvis vi regner ikke med denne fjerde og siste scenario vårt program kan være buggy eller feil på noen måte. Else, sluttet i det tilfellet at vi har ikke funnet Mike i det hele tatt. Og ja, hvis du noen gang lagt merke til datamaskinen henger, eller alt av en plutselig ord eller en annen Programmet avsluttes bare uventet, og noen ganger deg feil Meldingen er bokstavelig talt det. Dette programmet avsluttes uventet. Det kan være for en rekke årsaker. Men noen ganger er det noe så enkelt som dette. Den menneskelige programmerer som skrev at programvare var ikke klar over det, åh, det er en frem ting som faktisk kan skje. Og hvis du ikke skrive kode for å fange den fjerde scenario, det er faktisk uventet noen ganger hva maskinen faktisk kan gjøre. Nå la oss kalle ut en Noen av disse tingene. Så i gul her, jeg har fremhevet vilkår at fra nå av vi er bare kommer til å kalle funksjoner. Funksjoner i verden programmering er akkurat som handlinger, uttalelser av handlinger. Så plukker opp, åpen, se på, ring, åpen, åpen, avslutter. Det er en funksjon, en prosedyre, en handling, en rekke synonymer ville fungere også. Nå hva er disse tingene nå i gul? Hvis annet, hvis annet, hvis annet, disse er det vi kommer til å kalle forholdene i programmering, eller grener, beslutnings poeng, hvis du vil. Men hvordan vet du hvilken gaffel i veien for å ta, så å si? Vi trenger å markere vilkårene til høyre der, som er disse Ja Nei spørsmål. Disse ekte falske spørsmål. Smith blant navnene? Smith tidligere i boken? Smith senere i boken? Dette er spørsmål til hvor det er et ja eller nei, eller ekvivalent sant, eller usant, eller ekvivalent, én eller null svar. Og i mellomtiden er det bare en siste stykke. Dette her har hva slags effekt? Hvorvidt du programmere før, hvordan ville du beskrive hva trinnet syv og 10 gjør? Hva sa du? STUDENT: En rekursiv trinn. DAVID MALAN: En rekursiv trinn. Ja, i hovedsak. Det er teknisk iterativ her hvis du er kjent. Men vi vil komme tilbake til det. Men det gjør noe klart. Igjen, det indusere en syklus, en sløyfe, høyre. Du bokstavelig talt går tilbake til noen tidligere trinn. Og så ja, dette kommer til å implementere en slags syklus. Men du kommer ikke til å få fast i denne uendelige, akkurat. Fordi hvis du stadig sjekker er Mike her, eller til venstre, eller ikke her, til slutt han ikke kommer til å være der. Og du kan bare slutte helt som per den siste linjen. Så det er det for vokabular. Og dette var det vi ville vanligvis kaller pseudokode. Det er ikke en faktisk språk. Det er bare veldig konsis engelsk, men det kommuniserer poenget. Det er ingen formell struktur her. Du bare bruker det er noen ord, men som klare ord som du kan for å kommunisere ideen din. Nå hvor bra er at algoritmen og hvor mye bedre er det? Vel, vi har ikke til å komme inn i spesifikk av tall eller noe slik. Men vi kan se på form av denne oppløsning. Så hvis vi bare trekke noen xy plott her på de horisontale aksen her. La oss bare kalle størrelsen på problemet. Og en datamaskin vitenskapsmann ville bruker vanligvis n som den variabelen her. Så n sider, eller n personer i rommet, eller hva er det du prøver å telle. Og så på den vertikale aksen på igjen, vil det være tid til å løse. Så hvor mange sekunder det gjør det ta meg å finne Mike Smith? Eller hvor mange skritt tar det? Hvor mange side svinger tid tar det? Så det er hvor mye det koster meg i tide til å løse et problem. Og vi kan trekke den første algoritmer skråning, om du vil, som nettopp dette rett linje i rødt. Og jeg vil kalle det n. Hvorfor n? Hvorfor er det bare denne ene til en relasjon? Vel, hvis Verizon eller uansett telefonselskap legger en mer siden telefonboken neste år, som kan presse Mike en skritt nærmere slutten, avhengig av hvor den siden er. Og så effekten kan bare være å legge en mer andre. Eller en mer side sving. En til en-forhold. I motsetning til den andre algoritme. Hvor mye raskere var at intuitivt? Der jeg gikk to sider om gangen? Yeah. STUDENT: [uhørbart] DAVID MALAN: Ja. Så det kommer til å være dobbelt så rask. Og vi ville trekke det her avhengig av skalaen. Det er fortsatt en rett linje, men lavere enn den røde linje. Fordi for noen nummer sider, hvis det tar du dette mange skritt med den første algoritmen, det kommer til å ta deg en halv som mange trinn med andre. Og så den gule linjen beskriver den andre algoritmen bare kommer til å være under den. Men hva er egentlig kraftig er å tenker på den tredje og siste, og utrolig mest intuitive algoritme, som har denne form. Teknisk vi vil kalle dette en logaritmisk kurve. Log base 2 av n i dette tilfelle. Men det spiller ingen rolle. Det som betyr noe er virkelig fundamentalt forskjellig form som den har. Og du kan vurdere hvor mye kortere denne linjen virkelig er i det lange løp. Det er stadig økende. Det slår ikke sammen perfekt. Men den vokser aldri så mye saktere som problemet blir større og større. Og du kan tenke på det på denne måte-- hvis Verizon ikke bare legge til en side neste år, men dobler antall sider i telefonboken, den første algoritme makt ta dobbelt så mange skritt. Hvis det er 1000 sider dette år, 2000 sider neste år, Mike kan være at mye lenger unna. Så det er 1.000 ekstra skritt for å finne ham. Den andre algoritme kanskje bare 500 mer fremgangsmåten for å finne ham fordi igjen, Jeg flyr gjennom den to om gangen. Men hva med den tredje algoritme? Hvis Verizon dobler Størrelsen på telefonboken neste år fra 1000 til 2000 sider, hvor mange flere trinn er min tredje algoritme kommer til å ta? Ja, det er bare ett. Og det er den kraftige ideen. Du kan ta 1000 side bite ut av det problem på en gang. Og nå hvis du tenker en dum situasjon, men den slags taler til kraft av denne typen intuition-- hvis en telefonbok hadde, som, fire milliarder sider, føles som et virkelig stort problem. Og ja, det kan ta meg fire milliarder siden blir å finne Mike Smith i at tilfellet med den første algoritme. Men hvor mange skritt ville det ta i tredje algoritme å finne Mike blant fire milliard papirbiter? Så fire milliarder du rive i to. Du får to milliarder. Deretter milliard, så 500 millioner kroner, 250 millioner, 125 million-- men det føles som dette er kommer til å ta en stund. Jeg trenger 32 fingre å telle opp at høy. Men det er faktisk så få som 32 siden tårer. Du kan gå fra fire milliarder til en side dele det opprinnelige antallet sider i halv 32 ganger til du sitter igjen med bare at én side. Nå, selvfølgelig, jeg juks her. Det er ikke det at vi er bare å være sort dum helt med de to første algoritmer. Jeg juks i en viss forstand, eller egentlig er jeg utnytte en forutsetning. Det som var sant om telefonboken i sin opprinnelige form som tillot meg til og med bruke den tredje algoritme? Ja? PUBLIKUM: Det ble alfabetisk. DAVID MALAN: Det ble alfabetisert, ikke sant? Hvis det var bare i tilfeldig orden, er dette bortkastet tid, hele denne samtalen. Jeg må se på hver siden hvis det er i tilfeldig rekkefølge å finne Mike Smith før jeg kan konkludere med at han er der eller ikke. Og så hjørnet vi har kuttet er at jeg har antok at noen andre i dette tilfellet gjorde jobben for meg. Og så til slutt invitasjoner spørsmålet, vel, vent litt. Hvordan du sortere 1000 sider med navn og nummer? Det er faktisk en annen problem, noe vi vil komme tilbake til i fremtiden. Men når du tenker på nettsteder som Facebook og Google for Gmail og ting som Google egne søkeindekser, når du har millioner eller milliarder av biter av data som blir lagret i disse dager, searching-- og ikke minst sortering disse problems-- er i siste instans en utfordring i seg selv. Og ja, så er dette bare ett av disse utfordringene at vi skal se på. Så nå la oss ta et øyeblikk og ta en titt på CS50 seg selv og gi deg en følelse av hva som er i butikken dette semesteret. Faktisk, hvis du ikke allerede har gjort, ta en titt på denne nettadressen. Og som Patrick hentydet til, i år er vi å gjøre en betydelig investering alle jo mer i løpet støtte struktur i form av TAs og instanser, kontortid, seksjoner tilgjengelighet, og digitalt materiale på nettet, så vel. Faktisk, i form av kursets foredrag, vi er her i dag. Og forventningene dette år offisielt av kurset er ivareta dag, kursets siste forelesning, og et kurs omtrent i midten av semesteret med hver forelesning i mellom gjort tilgjengelig generelt på en fredag ​​ettermiddag på nettet, både for Yale studenter og Harvard studenter i år. Faktisk er en av de fundamentale endringer er at vi vedta på Harvard et paradigme veldig mye som vi gjorde her sist år, og nå i år, slik at på samme måte, vi fortsatt filme mest av kursets forelesninger i Cambridge men gjøre dem tilgjengelig tidligere enn vi har i det siste slik at de av you-- hvis du ønsker å, for eksempel, få et forsprang på materialer på den første helgen i stedet enn den andre helgen, vil du ha tilgang til disse typer materialer, søkbare, innebygges, hyperlinkable til relaterte ressurser all tidligere. Når det gjelder emnene, for å gi deg en følelse av kursets trajectory-- og noe av dette kan være slang for nå, men ikke for lenge, være trygg. Vi begynner i dag, til slutt, med å se på en programmerings språk kalt Scratch. Vi vil gå over etterpå neste uke til noe som kalles C og deretter se på andre bygningen blokker for å løse problemer, ting som kalles matriser og algoritmer, hvordan vi bruker minnet til vår fordel og ulempe, og ting som datastrukturer, og deretter mot bakparten av klasse ser på maskinlæring og se på en annen språk kalt Python, hvordan nettet fungerer, hvordan internett mer vanligvis fungerer, protokoller som HTTP, språk for databaser som SQL, Javascript for web, og til slutt knytte alle disse sammen. Og så faktisk, i slutten av dagen, du vil ikke lære i denne klassen Scratch eller C eller Python eller SQL eller Javascript. Du vil i stedet mer generelt lære informatikk og grunnlaget av disse, og du vil lære å programmere i hvilket som helst antall av disse språk langs veien. Så ja, et av målene av kurset i slutten er å ta av alle kursets trening hjul etter de siste ukene slik at etter dette, kan du tilbake til din egen fields-- enten det er eller ikke informatikk eller ingeniørfag, i den naturlige vitenskap, kunst, humaniora, eller beyond-- og bringe noe av dette kursets ideer og dette feltets ideer og praktiske ferdigheter til ditt eget domene for å løse problemer i denne. Hva vi skal gjøre her i mellomtiden i de fleste torsdager etter dag er med kursets hoder ledende hva vi kaller walkthroughs av kursets oppgavesett. Så hver uke når vi har et problem satt, vil vi vandre gjennom på et sted som dette kursets utfordringer, tilbyr deg noen tips og triks og design teknikker. Men hvis du ikke er i stand for å gjøre de i person, realisere de samme ressursene vil være forankret ved en av kursets lærerassistenter i oppgaven stiller seg selv, så vel. Problemet setter i år, i motsetning til i fjor, basert på tilbakemeldinger, vil fortsatt bli utgitt på fredager. Men heller enn å være på grunn den påfølgende fredag, og dermed gir deg bare syv dager, vil effektivt skyldes 10 dager senere. Og ja, dette vil bety at de vil overlappe med en helg. Men vi håper i år spesielt dette vil tillate elevene å bedre imøtekomme flo og fjære i planene sine, enten det er akademikere eller extracurriculars eller friidrett eller deleksamen sesongen. Du kan enten front-load eller back-load din uke med fokus på CS50 basert på din egen ukes selve kurset belastning. Problemet setter seg vil dekke en rekke språk, om vi vil fokusere hovedsakelig tidlig på C før vi fokuserer deretter på høyere nivå, mer web-sentriske språk. Og så et par vanlige spørsmål her-- bør du ta en klasse som CS50 som et første-år? Så absolutt. Og ja, det er ikke nødvendigvis noe du bør utsette til du har kuttet tennene på andre typer klasser. Men heller vurdere at for mange studenter, meg selv inkludert tilbake i dag, dette er en veldig ukjent felt, spesielt hvis du aldri fikk ta en AP CSA eller noe sånt i videregående skole. Men innser at tidlig, enten det er dette kurset eller noen andre innføringskurs, nå er faktisk den beste tiden, Jeg tror, ​​for å finne noen ny bane eller noen nye akademisk interesse, så vel. Og deretter tar med andre courses-- så en av de viktigste forskjellene her versus Harvard er at vi bare ta fire kurs per semester ved Harvard av en eller annen grunn. Og dere faktisk trekke av noen 36 kurs i totalt i løpet av fire år, som betyr vanligvis fire eller fem klasser. Og jeg tror det er ganske rimelig å si og å fraskrive CS50, ved design, er sannsynligvis ikke den type klasse at du bør vanligvis ta med fire andre kurs for totalt fem fordi psets er av designe ganske intensivt. Ja, jeg også lært dette tilbake i dag. Jeg vil ikke beskrive CS50 og informatikk, programmering som så mye vanskelig som det er bare tidkrevende. Det er ikke den type ting der etter middag, du kan gå tilbake til dorm rom, sitte ned, og begynne fokus på PSet tenkning, all right, Jeg er ute skal bang dette i kveld og deretter flytte på min neste emne neste dag. Noen ganger du bare treffer en vegg. Du har feil i koden din. Du trenger ikke nødvendigvis vet hvordan du kan løse noen problem. Og en av de viktigste funksjonene i programmering for meg selv den dag i dag er du bare slags behov for å ta et skritt tilbake noen ganger, sove på det eller tror på det i løpet av en joggetur eller annen aktivitet, og så komme tilbake til den frisk. Og du trenger bare disse vinduene tid. Og ja, det er derfor vi har forlenget tiden tilgjengelig for oppgavesett i år, og også, per som URL Jeg satte opp tidligere for å hva som er nytt dette semesteret, trimmet problemet setter slik at de er fundamentalt ikke mindre strenge, og gatekjøkken er ikke mindre, men det er mye mindre foran materie, mye mindre legwork at du trenger å gjøre på forsiden av hvert problem sett, som du ser, før du kan faktisk dykke inn i kjøtt av det. Så skjønner at disse og andre endringer er på horisonten for å bedre imøtekomme studenter, men til slutt for å være sikker at takeaways er faktisk så høy som mulig. Så mens mer arbeid enn det kan være i en typisk klasse, vi håper at avkastningen for du og gatekjøkken for deg og ferdigheter og ideer som du avslutter er alle mer overbevisende som et resultat. Og for å få deg det-- og dette er en av de viktigste takeaways, som Patrick hentydet earlier-- er kursets støttestruktur. Så ikke bare CS50 har en av de største kurs staber på campus. Den har også en av mest lavere. Faktisk CS50 fjor var den første klasse å ha en lavere lærerstaben. Og bevis på at suksess gjøre nå mange andre kurs innen Yale CS har det, også. Og for studenter, spesielt, vil disse TAs og kursassistenter være å støtte en hel nettverk av støtteressurser, Blant dem seksjoner eller resitasjoner, ukentlige muligheter å ha mer intime diskusjoner og vurderinger av materialet målrettet for forskjellige spor, for studenter mindre behagelig, mer komfortable, eller et sted i mellom. Disse vil følge tilgjengeligheten forelesninger ved flere dager hver uke på mandager og tirsdager. Og så kontoret timer-- en-mot-én muligheter om hjelp fra kurset instanser og TAs vil være på onsdager og torsdager og søndager på flere ganger, som alle vil bli lagt ut på kursets hjemmeside, enda mer enn i fjor, så vel. Men hva er nøkkelen til CS50, hvis ikke riktignok litt uvanlig, er kurset kultur som vi har prøvd å dyrke, både i Cambridge i mange år og nå sist i New Haven. Og faktisk kommer opp denne Lørdag, hvis du ikke har hørt, er CS50 Puzzle Day, som har ingenting å gjøre med informatikk men er i sin helhet konstruert for å sende en melding om at informatikk er om problemløsning. Og ja, hvis du ønsker å partner med ett eller to eller tre venner og danne et team for CS50 Puzzle Day, ta en titt på reklame som er på vei ut. Og tre timer med pizza og oppgaver og premier venter. Og ja, for første gang i år, Det vil ikke bli avholdt sammen med Harvard. Det vil være her uavhengig ved Yale. Så hold et øye for dem hvis du ikke har. De fleste hver fredag ​​i semesteret prøver vi å gjøre en stor klasse føle seg liten og bringe noen 50 studenter til lunsj med kurset ansatte, med alumni, venner fra industrien for å snakke om hvordan livet er etter en klasse som CS50 og over somrene og etter endt utdanning. Så hold et øye for invitasjoner til det. For første gang gang i år vil vi holde den første noensinne CS50 koding konkurranse, en valgfri opt-in mulighet mid-semester, etter alle av oss har hatt noen seks eller syv uker med programmering i C under beltet for å konkurrere, hvis du vil så choose-- igjen på teams-- prøver å løse så mange utfordringer som du kan i programmering med venner av deg mot andre. Og mot halen av semesteret vil vi charter noen busser, faktisk bruke litt tid i Cambridge, hvis du hadde liker å bli med oss, for såkalt CS50 hackathon. At 19:00 vil vi begynne. Rundt 21:00, vil vi ha pizza. Rundt 01:00, vil vi ha burritos. Og alle fortsatt våken på busstur hjem rundt 05:00, vi vil stoppe for pannekaker på IHOP på vei home-- en 12-timers muligheten til å fordype selv med klassekamerater og ansatte i kursets siste prosjekt, som er en mulighet å gå langt utover det kursets oppgavesett og designe og implementere mest noe av interesse for deg, som til slutt vil bli omtalt her i Commons. Den første CS50 rettferdig ble sist år, en end-of-semester utstilling eller feiring av hva alle i klassen hadde oppnådd, spesielt de, igjen, som gikk fra ingenting til noe, fra null til 60, har ingen tidligere bakgrunn og stille, til slutt, noe for hele campus og, hvis nettet, til verden se, så vel. Nå, disse her er bare noen få av TAs og instanser som gjør CS50 mulig. Tillat meg å invitere noen av de ansatte som er her for å komme opp på scenen, samt kursets hoder, å tilby noen ord inspirasjon, så vel. ANDI: Hei, folkens. Kan dere høre meg? Takk for at du deltar på dette herlig, regnfull torsdag ettermiddag. Mitt navn er Andi. Jeg er en junior i Berkeley. Og sammen med Stelios og sommer, vi vil være tre hodet undervisning assistenter for kommende år. Så tror jeg, show av hands-- hvor mange av dere har ingen intensjon om å være en CS stor eller egentlig dykking dypt i informatikk som en viktig her? Awesome. Det er strålende. Så jeg er faktisk en global samanheng og kognitiv vitenskap major. Jeg bokstavelig talt kom til Yale med intensjon av aldri å måtte se på en antall noensinne igjen i mitt liv. Da jeg kom til Yale, dette var noe som var aldri på min radar. Jeg ønsket å lære om poesi. Jeg ønsket å lære om internasjonale spørsmål. Jeg ønsket å lære om akvarell tegninger. Ja, kan vi tilby en klasse på akvarell tegninger. Men jeg har aldri vært veldig interessert i noe STEM relaterte. Men da den eldre jeg fikk, jo mer jeg innså at alle felt egentlig på noen forstand syssels informatikk, eller hvis ikke informatikk, beregning. Faktisk, for min global saker hjørnestein prosjekt, vi bruker dataanalyse å analysere terrorangrep for Boko Haram i Nigeria. Og slik som du kan se, uansett av hva store du ender opp med å forfølge eller hva dine interesser her på Yale er, programmering og fundamentene uansett ferdigheter er super nyttig. Og CS50 virkelig er godt rustet til å slag av låne mange av sine ressurser til deg, uavhengig av hvor komfortabel du er eller hvor interessert du er i å forfølge klassen. Sommeren kommer til å snakke litt litt om hva dere er kommer til å lære om dette året. SOMMER: Hei, alle sammen. Jeg er Summer Wu. Jeg er en junior i Morse. Og jeg faktisk startet som en CS50 student selv. Så tre år siden, var jeg på et gap år. Jeg hadde aldri tatt en CS klasse i videregående skole, men jeg tenkte at i min fritid, det ville være kult å lære å kode. Så jeg gjorde et raskt Google-søk, så etter hva som var tilgjengelig på nettet, og så denne videoen med muppets og DJs og kule nettsteder. Jeg var som jeg vil lære hvordan du gjør det. Så jeg tok kurset, og jeg bare forelsket i den. Men jeg husker jeg var så sjalu av barn som kan delta på hackathon, delta Puzzle Day, delta kontor timer, få hjelp fra TAs i person. Og så jeg aldri trodd at jeg ville få sjansen å være her involvert i kurset som først fikk meg interessert i datamaskinen vitenskap og er grunnen til hvorfor Jeg er en datavitenskap stor dag. Så jeg vil advare deg, denne klassen kommer til å strekke dere. Det kommer til å utfordre deg. Men det er også kommer til å lære deg hvordan du gjør ting at du aldri forestilt deg kunne. STELIOS: Hei, alle sammen. Mitt navn er Stelios. Jeg er en junior i Branford College og en CS-dur. Jeg er også fra Athen, Hellas. Jeg gleder meg veldig til å møte dere alle, chatte med deg på delen, på kontortid, på fredag ​​lunsjer. Jeg er veldig spent fordi vi har lagt så mye innsats til å skape en unik støtte struktur for alle dere å gjøre din opplevelse med løpet best mulig. Og jeg håper at selv om de fleste av du har sikkert ikke tatt en CS kurs før, håper jeg det er CS50 for deg er hva gnister interesse til videre forfølge datamaskin vitenskap i fremtiden, som det har gjort med så mange mennesker i fortiden. Så takk for at du er her, spent på å se deg. Jason Hirschhorn. JASON Hirschhorn: Hei, alle sammen. Mitt navn er Jason Hirschhorn. Jeg bor i Silliman. Og jeg gikk til Harvard som en under og tok hovedfag i samfunnsfag og minored i informatikk. Og en av mine viktigste roller her er å støtte denne fantastiske ansatte som de støtter dere alle. Faktisk er dette ikke alle av dem. Det er 55 studenter og nyutdannede her for å støtte dere alle. Og jeg daresay en av de beste deler av kurset for deg alt er å få til å jobbe med dem, bli kjent med dem, får å se dem, både i CS50 og utenfor CS50 dette semesteret og for mange semestre som kommer. Så forhåpentligvis vil du ta Selvfølgelig fordi forhåpentligvis kommer til å samhandle med den fantastiske ansatte vi har på scenen. SPEAKER: Vel, la meg ferdig ved å si det blir gøy. DAVID MALAN: Vel, Takk til hele teamet. Tillat meg å dempe lysene og tillate litt mer av vårt team, både fra Cambridge og New Haven, å hilse som disse gutta fil av. Og etter det skal vi gå over til den første av våre programmeringsoppdrag med dette språket kalles Scratch. Så takk til teamet. La oss dempe lysene og høre fra noen andre. [BIFALL] [VIDEO PLAYBACK] -Den Misjon CS50 er å gjøre deg mer komfortable med en helt ny måte tenkning, denne beregningstenkemåte. -Det Gjorde informatikk interessant, som er noe jeg virkelig ikke klar var mulig før jeg tok klassen. -Jeg Var som whoa. Jeg er egentlig oversette mine tanker inn i en datamaskin akkurat nå. -Selv Om du ikke har noen bakgrunn i informatikk eller noen erfaring, Dette er faktisk den klassen for deg. -Så Jeg definitivt vil elevene mine til bare bli begeistret for informatikk. Ikke bare programmering, men tenke som en datamaskin vitenskaps er egentlig hva jeg vil prøver å lære min freshman. -CS50 Er vanskelig og givende. -En opplevelse. -Extravaganza. -Det Er å bringe oss til neste nivå. [MUSIKK] -De TFS er, tror jeg, det livsnerven av kurset. -Jeg Glade for å ha elevene mine Jeg hjelper har som aha øyeblikk å realisere hva de faktisk prøver å gjøre, for å finne ut hvordan du gjør en PSet. -CS50 Er definitivt en vanskelig kurs. Men i motsetning til andre Kurset virkelig ved Yale, den har en så stor, støttende fellesskap. -Du Absolutt ikke trenger å vite noe om koding for å være i stand å ta kurset. -Det Er utrolig å se hvor langt folk kommer i ett semester. -Du Var ikke alene sitter i rom lære å kode, men det var mer enn bare en klasse. Det var en opplevelse. -Den Beste måten å lære begreper og å behandle dem er ved å undervise andre. -Hva Er det telefon split? [MUSIKK] -Og Dette er CS50. [MUSIKK] -Dette Er CS50. -Fikk Et problem? Riv den i to. [MUSIKK] Kaste den bort. DAVID MALAN: Greit. Så la oss tackle-- i en liten bit, forresten, det er vært denne tradisjonen for en eller annen grunn i 10 år for å tjene kake på start og slutten av CS50. Så venter du på slutten av i dag, i tillegg til pensum, vil være noen kake også, og kursets ansatte til å si hei. Men nå, la oss overgang til første av våre språk, der Vi vil bruke egentlig bare en uke og en Problemet ligger på dette domenet, Scratch. Og du vil finne hvis du har programmert før, mange av ideer og Mulighetene er kjent for deg. Men du vil finne at det er moro underveis å finne ut nøyaktig hvordan å oversette noen av ideene du allerede vet til dette spesielle miljø å virkelig imponere din familie og venner med arbeidet ditt, noe som kan gå på nettet, hvis du ønsker det, etterpå. Og hvis du ikke har noen tidligere erfaring og er Blant de fleste studenter mindre komfortable, innse at mange av ideene vi bare utforsket med reality-- ting som telefonen bøker og oppmøte og så forth-- sette ganske pent til en datamaskin, men ikke hvis du bruker, utgangspunktet, et språk som dette. Så dette er et program som er skrevet på et språk som heter C. Og vi kommer til å tilbringe mye tid i C, til slutt. Men oddsen er, dette vil se litt kryptisk til deg ved første øyekast. Faktisk, det er mye rare syntaks, parenteser, vinkelparenteser, klammeparentes, sitater og semikolon. Og ja, hvis du dykke inn programmering for første gang ser på og prøver å skape ting som dette, ærlig, du blir så fast så ofte i bare dumt minutia som har ingenting intellektuelt interessant om det. Men tenk om du kunne lage denne samme program-- som som du kanskje slags antyde, sannsynligvis utskrifter "Hei, verden" en eller annen måte. Vi kan destillere den samme ideen i bare to brikkene, hvis du vil. Faktisk er Scratch interessant fordi det er denne grafiske språket. Du kan dra og slippe disse Brikkene som bare interlock om det er logisk fornuftig å gjøre det. Og så i Scratch, Vi vil snart se, dette er hvordan du vil implementere det samme program, med bare to brikkene som stort sett gjøre hva de sier. Men vi får se i løpet av et øyeblikk at noen av byggesteinene som vi alluded til tidligere og noen flere er alt som til slutt kommer til å utgjøre noen av de tidligste programmer. Vi kommer til å ha ting som functions-- bare handlinger som gjør noe, som sier hei, verden. Vi kommer til å ha løkker, ting som induserer sykluser igjen og igjen, akkurat som vi gjorde et øyeblikk siden med søking for Mike Smith. Variabler, som i algebra, hvis du har x eller y, som kan lagre et nummer. Vel, i et program, kan du faktisk lagre mer enn bare tall. Du kan lagre ord og setninger og grafikk og andre ting fortsatt. Boolske uttrykk, bare questions-- ja eller nei, sant eller usant. Betingelser, ta beslutninger basert på disse ja / nei svar. Og så avansert ting som matrise og tråder og events og hvilket som helst antall annen funksjoner, men som alle kart meget pent til veldig vennlige blokker som dette. Dette kommer til å være en funksjon, en lilla puslespill brikke som bare sier hva navnet er-- i dette tilfellet, sier. Og så ofte, er det en hvit boks som du kan skrive inn eller dra noen verdi i. Og det er det som vanligvis kalt et argument eller en parameter. Det er en måte for å endre standard virkemåte for et puslespill brikke eller en funksjon slik at den gjør noe tilpasset for du liker å si: hallo, verden eller hallo, Andy eller hallo, Jason eller noen andre setning i stedet. Hvis du ønsker å si at en lot-- bokstavelig forever-- du kan ta en annen puslespill brikke som kalles for alltid og bare klemt den to sammen som dette. Og det loop, som bildet antyder, betyr bare si hei, verden for alltid, igjen og igjen og igjen. Eller, hvis du bare ønsker å gjøre det en endelig antall av ganger, for eksempel 50 ganger, det kommer til å være en annen puslespill stykke for at-- gjenta 50 ganger. I mellomtiden, hvis du vil å ha en variabel i dette språket vi er om å spille med, du kan bruke en orange blokk som dette. Og denne variabelen jeg vilkårlig kalte jeg for heltall. Og jeg bare sette den lik 0. Og så kanskje jeg, i dette case-- dette variable-- representerer noens score i et spill. Du starter på null, og hver gang du lage et mål eller noe sånt, du får ett ekstra poeng. Du kan stille spørsmål i Scratch. Hvis vi dra og slippe puslespill brikker i et øyeblikk som dette, du kan stille spørsmål som: vel, er jeg mindre enn 50? Kanskje du trenger 50 poeng for å vinne. Og så dette ville være spørsmålet du skulle spørre. Eller, mer generelt, du kan si er x mindre enn y, hvor det er to variabler som er involvert? Nå er dette en mye større ved første øyekast, men egentlig ikke alt som mer kompleks. Dette er bare en kombinasjon av betingelser og variabler og boolske uttrykk for å spørre tre questions-- er x mindre enn y? Hvis ja, si det. Si, er x mindre enn y. Ellers, dersom x er større enn y, x ellers må være lik y. Og mens med Mike Smith, det var fire scenarier, her i verden av tall, er x enten mindre enn, større enn, eller lik. Alt vi trenger er tre gafler i veien. Og så er det mer avansert Brikkene som dette for ting som arrays, hvor vi er skal være i stand til å lagre informasjon. Vi kommer til å se blokkene som tillater oss å gjennomføre flere tråder, En annen funksjon vi skal bruke, og da også noe som kalles hendelser. Men før vi kommer til det punkt og skape enda, til slutt, vår egen custom biter i et puslespill, la oss faktisk åpne selve programmet. Så dette er Scratch. Den er tilgjengelig på scratch.mit.edu. Og du er velkommen til å spille nå eller senere, også. Dette skjer for å være offline-versjon. For folk som ikke gjør det nødvendigvis har god internett, du kan laste ned samme programvare, også. Og det er egentlig bare tre komponenter til denne programvaren. På øverste venstre hjørne av skjermen er den slags scenen at Scratch, som standard ser ut som en katt, lever inne. Han kan flytte opp, ned, til venstre og høyre og gjøre en rekke andre ting, og kan se en rekke måter basert på kostymer som du tilordner til ham. Men dette er hva vi kaller en sprite, en slags karakter. Og du kan ha flere tegn, som vi vil snart se. I midten nå er alle disse pusle stykker og disse kategoriene eller paller derav. Så akkurat nå, jeg klikket på Motion. Og så jeg ser alle motion-relaterte brikkene eller blokker, så funksjoner som har å gjøre med å gå opp, ned, til venstre eller til høyre eller en annen operasjon. Men hvis jeg klikket på utseende, du kunne se ting som sier blokken som vi så bare for et øyeblikk siden. Og hvis jeg klikker på kontroll, vil du se ting som gjentar og for alltid og hvis blokken som vi så et øyeblikk siden. Og så vil du finne at vi vil bare klø overflaten av noen av brikkene sammen, men det er alle ganske intuitivt og pek og klikk. Faktisk Scratch er designet for yngre elever å bidra til å gi dem en stikkontakt for kreativ tenkning. Og likevel fantastisk, det er en flott springbrett til nøyaktig de ideene vi kommer til å utforske i C og Python og Javascript, også. På den høyre side, endelig, her er dette, den såkalte skript område. Og dette er bare blank tavle med som du begynner å skrive et program. Og jeg vil akkurat det. Nå, jeg tilfeldigvis vet hvor ting er fordi jeg har gjort dette et par ganger. Men jeg vet at under Hendelser kategori, det er denne blokken her-- når grønt flagg klikket. Og legg merke til hvis jeg zoomer ut og tilbake i over her på scenen, Skrape liv innenfor dette liten rektangulær verden, på toppen av hvilken er en grønn flagg og en rød stoppskilt. Så gå og stopp, henholdsvis. Og så hva gjør jeg ønsker å gjøre når det grønne flagget er klikket? Vel, la meg gå til det ser kategorien. Og la meg gå videre og dra og slippe dette. Og legg merke til så snart det blir tett, de er liksom magnetisk. Så hvis jeg nå la gå, smetter det sammen fin og ren. Og jeg kommer til å gå videre og si noe sånt hei, verden i to sekunder. La meg zoome ut, og klikk nå grønt flagg, og si hallo, verden. Greit. Så det er alt fint og bra. Ikke alt som er spennende. La oss gjøre det litt søtere. Og jeg vet at i forhånd, skjer Scratch til å komme med noen søte ting som dette. Så spille av lyd meow til ferdig. Så la oss gjøre dette. [MJAU] Aw, det er søtt. Og hvis jeg klikker det igjen-- [MJAU] Og igjen. [MJAU] Men jeg fortsetter å helbrede Scratch. Men jeg kan gjøre det bedre enn dette. Hvorfor kan jeg ikke bare dra tre av disse. Og nå er det tre ganger så søt. [Meowing] OK, faktisk, det er en litt skummel. Så vi trenger noe i mellom der. Hvis jeg går til kontroll, ser det ut som det er faktisk en vente blokk. Og så merke hvis jeg sveve over det-- og la meg gjøre dette til en litt større. Hvis jeg hover, det kommer å klikke på plass. Så vent ett sekund, vente ett sekund. La oss treffe grønt flagg igjen. [Meowing] OK, litt mer naturlig, men ikke veldig effektivt. Så dette er riktig hvis min programmets Målet ble meow tre ganger. Men det er ikke veldig godt designet. Jeg slags kutte noen hjørner. Jeg fikk litt lat. Hva føles like-- hva jeg synes å ha gjort dårlig, ville du si? Ja? Ja, i midten. PUBLIKUM: Brukes mer minne enn du trengte å fordi du bruker så mange forskjellige linje. DAVID MALAN: Ja, så flere linjer. Og det ville ikke nødvendigvis være minne, selv om det kunne bli sett på som den måten. Men det er definitely-- det er redundans. Og jeg bokstavelig slags dratt og droppet de samme tingene. Og hvis du slags extrapolate-- hvis det er ikke åpenbart her-- vel, hvordan ville Jeg meow 30 ganger? Jeg ville dra og slippe, som, 30 flere par av brikkene. Og sikkert, det er en bedre måte. Og vi har sett en bedre måte. Hva intuitivt ville være bedre måte? Ja, bare bruke en loop. Ingen kopier og lim inn. Og ja, når som helst dette semester hvis du starter finne deg selv å dra og slippe, eller egentlig kopiere og lime inn, farlig vane å komme inn fordi dette er bare ikke veldig vedlikeholde. For eksempel, hvis jeg ønsker å endre lyden til noe annet, Jeg må endre det nå i tre steder i stedet for bare én. Fordi ja, hvis jeg bryte denne away-- jeg er bare kommer til å kople det sånn. La meg ta et tilbakevendende blokk, og Klikk deretter tre, skriver tre, kaste noen av disse unna med bare å slippe taket. Og så merker det ser ikke ut som det passer, men magnetisk, det kommer å ikke bare knipse på plass men vokser for å passe til formen. Så det er bra. Og nå hvis jeg klikker play. [Meowing] Veldig fint. Greit. Og nå er det veldig enkelt å endres, også, fordi jeg kan bare endre ett nummer på ett sted. Men også dette er ikke alt det interessante. La oss faktisk har Scratch ikke mjaue, men flytte. La meg gå til Motion og flytte 10 trinn inne of-- Uff da, la meg fikse dette. La meg få den flytte 10 steps-- faktisk, la oss ikke gjenta. La meg ta en kontrollblokk, og gjør følgende for alltid. Forever flytte 10 trinn. Og klikk på Spill. OK. Så heldigvis, stopper han. Ellers barn ville bli veldig opprørt når de liksom mister katten sin. Men i det minste kan jeg dra ham tilbake inn i skjermen. Men dette er ikke alt som stor av et spill eller animasjon. Det ville være fint om kanskje Han spratt utenfor kanten. Så hva gjør vi? Hva konstruere trenger vi å ha Scratch velger å sprette, tror du, Selv om du har aldri sett Scratch før? Ja, i ryggen. PUBLIKUM: Du trenger en hvis blokk eller hvis-så. DAVID MALAN: Ja, så noen type hvis blokk eller hvis-så. Så egentlig har vi en av disse her. Så if-- så la meg få kvitte seg med bevegelsen. La meg zoome inn slik at det er større. Så hva med dette. Alltid, hvis Sensing-- Vi har ikke sett dette før. Jeg trenger en boolsk uttrykk. Og det viser seg om å berøre hva? Hvis berøre kanten, hva jeg ønsker å gjøre? Vel, hvis jeg går tilbake til Motion, viser seg, åh, jeg kan snu. La meg dra dette inn her. Hvorfor jeg ikke gå videre og snu 180 grader? Og nå, la meg bare flytte på slutten. Jeg kunne sette bevegelsen på begynnelsen eller slutten. Men logisk, hver gang jeg flytter, jeg ønsker å sjekke, jeg berøre kanten? Tar jeg på kanten? Tar jeg på kanten? Så det logisk jeg snu om det. Så la oss trykke play. OK. Så det er litt buggy, så å si. Og en bug er bare en feil i et dataprogram. Men i det minste er det å jobbe. Og faktisk, jeg kan gå inn her. Og la meg gjøre det ikke 10 trinn ved en tid, men dette er alt animasjonen er. Dette er alle en tegneserie eller enda en film er. La meg gå 20 skritt om gangen. Så 20 ganger så mange ting skjer en gang, eller to ganger så mange, i dette tilfellet. Og han beveger seg raskere. La meg endre til 30. 100. 1000. Og det kommer veldig fort. Og dette er-- ja, OK. Så nå er vi bare rote med det. OK, så buggy. Men vi kan dra ham ut av veien her. Men vi kan gjøre mer moro med dette, også. Hva med dette-- han er opp ned. Men det viser seg Scratch-- og det er faktisk Jeg må fraskriver seg, ingen akademisk verdi til hva jeg skal gjøre. Men hvis jeg åpner opp mikrofonen, la oss stoppe ham og gjøre noe som dette. Au! [LATTER] Det var søt. Takk skal du ha. Nå, dette er hva min stemme ser ut når jeg roper au. Jeg tror ikke vi fanget din latter. Det er greit. La meg lagre dette som "au". La oss lagre dette som "au". Og nå skal vi gå tilbake til Scripts. Og nå need-- jeg la oss se, Sound. Oh, spille av lyd au. Så hvis jeg berøre kanten, la meg første skuespill ouch, og deretter snu. Og nå la oss sette ham i midten. [Sier "au"] Dobbelt så rask. OK. Men det er bokstavelig talt gjør hva jeg sier. Så det er faktisk riktig, er det bare litt irriterende raskt. Så la oss legge til noe mer interessant for denne. La meg faktisk åpne opp en som jeg har gjort på forhånd, treffende kalt Pet den Cat, som gjør dette. Her er manuset opp her. Hva dette kommer til å gjøre i engelske termer? Hva er dette laget for å gjøre? Ja, la oss gå some-- ja? PUBLIKUM: Når du pet katten, meows det. DAVID MALAN: Ja, så når du pet katten, det kommer til å mjaue. Så med andre ord, det er nå en evig løkke fortsatt, kombinert med en tilstand, kombinert med en boolsk uttrykk, kombinert med et par av funksjoner, effekten som, når jeg spiller dette program, er ingenting skjer før jeg flytter markøren nærmere og nærmere og nærmere og-- [MJAU] Så det er som å klappe katten. [MJAU] Bare når du faktisk flytter markøren over ham. Nå har jeg også pisket opp ikke kjæledyr katten, som gjør dette stedet. [Meowing] Så han bare stadig meowing. [Meowing] Men hvis jeg får for close-- [Meowing] [ROAR] Så hvordan fungerer dette? Nå har jeg bare en toveis veiskille. Hvis berøre musepekeren, deretter spille løven lyd. Else bare spille mjaue lyd, og deretter vente tre sekunder så at det er slags gjøre det svært fredelig. Greit. Så det er å kombinere noen flere ideer fortsatt. La oss ta en titt på dette eksemplet Jeg pisket opp kalt tråder. Og dette er fundamentalt annerledes ved at den utnytter en funksjon av mange programmeringsspråk kalt tråder, evnen av et program for å bokstavelig talt gjøre to ting samtidig. Faktisk disse dager hvis du bruker Google Docs eller Microsoft Word, og dokumentet er stadig å bli stavekontrollert selv når du type-- eller du treffe Kommando-P eller Ctrl-P og skrive ut noe, det er å skrive ut mens du fortsetter å skrive. Programmer i dag kan faktisk gjøre flere ting på en gang, akkurat som i Scratch her. Så her har jeg to sprites nå, en fugl og en katt. Og hvis jeg klikker på hver av de tegn en om gangen, Jeg ser akkurat nå fuglens skript øverst til høyre. Nå ser jeg katten. Fugle, katt. Slik at hver av dem har sine egne skript. Men legg merke til hva puslespill brikke de begge begynne med? Når grønt flagg klikket. Og fuglen, da grønt flagg klikket. Så når jeg klikker på den grønne flagg, begge disse skript eller programmer skal kjøre parallelt. Og du vil legge merke til at fuglen er bare klippe spretter utenfor kanten. Katten klart er programmert med en strategisk fordel. Og-- [ROAR] Greit. Så katten fanget fugl i dette tilfellet. Hvorfor det? Vel, innkalling først må vi bare fuglen bare klippe kommer til denne første plassering, og deretter for alltid, hvis ikke berører katten, bare flytte. Og hvis du er på kanten, sprette. Og bare flytte. Og hvis du er på kanten, sprette. Men katten, i mellomtiden, har noen ekstra logikk som sier dette-- først, så at dette ikke er helt partisk mot fuglen, legge merke til at jeg har brukt en grønn puslespillbrikke der som faktisk plukker et tilfeldig tall. En funksjon av mange språk er å gi du tilfeldige eller pseudo tall. Så i dette tilfelle, katten innledning velger et tilfeldig tall mellom, for eksempel, 90 grader og 180 grader, i hovedsak, så at det er en liten bit av variasjon. Og så for alltid, hvis rørende fuglen, spille løven lyd. Ellers, bare peke mot fuglen. Peke mot fuglen. Peker mot fugl, som er et puslespill brikke mot seg selv i dette tilfellet. Vel, kan vi gjøre en annen ting her. La meg åpne opp hendelser programmet her. Og her er vi igjen har to sprites, som ser ut som disse to dukkene her. Og det som er interessant her er dette. Den oransje fyren har dette satt av puslebiter her. Alltid gjøre following-- Hvis mellomromstasten trykkes, så si, Marco, og da kringkaste en hendelse. Og i mellomtiden, den blå fyren her har dette-- når du mottar hendelsen, si Polo. Så det viser seg i Scratch og i andre språk, det finnes måter for to programmer eller to skript, i dette tilfellet å intercommunicate slik at når jeg treffer på mellomromstasten, sier han Marco. Og den andre en hører at så å snakke, og sier Polo svar. Så du kan skrive programmer som faktisk bruker på denne måten. Og hvis jeg gjør dette i stedet, Jeg kan til og med legge til variabler, bare å bruke en sprite i dette tilfellet. Dette er spesielt irriterende. [SEAL BARKING] Legg merke til høyre har vi noen ekstra logikk over her. Hvordan stopper jeg dette segl fra å bjeffe? [SEAL BARKING] Det ser ut som på høyre hånd side er hva som er å spille lyden. Men det er bare å spille en lyd hvis det er sant? Hvis en variable-- oransje block-- dempet er null. Hvordan endrer jeg dempet til å være en, betyr sant, gjør dette dempet? Angivelig, den andre manus, kan jeg traff mellomromstasten, og nå stopper han. Så vi kan ha denne inter over skript, også, bare ved å dele en variabel over to like this. Nå, dette er ikke alle som interessant. La oss gå videre og gjøre dette og kombinere mange av disse ideene med dette programmet her. Før vi gjør det, skjønt, hva med en frivillig? La meg ta presset av av meg fordi jeg ikke egentlig spille dette spillet. La oss ta noen vi ikke har sett før. Du må være komfortabel kommer opp på scenen her, på kameraet. OK, kom opp. Veldig modig. Hva heter du? IDRIS: Idris. DAVID MALAN: Sorry? IDRIS: Idris. DAVID MALAN: Idris, hyggelig å møte deg. Kom opp. Og nå, på din egen mobil telefon, spiller du Pokemon GO? IDRIS: Nei. DAVID MALAN: Really? IDRIS: Ja. DAVID MALAN: OK. Greit. Vel, hyggelig å møte deg. Kom over. Jeg gjør ikke heller. Så får vi finne ut sammen hvordan de skal spille dette, som noen faktisk gikk og implementert i Scratch ved å endre katten til hovedsak forskjellige tegn alle sammen. Og hvis jeg fullskjerm dette her, skal vi å se følgende spillet sammen. Laster fortsatt, fortsatt lasting. Kom igjen. La meg gjøre dette. Kom igjen. Dette spillet er så stort at det krasjet. Vent litt. Prøv dette på nytt. Kom igjen. Greit. Det vi går. OK. Grønt flagg. Så her vi går. [MUSIKK] Velg det midterste nivået her. Klikk på den blå fyren der. Greit. Og du kan bruke pil keys-- opp, ned, venstre, høyre. Nå, la oss vurdere som vi gjør dette-- og deretter gå etter tegnet der. Jepp. Og nå klikke ham med musen. Å, ja. Bevege seg. Hvor er pilen? Værsågod. Så klikker du på der. Yeah. Greit. Så nå, jeg sa du har en Poke ball, at hvis klikker på den, vil den gjøre det. Veldig bra. I praktisere for i dag, jeg fant denne versjonen av spillet faktisk ikke så veldig vanskelig. Så hvis du ønsker å gå igjen her, gå ned til denne Poke ball. Og så gå ta til høyre. Prøv å klikke på den. Oh, faktisk, det er butikken, tilsynelatende. OK så lukke det. Aldri gjort det før. Kanskje gå opp til denne tingen her oppe. Åh, der du går. Vent, det er en der borte. Å, det er en annen. OK. Ned. Ja, klikk. OK, det er veldig søt. OK, veldig godt gjort. Dette spillet er ikke veldig vanskelig. OK. Gratulerer. Her har vi en CS50 stress ball for deg. Men tenk for et øyeblikk hva noen av gatekjøkken er der. Enklere enn det virkelige spillet, tilsynelatende. Men alt vi har å gå her er en karakter som trolig har en slags av sløyfe knyttet til den. Det er ikke en katt. Det er dette tegnet i stedet. Og at loop er bare konstant si, hvis pil opp trykket, hvis pil ned trykket, hvis pil venstre presset eller høyre arrow presset, flytte opp eller ned eller til venstre eller høyre. Eller hvis det er en annen puslespill brikke der som sier når du berører en annen sprite, når berøre en av karakterene å rote ballen, hvis rørende, så gjør dette. Så alle de ideene vi har brukt så langt egentlig kan bare anvendes i denne spesielle kontekst for å spille dette spillet, så vel. La meg gå videre og trekke opp en annen her, i virkeligheten. La meg gå videre og trekke opp, la oss si, dette. Dette er noe vi remikset. Laget av en av våre studenter i Cambridge, og da jeg gikk gjennom og endret ganske mye hver forekomst av Harvard Yale denne gangen. Vil noen liker å konkurrere mot de Ivies her i en annen opphopning av alle disse ideene? Kom ned, ja. Hva heter du? DINA: Dina. DAVID MALAN: Adina? DINA: Dina. DAVID MALAN: Dina, kom ned. Greit, Dina. Så dette spillet blir vanskeligere og hardere, fordi i dette spillet, det er variabler som brukes i tillegg som stadig holde styr av hvilket nivå du er i spillet. Så hyggelig å møte deg. Kom rundt her. Og så målet her er å sortere av gjøre veien gjennom en labyrint at denne studenten gjennomføres. Og bare for å sette scenen, hver av disse bildene på skjermen er sin egen sprite, sin egen karakter. Så disse var av standard katter, men studenten endret dem til de ulike ivies logoer her. Og så vil du se at bare ved hjelp betingelser og løkker og funksjoner og mer, får du dette. [MUSIKK] [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Ja, OK. Ja, fortsett. Første nivå er veldig enkelt. Du har akkurat å gå dit. Men igjen, vurdere, dette er bare en sløyfe lytter etter pilen keys-- opp, ned, venstre, høyre. Og nå en sensing blokk. Veldig fint. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Veldig fint. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Veldig fint. Ganske enkelt, Crimson. Greit. Levels-- uh-oh. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Og igjen, i disse tre Harvard toppene, du må bare logikk si hvis på kanten, sprett. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] OK, hva du gjør er mer interessant enn grunnen. Veldig fint. Veldig fint. UH oh. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Jeg tror du må ofre deg selv. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Rask! [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Hyggelig. Det er greit. Du vil få det. Ja, ja! Veldig fint. [JUBEL] [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Hyggelig! [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Har det. Kom igjen! Nest siste nivå. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Greit. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Ja. God bruk av variabler her. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Ja. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Hyggelig. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Det er greit. Vi fikk komme til slutten. Der. Åh! [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Kan kjøre sent i dag, men det kommer til å være verdt det. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Du kan gjøre det! Yeah! [JUBEL] [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Dette er virkelig vanskelig. [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Vi gir deg to flere liv. Kan du gjøre det? [MUSIC - MC HAMMER, "U kan ikke røre  DETTE"] Greit. Hva med en stor rund applaus likevel. Du kom til nest siste nivå. Takk skal du ha. [BIFALL] Så dette er bare å si hvor mye du kan gjøre med slike ting. Og innser også at når brikkene ikke exist-- og ja, dette kommer til å være en av kreftene med det første problemet sett og beyond-- er å faktisk lage din egen. Og dette er bare et tekstutdrag av et av eksemplene vil du være i stand til å spille med på nettet, hvor hvis du ikke har bygget inn Scratch noe som en hoste puslespill brikke, du kan faktisk gjøre det selv. Og så alt dette og mer venter. Og bare for å male en endelig bilde av faktisk hva som er videre i butikken for klassen for deg, basert på noen bilder fra klassekamerater fortid, tillate meg å dempe lysene en siste gang og viser deg CS50. [MUSIKK] Greit. Det er det for CS50. Cake serveres nå. [MUSIKK]