[Musik spiller] -Alright! Det her er CS50. Det her er CS50. Det her er CS50. [MUSIC - IGGY AZALEA, "smarte"] -Min Favorit hukommelse fra CS50 var, da jeg gik til Puzzle Day. -Sandsynligvis bare den tid brugt arbejder på problemet sæt med mine venner og folk, der wold i sidste ende blive mine blockmates. -Min Bedste hukommelse fra CS50 er hackathon. -Den CS50 hackathon. -Hackathon. -Hackathon. -Hackathon. -The Hackathon Rob Bowden. Bare alt om ham. [MUSIC - IGGY AZALEA, "smarte"] -Min Favorit hukommelse er, når jeg var på fase, og jeg spillede den prestigefyldte rolle af et knudepunkt [? i Linked?] [? List. ?] -Når Vi alle fik gratis Dropbox plads og David var ligesom, se under jeres pladser. Og det var ligesom, plads til alle! [MUSIC - IGGY AZALEA, "smarte"] -min Råd for enhver indkommende studerende ville være til virkelig at arbejde på P-sæt med venner. -Office Timer er meget din ven. -Gøre Mest ud af dine erfaringer og møde så mange mennesker som du kan. -Ikke Være bange for at bede om hjælp. -Start P-sæt tidligt på ugen. Jeg tror den største ting er at drage fordel af alle de ressourcer, at CS50 har. -Gå Til kontortid tidligt på ugen. -Definitely Se shorts. -Ikke Nøle på din P-sæt. -Sørg Du finde en stor gruppe af mennesker til at arbejde på P-sæt med. Du kan have en masse sjov og få udført arbejde sammen. -Ikke Være bange for at presse dig selv. Gå efter hacker-udgave til tider. Skrivning af ting på papiret, før du nogensinde røre din computer. -CS50 Er virkelig stor på at give dem muligheder for at få hjælp. -Min Ét stykke af rådgivning er søvn. Har nogen sagt det? Søvn, for sikker. Det er nemt ikke at gøre, men du har fået til at gøre det, tror jeg. Jeg ville sige virkelig være mentalt forberedt fordi du kommer til at elske det. [MUSIC - IGGY AZALEA, "smarte"] Det her er CS50. Det her er CS50. Det her er CS50. [MUSIC - IGGY AZALEA, "smarte"] Det her er CS50. [Applaus] David J. MALAN: Så det er CS50 og det er i slutningen af ​​uge 0. Og det var blot nogle af CS50 personale, der venter dig ikke kun i sektioner og kontortid, men, Også denne kommende weekend på CS50 Puzzle Day. Som igen, er ikke Alt om programmering. Faktisk er det forventes, at du behøver ikke at programmere noget, men snarere at løse problemer ved hjælp af kløgt og venner sammen med dig. Vi får følgeskab af nogle af vores venner på Facebook-- hvis du tilmelder dig her-- der i de sidste mange år, har faktisk været at skrive disse udfordringer med os. Og så vil de være dem i sidste ende kører Puzzle Day. Og så vil du blive udfordret med netop den slags ting og problemer, folk på Facebook kan lide at tænke over. Så det er i morgen. Tilmeld dig på cs50.harvard.edu/register. Nu et par ord om et par af personale i særdeleshed. Dette her er Ansel Duff, der er faktisk en af medforfattere til disse binære pærer, som vi så på onsdag, foruden CS50 egen Dan Bradley. Ansel Duff var også en tidligere freshman advisee af mine 3 år siden og han faktisk selv bygget denne talerstol. Han er gået på at gøre ingeniørvidenskab og meget mere. Nu hans billede her er faktisk Ansel 3 år siden på CS50 hackathon når han lånt en af ​​vores balloner, stak den til sin bærbare computer, og for de næste 12 nogle ulige timer, fokuseret på hans afsluttende projekt, tage pauser blot at åbne sække med slik på hackathon. Men han gik for nylig til tilbringe denne sidste sommer med os, siden CS50 for sine ansatte, og nu har de studerende dette semester har sin egen 3D-printer. Og i en nøddeskal en 3D-printere er en enhed, der ser helt sådan ud. Du fylder den med en plastik spole der er smeltet ned af enheden og du bygge ting bogstaveligt talt fra ingenting. Meget gerne en inkjet-printer, starter du spytte ud små prikker af plast denne form sammen danner hele objekter. Og så Ansel for eksempel tidligere denne sommer, har en iPhone 5 og han besluttede virkelig ønskede prop det op på sit skrivebord. Men han ønskede ikke at gå ud og købe noget fra Apple Store eller lignende, så han satte sig ned og begyndte at tegne noget. Han tog et par målinger , hvordan tyk og hvor bred hans iPhone var, han trak dette billede her, besluttede han, at han ønskede at have en 75 graders hældning da det stirrede på ham på hans skrivebord der. Han vendte dette, ved hjælp af software i en 3D CAD-model der så lidt noget som dette. Og derefter fortsatte han, i sidste ende, faktisk at skabe den. Så i virkeligheden, hvis nogen af ​​jer her, måske i træk, at jeg kan kaste til, har an-- der har vi folk med iPhone 5, og her har vi to mere. Nu, ikke at stå tilbage, CS50 egen Cheng Gong også indstille ud denne sommer til at bygge en hel del ting, og, i virkeligheden, af grunde, der stadig uklar, har været langsomt udskrivning af en hær af elefanter med artikulerende arme og badebukser. Et par af dem er faktisk her, hvis nogen ville nu like-- en elefant. Okay,. men hvad Cheng også gjorde for os er han meget venligt oprettet et kamera fordi denne elefant, tro det eller ej, tager nogle to og en halv time at udskrive. Selv iPhone standen tog en time og en halv til at udskrive. Og hvad Cheng gik fremad og gjorde blev oprettet en nice kamera foran af denne 3D-printer, filmet i en time og en halvt så Ansel design udskrives. Vi overlejret nogle sexet musik til den for for at give dig den til at se på, hvordan 3D-trykkeri. Og selvom dette er faktisk i plast, indse, at hvis dette er et område af interesse for dig fagligt, Der er folk, blandt dem Jennifer Lewis her på School of Engineering, der er faktisk arbejder på 3D-print af plastik objekter. Men selv i stigende grad, biologiske materialer til at løse fysiologiske problemer for mennesker. Men her er lidt noget fra CS50. [LOUD mekanisk støj] David J. MALAN: Det lyder ikke noget lignende i virkeligheden, men det er meget køligere at se det ved denne hastighed, og med den lyd. Nu på onsdag, hvordan vi først komme her? Vi begyndte at tale om computer videnskab og vi spurgte, hvad det var. Og det handler om en række ting, og der er så mange forskellige retninger hvor du kan gå efter et kursus som CS50. I virkeligheden, hvis du tog en af disse uofficielle guider CS udenfor, hæftet som Vi har givet, uanset om du er tænker på at tage bare CS50, eller måske laver en sekundær, eller måske endda koncentrere i CS, skal du bladre gennem det. Og du vil se et diagram mod den ende, viser dig de mange forskellige retninger i CS, at du kan gå ud i. Men i dag vil vi fokusere igen, om virkelig en af ​​de grundlæggende synspunkter, måske, hvor du har input til problemer, du har udgange fra problemer, og du har algoritmer med til at skabe disse udgange fra disse indgange. Og et eksempel, var på Selvfølgelig er denne telefon bog her. Og vi bruges som et eksempel for at gå gennem en algoritme, som var korrekt. Og så en anden var korrekt, men lidt hurtigere. Og så en anden, der var lidt mere dramatisk, men grundlæggende hurtigere. Right, denne telefon bog, vi hævdede havde omkring 1.000 sider. Og hvor mange gange har jeg har at rive telefonbogen i halve at finde en som Mike Smith, maksimalt, i 1000 siders bog? Så 10 give eller tage. Og så når jeg rev denne ting i halvdelen, eller blot mere modent, delt i to halvdele, er det kun 10 sider ud af 1.000. Og hvis du ekstrapolere, lidt urealistisk for en telefonbog, men hvis denne telefonbog havde nogle 4 milliarder sider i det, så helt uhåndterlige fysisk, hvor mange gange skal du opdele en 4 milliarder side telefonbog i halve? Så det er faktisk 32, give eller tage. Og kun så 32 gange, ud 4 milliarder sider, kan du finder en som Mike Smith. Og det er effektivitet. Det er en god algoritme, daresay. Men så flyttede vi fra det at forsøge at formalisere det. Og jeg foreslog denne pseudokode kode. Pseudokode kode er ikke noget formelt. Det er ikke noget, man lære udenad. Det er bare noget, du udtrykker forholdsvis intuitivt at bruge engelsk, eller ethvert sprog virkelig, at formidler dine ideer kortfattet. Men hvad er nøglen om pseudokode kode er, at du forsøge at forudse alle de mulige tilfælde, der kan ske. Og ja, i dette pseudokode kode, der var virkelig tre tilfælde hver gang jeg delte telefonbogen. Mike kunne være til venstre. Mike kan være til højre. Eller han kan være rigtige på den side jeg er på. Eller en fjerde hjørne sag, så at sige. En dårlig scenarie kunne være en which-- hvad sker der? Mike er bare ikke i telefonbogen på alle. Og når programmer crash-- når Mac og pc-software, som du fyre køre på dine computere til tider hænger eller afsluttes uventet, der generelt betyder, at nogle programmør, nogle menneske ligesom dig snart, bare skruet op og gjort nogle fejl. Måske ikke forventer, at måske er der er ingen Mike Smith i telefonbogen. Og hvis du ikke rent faktisk at skrive kode til at håndtere situationer som denne, generelt uforudsigelige ting kan ske. Din maskine kan fryse. Det kan genstarte. Programmet kan holde op. Og så alle disse dumheder, som du kan er stødt på i din faktiske livet bare bruger computere, vil i stigende grad være lige bortforklares af denne intuition og denne forståelse af, hvad der er faktisk foregår under motorhjelmen. Lad os nu prøve at tage et kig på et mere generelt problem. Snarere end at tage fremmøde på et sted som dette, hvilket ville være ganske langsomt at gøre en, to, tre, fire. Eller måske to, fire, seks, otte. Lad os fokusere i stedet på hvordan vi kan formalisere algoritmen af ​​processen ved som vi kunne tage fremmøde. Og langs vejen, lad os starte at anvende nogle nomenklatur at vi vil bruge i dag, når vi rent faktisk begynde at programmere i et sprog. Så jeg giver dig nu en fire minutters video at vi sætter sammen med vores venner fra TED organisationen. Hvorved vi leveret et script og de bragte deres animatorer til at bære, og faktisk skabt et 2D animation af hvad en algoritme er. Hvis vi kunne dæmpe lyset. [Musik spiller] Fortæller: Hvad er en algoritme? I datalogi, En algoritme er et sæt instruktioner løse nogle problem trin-for-trin. Typisk algoritmer er udført af computere, men vi mennesker har algoritmer så godt. For eksempel, hvordan ville du går om at tælle antallet af personer i et rum? Tja, hvis du er ligesom mig, ville du sikkert pege på hver person ad gangen og tælle op fra nul. En, to, tre, fire, og så videre. Tja, det er en algoritme. Faktisk, lad os prøve at udtrykke det en bit mere formelt i pseudokode kode. Engelsk-lignende syntaks, ligner et programmeringssprog. Lad n lig 0. For hver person i rummet, sat n lig med n plus 1. Hvordan man skal fortolke pseudokoden? Nå linie et erklærer, så at sige, en variabel kaldet n og initialiseres dens værdi til 0 Dette blot betyder, at det begyndelsen af ​​vores algoritme, de ting, som vi er optælling har en værdi på 0. Efter alt, før vi begynder at tælle Vi har ikke talt noget endnu. Opkald denne variabel n er bare en konvention. Jeg kunne have kaldt det mest noget. Nu linje to demarks starten på en bue, en sekvens af skridt, der vil gentage nogle antal gange. Så i vores eksempel, det skridt, vi er tager, er at tælle personer i værelset. Under linie to er i overensstemmelse tre, som beskriver præcis hvordan vi vil gå om at tælle. Indrykningen indebærer, at det er linje tre, vil gentage. Så med pseudokode kode er siger, er, at efter start ved 0 for hver person i Værelset vi vil øge n med 1 Nu er denne algoritme korrekt? Jamen så lad os bang på det en smule. Virker det, hvis der er to personer i rummet? Lad os se. På linje én initialisere vi n til 0. For hver af disse to personer, vi så tilvækst n med 1. Så i den første tur gennem løkke, opdaterer vi n fra 0 til 1. På anden tur gennem det samme løkke, opdaterer vi n fra 1 til 2. Og så ved denne algoritme er ende, n er 2, som faktisk svarer til det antal af personer i lokalet. Så langt, så godt. Hvordan omkring et hjørne tilfælde selv? Antag, at der er 0 mennesker i room-- udover mig, hvem der er gør tælling. På linje et, vi igen initialisere n til 0. Denne gang dog, linje tre udfører ikke på alle da der ikke er en person i rummet. Og så n forbliver 0, hvilket faktisk passer antallet af personer i rummet. Temmelig enkel, right? Men tælle mennesker en ad gangen er temmelig ineffektiv, også, ikke? Sikkert kan vi gøre bedre. Hvorfor ikke tælle to personer ad gangen, stedet for at tælle en, to, tre, fire, fem, seks, syv, otte, og så videre. Hvorfor ikke tælle to, fire, seks, otte, og så videre? Det lyder endnu hurtigere. Og det helt sikkert er. Lad os udtrykke denne optimering i pseudokode kode. Lad n lig 0. For hvert par af mennesker i rum, der er n lig med n plus 2. Temmelig simpel ændring, ikke sandt? Snarere end at tælle mennesker en ad gangen, vi i stedet tælle dem to ad gangen. Denne algoritme er således dobbelt så hurtigt som den sidste. Men er det korrekt? Lad os se. Virker det, hvis der er to personer i rummet? På linje et, initialisere vi n til 0. For at et par af mennesker, vi så tilvækst n med 2. Og således ved denne algoritme er ende n er 2, som faktisk svarer til det antal af personer i lokalet. Antag næste, at der er nul personer i værelset. På linje én initialisere vi n til 0. Som før, linie tre udfører ikke det hele da der ikke er nogen par af mennesker i rummet, og så n forbliver 0. Hvilket faktisk matcher Antallet af personer i lokalet. Men hvad hvis der er tre personer i rummet? Hvordan denne algoritme billetpris? Lad os se på linje et, vi initialisere n til 0. For et par af de mennesker, vi så tilvækst n med 2. Men hvad så? Der er ikke en anden fuld par af mennesker i lokalet, så linie to ikke længere gælder. Og således ved denne algoritme udgang, n er stadig 2, som ikke er korrekt. Faktisk denne algoritme siges at være fejlbehæftet, fordi det har en fejl. Lad os oprejsning med nogle ny pseudokode kode. Lad n lig 0. For hvert par af mennesker i rum, der er N lig med n plus 2. Hvis én person fortsat er uparrede, sæt N lig med n plus 1. For at løse dette problem, vi har indført i linje fire en tilstand, ellers kendt som en filial, at kun Udfører hvis der er én person, vi kunne ikke parres med en anden. Og så nu, hvad enten der er én, eller tre, eller et ulige antal personer i rummet, denne algoritme vil nu tælle dem. Kan vi gøre det endnu bedre? Tja, vi kunne regne i tre, eller fire, eller endda fives og tiere, men ud over dette, er det kommer til at få lidt svært at pege. Ved slutningen af ​​dagen, om udføres af computere eller mennesker, algoritmer er blot et sæt af instruktioner med til at løse problemer. Disse var kun tre. Hvilket problem ville du løse med en algoritme? David J. MALAN: Så bevidst, et meget simpelt program, en meget enkel algoritme, for at opnå noget meget enkel, tælle Antallet af personer i lokalet. Men lad os drille hinanden nogle af repræsentanten funktioner her, der faktisk vil være nyttigt, selv når gennemfører de mest kompleks af software. Så for eksempel i den første linje, vi har hvad vi kalder variablen, og fra algebra, er du generelt velkendt hjælp x og y og z tider, og så videre. Men i programmering, variabler er stadig i slutningen af ​​dagen, meget lig. Men det er måske lettere at tænke af en variabel som blot en beholder. Og i virkeligheden, det er nogle antal bits gennemført en eller anden måde på din harddisk eller i computerens hukommelse, men mere om det i fremtiden. Det er bare en beholder. Og hvis du siger noget ligesom lad n lig 0, godt, det er ligesom at kalde dette glas skål her n, blot et vilkårligt navn, og lægge noget i det i første omgang. Så værdien af ​​denne skål lige nu er nul. Og selvfølgelig, hvis du opfatter i en efterfølgende linie, faktisk forøge nogle linje kode, som i denne tredje linje her, med 1, det er ligesom at sige, hvad der er den aktuelle værdi af n, er det 0, plus 1, sætte noget som en bordtennisbold i her. Nu værdien af ​​denne variabel er simpelthen 1. Og du kan meget hurtigt ekstrapolere, men nu er det 2, nu er det 3, og så videre. Så det hele er en variabel er. Det er et stykke af lagerplads til faktisk gemme nogle data. For nu er det en bordtennisbold. Der er det et nummer. Men det kan være ord i en ordbog, som stavekontrollen Jeg hentydede til på onsdag for en af ​​sidste års problemet sæt. Nu anden vigtig idé, der på samme måde er temmelig intuitiv Jeg vil hævde, er, at en løkke. Og sløjfen i processen tælle alle er naturligvis, at gøre det samme ting igen og igen-- ene på en gang eller to ad gangen. Og du kan udtrykke dette på engelsk, eller pseudokode kode, i en række forskellige måder, men ved hjælp af denne forholdsord "for" er en meget almindelig måde at gøre det. For hver person i rummet, gøre dette. Igen og igen. Og det faktum, at det er indrykket, linje tre, betyder blot, at hvad du skulle gøre er det stof, der er indrykket under linjen to selv. Bare en menneskelig konvention, men et almindeligt som vi skal se i faktiske højere niveau programmeringssprog. Nu lidt mere interessant er når du kommer i et hjørne tilfælde. For eksempel, et hjørne tilfælde var, da der var tre personer, eller fem eller syv, eller et ulige antal personer i rummet, fordi at gøre det ved Twos bremser i sidste ende fordi din vil at gå glip af nogen, enten på starten eller slutningen afhængigt af, hvordan du gør det. Og ja, nu har jeg denne gren, eller tilstand, hvis en person, tilbage, derefter gå videre og håndtere, at man ensom person, der ikke fik parret med en anden. Så det er hvad vi ville kalde en tilstand, eller en filial. Nu pseudokode kode mere generelt kan være skrevet for at løse et antal problemer. Og hvad jeg troede, vi havde gøre her, er at tage et øjeblik at invitere skal vi sige CS50 s ejer Rob Bowden på scenen kan samles med to frivillige, som ikke har nogen idé om, hvad der venter. En hånd gik ned, så snart jeg sagde det. Hvad med dig på ende her, kom op. Og hvad med fra længere væk, hvad med måde i ryggen. Bageste række, kom op med dine hænder op. Okay, og hvad er dit navn? ANITA: Anita. David J. MALAN: Anita. Okay, rart at møde dig. Lad mig introducere dig til Rob Bowden. Dette er Anita. Og hvad er dit navn? Kiersten: Kiersten David J. MALAN: Kiersten. Kiersten, kom op og mødes Rob Bowden og Anita. Rart at møde dig. Kiersten: Rart at møde dig. David J. MALAN: Okay, Rob. ROB BOWDEN: Rart at møde dig. David J. MALAN: Anita. Kiersten: Hej Anita. David J. MALAN: Og Deres flere hundrede klassekammerater. Så lad mig nu gå videre og trække op bare et simpelt program her på Mac OS, der vil lade mig faktisk skrive nogle noter ned. Og hvis du fyre ønsker at hver tage et holdning på en af ​​disse skoler der, lad mig gå videre og starter en liste af pseudokoden kode, hvis du vil. Og hvad jeg ønsker at gøre her, i sidste ende er type for dig nogle instruktioner, at vores publikum medlemmer er faktisk kommer til at recitere for os. Lad mig gå videre og bare ændre dette til en nummereret liste at matche, hvad vi lavede deroppe. Og hvad jeg har tænkt mig at gøre med din hjælp, er at skrive et program i pseudokode, som disse fyre går at gennemføre en peanut smør og gelé sandwich. Så det er måske apropos til vise noget nogle af jer kunne have set på internettet for blot en kort irriterende øjeblik. [MUSIC BUCKEWHEAT BOYS "jordnøddesmør  Gelé TIME "] David J. MALAN: OK. Det er nok af det. Så her i mellemtiden, jeg har en par Google Glasses som vi vil sætte på CS50 egen Rob Bowden at se verden gennem hans øjne. Og vi vil gøre vores bedste i post produktion faktisk væve optagelser af, hvad Rob er at se nu, i denne aktuelle foredrag video med vores to frivillige siden af ​​ham. Så hvad jeg har tænkt mig at gøre er, vil jeg være den maskinskriver. Vi har mål her af faktisk skriver et program med til at gøre i sidste ende en jordnøddesmør og gelé sandwich, men disse tre kommer til at opføre sig som om de er computere. Og computere, i slutningen af ​​dagen, er faktisk temmelig dumme enheder. De er super hurtig, men de kan kun gør, bogstaveligt talt, hvad de får at vide. Du kan ikke bare sige lave en peanut smør og gelé sandwich. Du er nødt til at programmere dem til at gøre det. Du er nødt til at fortælle dem med præcision, hvad de skal gøre, mindre det går grueligt og, forhåbentlig underholdende skævt. Så med det sagt, er vi nødt ét opkald ud fra publikum for hvad bør intensivere man være, hvis målet her er at gøre en peanut smør og gelé sandwich. Ja? Publikum: [uhørligt] posen brød. David J. MALAN: Åbn posen med brød. Så hvis de tre deltagere ville gerne gå videre til at gøre det bogstaveligt. Åbn posen med brød. [Audience LAUGHING] David J. MALAN: Så lad os arbejde på det. Okay. Så trin to, Hvordan-- lad os tage dette yderligere. Ja, i front. Publikum: [uhørligt] brødet. David J. MALAN: Hvad er det? PUBLIKUM: Tag brødet. David J. MALAN: Tag brødet. Tilsvarende kortfattet. Tak. [Applaus] David J. MALAN: Er det alt? OK, så trin to går at fjerne brød. Okay, nogen ønsker at skrive os en længere sætning? En anden? Lidt mere [uhørligt]. Nej, intet nu. Ja? PUBLIKUM: Sted to skiver ved siden af ​​hinanden. David J. MALAN: Sted to skiver ved siden af ​​hinanden. [Audience LAUGHING] David J. MALAN: Sted to skiver ved siden af ​​hinanden. Trin fire. Ja? Publikum: Tag din hånd og sæt det let på toppen af ​​jordnøddesmør låget. [Audience LAUGHING] Publikum: [uhørligt] siden af ​​jordnøddesmør. David J. MALAN: Hvad? Sig det igen. Publikum: Skru låget og sætte det forsigtigt ud for jordnøddesmør. David J. MALAN: Sæt det forsigtigt siden af ​​jordnøddesmør. OK, fremskridt. Trin fem. Fremragende. Ja? Pick up kniv. David J. MALAN: Saml kniv. OK, trin seks. Ja? PUBLIKUM: Hold kniven i håndtaget. David J. MALAN: Hold kniv ved håndtaget. Hold kniven i håndtaget. Trin syv. Ja? Publikum: [uhørligt] kniv i peanut smør og så lidt ud [uhørligt]. David J. MALAN: Sæt kniv in-- jeg hørt "sætte kniv i jordnøddesmør og tage så lidt ud som muligt. " Af den måde, skal du fjerne papiret først. Okay, trin ni. Trin ni. Trin ni. Vi har faktisk ikke lavet en sandwich endnu. Ja? PUBLIKUM: Brug kniv i jordnøddesmør, anvende jordnøddesmør på nævnte brød. David J. MALAN: Brug kniv i jordnøddesmør, anvende jordnøddesmør på sagde brød. [Audience LAUGHING] David J. MALAN: Okay trin 10. Trin 10. Ja? Publikum: Smag peanut smør for at sikre kvaliteten. [Audience LAUGHING] David J. MALAN: Trin 11. Trin 11. Trin 11. Kom. Ja? Lige der. Publikum: afhente gelé forsigtigt. David J. MALAN: afhente gelé forsigtigt. OK, og derefter en anden hånd var op. Lige bag dig. Ja, i blåt. PUBLIKUM: Okay, fjerne låget fra [uhørligt], ja, Fjern låget fra gelé. [Audience LAUGHING] David J. MALAN: Fra gelé. Ha ha. [Audience LAUGHING] David J. MALAN Og? Publikum: Og næppe feje enhver [uhørligt]. [Audience LAUGHING] PUBLIKUM: Selvfølgelig, før [uhørligt] fjerne papiret fra gelé. David J. MALAN: Fjern papiret fra gelé. Trin 14. Vi er der næsten. Ja? Publikum: Invert gelé flaske før alt falder ud. David J. MALAN: Invert gelé flasken før gelé falder ud. Trin 15. Publikum: Sæt hætten. David J. MALAN: Sæt hætten. Trin 16. Ja? Publikum: [uhørligt] David J. MALAN: Sig det igen. PUBLIKUM: Tag hætten af ​​din gelé. David J. MALAN: Fra din gelé. Så virkelig-- Ups. Kom. Sæt hætten. Put cap-- Du sagde Fjern hætten fra gelé. Føle, at vi er i lidt af en løkke. Trin 17. Ja? Publikum: [uhørligt] David J. MALAN: Sig det igen. Publikum: [uhørligt] David J. MALAN: Gå tilbage step-- Publikum: [uhørligt] David J. MALAN: Fjern hætten fra jordnøddesmør. Ja? Publikum: Drop alle de gelé på brødet. David J. MALAN: Drop alle gelé på brødet. David J. MALAN: Vi er der næsten. Trin 19. Publikum: Fjern overskydende gelé. David J. MALAN: Haha, gelé. [Applaus] David J. MALAN: Hvorfor ikke we-- endnu et skridt til at tage dette hjem. Et skridt til og derefter vi vil tjene sandwich. Ja? Publikum: [uhørligt] David J. MALAN: Mens enhver sandwich remains-- lad os led denne-- spise. [Latter] David J. MALAN: Okay, tak dig til vores frivillige her. [Applaus} David J. MALAN: Vi har nogle nice afsked gaver til hver af jer. Din egen jordnøddesmør, gelé, og brød til at tage med hjem. Tak. Kiersten: Tak. David J. MALAN: [uhørligt] velkommen. [Applaus] David J. MALAN: Så det er af selvfølgelig en latterlig eksempel. Right? Men det betyder slags afsløre, hvordan vi mennesker bare tage klarhed for givet. Og det faktum, jeg har været taler med et andet menneske, han eller hun bare ved, hvad du mener. Computere vil ikke at vide, hvad du mener, selv når du bruger, som vi er ved at gøre i dag, programmering noget i Scratch, et træk og slip, brik stil sprog. Selv designet til unge børn, har du at være så eksplicit og så bogstavelig med hvad du ønsker dit program til at gøre. Nu i sidste ende er vi vil være programmering ikke i pseudokode kode, Engelsk syntaks, men kode eller mere korrekt, kildekode. Kildekoden er bare fancy måde til beskrivelse af kode, du rent faktisk skrive med et tastatur, der er ikke på engelsk per se. Det er i C eller Java eller C ++ eller noget som det, som vi vil snart se. Og i virkeligheden, bare for at skræmme en få af jer, ved første øjekast, dette er et program skrevet i et sprog kaldet C. Men at un-skræmme nogle få af jer, du vil helt forstå, hvad der foregår på kommer næste mandag, når det kommer til noget som dette. Ærligt, det er en ældre sprog. Det er temmelig mystisk, men det er repræsentativt af mange sprog disse dage, har masser af parenteser og krøllet seler og anførselstegn og semikoloner. Og en masse af dette syntaktisk ting, der ikke er overhovedet intellektuelt interessant. Faktisk er det en total distraktion fra de meget enkle idéer der stirrer os i ansigtet. Dette program, som du måske bare gætte, udskriver til en anden persons computer skærm ordene "Hej komma verden". Det er det. Så klart, at der er en masse ting, der er komme i vejen for nogle nærliggende der, men det vil meget hurtigt glide væk og være helt intuitivt. Faktisk hvad vi vil gøre dag destillere dette forholdsvis kompleks søger program, som igen kommer du at forstå hurtigt, men noget meget enklere. Lad os bare sige, hvad vi mener. Lad os tegne et billede af, hvad vi mener, ved hjælp af disse puslespilsbrikker her. Så dette er et programmeringssprog sprog er kendt som Scratch. Den blev udviklet af MIT Media Lab. Og hvad du vil se i problem sæt nul, som vil blive frigivet senere i aften, vi får du går til denne URL her scratch.mit.edu. Og de har en web baseret interface via hvilket vil du skrive dit første program. Eller dem af jer med forudgående erfaring, dine andet programmer, men i et miljø, der er sandsynligvis lidt uvant, og at vil presse dig til at skabe noget ved hjælp af denne meget visuelle miljø. Nu, hvad jeg har tænkt mig at gøre her er åbne selve programmet. Den eksisterer ikke kun som en webbrowser, men også som en downloades program så at du rent faktisk kan bruge det hvis du ikke har adgang til internettet. Og jeg har tænkt mig at gøre det i her, i Sanders, bare i tilfælde af Wi-Fi ikke samarbejde super godt. Og hvad jeg har tænkt mig at gøre, er punkt ud et par funktioner i dette program. Så for at være klar, jeg har bare dobbeltklikke klikkede på ikonet på mit skrivebord, eller ækvivalent gået til scratch.mit.edu, og det er trukket op dette vindue. Dette er et programmeringsmiljø. Det er et stykke software, nogle af vores venner på MIT skrev, at lad os os, og du skriver programmer i et sprog kaldet Scratch. Nu er dette sker for at være en kat, der er også opkaldt Scratch og dette er hans verden, han lever. Det er den fase, så at sige, at rektangel i øverste venstre hjørne. Og han behøver ikke at ligne en kat. Du kan få ham til at se gerne noget, og du kan have mange sådanne sprites, eller tegn, i et program. I mellemtiden, her på den langt ret, er en stor blank tavle. Og det er her, i et øjeblik, vi kommer til at starte programmering ved at trække og slippe disse grafisk puslespil stykker, der er ret her i midten. Og der er langt mere af dem, end vi vil bruge tid på her i klassen fordi du opdage, at de er alle temmelig intuitiv. Igen, det er konstrueret for børn, men vi bruge den til at drille hinanden nogle af dem grundlæggende ideer om variabler, loops, betingelser, og snart tingene lignende funktioner og begivenheder og tråde og andre fancy ting, vi vil komme til inden længe til rent faktisk at skabe noget fra bunden. Pun intended. Nu, hvad jeg har tænkt mig at gøre her, er klik på ikke bevægelse, men kontrol. Og dette er blot en kategorisering af her-- og jeg kan se en anden farve sæt af blokke. Men bemærke et par velkendte ord. "Hvis" og "else if" og "gentagelse". Og du kan sikkert gætte Det er minder om den filial, eller de betingelser, vi har set, og selv en dublering konstruktionen. Så vi har tilsvarende blokke her. Men det mest interessante en er denne ene her. Når denne grønne flag er klikket, dette, for dem med forudgående programmering erfaring, er ækvivalent en hovedfunktion. Men for dem ukendte, dette er brik der vil kickstarte hele vores program. Det betyder bogstaveligt, når jeg går i denne program, og klik på en grøn flag-- som du kan se her i øverste venstre hjørne af UI, så se det grønne flag siden af ​​den røde stopskilt? Når jeg klikker det, min Programmet vil køre. Nu, jeg har tænkt mig at gøre noget super enkel med Scratch. Jeg har tænkt mig at gå videre og gå til panelet udseende her, hvor jeg har en masse lilla puslespilsbrikker, og jeg har tænkt mig at gå videre og gøre noget super enkel lignende, siger. Og then-- varsel dette tekst i den hvide boks er editable-- jeg har tænkt mig at sige "Hej verden", ligesom vi gjorde i at tekstmæssige udgave for et øjeblik siden. Og nu hvis jeg går og klik på denne grønt flag, jeg har nu programmeret. Det er ikke en særlig interessant program, men jeg gjorde computeren gøre noget. Jeg startede et program, og det gjorde, hvad jeg fortalte det til at gøre. Nu kan jeg fortsætte med at trække og slippe flere og flere af disse puslespilsbrikker og de kommer til at låse, men Lad os smide nogle terminologi på her at vi vil se tilbagevendende hele kurset, og virkelig hele datalogi og programmering mere generelt. Denne "siger" blok, i lilla, lad os bare begynde at kalde en erklæring. Det er ligesom en kendsgerning. Gør dette. Så det er en kategori af instruktioner, som du kunne fodre en computer som en del af et program eller en algoritme. Og for at være klar, du har sandsynligvis taget for givet at du har programmer på din computer. Og de er slags algoritmer, men en program er virkelig en flok af algoritmer at nogle mennesker skrev. De pakkede den op og de solgte det så dig, eller de lagt ud på en hjemmeside for dig at downloade. Så et program er blot en hel masse nuller og ettaller at en eller anden måde, mennesket skabte. Og de mønstre af nuller og dem repræsenterer ting, i sidste ende, ligesom "sige hej verden" eller "play denne musik "eller" afspille denne video " eller "Send en e-mail." Men vi kommer tilbage i måde mere detaljeret, hvad et program, når du, dig selv, skriv dem. Her er en anden statement-- "Vent et sekund." Jeg ikke bruge det endnu, men hvis jeg vil mit program til at stoppe op et øjeblik at gøre noget, kan jeg fortælle det til at gøre det. Vent et sekund. Nu en anden kunne være "afspille lyd." Så dette er enestående til bunden, det har evnen til at spille lyde. Så en erklæring jeg måske brug er, her, "afspille lyd." I mellemtiden Boolsk udtryk, så dette er en amatør ord opkaldt efter bare en fyr ved navn Mr. Bool, og det handler om et spørgsmål. Sandt eller false-- er musen ned? Et Boolesk udtryk er bare nogle udtryk på engelsk der er enten sande eller falske. Enten til eller fra. Enten den ene eller nul. Du kan tænke på det i en række forskellige måder, men det er enten sand eller denne falske, i sidste ende. Så "mus ned spørgsmålstegn," det ville være en boolsk udtryk. Og du kan tænke på andre, måske. For eksempel "er venstre antal mindre end det rigtige nummer? " Det ville også være et boolsk udtryk. "Mindre end" er en Boolsk udtryk. Denne ene, også, "rørende musemarkøren." Jeg er ikke sikker på, hvorfor de kaldte det musemarkøren. Det betyder blot, er markøren, er det pil på skærmen, rører ved katten, for eksempel. Eller en anden aspekt af skærmen. Og det er et spørgsmål, igen, og , der betegner et boolsk udtryk. Noget, som du måske ønsker at bruge i en tilstand. Så vi vil komme til at på bare et øjeblik. Du kan "og" ting sammen. Så hvis du ønsker at kontrollere, om dette er tilfældet, og det er tilfældet, du kan bruge en "og" blok som denne. Og her er denne betingelse. Bemærk formen af ​​den lille åbning i toppen af ​​denne gule brik, det minder om formen at vi lige så et øjeblik siden. Hver af disse boolske udtryk har disse spidse kanter til venstre og højre. Og det er fordi MIT folk besluttet at ved visuelt transportelementer former, du kan slags hjælpe mennesker, studerende og børn både, at slags udfylde de tomme felter bogstaveligt. Nu puzzle-- at åbning er lidt lille, og som vi vil se i programmet, i Scratch, vil det vokse til at passe. Det vil bevare sin form, i sidste ende. Så en betingelse lader dig bestemme "Skal jeg gøre noget eller ikke?" En Boolesk udtryk er den aktuelle spørgsmål du bruger til at afgøre går jeg til Venstre eller skal jeg gå til højre når jeg støder på dette såkaldt gaffel i vejen? Du kan have to grene. Hvis noget er sandt, gøre dette, ellers gå den vej, eller du kan bare ikke gøre noget ved alle, da denne blok stiltiende. Ligeledes kan vi rede disse ting. Så hvis du ønsker at tredoble gaffel i vej, enten gøre dette eller dette eller hint, du kan bare indlejre disse ting sammen. Og det begynder at blive lidt grim, i sidste ende, for sikker, men logikken er stadig det samme. Du kan bogstaveligt talt læse denne top til bund og det siger hvad det means-- hvis dette er sandt, at gøre dette, ellers hvis ellers. En løkke bliver ikke enklere i Scratch. Forever du gøre følgende. Nu kan du måske ikke tror, ​​du kan gøre meget, fordi der ikke er meget plads mellem den øverste og bunden af ​​denne brik åbning. Men du vil se Scratch kommer til at vokse til at passe så mange puslespilsbrikker som du ønsker at proppe derinde. En anden løkke kan være udtrykt med gentagelser. Hvis du kender i forvejen, "Jeg ønsker at gøre noget 10 gange, " du kan bare fortælle Scratch at gøre noget 10 gange. Og i mellemtiden kan vi have variabler. Så her er en vilkårlig, det orange i dette tilfælde og dette er en hurtig rundvisning. Igen, vil du finde dette meget tilgængelige når du begynder at pege og klikke. Jeg har opkaldt min variabel n, men jeg kunne have kaldt det noget jeg vil, og jeg sætte den her, i denne vilkårlige eksempel til nul. Nu ser et program ligesom goddag verden er ikke så overbevisende, så lad os faktisk åbne noget at en tidligere elev lavet. Lad mig gå videre og åbne op, for eksempel denne her, som jeg ville elske at have en frivillig. Okay, hvordan om-- lad os gå videre. Ja, kom op. Hvad er dit navn? ABBY: Abby. David J. MALAN: Abby, kom op. Så har du nogensinde spillet dette spil før? ABBY: Nej David J. MALAN: Okay. David, rart at møde dig. Kom forbi. Og hvad er din programmering baggrund, hvis nogen. ABBY: Jeg har lært nogle C ++. David J. MALAN: Du har lært nogle C ++. Og hvad er dit spil spille baggrund? ABBY: Ikke en masse. David J. MALAN: OK, så tager vi det. Så her er, hvordan spillet kommer til at fungere. Jeg har tænkt mig at gå videre og klikke på den grønne flag, der er op her øverst til højre. Nu er din forgænger i klassen har givet dig nogle instruktioner her. Og på bare et øjeblik, det siger "plads til at begynde." Så gå videre og ramte mellemrumstasten. Computerspil: Pikachu. David J. MALAN: Og målet er at fange fødevarer, som afbildet der til venstre. Og til [uhørligt] [Spil musik spiller] David J. MALAN: Aww, godt, Tak for at spille. Vi har her en lille afsked gave til dig. Vi har CS50 stress bold, Hvis du gerne vil vælge. Okay, godt at møde dig. Tak fordi I kom og udfordrende. Så vi har mere stress bolde, så lad os gøre endnu et eksempel at motivere. En frivillig? Okay, hvad med lige her foran. Hvad er dit navn? PHILLIP: Phillip. David J. MALAN: Phillip. Kom op, Phillip. Så er Phillip vil være udfordret med et andet spil at en af ​​dine forgængere skrev som en del af problemet sæt nul, kaldet Ivy sværeste spil. Og vi vil se på blot et øjeblik, hvad der menes med dette. Phillip, rart at møde dig. Hvad er din baggrund? PHILLIP: gjort en masse kodning. Gjort lidt gaming, også. David J. MALAN: OK. Fik en masse spil, også. Og har du spillet dette spil før? PHILLIP: Nej David J. MALAN: Alle højre, så here we go. Jeg har tænkt mig at gå videre og klik på det grønne flag. [Game Music] [MUSIC MC Hammer, "U kan ikke røre dette"] PHILLIP: [uhørligt] David J. MALAN: [uhørligt] PHILLIP: [uhørligt] [LAUGHING] [MUSIC MC Hammer, "U kan ikke røre dette"] David J. MALAN: [uhørligt] Pløje igennem det. PHILLIP: [uhørligt] David J. MALAN: Værsgo. [MUSIC MC Hammer, "U kan ikke røre dette"] David J. MALAN: Okay. Tillykke med det. [Applaus] David J. MALAN: Vi vil indlæg, at online senere, så at du kan trække tiden ud med det så godt. Princeton kommer op næste, efter at. Så lad os nu faktisk fortsætte at starte fra bunden, så at sige, og faktisk opbygge indtil vi kan drille hinanden nogle af disse ideer og komme til noget endnu mere kompleks ved udgangen. Jeg har tænkt mig at gå over her, og jeg har tænkt mig at gå videre og oprette en ny fil. Så igen, vil problemet sæt gang dig igennem nogle af disse trin. Men, var alt, hvad jeg gik til menuen Filer, og jeg sagde "ny", så meget som Microsoft Word, eller et program som dette. Og lad os gå videre nu-- og vi implementeret "Hej verden" for et øjeblik siden, men lad os gøre noget lidt mere nuttet. Jeg har tænkt mig at gå op til arrangementer. Og jeg har tænkt mig at gøre ", når grønt flag klikket på. " Og så jeg har tænkt mig at bruge, skal vi sige, en filial. Så jeg har tænkt mig at bruge en "hvis" betingelse. Og bemærk, hvordan så snart jeg kommer tæt til det, den ønsker at snap sammen. Så jeg slip og den klikker sammen. Og nu kan jeg gøre noget interessant. Hvis jeg rulle igennem her, vil jeg at se en hel masse af blokke. Hvis jeg går til "data" - Lad mig zoome in-- der er noget om variabler. Hvis jeg går til "bevægelse", kan du tilsyneladende vende tingene rundt. Hvis jeg går til "operatører" - Åh, det er interessant, Jeg kan vælge et tilfældigt tal. Så lad mig gøre noget med kun vis sandsynlighed, bare fordi. Jeg har tænkt mig at gå videre og trække denne brik, dette er, at mindre end blok, så det er bare "Er dette tal mindre end den der?" Men jeg vil ikke have en hård kode et nummer fordi at være temmelig meningsløst. Så jeg har tænkt mig at trække dette stykke her, og bemærk, hvordan det klikker på, og lad mig nu gå videre og sige "hvis det nummer, der er valgt tilfældigt er mindre end seks, skal du gøre følgende. " Nu, hvorfor mindre end seks? Hvilken sandsynlighed er dette effektivt vil give mig, bare intuitivt? Omkring 50%, right? Hvis antallet at gætte, tilfældigt mellem 1 og 10 er mindre end seks, klart det er en, to, tre, fire eller fem. Og så det kommer til at give mig en 50% sandsynlighed for, hvad der sker? Jamen så lad os gøre noget lignende dette, "afspille lyd Meow". Og varsel, igen, brik vokser til at passe, så længe de figurer matche. Det er, hvad der er vigtigt. Lad mig gå over til Scratch her og klik på "play". Sker der intet. Er det en fejl? Nej, ikke nødvendigt. Det kunne bare være, at en større antal blev valgt. Så lad os gøre det igen. Ikke noget. [MEOW] David J. MALAN: Der er det. [MEOW] David J. MALAN: Igen. Nej [Mjavende] David J. MALAN: Så hvis du har nogensinde spillet et spil, selvfølgelig, hvor ting sker tilfældigt, ligesom de slemme fyre kommer eller ej kommer på skærmen, eller tingene falder eller ikke falder, det er bare fordi noget super simpelt som dette sker. Vælg et tilfældigt tal, og hvis det er mindre end en vis værdi, måske gøre dette eller måske gøre det. Vi kan inkorporere at i en tilstand. Lad os gøre noget anderledes. Lad mig smide det væk. Du kan slippe af med ting af bare trække det ud til venstre og give slip. Lad mig gå videre og gøre en evigt blok og meget hurtigt gøre noget irriterende. Lad mig gå videre og sige "afspille lyd Meow". Men jeg ønsker ikke dette for at være for irriterende, så lad mig få fat i denne blok, "Vent et sekund," og meddelelse der er ikke mere plads til det. Men hvis du går tæt nok, den ønsker at gå der. Så jeg lod gå, og det vil vokse til at fylde blokken. Så nu, dette er en løkke. [Mjavende] David J. MALAN: Jeg er bogstaveligt gør dette for evigt. Igen og igen. Det er bare ikke naturligt lydende. Lad mig gå videre og ændre denne til ikke et sekund til to sekunder og tryk på Enter. Og hvad er rart om Scratch er at man kunne programmere interaktivt. Foretag en ændring, måske trykke Enter eller Play igen, og det vil bare holde i gang. Nå, nu skal vi ikke gøre noget lidt mere nuttet? Snarere end at gøre alt fra bunden, lad mig gå videre og åbne op for et forskud lavet en, som jeg forbagte, kaldet "Pet Cat". Og vi vil sende alle disse filer online, og problemet sæt nul vil fortælle dig hvordan man kan få adgang til dem og åbne dem op. Og varsel, dette er temmelig simpelt. Men på forhånd, jeg synes at have grebet en "for evigt" blok, så jeg har en løkke. Og så har jeg fået en "hvis" betingelse. Jeg har fået en boolsk udtryk. Så i engelsk, bare et blik på dette, især hvis du aldrig har programmeret før, lige intuitivt hvad er dette vil gøre, dette program? [Audience CHATTER] David J. MALAN: Hvis du kæler katten, katten kommer til at mjave, right? Fordi "evigt fjerne markeringen" er musemarkøren rører ved katten. Så for at være klar, og jeg sagde ikke dette før, alle disse puslespil stykker og det script, Vi har kombineret dem ind, så at sige, et script er synonymt med program, virkelig, hører til denne kat. Og grunden er-- fordi varsel hvordan dette samme kat her er fremhævet, ned her kan du oprette en anden kat eller hund eller virkelig noget, du ønsker grafisk. Du kan importere noget fra Photoshop eller lignende, og integrere noget, hvis du ønsker at gøre det til et projekt. Og hvad du vil finde, i sidste ende, er det dig kan tilføje scripts, tilføje puslespil stykker, til de enkelte tegn. Så disse alle tilhører denne kat. Så nu, hvis jeg gå videre og spille dette program er intet sker. Men det kører. Programmet er i denne evigt loop, slags venter på hvad der skal ske? [Audience CHATTER] David J. MALAN: At kæle katten. Så hvis jeg flytter min mus mod him-- [Mjavende] David J. MALAN: Så nu Jeg kæler med katten. I mellemtiden kan vi have en dobbelt gren. Lad mig gå videre og åbne op ikke kæle katten. Vi vil bogføre dette online så godt. Dette er en lidt mere kompleks, men uden at sige du kan gætte måske hvad der kommer til at ske. [Mjavende] David J. MALAN: Cat er mjavende, grand gamle tid. Men dette program er selvfølgelig kaldet "Ikke Pet Cat" så tydeligt, jeg ønsker at kæle katten. [ROARING] David J. MALAN: Du må ikke kæle katten. Lad os nu tage et kig på et andet eksempel. Denne ene vil blive kaldt "Hej, Hej, Hej," grunde der vil være klar, fordi så snart jeg køre denne ting-- [SEAL BARKING] David J. MALAN: Meget let at skrive irriterende Scratch programmer. [SEAL BARKING] David J. MALAN: Nu skal vi ikke vil gå i detaljer med alle disse, men bemærker, at der er en par nye funktioner her. Der er en variabel, kaldet "dæmpet" og så er der en masse betingelser. Og for nu, lad mig bare drille dig ved at sige at hvis denne fyr bliver for irriterende, Jeg kan ramme mellemrumstasten, og han stopper. Fordi den rolle, som disse to scripts er som følger. En af dem er at gøre det gøen hvert par sekunder. Den anden er bare venter for mig at ramme mellemrumstasten. Og hvis jeg gør ramte mellemrumstasten, det kommer til at ændre tilstanden af ​​denne variabel værdi af denne variabel, det er tilsyneladende kaldet "dæmpet" Jeg kaldte ikke det noget kedeligt ligesom n Jeg kaldte det et engelsk ord, "slået". Fra 1 til 0 eller fra 0 til 1. Fra sand til falsk eller falsk til sand. Og så kan du faktisk se nu, at du kunne have to scripts, to programmer, der kører samtidigt, og begge af dem kan sidde i en løkke gør noget. Venter på mennesket at gøre noget som rammer mellemrumstasten. [SEAL BARKING] David J. MALAN: Og nu han er på vej igen. [SEAL BARKING] David J. MALAN: Så hvad ellers kan vi med disse eksempler? Nå, lad os gå videre og gøre en eksempel med at tælle får. Vi vil fortsætte denne lighed her af-- lad os åbne op for eksempel får. Og varsel, ligesom før, denne ene, heldigvis, er lidt mindre irriterende. Når jeg ramte spille her-- Åh nej, det er irriterende. Han kommer til Baa med en vis sandsynlighed. Lad os spille dette igen. [FÅR bleeting] David J. MALAN: Den eneste forskel er vi har ændret kostume, så at sige, og vi halvere og sige hvad det faktiske antal er. Jamen så lad os gå videre og tage dette et skridt videre. Og lad mig drille dig med en anden funktion her. Lad os gå videre og åbne op et program kaldet tråde. Så meget som du kan have en Sprite, der har flere scripts, du kan have to sprites, en fugl i en kat, der hver har deres eget script. Og hver af dem kan fungere samtidigt. Hvis du nogensinde har hørt ordet "multithreading" en computer er "flertrådede" betyder det kan gøre flere ting på én gang, og, ja, så kan ridse. Og nu mærke til fuglen er lidt dumt. Det er bare at gøre tingene tilfældigt, preller skærmen. Klart katten er blevet programmeret at slags har der søger kapaciteter på hjemmet på fuglen, fordi han er altid peger på ham. Indtil endelig, han fanger den faktiske fugl. Så jeg vil ikke dvæle ved detaljerne her, men du kan slags glimt samme form, nogle "Hvis" betingelser, nogle variabler, måske nogle sløjfer, er i sidste ende gøre det samme. Lad mig nu gå videre og åbne op noget helt andet, at drille nogle af jer, især de mere komfortable, hvad du rent faktisk kan gøre med dette. Jeg har tænkt mig at gå videre og åbne op Button her. Og det er en super enkel tilsyneladende program men se hvad der sker når jeg-- Se, hvad sker, når jeg åbner denne version af det, her i browseren, scratch.mit.edu. Og når jeg klikker på denne store røde knap mærke til hvad der sker. Så hvad sker der her? Der er faktisk en hel del mere kompliceret foregår under kølerhjelmen, selvom jeg har gennemført dette, eller ærligt, Dan Bradley har gennemført det så enkelt. Han har designet en brugerdefineret Scratch puslespil stykke, der er kendt som en ridse udvidelse, han kaldte det Toggle. Og hvad Toggle gør, er det sender en besked over internettet. Og det budskab selv ser lidt kryptisk. Men også dette, vil du forstår ved udtrykket udgang. Det budskab, han faktisk sender ser lidt noget som dette. Det er bare tekst. Cryptic. Du vil forstå det med den tid, vi få problemet sat syv. Det er bare at sende en tekstmeddelelse over internettet til en server. Og denne server er, i sidste ende, taler til denne pære, som har en af ​​disse smarte pærer i det, der i sig selv taler til Wi-Fi i netværket her, hvor en lokal enhed ned her-- og i sidste ende, det er faktisk dreje det og slukker lyset. Men vi kan gøre mere interessante ting stille. Læg mærke til hvad Dan også gjorde for os. Han gjorde flere sprites, som hver som har et script venter et klik. Og hvis jeg klikker rød, det går rødt. Hvis jeg får blå, det går blålig. Grøn, gul, orange. Og alt dette sker ved går langt ud på internettet, bakke ned her til pære, til og fra. Og hvis du kan tro det--, og dette er måske en af ​​de mest komplekse Scratch projekter nogen har implemented-- han gjorde det, i retfærdighed, på en dag. Og det var den udfordring, vi kastede ned til Dan, da vi så have binære pærer, vi har Scratch, hvordan kan vi kombinere dem? Og, ja, det er absolut noget nogen i dette rum kunne gøre ved semesters end-- Er han genimplementeret binære pærer anvender den samme grænseflade, der var på vores iPad på onsdag. Så nu, hvis jeg faktisk Klik på plus herovre, vi har en, to, tre. Jeg kan ramme 16 og slå denne ene på. 128, og så videre. Nu, hvis det alene har og blæst dit sind, du kunne gøre tingene langt mere tilgængelige, ikke indebærer nogen hardware sikkert. Bare ting på selve skærmen. Og netop hvad de fleste studerende ende med at gøre er en slags spil, nogle stykke kunstnerisk arbejde, eller en slags interaktive animation. Og jeg vil sige en af ​​vores favoritter har været denne ene. Og jeg tænkte, at hvis vi kunne dæmpe lyset, vil vi tage et blik på denne sidste Scratch-projekt i konklusion. Men hvad vil du skal huske på, som Jeg kan drille dig med en sidste detalje, sektionering vil begynde i næste uge. Kontortid vil begynde i næste uge. Problem sæt nul vil blive offentliggjort CS50.harvard.edu senere i dag. Og du vil blive mødt i problem sæt nul til CS50 egen Zamyla Chan, som guider meste af vores walkthroughs. Disse er indlejrede videoer i problemet sæt der vil holde din hånd igennem en masse af den indledende opsætning og gennem mange af de mulige afgørelser design. Så hvis du nogensinde har haft at følelser når picking up en hjemmeopgave og spørger, hvor skal jeg begynde? Hun vil have, at svaret for dig. Og nu, et endeligt program fra en af ​​dine forgængere i svaret på spørgsmålet "Hvad ræven sige?" [MUSIC YLVIS, "HVAD FOX sige?] YLVIS: (sang) Hund går islæt. Kat går miaver. Fugl går tweet og mus går knirke. Ko går moo. Frog går Croak. Og elefanten går dytte. Ænder siger kvaksalver og fisk gå blub. Og sælen går ow ow ow, men der er en lyd, som ingen kender, hvad betyder ræven sige? Og David J. MALAN: Det er det for CS50. Vi vil se dig på Puzzle dag og på mandag. [Applaus] [MUSIC YLVIS, "HVAD FOX sige?"] Fortæller: Og nu dyb tanker, ved Daven Farnham. I dag fik jeg ramt i ansigt med en telefonbog. Forvirrende, da jeg er på hjem ser online.