[Powered by Google Translate] [ROCK MUSIC] [MUSIC - "lykkelige sammen" skildpadder] DAVID Malan: I dag begynder vi vores udforskning af den grundlæggende elementer i datalogi og vores introduktion, nu til kunsten programmering, hvoraf det er blot ét eksempel. Men i samme ånd af problemløsning, ved, at CS50 traditionelle Puzzle Day er i morgen. Hvis du endnu ikke har RSVPed til denne begivenhed, kan du gå til cs50.net/rsvp. Du kan bringe hold af to eller tre eller fire. Du vil blive udfordret med problemer som den, du har set deroppe i begyndelsen. Alle nye problemer i år, hvis du spiste sidste år, og du vil have en chance derefter at vinde nogle fantastiske præmier. Blandt dem, en Wii og nogle gavekort og lignende alt mens du hænger ud med CS50 elever og klassekammerater og pizza og Facebook. Så mere om det i morgen, hvis du ønsker. Dette så er CS50, for dem af jer vil deltage i første gang. Og vid, at dette kursus er specielt fast besluttet på at få dig gennem dette kursus til sin endelige ende, på hvilket tidspunkt du har ikke blot en forståelse af disse grundlæggende elementer i datalogi, men du vil have dette meget praktisk færdighed sæt, som du derefter kan tage tilbage til din egen afdeling, uanset om det er ingeniørvidenskab, anvendt matematik, naturvidenskab, naturlige videnskab eller lignende. Faktisk, hvad er så spændende om datalogi disse dage er, at det er lige så gældende for alle mulige felter. Og selvom i dag, vil vi kun skrabe overfladen af ​​en meget traditionelle programmeringssprog kaldet C, vil vi i stedet se på noget, der hedder Scratch, noget med som denne cookie kærlighedshistorie blev gennemført ved en af ​​dine forgængere i de forløbne år, at fortælle historier, skabe spil, at skabe interaktiv kunst, og faktisk begynde at pakke vores sind omkring nogle af de fundamentale konstruktioner, ligge til grund for programmering, men i en sammenhæng, som du vil se, det er langt mindre skræmmende, det er langt mindre mystiske, end du vil se inden længe. Og indse, også for dem af jer bare slutter sig til os dette semester, de sætninger, som vi sluttede onsdag foredrag, det er ikke så vigtigt, hvor du ender i forhold til din klassekammerater i denne klasse, men hvor man, ved semesters afslutning i uge 11, ender i forhold til dig selv ret den dag i dag. Så uden videre, er det også værd at bemærke, at de mindre behagelige, dem midt imellem, er også ved udformningen af ​​dette kursus, ikke på noget ringere vis-a-vis de mere komfortabel kommer i denne klasse. Som du kan se i løbet af de kommende uger, vi har forskellige spor for uensartede ryg baggrund, sektioner for dem mindre behagelig, mere komfortabel, der et eller andet sted i mellem. Som du kan se i denne weekend og i næste uge, to versioner af De fleste problemer sæt i både standard-og hacker-udgave, så at I alle kan selv vælge ned ad stien, som du er mest bekvemt. Så i dag, dykke vi ind i denne programmering sprog kaldet Scratch. Det er en grafisk programmeringssprog, og alligevel har den samme træk ved nogle af de højere niveau sprog Vi vil udforske senere i semestret, blandt dem C og JavaScript og PHP. Men det vil give os mulighed for at undgå nogle af de distraktioner tidligt af syntaks, ting som semikolon, parenteser, og andre mystiske detaljer at der ved første øjekast, er bare ikke overhovedet intellektuelt interessant og har tendens til at komme i vejen fra nogle grundlæggende forståelse. Med hensyn til nu støttestrukturen forude, indså dette værktøj, CS50 Diskuter, som vil blive sammenkoblet på kursets website senere i dag, er det online diskussionsforum i som du vil være i stand til at stille spørgsmål til hinanden og personale, og det er også et værktøj, som vi vil se i næste uge, at vi vil bruge ganske integratedly i kontortid samt. Faktisk kontortid begynde på mandag, og helt ærligt, det første uge kontortid er temmelig lav nøgle. Jeg tror ikke du vil finde Scratch alt det utilgængelige. Det er temmelig selvforklarende, som vi vil se, og hvad så vi vil bruge det til i dag er at udvinde nogle af de grundlæggende idéer, der vil altså fortsat findes i hele resten af ​​semestret. Men fra mandag, 8:00 PM gennem 23:00 vil blive kontortid i Annenberg end hjernen pause. Sektionering to vil begynde denne aften, så engang i denne weekend, gå til cs50.net/section, og du vil blive stillet en række spørgsmål. Blandt dem, hvordan ville du beskrive din komfort niveau som i dag? Der er ingen hårde, fast regel om, hvem der er i hvilken spand. Det er bare den slags ting, som du sikkert vide, hvis du er blandt dem de mindre behagelig eller på anden måde. Og nu, walkthroughs. Problemet set specifikation for denne uge, både standard og hacker udgave ens, er online på cs50.net allerede nu. Og du vil se, at den første af disse udgaver, den standard udgave hver uge, er ledsaget af noget, vi call en kode gennemgang, en session ledet af en af kursets pædagogiske stipendiater til at guide dig igennem, giver tips om, og få dig ned et bestemt sti, når det kommer at starte disse problemområder sæt. Så med hver af disse problem indstiller, hvis du nogensinde ønsker for dig selv hvor skal jeg begynde, begynder du med disse walkthroughs. Og i virkeligheden, tillad mig at introducere Zamyla Chan, dette års undervisning fyr, som vil være førende hver eneste en af ​​disse walkthroughs. Zamyla? [Bifald] ZAMYLA CHAN: Oh, hej, alle. Mit navn er Zamyla. Jeg er en junior ingeniørstudiet i Winthrop House. Men jeg forsøge at passe på så mange datalogiske kurser som jeg kan, hvilket er grunden til jeg er virkelig spændt på at stå i spidsen for dette års walkthroughs. Walkthroughs, for mig, var en væsentlig del af min CS50 erfaringer. Under gennemgang, der for hvert p-set vil vi gå igennem det problem, der er sammen, kigge over de problemer, slags del dem op i overskuelige bidder. Jeg vil give dig tips, teknikker, for at få igennem og komme i gang. Jeg håber at se jer alle på walkthroughs. Hvis du ikke kan gøre det i person, så du gøre tune i online. DAVID Malan: Excellent. Tak, Zamyla. Således indse, at walkthroughs er faktisk, på en fredag eftermiddag, men det er bevidst ved design, så selv hvis du hellere vil ikke deltage i klassen på en fredag eftermiddagen vil de videoer være op desto mere hurtigt over weekenden. Så indse, at cs50.net vil være alle Zamyla s walkthroughs. Og at der er dags dato og klokkeslæt, 3:00 PM, Harberd Hall, 104. Og nogle af de pædagogiske stipendiater har også forberedt nogle bemærkninger for dig i absentia for at give dig en smule af perspektiv om, hvad deres erfaringer kommer ind og gå ud af CS50 var ligesom. Så hvis vi kunne dæmpe lyset for bare et øjeblik, jeg giver dig nogle af CS50 personale. JACKSON Steinkamp: Jeg tog CS50 sidste år som en freshman i falde, og det absolut blæste mit sind. Jeg havde aldrig taget nogen programmering klasser før, og aldrig kom ind med enhver computer science erfaring overhovedet. Og bare, jeg hørt rygter om klassen og besluttede at tage det. JULIA MITELMAN: Det var virkelig sjovt, virkelig engagerende. Jeg stadig, den dag i dag - Jeg har lige for nylig så jeg har den diskette, at David gav os på vores første dag i foredrag. Jeg havde hængt det på min væg. Det er nok lidt nørdet, men jeg hang i på min væg i klassen som en påmindelse om, hvor fedt det var. TRAVIS DOWNS: Det er så pinligt. JACKSON Steinkamp: Datalogi er noget, du bør forsøge, selvom du ikke er en for de traditionelle videnskaber. Det er sin egen erfaring, og CS50 vil sørge for at du er støttet godt igennem det med sin veritabel hær af TFS. ALI Nahm: Jeg tog det som en freshman, så jeg lavede en masse af nye venner. Jeg fik også introduceret til hele denne koncentration og Hele School of Engineering, og så jeg stærkt anbefale det og byder dig velkommen til vores CS50 familie. Yaniv YACOBY: CS50 bare lærer dig, hvordan du bruger værktøjerne der er bredt tilgængelige. Du skal bare have en bærbar computer, skal du bruge en webbrowser, og du nødt til at lære at skrive noget kode, og du kan virkelig bygge pæne ting. KAREN XIAO: Det er bare så fedt at være i stand til at gøre noget og har folk bruger det og har folk se det, og det er hvad jeg virkelig elsker ved det. TIM MCLAUGHLIN: - en følelse af fællesskab, tror jeg, i dette selvfølgelig mere end nogen anden kursus jeg har taget hidtil. Du er ikke bare at tage en anden - du ikke udfylde et andet krav. Du er ikke bare foredrag og gå til afsnittet. Men du laver tonsvis af ting, der er alt om programmering og alt om teknologi, men det gør ikke virkelig føle sig som en klasse det meste af tiden. TRAVIS DOWNS: Og på den første dag, udleveres de ud kage, og Jeg blev straks solgt. JACOB PRITT: Gratis slik og pizza. ZAMYLA CHAN: - uanset din interesse niveau, tror jeg at CS50, vil du have det sjovt, og du vil være intellektuelt stimuleret. MARK GROZEN-SMITH: Det er altid en fest i klassen, og det er en part hver nat arbejder på din p-sæt. JACKSON Steinkamp: Hver gang du er færdig med et problem sæt, du vil føles som du er færdig med et projekt. MELISSA NIU: Det var første år, og jeg var færdig med at handle. Jeg havde mine fire klasser klar, og jeg var i Annenberg. Og jeg støder ind i en ven, og han siger, hey, jeg shopping denne klasse kaldet CS50, og du bør komme med mig. Endte med at tage det, der falder, og efter denne klasse, jeg tænkte måske jeg har tænkt mig at ringe i CS. Men her er jeg, tre år senere, stadig studerer computer videnskab og faktisk gør det som en stor, og jeg elskede hvert øjeblik af det. ROB BOWDEN: Jeg har ingen idé. ALI Nahm: Lad os se. MELISSA NIU: craziness. SPEAKER 1: Jeg føler, at jeg ville være meget kliché. Jeg ville bare sige, ligesom, awesome. Yaniv YACOBY: Tilgængelighed. JACOB PRITT: Gratis slik og pizza. TRAVIS DOWNS: Kan ikke skrue ned en klasse, der uddeler kage. TIM MCLAUGHLIN: Energetic. Vipul Shekhawat: Essential. ROB BOWDEN: Lad mig tænke på et svar. Jeg tror, ​​jeg har fundet noget. Åh, gud. Ja, mit navn er Rob Bowden, og dette er CS50. [Bifald] DAVID Malan: Okay, så lad os begynde at male et billede af, i hvilken retning vi kan gå, og lad os introducere dette begreb her kaldes pseudokode. Så pseudokode er ikke en programmering sproget i sig selv. Det er ikke noget teknisk i sig selv, men det er bare en slags generel måde at udtrykke dig selv temmelig præcist, temmelig algoritmisk, temmelig proceduremæssigt, men uden at skulle bekymre sig om, hvad sprog, du udtrykker dig i. Det er nogle model af engelsk og programmeringssprog med som du tilfældigvis være bekendt, så vi kan begynde skriver den slags ting, som vi går. Og i virkeligheden, Joseph, kunne jeg låne dig op på scenen for at være skriver her? Jeg har gået fremad her i forvejen, og glemt at sætte på nogle sokker i dag, og det vil være blandt vores mere latterlige eksempler. Nu har jeg brug for dig herovre. Jeg vil gøre det sokker del. Så her har vi en lille notesblok. Det er bogstavelig talt lige TextEdit i en Mac. Vi faktisk ikke vil skrive et runnable program, men vi bare vil begynde at skitsere pseudokode baseret på nogle af de råd, du giver til mig her. Så her er min bunke af sokker derhjemme. Jeg har ingen sokker på, når jeg vågner om morgenen, og vi har nu nødt til at skrive et program, en algoritme slags, som at få disse sokker på mine fødder. Og hen ad vejen, lad os se om vi snuble over den eller støde, nogle af de idéer, som du er nødt til at starte tænker meget mere alvorligt, når programmering lest dine programmer ikke opfører sig helt som planlagt. Så jeg sidder hernede. Jeg har fået min bunke af sokker. Hvad er den første ting en fornuftig menneske ville gøre, når målet er at sætte på et par sokker? Nogen give mig et skridt, og kun et trin. Ja? PUBLIKUM: Bøj ned. DAVID Malan: Bøj ned, Okay. Trin to. Trin to. PUBLIKUM: Saml din sok. DAVID Malan: Saml din sok. Okay, så lille tvetydighed her, og dette er en af ​​de første anstødssten at vi skulle bevidst støder her. Det er lidt tvetydig, så afhente din sok. Fint, jeg tager denne ene, men en computer, indser på bare et bit, kommer ikke til at have den slags menneskeligt instinkt til bare vælge den nærmeste. Vi bliver nødt til at starte inden længe, ​​udtrykker selv mere præcist. Okay, så trin to er afhente din sok. Vi tager det. Trin tre. I ryggen. PUBLIKUM: Find et matchende par. DAVID Malan: Find matchende par. Okay, så det er godt. Jeg var nødt til at vælge denne sok. Så målet er at finde en matchende sok, nu, men hvad betyder det? En rimelig menneske, meget gerne på onsdag, når jeg bare forstod at finde Mike Smith i en telefonbog, bare lidt gik med deres instinkt. Men her er det naturligvis denne sok her, men en computers ikke vil være så instinktiv. En computer vil have en samling af bits, som vi diskuteres på onsdag, og dem er organiseret eller anden måde i hukommelsen. Men pointen er, at en computer har kun mulighed at se på tingene én ad gangen, og i virkeligheden, selv vi mennesker - selvom det føles som om jeg kiggede ned, og en split sekund senere ved jeg, hvor sokken er, min hjerne og mine øjne formentlig havde en hurtig skimme af disse sokker, og derefter låst på det her omhandlede. Så hvis vi være så meget mere bevidst nu som en computer, hvordan finder jeg denne matchende par? Nuvel, vi har for at skifte. Vi er nødt til måske sløjfe over dette rod af sokker på gulv, hvorved jeg sige noget lignende FOR HVER sok, samle den op, og hvis den samme form og størrelse som den anden, SÅ prik, prik, prik, vil vi fortsætte historien. Så for hver sok, så jeg afhente denne ene. Jeg tjekke er dette lig med denne ene. Det er ikke, så puttede jeg disse side. Så jeg gentage igen. Er dette en lige? Nej, det er ikke, så jeg lagde den til side. Er dette en? Nej. Denne ene? Nej, og så videre. Og så endelig, forhåbentlig, vil jeg støder på denne sok her. Så hvis det er den samme form, størrelse, tag den. Og nu, hvad der ville være vores næste skridt her? Ja? PUBLIKUM: Identificer højre fra venstre. DAVID Malan: Okay, identificere højre og venstre, så heldigvis, den slags værker. En lille symmetrisk, eller jeg har lige slidt dem på den måde. Okay, så jeg har fundet det rette. Og nu, før vi går videre, lad mig påpege, hvad Josephs gjort her som en slags bevandret programmør. Så igen, der er ingen måde at gøre dette, men ud over blot nummerering af linjer, har Joseph allerede begyndt at gøre dette slags fordybning. Faktisk er det en meget almindelig konvention i programmeringen, hvorved når du gør noget iterativ, looping stil, som vi indebærer med det engelske udtryk "FOR HVER sok, "konventionen i pseudokode, og som vi vil se, normale programmeringssprog, er at bare led. Hit the space bar et par gange, ramte tabulatortasten eller lignende, så at indlejret under "FOR HVER sok" er bid af ting, du behøver at gøre som følge af denne løkke. Så det er alt der er at formidle semantisk. Nu i mellemtiden, "Hvis det er den samme form og størrelse," den kendsgerning, at "Take it" er indrykket yderligere betyder blot, det er det eneste, du skal gøre, hvis denne betingelse, hvis den gren, der skillevej, er faktisk sandt. Så nu her, vi er på trin fire, identificere højre og venstre. Jeg har identificeret ret. Giv mig trin fem. Og teknisk set kunne vi virkelig kalde den for hver ting - bør du nok nummerere alle linjer, hvis vi vil gøre dette. JOSEPH: [uhørligt] DAVID Malan: [uhørligt]? Okay, fint, okay, vil vi gøre det på din måde. Okay, så trin fem, hvordan gør vi det rigtige sok? Hvordan kommer vi videre næste, her? Ja? PUBLIKUM: Løft højre ben. DAVID Malan: Løft højre ben, Okay. Trin seks? Hurtigt. Yeah. AUDIENCE: Find en åben ende af sokken. DAVID Malan: God, find den åbne ende af sokken. Så godt. Så her, helt ærligt, ville en meget almindelig instinkt bare være sat på højre sok, men det er også er temmelig tvetydig. Medmindre computer eller menneske ved præcis, hvad det betyder, det kommer ikke til at være at udføre den, så her, jeg har fandt åbningen af ​​bestanden. Trin syv? PUBLIKUM: Tryk tæerne. DAVID Malan: Touch tæer. Okay, så nu går vi - Okay, jeg kommer til at tage nogle friheder her. Tak. Trin otte? Sæt sok. Okay, så nu jeg tror vi er tæt nok til at sortere i at tage denne ene hjemme. Okay, så det går op. Jeg tager nogle friheder med, hvad det betyder, faktisk. Sæt sok på. Okay, nu trin ni? PUBLIKUM: Sæt foden ned. DAVID Malan: Tak. Trin ni, satte foden ned, og nu kan vi gentage. Så formentlig kan vi nu gå ind i trin 10 og sige identificere venstre sok, men det er formentlig allerede har gjort. Og så så kan jeg sortere i gentage disse trin. Men denne form for rejser spørgsmålet. Før sidste gang vi ønskede at gentage noget, vi gjorde det iterativt, igen og igen, en FOR Hver sløjfe så at sige. Ville det være fornuftigt at bruge en løkke til at håndtere både venstre og højre sok? Fordi det føles som disse operationer er temmelig meget identiske bortset fra, at man starter her og en starter her? Har vi loop, eller skal vi bare holde skriftligt skridt 10 og 11 og 12? PUBLIKUM: Loop. DAVID Malan: Okay, så loop. Jeg faktisk kunne have sagt bare holde ud. Så hvorfor er dette tilfældet? Nå, det er faktisk den første af vores ikke-indlysende design beslutninger, og i virkeligheden, et af de målinger, som vil vi begynde at vurdere, for os selv og for dig, Kvaliteten af ​​et program er bare hvor godt designet det er. Har du gjort den minimale mængde af arbejde, nødvendig for at få arbejdet gjort mest hurtigt, enten i form af din tid eller i forhold til computerens spilletid? Hvor mange operationer gør det tager at gennemføre? Så velsagtens, dette er en mulighed for en løkke, fordi så snart jeg begynder at kopiere og indsætte, som Joseph effektivt ville begynde at gøre i et øjeblik, du slags spilder din tid, og du bliver dobbelt udtryksfuld. Men på samme tid er disse virkelig bare to særlige sager, venstre og højre. Og mens før, kunne jeg have 10 eller 20 eller flere strømper i en bunke, er det absolut giver mening ikke at have 50 linjer kode siger tjek denne sok, så den næste, derefter den næste. Her, det er en lidt mindre indlysende, og jeg ville foreslået at vi kunne gå begge veje. Vi kunne enten have at sløjfe, selv om det kun sløjfer to gange, eller vi kunne blot kopiere og indsætte bare en lille smule her for at få arbejdet gjort. Men dette program er buggy, så at sige. Det kan have nogle fejl, fejl eller hjørne sager, så at taler, at vi virkelig ikke regnet med. Intet gik galt denne gang, men hvad der kunne være gået galt under udførelse af dette program? PUBLIKUM: Du har ikke nogen sokker. DAVID Malan: Så der kan ikke være nogen sokker der overhovedet. Så lad os antage, at hjørne sag. Så hvis vi kunne rulle tilbage op til trin et, så trin et var bøje sig ned, så der kontrollerer ud. Trin to, afhente din sok, men derefter finde matchende sokker, identificere højre. Vi slags gjorde en hel masse forudsætninger, og det er, helt ærligt, hvorfor programmet nogle gange ned. Hvis du, programmøren har gjort visse antagelser, som mon der kommer til at være sokker eller mon der sker at være hukommelse tilbage i computeren, så mon der sker at være diskplads tilbage på harddisken - Tja, hvis du laver disse antagelser, og det er ikke, i virkeligheden, virkeligheden, der kender til tider hvad computerens tænkt sig at gøre? Og nogle gange, når du får den roterende badebold eller frosne Windows eller lignende, det er netop fordi nogle programmør ikke foregribe de såkaldte hjørne sager. Hvad andet kunne være gået galt i dette program? Ja? PUBLIKUM: Du har ikke en højre ben og venstre ben. DAVID Malan: Okay, måske ikke har både en højre ben og en venstre ben, og så dette program måske ikke være universelt anvendelse. Andre? PUBLIKUM: Du har muligvis samlet op til sjældne sok. DAVID Malan: Jeg kunne have hentet sjældne sok, så en ikke-matchende sok, der bare ikke har nogen søskende, fordi jeg har mistede det, er det revet, det er i vask stadig, eller lignende. Så det også, har ikke rigtig blevet håndteret. Ja? PUBLIKUM: Du har måske allerede sokker på. DAVID Malan: Jeg måske allerede har sokker på. Jeg havde faktisk ikke kontrollere. HVIS du ikke har sokker på, så skride til at udføre line et og to. Og det kan ske. Du falder i søvn med dine sokker på og lignende, så at også en meget rimelig hjørne sag. Og måske en anden? PUBLIKUM: Sokken er vrangen ud. DAVID Malan: Så sokken er ud og ind, så vi gjorde ingen fejl kontrol, kort sagt. Vi ikke kontrollere, om verdens tilstand er, som vi forventer. Vi kontrollere ikke, hvis vi faktisk fundet, hvad vi leder efter. Og selvom dette er en slags latterlig eksempel involverer sokker, i slutningen af ​​dag det er præcis den slags tankegang skal du have, når man skriver programmer, selv i Scratch såvel som i C, i JavaScript, i PHP, for ellers vil dine programmer udviser den svarende til at spinde badebold eller bare give unøjagtige resultater. Så mange tak her til vores skriver Joseph. [Bifald] DAVID Malan: Okay, så hvad er i Faktisk et computerprogram? Nå, lad os tage et hurtigt blik på en repræsentant en her. Så dette er et program skrevet i et sprog kaldet C. C er temmelig gamle disse dage, men mange nyere sprog er bygget oven på det. Faktisk PHP, en af ​​de web-centreret sprog Vi vil brug mod sigt udgang, selv har det, der hedder en tolk, et program, der er skrevet i C, men mere om det i mange uger fra nu. Men dette program, og det er hvad det betyder at skrive en programmet, om end meget enkelt. Vi har nogle temmelig kryptisk syntaks her, men du kan sikkert gætte, selvom du aldrig har programmeret før, hvad dette program gør. Faktisk ved jeg ikke, hvad printf er, men udskrive sikkert fremmaner ideen om at udskrive noget ud. Og så ja, er dette program i sidste ende kommer til at udskrive ordene "Hej, verden." Nu, om du har en Mac eller en PC eller en Linux-computer, odds er, i hvert fald hvis du har hentet nogle frit tilgængelig software, du kunne have været at skrive programmer på din egen bærbare computer i temmelig lang tid nu. På Mac OS, for eksempel er der dette program kaldet Terminal der kommer med en Mac, det er normalt i dit Mappen Hjælpeprogrammer, og det generelt åbner en sort og hvid eller en hvid og sort vindue, hvor du har en prompt, hvor du kan skrive kommandoer. Så dette er faktisk minder om hvad computere plejede at være før grafiske brugergrænseflade grænseflader, GUI, kom. Nu, i Windows, har du en lignende mekanisme i form af kommandoprompten. Men hvad jeg har tænkt mig at gøre her, er at åbne op, lad os sige, TextEdit igen, så det samme program vi bruger til pseudokode for et øjeblik siden, og jeg har tænkt mig at gå videre og skrive min første program. Medtag stdio.h, hvad det så end betyder, int main tomrum, hvad det så end betyder, og derefter i midten her, printf ("Hello, World."). Og så tæt citat, lukke paren, semikolon. Nu vil jeg gå videre og blot trykke på Kommando-S. Jeg har tænkt mig at gå videre og gemme denne som hello.c, så konventionen i verden af ​​C programmering er navngive filen dot c. Jeg har tænkt mig at bare sætte i John Harvard hjemmemappe, her, klik på Gem, og nu jeg har tænkt mig at gå over til denne terminalvindue, som igen er denne sorte og hvide prompt hvor jeg kan udføre kommandoer. Jeg kan køre programmer ved at skrive deres navn, ikke ved dobbelt-klikke ikoner i gængs forstand. Men de ting er om C er, at et sprog som C først kommer i denne form, noget kaldet kildekode. Noget, der ser lidt ligesom engelsk, men er absolut mindre som engelsk end Josephs pseudokode en øjeblik siden. Det er lidt mere mystisk. Det synes at følge nogle mønstre eller regler. Det faktum, at jeg har krøllede parenteser, semikoloner, citater, vinkel seler, føles som en computer kom op med denne slags sprog. Men hvis jeg går nu, at denne terminal vindue, kan jeg køre en kommando, der kommer til at konvertere denne kildekode er noget, der hedder objekt kode. Det kommer til at omdanne engelsk-lignende syntaks til nuller og dem, de samme slags nuller og ettaller vi talte om onsdag. Nu vil jeg køre en kommando kaldet Dunk. Mere om dette i de kommende uger, men det er et program med som jeg kan konvertere hello.c til en hel bunke af nuller og ettaller. Nu har jeg kørt denne kommando. Jeg har kørt Dunk, og så sagde jeg køre dig selv på denne fil kaldet hello.c, som jeg oprettede for et øjeblik siden, og intet synes at ske. Men ja, hvis jeg stak omkring mit hjem bibliotek, ville jeg se at dette dumt navngivet program a.out eksisterer nu. Dette er blot den standard navn for et program, når du skriver i C. Vi kan tilsidesætte dette i sidste ende, men a.out er det navnet på det program jeg lige konverteres til nuller og ettaller. Og nu, hvor det er nuller og ettaller, min Mac, i dette tilfælde, eller din Windows-pc, kan forstå disse bit, de nuller og ettaller. Og så når jeg trykker på Enter, jeg ser "Hello, world!" Men det er en smule buggy. Jeg har ikke helt sige "hej, verden: luft: -! Jharvard." Luft er navnet på min computer. Jharvard er navnet på den konto, så hvad gjorde jeg tydeligt udelade fra programmet? En slags linjeskift. Jeg ramte ikke svarer til Enter eller vognretur, og det er igen vidnesbyrd om, at computere kan kun gøre, hvad du fortæller dem at gøre. Og det faktum, at jeg ikke fortælle computeren at flytte markøren til næste linje - godt, er det bestemt ikke vil bare gøre det formasteligt for mig. Så hvis jeg går tilbage til mit program, og jeg siger \ n - Så \ n, som vi snart vil se, er vejen for repræsenterer underlige ting som New Line figurer, ting der ellers ville være resultatet af rammer Enter-tasten. Men for nu, ved blot at trykke på Enter-tasten vil bare gøre vores kode ser mærkeligt, så verden besluttede, du kender hvad, at holde tingene smukkere, for at holde det på én linje, lad os bare sige \ n repræsenterer en ny linje. Lad mig gem min fil, skal du gå tilbage til terminalvinduet, og omvalg a.out, Enter. Stadig buggy, men hvorfor? PUBLIKUM: [uhørligt] DAVID Malan: Ja, så jeg er nødt til at kompilere den. Så for at udarbejde et program betyder blot konvertere det fra kilden kode til objekt kode, kildekode til nuller og ettaller. Nu er den omstændighed, at jeg ramte Gem i denne TextEdit har ingen bærer på disse nuller og ettaller, fordi jeg først nødt til at Sig Dunk hey, har jeg ændret disse linjer kode, det kildekode. Du er nødt til at regenerere a.out. Intet ser ud til at være sket, men i en computer, på en kommandolinje, så at sige, når der ikke sker noget, Det betyder som regel alt er godt. Når noget sker, betyder det du rodet op, generelt. Så lad os nu gå til a.out, og faktisk nu, jeg har "hej, verden. " Og nu, hvad disse nuller og ettaller? Hvor, i virkeligheden er de? Tja, jeg kan ikke rigtig bare lidt poke omkring meget effektivt. Lad mig åbne TextEdit. Her er a.out. Lad mig gå videre og åbne denne, og det er tilsyneladende, hvad min program ser ud. Så jeg har åbnet, ikke hello.c, men a.out. Men det er faktisk ikke hvad mit program virkelig er. Dette er tydeligvis en slags alfabetiske tegn. Jeg ser ingen nuller og ettaller, men dette er fordi a.out er et program. Nuller og ettaller - men TextEdit, som navnet antyder, er det ligesom Notepad på Windows, er blot en tekst editor, så det er forvirrende alle disse nuller og ettaller som selvom de var, hvad? ASCII-tegn. Så huske på onsdag, vi bare kom op med dette vilkårlig kortlægning af tal, eller bits, at bogstaverne i alfabet og tegnsætningssymboler og lignende. Så TextEdit, at det er en tekst editor fejlfortolke disse mønstre af nuller og ettaller, som formodes at være udskrivning ord, som "Hello, World." Det er at vise dem som ASCII, og det er derfor, det ser lidt rodet. Nu er der nogle hints af korrekthed i her. Varsel, hvis jeg fremhæve, at der er en antydning af faktisk "hallo, verden ", så et eller andet sted i dette program er den sætning jeg skrev. Men lad os gå videre og ser nu med et andet program. Dette er ikke en vi vil bruge det tit, men det kommer også med en Mac og vil være inde i CS50 apparatet. Lad mig gå videre og åbne med et program kaldet XXD. Tilbage i dag, blev de fleste programmer navngivet temmelig kryptisk, og så tendensen fortsætter. Men-b betyder spytte dette program ud som binær. Må ikke køre det. Vise det til mig som nuller og ettaller, og det er C programmere vi bare skrev. Nu, jeg, som et menneske her, jeg ærligt har ingen idé om, hvad disse forskellige mønstre af nuller og ettaller repræsenterer. Tilbage i dag, jeg med mine hulkort eller lignende, ville faktisk nødt til at kigge op, hvad disse forskellige mønstre af 01111000, faktisk repræsenterer. Eller endnu værre, ville jeg nødt til at gøre stansning eller oprettelsen af disse mønstre af nuller og ettaller. Men for nu, tage på tro at en CPU, Intel indeni, så at tale, indersiden af ​​alle vores computere i disse dage, kender hvordan man skal fortolke disse nuller og ettaller. Og nogle nuller og ettaller betyde print. Nogle nuller og ettaller betyde afspille en lyd. Nogle nuller og ettaller betyde tage brugerinput fra et tastatur. Der er alle mulige forskellige mønstre, men vi heldigvis, som mennesker generelt kun behøver at bekymre sig om programmering på denne relativt højere niveau. Og i andre CS klasser kan du dykke ned dybere og se på ting som disse nuller og ettaller, endnu eller andre ting stadig. Så lad os nu konvertere dette. Lad os bevæge sig meget hurtigt væk fra C og flytte til noget lidt mere beroligende, lidt mere spændende, i det vi kan komme tilbage vores animationer og lyde og lignende, klart er undsluppet os i denne temmelig primitive interface. Så det samme program i C kan repræsenteres nu i denne programmeringssprog kaldet Scratch som følger. Dette svarer til dette hej verden program skrevet i denne brik stil sprog kaldet Scratch. Så lad mig gå videre og åbne netop denne program. Det atter kaldet Scratch. Det er frit tilgængelige, og det er det samme vi i gang i dag på. Så dette her er Scratch, og det er opdelt i et par forskellige stykker. På den øverste højre har vi den såkaldte fase, og ja, det er, hvor de cookies udføres kun lidt siden. Og på dette tidspunkt er ting kaldes sprites, tegn eller genstande eller enheder. Det er faktisk ligegyldigt, hvordan du tænker på dem, men de er programmerbare, bevægelige ting, og i dette tilfælde er dette program, at vores studerende skrev har et par honningkager cookies, et par af cirkulære cookies, en hel flok hjerter, en hel flok af briller. På grund af dette, er han eller hun i stand til at programmere hver af disse enkelte tegn separat. Nu, hvad betyder det at programmere disse tegn? Nå, lad mig gå videre og klik på denne venstre hånd cookie og rulle hen til det øverste venstre her. I øverste venstre af min skærm nu er såkaldte scripts området. Dette er slags en blank tavle, i første omgang, hvorpå jeg kan træk og slip puslespilsbrikker, der helt ærligt, præcis, hvad de siger. På selve toppen af ​​denne stak af puslespilsbrikker er ordet Når Grønt Flag Klikkede, og hvis du ikke har opdaget før, den måde, jeg startede denne cookie sang blev klikker, bogstaveligt talt, et grønt flag. Så det puslespilsbrik øverst til venstre der betyder, når den menneskelige klik på den grønne flag, fortsatte med at gøre følgende ting. Nu vidste hvad de cookie skride til at udføre? Jeg ved ikke rigtig, hvordan man skal fortolke dette endnu, men det cookie åbenbart sat sit rille til nul, så det ventede tre sekunder og derefter skiftede den gruppe til en, så det ventede et sekund, så det ændrede rille tilbage til én. Og så det faktisk ligner lidt af en bug, bør ikke nødt til at ændre sin rille igen og igen, medmindre det er bliver ændret andetsteds, men denne serie af trin er hvad der er dikterer opførsel af denne særlige cookie. Så lad os faktisk rulle tilbage og ikke se på noget helt så kompliceret endnu. Lad mig gå videre og gå til Filer, Ny, og få en ren tavle. Så nu, jeg virkelig har et tomt script område, en tom scene, med vores standard sprite Scratch, i og øverst til venstre på min skærm har jeg pallen af ​​alle deres tilgængelige puslespilsbrikker. Og vi vil ikke gå igennem næsten, at mange af disse ting dag, fordi, igen, de fleste er selvforklarende, men vi vil forsøge at kategorisere dem og påpege lighederne med disse fremtidige sprog, som vi vil dykke. Og øverst til venstre her er den første Når Grønt Flag klikket, så lad mig trække dette herovre, zoome ud en smule. Og hvis jeg klikker på den grønne flag, intet virkelig sker, fordi Jeg har ikke tilknyttet nogen logik, enhver erklæring så at sige, at at grøn flag, så lad mig gå op til den kategorier herovre. Jeg er i øjeblikket i Control kategori. Jeg stedet kommer til at gå ned til den ser ud kategori, og der er en hel masse ting her, siger Sig, Tænk, skifte farve, Switch Costume. Så du kan gøre dumme ting med kostumer og lyde og lignende. Lad mig gå videre og bare sige Say, og nu mærke til, da jeg trækker og slip denne brik, er det lyst til at hægte til den tilsvarende form. Så når jeg gå videre og slippe min mus, de låser sammen, og nu, hvis jeg gå over her og klik på den grønne flag, katten rent faktisk sige hej, fordi det er hvad der er indeni af denne hvide boks. Vi vil snart se, at denne hvide boks er, hvad der kaldes en argument, eller en parameter. Det er en metode til at ændre opførsel, i dette tilfælde en puslespilsbrik, men hvis jeg ønsker at sige præcis, hvad jeg sagde før, siger hej, verden, kan jeg nu gå tilbage herovre, klik spille, og "hej, verden" er hvad har sagt. Så vi er bogstaveligt talt programmering nu. Det er ikke alle, der overbevisende af et program, men mindst det er lidt mere overbevisende end noget, der ser på første øjekast, som denne. Og vi kan meget hurtigt få alle de mere ekspressive fordi i Scratch, ligesom på andre sprog, er der hele slags udsagn, ikke bare sige eller udskrivning noget, men du kan gøre ting som at vente, da vi lige set med cookien, nogle antal sekunder. Du kan spille lyde i miljøet af Scratch bare ligesom du kan i en normal computer program afspille lyd. Du kan kontrollere det, der kaldes booleske udtryk. Så nu, lad os begynde at føje til vores værktøjskasse nogle terminologi der faktisk vedrører det eksempel, at Joseph og jeg gjorde her med sokker. Så udsagn er blot konstateringer. Gør dette. Et direktiv for Sprite, eller mig den menneskelige, til at gøre noget. En boolesk udtryk er noget, der har en værdi, en såkaldte sandhed værdi, det er enten et nul eller et, falsk eller sandt, slukket eller på, ingen eller ja. Er faktisk ligegyldigt, hvordan du tænker på dette, men det er en binær tilstand. Som Nate diskuteret i onsdagens video, to forskellige ting. Så i Scratch, sker boolske udtryk til at se ligesom disse blå objekter her, og i dette tilfælde er spørgsmålet mark betyder, at du stiller et spørgsmål. Er katten, eller Sprite, røre musemarkøren? Så dette er blot ét eksempel på en Scratch blok, der sker at tillade os at kontrollere ja eller nej, er musen rører sprite på skærmen? Og det kan være nyttigt, hvis du rent faktisk ønsker at gøre ting med din mus. Ud over boolske udtryk, har vi ting ligesom er musen ned, så du kan opdage den slags spørgsmålstegn så godt. Vi kan gøre matematik, hvis du rent faktisk ønsker, og der er faktisk mere overbevisende anvendelsesmuligheder for denne end bare ren af aritmetik, som vi vil se. Pseudo tilfældighed og gøre dit program ser ud til at tænke eller opfører sig anderledes på baggrund af nogle tilsyneladende tilfældige værdier, og så har vi ting som boolske udtryk som AND. Så hvis du rent faktisk ønsker at kontrollere to værdier, vil vi se på Skrab, at vi faktisk kan teste, om dette er sand og det er sandt. For eksempel i tilfælde af mine sokker kunne jeg har på allersidst stillede spørgsmålet, hvis venstre sok er tændt og højre sok er på, holde op. Du er færdig for dagen, så det ville være en mulighed for. Så lad os gå videre og forsøge at stykke nogle af disse sammen og gå ind i et par eksempler mere overbevisende end denne ene. Så lad mig gå videre her og åbne nogle af eksemplerne der vil altid være på kursets hjemmeside så godt, og åbne hello2. Så i hello2 her har vi et program, der laver et par ting, men det er ikke gør det så effektivt, som vi kunne. Så her står der "Hello, World" i et sekund og derefter venter for en anden. Og så gør det igen, og så gør det igen. Så hvis jeg klikker på den grønne flag, Scratch siger "Hello, world. Hej, verden. Hello, world. "Og det er naturligvis kandidat nu forbedring. Hvad er den marginale forbedring, forhåbentlig, kan vi nu gøre hvis Scratch støtter konceptet? Nogle slags løkke. En slags gentagelse, nu ville være rart, så lad mig faktisk prøve det. Lad mig faktisk gå hen og flytte denne. Så varsel kan frigøre blokke så nemt som du kan føje til vedhæfte dem. Lad mig gå under kontrol, rulle ned her, og ja, der er denne brik her, Gentag og Forever og Forever If. Så der er en række måder at udtrykke looping konstruktioner i Scratch. Den ene jeg sikkert gerne her er ikke for evigt, fordi jeg kun ønsker, at dette skal ske tre gange, men sandsynligvis Gentag. Så lad mig trække Gentag herovre, trække og slippe den, og nu i stedet for at sige "Hello, World" tre særskilte gange, lad mig trække denne brik i her. Og selvom det ikke synes at passe, at programmet er smart nok til at indse det vil vokse til at fylde, så det er det figurer, der betyder noget, og ikke den absolutte størrelse. Lad mig ændre gentagelse til tre, og nu lad mig gå fremad og træk Vent et sekund i der. Det kommer til at snappe i så godt, og så nu har jeg tænkt mig at trække disse fyre herovre og bare smide dem væk, fordi jeg har ikke brug for dem længere. Lad mig zoome ud og klik den grønne flag nu, og vi har det samme program, men som jeg forudsagde før, bedre designet fordi du kan forestille dig, hvordan dårlig dette program ville få, i hvert fald æstetisk, hvis du skulle begynde at kopiere og indsætte, kopiere og indsætte, eller trække og slippe de samme darn ting igen og igen. Nu, blot at sige ting på skærmen, udskrive til skærm, virkelig alt ikke så spændende, så lad os åbne en 3. varians her. Og nu, som du vil se, vil dette hurtigt blive irriterende - [MEOW] DAVID Malan: - men det er også ret sød. [MEOW] DAVID Malan: Okay, så bedre, og vi kan helt sikkert bruge det samme overgang chunking dette op i en løkke struktur, men lad os gøre det mere interessant endnu. Lad mig gå videre og åbne op kvart varians her, hvor jeg tage tingene et skridt videre. Så ifølge dette, dum om dette i første omgang blik, hvad dette program vil gøre? Det kommer til at mjave gang. Hvorfor? Tja, man er, så vidt jeg ved, altid er mindre end to. Der er ingen forestilling om tilfældighed her. Jeg har bogstavelig talt hard-coded et og to, men dette er en eksempel nu på rent faktisk at bruge en boolesk udtryk. Meget gerne som Josef gjorde i sin pseudokode, indrykningen IF du finde matchende sokker derefter gøre følgende, her har vi et udtryk, hvis man er mindre end to THEN - og faktisk vi har endda en lille smule af indrykning, hvor lilla er lidt indrykket til højre - SÅ du vil afspille lyden mjave. Nu, i dette tilfælde, er at man altid er mindre end to, så det er lidt af et spild af en betingelse. Men vi vil være i stand til, som vi vil se, at sætte andre ting i disse pladsholdere hvor et og to nu er. Så lad os nu gå videre til eksempel fem af disse flere hej'er og se på, hvad dette program kommer til at gøre. Så nu, i en engelsk sætning, hvordan dette program opføre sig? PUBLIKUM: Meows halvdelen af ​​tiden. DAVID Malan: Meow banehalvdel tid, så dette er en måde at formidle en meget enkel idé. Selvom vi tilfældigvis bruger nogle uligheder her i nogle numre, er det virkelig bare en programmatical måde, en præcis måde, at sige hvis mønten kommer op hoveder, gå fremad og miaver. Eller omvendt, hvis mønten kommer op haler, ikke meow. Og i dette tilfælde, hvordan kan vi udtrykke det? Vi vil vælge et tilfældigt tal fra 1 til 10, og hvis det nummer er mindre end 6, gå videre og mjave. Og hvordan gik det herind? Nå igen, bemærk blot at trække og slippe og tingene klikker på plads. Så lad os nu se om denne tilfældighed virker. Lad mig gå videre og klik på den grønne flag. [MEOW] DAVID Malan: Okay. [MEOW] DAVID Malan: Okay. Okay, godt, så vi fik hoveder, hoveder, haler effektivt. Tails. [MEOW] DAVID Malan: Heads. [MEOW] DAVID Malan: Excellent. Det er altid akavet, når bare statistisk du får en dårlig køre, og det er alle hoveder, og programmet faktisk ikke arbejde som du ville håbe. Men denne gang, det fungerede, og vi synes at have, hvis vi gjorde dette et uendeligt antal gange, 50% odds. Nu igen, ikke alt, interessant, bare at gøre katte mjave, så lad os se om vi ikke kan fremme denne lidt længere her i version seks. Så nu har vi virkelig irriterende version - [MEOWS med få sekunders mellemrum] DAVID Malan: - og det er hvad der er kendt, generelt, som en uendelig løkke. Så uendelig løkke i dette tilfælde føles skidt. Det er helt sikkert kommer til at starte lyde dårligt, og alligevel uendelig loops er ikke altid dårligt. Kan du tænke på sammenhæng i edb-programmer, hvor du gerne rent faktisk ønsker en uendelig løkke? Ja? PUBLIKUM: Når du vil kontrollere en betingelse. DAVID Malan: Okay, når du ønsker at holde øje med en tilstand? Som hvad? PUBLIKUM: [uhørligt] DAVID Malan: Okay, godt, så hvis du havde nogle program, nogle slags home automation ting, hvor du ønsker at konstant monitor er noget tilfældet. Er lysene? Er lyset tændt, fordi du måske har en timer, og du vil have dem til at gå væk, kan du nødt til at gøre noget igen og igen. Og i virkeligheden taler om timere, der har nogen af ​​jer ure på din computer eller digitale ure, det er en uendelig løkke. Den fortsætter med at opdatere klokkeslættet, fordi det er hele tiden kontrol og kontrol og kontrol har tid ændret sig, og hvis ja, åh, min Gud. Uret er endelig ændret. Det skal vise, at værdi for dig. Så mens det meste af tiden uendelige løkker er en fejl, eller i det mindste en dårlig design beslutning, nogle gange de gør har deres værdi. Nå, lad os gå videre her til hello7. Så nu vil programmet få lidt mere interaktiv. Lad mig zoome ind her, og igen, det er hvad der er rart om Scratch. Og vi vil bruge det til at være klar, Scratch, bare i dag og i næste uges problem indstillet. Men på mandag, dykke vi ind i C. I dette program her, det gør, for evigt, det følgende. HVIS røre musemarkøren - nu, hvem er den sammenhæng her? Nå, og bemærk, at der er markeret hernede på bunden højre er den kat, Sprite en, så disse scripts, dette program, gælder for ham specifikt. Så hvis det kat rører musemarkøren, så det går at spille denne ned og vente to sekunder, og gentag derefter ad nauseum. Så lad os gå videre og ramte play. Der sker ikke noget, men hvis jeg ønsker at kæle med kat nu, kan jeg simpelthen. [MEOW] DAVID Malan: Adorable. [MEOW] DAVID Malan: Okay, mindre irriterende, men også bliver kedelig, så lad os gå videre og se, om vi ikke kan injicere lidt mere logik. Det var eksempel syv. Her i eksempel otte, vi kommer til at indføre en ELSE tilstand. Så meget som en bogstavelig gaffel i vejen, hvor du kan gå til venstre eller du kan gå til højre, en tilstand i et programmeringssprog sprog som Scratch, eller som vi vil se C, kan tillade dig at gå i den ene eller anden retning via en IF ELSE konstruere. Så helt bogstaveligt, HVIS røre musemarkøren, dette vil spille noget lyd, ellers kommer til at spille denne anden lyd, mjave. Nu, hvis du kan udlede af navnet på disse lyde, kan du sikkert gætte, hvad dette program er beregnet til at fremmane ideen om. Denne kat er mjavende lykkeligt. [MEOW] DAVID Malan: Heldigvis, men ikke helt lide at blive rørt. [Brøl] DAVID Malan: Så nu har vi en kat, der vil råbe på dig. Okay, godt, en sidste eksempel med katte her, og Lad os åbne udgave ni af dette her. Så nu har vi den næste mest irriterende lyd, som jeg kunne finde, så vi har en hvalros eller søløve her, der kommer til at skal du gøre følgende. [SEAL BARK] DAVID Malan: Okay, så dette vil fortsætte, indtil du regne ud, hvordan dette program virker. Så denne gang, har dette dyr to scripts, og hvad er interessante her er, at disse scripts vil udføre parallelt. Så fordi de begge starter med en grøn flag klikket, det er ligesom at gå på denne måde, og begge programmer begynder at køre det en gang, selv om de er looping evigt. Så i den øverste script, har jeg en vis logik. Hvilke funktioner betyder det giver deroppe? [SEAL BARK] PUBLIKUM: [uhørligt] DAVID Malan: Hvis det er hvad? [SEAL BARK] PUBLIKUM: Hvis dæmpet til nul, det vil holde spille lyde. [SEAL BARK] DAVID Malan: Okay, godt. Så hvis dæmpet, uanset dette er, denne orange ting er nul, Så spiller havet løve lyd og tænke "Åh, hej, "i to sekunder. Nu ved jeg ikke, hvad dæmpet er, men nul fremmaner den idéen om falsk eller slukket. Så hvis dæmpet er falsk, så hvis ikke slået fra, holde spille lyden. Okay, godt, hvordan vi deaktivere denne ting? Nå, lad os se på det andet script dernede. Det andet skrift siger sat dæmpet til nul. Bemærk det er også orange, så hvad Scratch gør, er det farver blokke i den samme farve, hvis det er sortering af logisk forbundne. Så lige så dæmpet op øverst var orange, så er dæmpet ned her nævnt i orange blok. Men det er en variabel opgaver, så ligesom i algebra, du har x og y og z, i programmering du har variabler, men de er generelt - lad os stoppe op et øjeblik og figur, hvordan at stoppe denne gøen. Hvordan gør jeg det? [SEAL BARK] DAVID Malan: Okay. Det stoppede. Okay. Så ligesom i algebra De har variable x, y og z, men i programmering, der variabler som x, y og z er generelt ildeset, fordi de ikke er på alle udtryksfuld. De har ingen semantisk mening overhovedet, så i de fleste programmeringssprog, kan variabler have fuld flyvefærdige navne eller ord eller sætninger, gerne dæmpet, for at sige hvad de gør. Så dette andet script også lyttede evigt, og det sagde hvis nøglen, tastatur nøgle Space, er presset, spørgsmålstegn. Så der er en tilstand med et boolesk udtryk, der er kommer til at besvare et spørgsmål enten sandfærdigt eller falsk, så har jeg inde i det, hvis mellemrums-tasten trykkes ned og HVIS dæmpet er nul, skal du indstille dæmpet til én, ELSE indstille dæmpet til nul. Så denne anden gaffel i vejen, og bemærk, hvordan jeg har indlejret de to IF betingelser, er en måde at kontrollere den Space Bar presset, fordi hvis det er tilfældet, jeg enten ønsker at gå denne måde eller på den måde. Og hvordan kan jeg vende værdien af ​​dæmpet? Jeg er nødt til at kontrollere, er det nul? Hvis det er tilfældet, gør det en, ellers gør det nul til derfor skifte sine to stater. Okay, så vi har så nogle af disse grundlæggende konstruktioner. Vi har boolske udtryk, og indse, også er der tale om ikke alle, at ukendte. Faktisk er her en hurtig skærmbillede af Harvard kursets CS50 shopping værktøj, og enhver hjemmeside derude, der har afkrydsningsfelter og rullemenuer har virkelig, al denne tid, har brugt Booleske udtryk. I dette tilfælde her, hvis du klikker på afkrydsningsfeltet ved siden af Selvfølgelig er større end eller lig med 4,5, eller den samme siden af fakultet, du angiver en boolsk udtryk. Vis mig kurser, dette udtryk er sandt. Eller til højre, ikke er i konflikt med kurser Jeg er tager, hvis det er markeret, så ja, du vil kontrollere denne betingelse, ellers du ønsker at ignorere det. Så boolske udtryk er en slags hele vejen rundt, men når vi sætter dem i forhold, hvad enten IF betingelser, hvis Elses, eller vi kan endda simulere dybere niveauer, hvis ELSE IF ELSE - så det er en slags ternær stat. Du kan gå på denne måde eller denne måde eller denne måde. Vi kan holde indlejrer ting at gå i forskellige retninger. Så Scratch har disse sløjfer, ligesom Forever. Det har disse funktioner som Repeat 10, nogle begrænset antal gange. Vi har evnen nu at sætte variabler, så i dette tilfælde Jeg har erklæret, for eksempel en variabel kaldet sokker. Jeg har initialiseret til 0, og det er endnu en anden retning vi kunne have taget op her med Joseph, hvor jeg måske bare holde styr på hvor mange sokker jeg har på og afslutte programmet, når den pågældende variabel værdi er 2. Det ville være en anden måde at slags generalisering, at problem og gøre noget igen og igen. Nå, lad os gå videre og nu introducere et par nye ting. Så dem af jer med tidligere programmering erfaring vil ved, at en masse sprog har arrays, eller vektorer eller lister, og ja, Scratch har noget som dette, også. Så lad os se om vi ikke kan tage tingene til det næste niveau her. Hvis jeg har mulighed for, nu, med disse puslespilsbrikker til tilføje noget, ligesom et ord eller tal, til en variabel, jeg kan begynder at hobe ting. Og det er faktisk temmelig apropos for ting som spil, rollespil, hvor du slags gå rundt nogle fantasy verden indsamler ting, plukke ting op, tjene point, eller lignende. Du vil måske holde styr på en slags opgørelse, og ja, det er hvad en af ​​vores tidligere studerende her gjorde med noget, der hedder Fruitcraft RPG. Så lad mig gå videre og åbne denne ting her, og i Fruitcraft, har vi denne verden op på toppen. Så lad mig gå videre og klik på den grønne flag. Meddelelse øverst til venstre er en slags opgørelse. Det er implementeret i Scratch som hvad vi vil kalde en matrix eller en liste, og nu har vi denne lille animation. Så ligesom vi startede tidligere med denne cookie kærlighedshistorie, og derefter vi avancerede til katte og søløver, nu kan vi få ting, der er endnu mere interaktiv. Og denne lille blå fyr, kan jeg begynde at bevæge sig rundt om hans lille hjem her. Så det ser ud som om han har en exit hernede, så jeg bruger piletasterne, op, ned, venstre til højre. Og nu er jeg udenfor, så lad er hvad jeg har her. Ligner en appelsin, og ja, så snart jeg rører appelsin, det bliver plopped ind i min beholdning. Hvis jeg går over her til de kirsebær, nu har jeg noget andet i min beholdning. Og det er alle nice og sød, men tænke over, hvordan, nu, dette er implementeret. Nuvel, vi har denne opfattelse af en liste, og det er tilsyneladende en puslespilsbrik, at du bare sige hvad du vil føje til det, tilføje orange, tilsættes kirsebær. Nu, hvad denne lille blå fyr gør? Tja, han er en sprite. Og formodentlig, den orange og kirsebær - de selv var separate sprites. Og ved hjælp af forholdene i boolske udtryk, de studerende var sandsynligvis i stand til at udtrykke IF blå fyr er rørende kirsebær derefter tilføje ordet kirsebær til hans opgørelse, og derefter også skjule cherry sprite. Så under kølerhjelmen, der formentlig stadig er en kirsebær sprite der. Vi har lige fortalt, at det bliver effektivt usynlig. Nu, hvis jeg fortsætter med at gå herover, kan vi også gøre det proksimale ting, hvor jeg kan gå og læse skiltet. Så hvis blå fyr røre skilt, kan vi have denne Say blok ligesom katten talte til os i ord, hallo, tidligere "Got noget frugt? Bring det til frugten sted. "All right, så nu, tilsyneladende, Jeg har mine retninger. Jeg kan gå over her til frugt sted, linje mig op med døren. Nu er jeg her. Jeg kan gå op til manden på tælleren. Han opdager, at jeg er tæt på ham, så det behøver ikke at være helt identisk rørende, og jeg har vundet spillet. Så der har vi Fruitcraft RPG. Så vi kan gøre tingene endnu mere avancerede end dette. Vi kan tilføje lyde. Vi kan tilføje pseudo tilfældighed. Vi kan tilføje kompleksitet. Lad mig gå videre her, og i stedet gøre det selv, Lad mig vise dig en af ​​de mere sofistikerede indlæg vi fik sidste år fra en bestemt person ved navn Blake. Kan vi få en volontør, der er behageligt opført på kamera og er op for at spille et spil? Hvad med lige der? Kom nu op. Okay, så det spil, du lige har ubevidst meldte sig frivilligt til at spille - [Bifald] DAVID Malan: - er noget fra gårsdagens kaldet "Frogger." Hvad er dit navn? Renda: Renda. DAVID Malan: Redna? Renda: Det er ligesom Brenda med en b. DAVID Malan: Okay, Renda. David. Hyggeligt at møde dig. Så her i "Frogger", og hvis vi kunne hæve lydstyrken bare en lille smule, du er denne lille grøn frø på bunden. Du kan bruge venstre, højre, op og ned, og dit mål er at krydser gaden, krydse floden, og berør lilje puder øverst. Aw. Et mere t - redo, okay? Lad os hit stop. Ingen så det. [Bifald] [Bifald] DAVID Malan: Yeah. Meget godt klaret. Fremragende, tak. Så at der var Frogger. Nu hvor du ved, hvad du har fået jer ind i, en mere frivillig for en anden spil indsendt af en anden elev. Du ønsker at komme videre op? Hvad er dit navn? RICHARD: Richard. DAVID Malan: Richard. Okay, Richard, kom op. [Bifald] DAVID Malan: Du har noget, der vil lyde velkendt snart, så her er dine instruktioner. Så i et øjeblik, er nogle puslespilsbrikker kommer til at rulle op fra skærmen, der ser enten efterladt eller højre op eller ned. Du er nødt til at ramme piletasterne på en sådan måde at det svarer til disse puslespilsbrikker foring op med pladsholderne øverst. Så når du ser en venstre pil, og det flugter med venstre pil, ramte venstre pil. Du kan begynde. [MUSIC - "stærkere" Kayne WEST] DAVID Malan: Okay, store runde af bifald for Richard. [Bifald] DAVID Malan: Meget godt klaret. Tak. [Bifald] DAVID Malan: Så sjovt og, tilsyneladende, en slags skræmmende som det kan være at gennemføre noget så tilsyneladende sofistikeret som dette, indser, at den studerende ikke fastsat ud og bare skrive det hele på én gang. I stedet kan du nedbryde et problem som tilsyneladende kompleks da dette i meget mindre stykker, og også dette er vil være et tema. Det værste du kan gøre i at skrive et program i de fleste enhver sprog er at sidde ned, få virkelig begejstret, skriver hele den forbandede ting, og så bare håbe, at det virker som gang du er færdig med at skrive. Snarere processen med programmeringen skal generelt være meget bevidst, meget iterative, hvor du bare sat meget små skridt for jer selv, bide stykker på størrelse vil du bide, og så du har disse sanity checks, små milepæle du kan møde. Og så skal du bygge oven på dem, for at skabe mere sofistikerede ting stadig. Så for eksempel, hvordan kunne vi gå om gennemførelse af et spil som dette? Nå, helt ærligt, ville jeg bestemt starte med bare at støtte den ene tast ad gangen. Lad os bare gennemføre støtte til den venstre pil. Så den studerende skulle en eller anden måde skabe i Photoshop, eller i Skrab selv ved hjælp af lille grafiske editor, en piletast, der ligner den, der er øverst til venstre der, bare den grå pladsholder. Så den studerende skulle finde ud af, hvad x, y koordinere til udtrykte det, hvor man kan sætte den i vinduet. 0, 0 er heroppe, så du er nødt til at regne ud hvor mange pixels, eller punkter, for at udligne denne pil fra Den øverste del af skærmen. Og så en gang det er på plads, dit program faktisk ikke gøre noget endnu, så du derefter brug for en anden sprite, for eksempel en grøn pil, der er også peger mod venstre, og du derefter nødt til at begynde at skrive nogle scripts for det. Og du opdager måske, at disse ting begyndte at komme på forskellige hastigheder, og farverne var i forskellige steder, og det er fordi den studerende brugt lidt pseudo tilfældighed. Og ved pseudo tilfældighed, jeg bare betyde vælge et nummer mellem noget og noget, fordi du kan begynder at kort ting, som hvis antallet er mellem en og fem, ja, lad os gøre noget grønt. Hvis det er mellem 6 og 10, lad os gøre det puslespil brik rød i stedet. Så længe du har en måde at skabe en form for tilfældighed, kan du derefter træffe beslutninger baseret på, at tilfældighed. Og jeg holder siger pseudo tilfældig, fordi der er en lidt beskidt hemmelighed. Computere kan ikke komme op med tilfældige tal. De kan kun gøre, hvad man får besked fordi de er menneskeskabte anordninger. De kan ikke bare gætte et tal ligesom vi mennesker føle, at vi kan. En computer har at gøre noget matematisk at fremmane illusion af matematiske antal, somme tider ved hjælp af aktuelle dag af tid som et input til at regne ud, hvad nummer til at vende tilbage, men mere om det en anden gang. For nu, ved bare, at vi kan generere pseudo tilfældighed. Så når jeg har mulighed for det venstre pil for at starte optræder på forskellige tidspunkter og ved forskellige hastigheder, derefter Jeg kan gå tilbage og tilføje nogle af disse IF betingelser. HVIS dette sprite rører den anden, og den venstre pil -tasten er blevet trykket - så tre betingelser i denne sag. Jeg kan bruge det og blokere måske i dette tilfælde - SÅ jeg vil gerne gå videre og øg score. Og øverst, vi har en score, vi har Awesome, Cool, God, og Boo. Så der er tilsyneladende fem variabler, at denne elev anvendes til at holde styr på disse forskellige målinger. Så kort sagt, er slutresultatet forbløffende. Det er sjovt, det er sjovt at spille, det er spændende, men det er ikke hvor eleven begyndte. Han eller hun startede på et meget mindre sæt af trin. Så hvad er nogle andre byggeklodser, som vi kan vævning i disse programmer? Tja, der er denne anden begreb i de fleste sprog, Ridse blandt dem, kendt som tråde. Så en computer kan faktisk ikke rigtig gøre flere ting på en tid, i hvert fald ikke normalt. Snarere en computer har i almindelighed kun en CPU, og selv selvom computere er super hurtig og kan derfor skabe en illusion af at gøre flere ting på én gang - tjekker din mail, få en øjeblikkelig besked, udskrivning af et dokument - virkelig, er en computer bare hoppe fra print til IMing at e-maile, tilbage og tilbage og frem og tilbage så hurtigt, at vi langsomme opfattende mennesker bare ikke klar over, at det faktisk kører disse programmer en lille smule ad gangen. Nu, dette lidt af en hvid løgn disse dage, fordi, i dag, mange vores computere er de såkaldte multi-core, så du har én CPU, men flere kerner, hvilket er lidt ligesom har flere CPU'er. Og så nogle gange, kan computere virkelig gøre flere ting på et tidspunkt, men generelt inden for et program, programmer basere sig på disse ting kaldet tråde. Så en tråd er lidt ligesom et miniature-program, der kan eksistere side om side en anden miniature program og kan køre parallelt eller i det mindste kan køre under den illusion, at de kører samtidigt. Så Scratch understøtter disse ting kaldet tråde. Du kan have flere scripts fuldbyrdelsesstaten på én gang, ligesom vi gjorde med søløver og dette giver os mulighed for at faktisk derefter har samspillet mellem disse sprites. Lad mig gå videre her og trække op, lad os sige, tråde, og spille dette som følger. Vi har to gigantiske lyn, hver af hvem vi vil se har kun ét script. Og du bemærker, at der synes at være nogle efterretninger i kat i denne ene, fordi han nærmer sig - [Brøl] DAVID Malan: - og tættere på den lille fugl. Så hvordan er den fugl driften? Nå, lad os tage et kig på fuglen først. Fuglen script sagde, da det grønne flag er klikket, skal du gå til x lig negativ 115 og y lig 150. Så jeg bare fundet ud af en tilfældig placering, hvor jeg ønskede fugl til at starte, og jeg bare smed ham der som standard. Så evigt, hvis ikke røre kat, så dette er en anden slags looping konstruktion, men samme idé, gøre det igen og igen og igen. Så længe du ikke rører katten, flytte tre trin, og hvis du er på kanten, bounce, hvor det er en slags refleksion i billard forstand. Så det er sådan fuglen bevæger sig rundt slags tilsyneladende tilfældigt, men det er bare fordi det er preller væggene i denne sag. Nu katten, i mellemtiden, er lidt snyd. Katten, når det grønne flag er klikket, ja, starter i en placering, en vilkårlig placering - i det mindste delvis som pr pick tilfældig grønne blok der - og derefter for evigt, hvis røre fuglen, spille løve lyd, og derefter stoppe script. Så da jeg sagde opsige, eller afslutte før, er der et puslespil brik i Scratch, der vil bare dræbe programmet på det punkt, fordi det er lidt logisk gjort. Men ellers her, mærke til, hvad der kommer til at ske. Peger mod fuglen og flytte et trin. Så dette punkt mod fugl er sådan en fordel katten har i, at det er homing ind på den bevægende fugl, og vi kan nu gør dette program så meget desto mere interessant. I stedet for at flytte et trin ad gangen pr CPU cyklus, pr strejke vejafgift af klokken, så at sige, så lad mig gå videre og flytte, lad os sige, fem trin ad gangen som katten. Klik på Kør, og nu er han virkelig finder ham hurtigt. Hvis vi fordoble dette yderligere til 10 trin, den slags går højre for ham. Nu kan vi give fuglen, måske lidt af en fordel. Lad os gå til fuglen og sige stedet for at flytte tre trin, lad os komme ham 30 trin. Men han stadig fik fanget i sidste ende. Så her har vi to tråde. Det er spærret inde i Scratch med to scripts og to sprites, men tanken på andre sprog er, at du kan skrive det væsentlige, for mange programmer som dette og har dem løbe virkelig, eller imaginarily, parallelt. Nu er der også dette begreb i programmering kendt som begivenheder, og det er noget, vi vil ikke se i C, sprog kendt som C. Vi vil se det hen semesters afslutning i webprogrammering, vi når introducere JavaScript og Begrebet bygge websider, der er dynamisk og interagere med brugerne. Så i dette tilfælde har vi et meget enkelt eksempel af to sprites, dreng og pige, som hver især har deres respektive tråde, men på en måde disse to er indbyrdes kommunikerer ved hjælp af noget, der hedder begivenheder. Så lad mig gå videre her og zoome ind på drengens script, der ser sådan ud. Når grønt flag klikket, for evigt gøre følgende. Hvis nøglen Space, eller Space, er trykket, siger Marco i to sekunder, det er rent æstetisk på skærm, en lille taleboble, men derefter udsende. Så udsendelse er en anden Scratch stykke, der er repræsenterer en klasse af funktionalitet i programmeringen der tillader forskellige programmer, forskellige tråde, til inter-kommunikere, at en eller anden måde sende beskeder, en til en anden. Passing et stykke papir i klassen er en slags lav tech ækvivalent. Så udsendes begivenhed. Jeg kan sende denne besked, og ordet begivenhed er helt vilkårlig. Scratch undertiden har disse rullemenuer, så jeg kom lige op med en tilfældig ord som begivenhed, fordi nu, hvad drengen gør når jeg trykker på tasten er han udsender denne begivenhed. Og hvis jeg nu se på pigens script, hendes script er super enkel, fordi alt, hvad hun skal gøre ikke handle, når det grønne flag er klikket. Hun er designet til handling, når hun modtager citat, citat slut, "Begivenhed", og på det tidspunkt, hun lytter derfor til den såkaldte begivenhed igen og igen. Så snart hun modtager denne begivenhed, hun kommer til at skrige Polo i to sekunder. Og så kan du måske udlede dette præcis, hvad det næste resultat bliver. Lad mig klikke på det grønne flag. Der sker ikke noget, fordi jeg er nødt til at gøre hvad? PUBLIKUM: Space Bar. DAVID Malan: Space Bar. Boy siger Marco, pige siger Polo. Men det er ikke svært kodet per se. Det er inter-kommunikation mellem scripts, så nu har vi har evnen til at gøre endnu mere komplekse programmer, hvor disse to er en eller anden måde indbyrdes kommunikation. Så i hvad retninger kan vi tage det? Tja, i problem set 0, virkelig, er målet at have det sjovt med Scratch. For hacker udgave, vil du i stedet have det sjovt med en mere sofistikeret udgave af Scratch kaldet BYOB, Byg Dine egne blokke, men ideen er den samme. Du vil være i stand til - Ja, det var bevidst. Det kom fra Berkeley. BYOB er hacker udgave version af dette, men begge demografi, standard udgave og hacker udgave ens, den mål ved hånden til den kommende uge er egentlig bare at dykke i dyb, få dine hænder beskidte med programmering, og gøre noget interessant, gøre noget interaktivt, gøre noget kunstnerisk, gøre noget sjovt til rent faktisk at godtgøre, så vi ved ugens udgang, vil du have et projekt, ikke kun for din første CS50 Pset, men du vil have en lidt noget, som du kan vise i Annenberg til venner eller endda familie ved at uploade det til MIT hjemmeside. Og så jeg sagde onsdag, forventer vi 90% af klassen, generelt, at gøre de almindelige udgaver. Indse, at der er også denne afsætningsmulighed for dem af jer der ellers kunne finde dig selv lidt kede med grundlæggende og virkelig ønsker at dykke ned og udforme en vision, du allerede har med forudgående baggrund i dette mere venlige miljø. Så lad mig trække op en anden eksempel, at en af ​​vores tidligere studerende her gjorde og fortælle lidt noget gennem sang. Det samme måde, som dette spiller, så tænk over, hvordan du går om gennemførelsen af ​​dette program ved hjælp af netop disse samme byggeklodser, en lille smule pseudo tilfældighed, og en bit af velkendte sang. Hvis vi kunne skrue op for volumen bare en lille smule? [MUSIC - "Det regner MEN" The Weather Girls] DAVID Malan: Det var det for CS50. Vi vil se dig på mandag. [Bifald]