[Powered by Google Translate] [ROCK MUSIC] [MUSIC - "Happy Together" THE TURTLES] DAVID MALAN: I dag begynner vi vår utforskning av Grunnlaget for informatikk og vår introduksjon, nå, til kunsten programmering, hvorav det er bare ett eksempel. Men i samme ånd av problemløsning, vet at CS50 tradisjonelle Puzzle Day er i morgen. Hvis du ennå ikke har RSVPed for denne hendelsen, kan du gå til cs50.net/rsvp. Du kan ta med grupper på to eller tre eller fire. Du vil bli utfordret med problemer som den du så oppe i begynnelsen. Alle nye problemer i år hvis du spiste i fjor, og du vil ha en sjanse da å vinne noen flotte premier. Blant dem, en Wii og noen gavekort og lignende, alle henger ut med CS50 studenter og klassekamerater og pizza og Facebook. Så mer om det i morgen hvis du ønsker. Dette er da CS50, for de av dere bli med oss ​​for første gang. Og vet at dette kurset er spesielt bestemt på å få deg gjennom dette kurset til dens slutt, og da du vil ha ikke bare en forståelse av disse Grunnlaget for informatikk, men du vil ha dette svært praktisk ferdighet sett som du deretter kan ta med tilbake til din egen avdeling, enten det er tekniske fag, anvendt matematikk, naturvitenskap, naturlige vitenskap eller lignende. Ja, hva er så spennende om informatikk disse dager er at det er bare så gjelder alle slags felt. Og selv om i dag, vil vi bare skraper i overflaten av en svært tradisjonelle programmeringsspråk kjent som C, vil vi i stedet se på noe som kalles Scratch, noe med som at cookie kjærlighetshistorie ble gjennomført av en av dine forgjengere i tidligere år, å fortelle historier, å lage spill, å skape interaktiv kunst, og å faktisk begynne å pakke våre sinn rundt noen av de grunnleggende konstruksjoner som ligger til grunn programmering, men i en sammenheng, som du vil se, er at mye mindre skummelt, er at mye mindre uforståelige, enn du vil se før lenge. Og realisere, også, for de av dere bare med oss ​​denne semester, setninger som vi endte onsdagens foredrag, det er ikke så viktig hvor du ender opp i forhold til din klassekamerater i denne klassen, men hvor du, etter semesters slutt i uke 11, ender opp i forhold til deg selv rett i dag. Så uten videre, dette er også verdt å merke seg at de mindre komfortable, de et sted i mellom, er også, ved utformingen av dette kurset, ikke på noen ulempe vis-a-vis de mer komfortable kommer inn i denne klassen. Som du ser over ukene som kommer, har vi forskjellig spor for vesensforskjellig tilbake bakgrunn, seksjoner for de mindre komfortable, mer komfortabel, de sted i mellom. Som du vil se denne helgen og neste uke, to versjoner av de fleste oppgavesett i både standard og hacker utgave så som dere alle kan selv velge nedover stien som du er mest komfortabel. Så i dag, dykke vi inn i dette programmering språk kalt Scratch. Det er en grafisk programmeringsspråk, og ennå har den samme funksjoner i noen av de høyere nivå språk vi vil utforske senere i semesteret, blant dem C og JavaScript og PHP. Men det kommer til å tillate oss å unngå noen av distraksjoner tidlig på syntaks, ting som semikolon, parenteser, og andre uforståelige detaljene som, ved første øyekast, er bare ikke i det hele tatt intellektuelt interessant og har en tendens til å komme i vei fra noen fundamental forståelse. I form av nå bærekonstruksjonen fremover, skjønte dette verktøy, CS50 Diskuter, som vil bli knyttet til kursets nettside senere i dag, er den elektroniske diskusjonsforum i som du vil kunne stille spørsmål til hverandre og ansatte, og det er også et verktøy, som vi skal se i neste uke, at vi skal bruke ganske integratedly i kontortid også. Faktisk, kontortid begynner på mandag, og ærlig, den første uke kontortid er ganske lav nøkkel. Jeg tror ikke du finner Scratch alt som utilgjengelig. Det er heller selvforklarende, som vi skal se, og så hva vi vil bruke det for i dag er å hente ut noe av grunnleggende ideer som vil da, vedvarer gjennom hele Resten av semesteret. Men starter mandag, kl 20:00 gjennom 23:00 vil være kontortid i Annenberg over hjernen pause. Seksjonering to vil begynne denne kvelden, så en gang dette helg, gå til cs50.net/section, og du vil bli spurt en rekke spørsmål. Blant dem, hvordan vil du beskrive din komfortnivå som i dag? Det er ingen hard, rask regelen om hvem som er der bøtte. Det er bare den slags ting som du sikkert vet om du er blant de mindre komfortable eller ellers. Og nå, gjennomgang. Oppgavesettet spesifikasjonen for denne uken, både standard og hacker utgave alike, er online på cs50.net som nå. Og du vil se at den første av disse utgavene, den standardutgave hver uke, er ledsaget av noe vi kaller en kode gjennomgang, ledet en sesjon med en av Kursets undervisning stipendiater til å veilede deg gjennom, gir tips om, og få deg ned en bestemt bane når det gjelder å starte disse oppgavesett. Så med hver av disse problem sett, hvis du noen gang ønsker selv hvor skal jeg begynne, begynner du med disse walkthroughs. Og faktisk, la meg introdusere Zamyla Chan, dette Årets undervisning fyr som skal lede hver en av disse walkthroughs. Zamyla? [Applaus] ZAMYLA CHAN: Åh, hei, alle sammen. Mitt navn er Zamyla. Jeg er en junior ingeniørutdanningen i Winthrop House. Men jeg prøve og passe på så mange informatikk kurs som jeg kan, det er derfor jeg er veldig spent på å være ledende dette Årets walkthroughs. Walkthroughs, for meg, var en viktig del av CS50 min erfaring. Under gjennomgang, for hver p-set, vil vi gå gjennom problemet satt sammen, se over problemene, type dele dem opp i håndterbare biter. Jeg skal gi deg tips, teknikker, for å få gjennom og komme i gang. Jeg håper å se dere alle på walkthroughs. Hvis du ikke kan gjøre det selv, så vennligst tune i nettet. DAVID MALAN: Excellent. Takk, Zamyla. Så skjønner at walkthroughs er faktisk på en fredag ettermiddag, men dette er hensikt ved design slik at selv om du ikke ønsker å delta i klassen på en fredag ettermiddag, vil videoene bli opp alle raskere enn helgen. Så innser at cs50.net vil være alle Zamyla er walkthroughs. Og at det er dagens dato og klokkeslett, 03:00, Harberd Hall, 104. Og noen av de pedagogiske stipendiatene har også utarbeidet noen merknader for deg i absentia for å gi deg litt av perspektiv på hva deres erfaring kommer inn og går ut av CS50 var. Så hvis vi kunne dempe lysene for bare et øyeblikk, gir jeg deg noen av CS50 ansatte. JACKSON Steinkamp: Jeg tok CS50 fjor som en førsteårsstudent i falle, og det absolutt blåste hodet mitt. Jeg hadde aldri tatt noen programmering klasser før, og aldri kom med noen informatikk oppleve det hele tatt. Og rettferdig, hørte jeg buzz om klassen og besluttet å ta den. JULIA MITELMAN: Det var virkelig moro, virkelig engasjerende. Jeg fortsatt til denne dag - Jeg har nettopp så jeg har diskett som David ga oss på vår første dag av forelesning. Jeg hadde hengt det på veggen min. Dette er trolig litt nerdete, men jeg hang på min veggen i løpet av klassen som en påminnelse om hvor kult det var. TRAVIS DOWNS: Det er så flaut. JACKSON Steinkamp: Informatikk er noe du bør prøve selv om du ikke er en for de tradisjonelle vitenskaper. Det er en egen opplevelse, og CS50 vil sørge for at du er støttet godt gjennom det med sin veritabel hær av TFS. ALI Nahm: Jeg tok det som en førsteårsstudent, og slik jeg har gjort mye av nye venner. Jeg fikk også introdusert til hele denne konsentrasjon og Hele School of Engineering, og så jeg anbefaler det og ønsker deg velkommen til vår CS50 familie. Yaniv YACOBY: CS50 lærer bare deg hvordan du bruker verktøy som er allment tilgjengelig. Du trenger bare en laptop, trenger du en nettleser, og du trenger å lære å skrive noen kode, og du kan virkelig bygge fiks ting. KAREN XIAO: Det er bare så kult å være i stand til å gjøre noe og har folk bruke det og ha folk ser det, og det er hva jeg virkelig elsker det. TIM McLaughlin: - en følelse av fellesskap, tror jeg, i dette Selvfølgelig mer enn noen annen kurs jeg har tatt så langt. Du er ikke bare å ta en annen - du ikke å fylle et annet krav. Du er ikke bare kommer til forelesninger og kommer til delen. Men du gjør tonnevis av ting som er alt om programmering og alt om teknologi, men det gjør ikke virkelig føler en klasse mesteparten av tiden. Travis DOWNS: Og på den første dagen, ga de ut kake, og Jeg ble umiddelbart solgt. JACOB PRITT: Gratis godteri og pizza. ZAMYLA CHAN: - uavhengig av rentenivå, tror jeg at CS50, vil du ha det gøy, og du vil være intellektuelt stimulert. MARK GROZEN-SMITH: Det er alltid en fest i klassen, og det er en fest hver kveld arbeider på p-set. JACKSON Steinkamp: Hver gang du fullfører et problem sett, du vil føle at du er ferdig med et prosjekt. MELISSA NIU: Det var freshman år, og jeg var ferdig shopping. Jeg hadde mine fire klasser klar, og jeg var i Annenberg. Og jeg borti en venn, og han sier hei, jeg handler denne klassen heter CS50, og du bør bli med meg. Endte opp med å ta det som faller, og etter at klassen, jeg tenkte kanskje jeg kommer til å mindre i CS. Men her er jeg, tre år senere, fortsatt studerer datamaskin vitenskap og faktisk gjør det som en stor, og jeg elsket hvert øyeblikk av det. Rob Bowden: Jeg har ingen anelse. ALI Nahm: La oss se. MELISSA NIU: Craziness. SPEAKER 1: Jeg føler at jeg vil bli veldig klisjé. Jeg vil bare si, liker, awesome. Yaniv YACOBY: Tilgjengelighet. JACOB PRITT: Gratis godteri og pizza. TRAVIS DOWNS: Kan ikke slå ned en klasse som deler ut kake. TIM McLaughlin: Energisk. Vipul Shekhawat: Essential. Rob Bowden: La meg tenke på et svar. Jeg tror jeg har noe. Herregud. Ja, mitt navn er Rob Bowden, og dette CS50. [Applaus] DAVID MALAN: All right, så la oss begynne å male et bilde av hvilken retning vi kan gå, og la oss introdusere dette konseptet her kjent som pseudokode. Så pseudokode er ikke et programmeringsspråk språk for seg selv. Det er ikke noe teknisk per se, men det er bare en slags generell måte å uttrykke deg selv ganske presist, ganske algoritmer, ganske prosedyregenerert, men uten å måtte bekymre deg hvilket språk du uttrykker deg i. Det er noen modell av engelsk og programmeringsspråk med som du tilfeldigvis være kjent, slik at vi kan starte skrive denne typen ting som vi går. Og faktisk, Joseph, kunne jeg låne deg opp på scenen for å være skriftlærd her? Jeg har gått foran her på forhånd og glemt å sette på noen sokker i dag, og dette vil være blant våre mer latterlige eksempler. Nå, jeg trenger deg over her. Jeg skal gjøre det sokker del. Så her har vi en liten ripe pad. Dette er bokstavelig talt bare TextEdit i en Mac. Vi er ikke egentlig tenkt å skrive et kjørbart program, men vi bare kommer til å begynne å skissere ut pseudokode basert på noen av rådene du gir meg her. Så her er min haug av sokker hjemme. Jeg har ingen sokker på når jeg våkner om morgenen, og vi har nå trenger å skrive et program, en algoritme av former, som å få disse sokkene på føttene. Og langs veien, la oss se om vi turen over, eller støter, noen av de ideer som du nødt til å starte tenker mye mer på alvor når du programmerer lest programmene ikke oppfører seg helt som tiltenkt. Så jeg sitter her nede. Jeg har fått min haug av sokker. Hva er det første en fornuftig menneske ville gjøre når målet er å sette på et par sokker? Noen gi meg ett skritt, og bare ett trinn. Ja? PUBLIKUM: Bøy ned. DAVID MALAN: Bøy ned, Okay. Trinn to. Trinn to. PUBLIKUM: Plukk opp sokk. DAVID MALAN: Plukk opp sokk. Ok, er så liten tvetydighet her, og dette er en av de første anstøtsstener at vi skal bevisst møter her. Det er litt tvetydig, så plukke opp sokk. Greit, jeg tar denne, men en datamaskin, innser i bare en bit, ikke kommer til å ha den slags menneskelig instinkt å bare plukke den nærmeste. Vi kommer til å ha for å starte, før lang, uttrykker oss mer presist. All right, så trinn to er å plukke opp din sokk. Vi tar det. Trinn tre. I ryggen. PUBLIKUM: Finn et passende par. DAVID MALAN: finne matchende par. Ok, så dette er bra. Jeg måtte velge denne sokken. Så målet er å finne en matchende sokk nå, men hva betyr det? En fornuftig menneske, mye som på onsdag når jeg bare visste hvordan å finne Mike Smith i en telefonbok, bare slags gikk med instinkt deres. Men her er det tydeligvis denne sokken her, men en datamaskin ikke kommer til å være så instinktiv. En datamaskin er kommer til å ha en samling av biter, som vi diskutert på onsdag, og de er organisert måte i minnet. Men poenget er at en datamaskin har bare evnen å se på ting en om gangen, og faktisk, enda vi mennesker - selv om det føles som om jeg kikket ned og delt sekund senere jeg vet hvor sokken er, hjernen min og mine øyne antagelig gjorde en rask skumme av disse sokkene, og deretter låst på til en i spørsmålet. Så hvis vi være enda mer bevisste nå som en datamaskin, hvordan finner jeg denne matchende pair? Vel, vi må iterate. Vi må kanskje sløyfe over dette rotet av sokker på etasje der jeg sier noe sånt som FOR HVER sokk, plukke den opp, og hvis samme form og størrelse som den andre, SÅ dot, dot, dot, vil vi fortsette historien. Så for hver sokk, så jeg plukke opp dette. Jeg sjekke er denne lik denne. Det er ikke, så jeg legger til side side. Så jeg iterate igjen. Er dette en like? Nei, det er ikke, så jeg satte den til side. Er dette en? Nei. Denne? Nei, og så videre. Og så til slutt, forhåpentligvis vil jeg møte denne sokken her. Så hvis det er samme form, størrelse, ta den. Og nå, hva ville være vår neste skritt her? Ja? PUBLIKUM: Identifiser rett fra venstre. DAVID MALAN: Ok, identifisere høyre og venstre, så heldigvis, den slags fungerer. En liten symmetrisk, eller jeg har bare slitt dem på den måten. All right, så jeg har identifisert høyre. Og nå, før vi går videre, la meg påpeke hva Josefs gjort her som en slags bevandret programmerer. Så igjen, det er ingen måte å gjøre dette, men utover bare nummerering linjene, har Joseph allerede begynt å gjøre dette slags innrykk. Faktisk er dette en svært vanlig konvensjon i programmering, slik at når du noe iterativ, looping stil, som vi antyde med den engelske uttrykket "for hver sokk, "konvensjonen i pseudokode, og som vi skal se, normale programmeringsspråk, er å bare innrykk. Hit mellomromstasten et par ganger, traff Tab-tasten eller lignende, slik at nestet under "FOR HVER sokk" er del av ting som du trenger å gjøre som et resultat av at loop. Så det er alt som er å formidle semantisk. Nå i mellomtiden, den "Hvis det er den samme form og størrelse," den At "Take it" er innrykket videre bare betyr det er det eneste du bør gjøre hvis den tilstanden, hvis den grenen, som gaffel i veien, er faktisk sant. Så nå her, vi er på trinn fire, identifisere høyre og venstre. Jeg har identifisert riktig. Gi meg trinn fem. Og teknisk, kunne vi virkelig kalle det for hver ting - du bør nok telle alle linjene hvis vi kommer til å gjøre dette. JOSEPH: [uhørlig] DAVID MALAN: [uhørlig]? Ok, greit, greit, vi gjør det på din måte. All right, så trinn fem, hvordan gjør vi det riktige sokken? Hvordan går vi neste, her? Ja? PUBLIKUM: Løft opp høyre ben. DAVID MALAN: Løft opp høyre ben, Okay. Trinn seks? Raskt. Ja. PUBLIKUM: Finn en åpen ende av sokken. DAVID MALAN: Ok, finn den åpne enden av sokken. Så bra. Så her, ærlig, ville en svært vanlig instinkt bare være satt på høyre sokk, men som også er ganske tvetydig. Hvis ikke datamaskinen eller menneskelig vet nøyaktig hva det betyr, det er ikke til å være å utføre det, så her har jeg syntes åpningen av lager. Trinn sju? PUBLIKUM: Trykk tærne. DAVID MALAN: Touch tær. Ok, så nå går vi - Greit, jeg kommer til å ta noen friheter her. Takk. Trinn åtte? Sett på sokken. Ok, så nå har jeg, tror vi nær nok til å sortere av ta dette hjemme. Greit, så dette går opp. Jeg skal ta noen friheter med hva det betyr, faktisk. Sett sokk på. Greit, nå trinn ni? PUBLIKUM: Sett foten ned. DAVID MALAN: Takk. Trinn ni, satte foten ned, og nå kan vi gjenta. Så antagelig kan vi nå gå i takt 10 og si identifisere venstre sokk, men det er antagelig allerede har gjort. Og så da, kan jeg liksom gjenta disse trinnene. Men denne typen ber spørsmålet. Før, siste gang vi ønsket å gjenta noe, vi gjorde det iterativt, igjen og igjen, en FOR Hver loop så å si. Vil det være fornuftig å bruke en løkke for å håndtere både venstre og høyre sokk? Fordi det føles som disse operasjonene er ganske mye identiske med unntak av det faktum at en starter her og en starter her? Har vi loop, eller må vi bare holde skrive trinn 10 og 11 og 12? PUBLIKUM: Loop. DAVID MALAN: Ok, så loop. Jeg har faktisk kunne ha sagt bare fortsette. Så hvorfor er det slik? Vel, dette er faktisk den første av våre ikke-åpenbare design beslutninger, og faktisk en av de beregninger som Vi vil begynne å vurdere, for oss selv og for deg som Kvaliteten på et program er bare hvor godt utviklet den er. Har du gjort minimalt med arbeid er nødvendig for å få jobben gjort mest raskt, enten i form av din tid eller i form av datamaskinens kjøretiden? Hvor mange operasjoner det tar å utføre? Så kanskje er dette en mulighet for en løkke fordi så snart jeg begynner å kopiere og lime inn, slik Joseph effektivt ville begynne å gjøre i et øyeblikk, er du snill for å kaste bort tid, og du blir dobbelt uttrykksfulle. Men på samme tid, dette er egentlig bare to spesielle tilfeller, venstre og høyre. Og mens før, kan jeg ha 10 eller 20 eller flere sokker i en haug, er det definitivt fornuftig ikke å ha 50 linjer med kode si sjekk denne sokken, så den neste, deretter den neste. Her er det litt mindre opplagt, og jeg ville foreslått at vi kunne gå begge veier. Vi kan enten ha som loop, selv om det bare looper to ganger, eller vi kan ganske enkelt kopiere og lime bare litt her for å få jobben gjort. Men dette programmet er buggy, så å si. Det kan ha noen feil, feil eller hjørne tilfeller, så å si, at vi virkelig ikke forutse. Ingenting gikk galt denne gangen, men hva kunne ha gått galt mens utføring dette programmet? PUBLIKUM: Du har ikke noen sokker. DAVID MALAN: Så det kan ikke være noen sokker der overhodet. Så la oss vurdere det hjørnet tilfelle. Så hvis vi kunne bla tilbake til steg en, så gå en var bøye seg ned, slik at sjekker ut. Trinn to, plukke opp sokk, men deretter finne matchende sokk, identifisere rett. Vi slags gjort en hel haug med forutsetninger, og dette er, ærlig, hvorfor programmet noen ganger krasjer. Hvis du, programmerer, har gjort visse forutsetninger, som sikkert det kommer til å bli sokker eller sikkert det kommer å være minne i datamaskinen, sikkert det kommer å være diskplass igjen på harddisken - Vel, hvis du gjør disse forutsetningene, og det er ikke, faktisk virkeligheten, hvem vet noen ganger hva datamaskinens kommer til å gjøre? Og noen ganger, når du får den spinnende badeball eller frossen Windows eller lignende, som er nettopp fordi noen programmerer forutså ikke de såkalte hjørne tilfeller. Hva annet kunne ha gått galt i dette programmet? Ja? PUBLIKUM: Du har ikke en høyre ben og en venstre ben. DAVID MALAN: Ok, kanskje ikke ha både en høyre ben og en venstre ben, og så dette programmet ikke kan være universelt aktuelt. Andre? PUBLIKUM: Du kan ha plukket opp en foreldreløs sokk. DAVID MALAN: Jeg kan ha plukket opp en foreldreløs sokk, så en ikke-samsvarende sokk som bare har noen søsken fordi jeg har mistet det, er det revet, er det i vask fortsatt, eller lignende. Slik at også ikke har virkelig blitt håndtert. Ja? PUBLIKUM: Du har kanskje allerede sokker på. DAVID MALAN: Jeg kan allerede ha sokker på. Jeg hadde faktisk ikke sjekke. HVIS du ikke har sokker på, og deretter fortsette å gjøre linje en og to. Og det kan skje. Du sovner med sokker på og lignende, så det også, en svært rimelig hjørne tilfelle. Og kanskje en annen? PUBLIKUM: Sokken er innsiden ut. DAVID MALAN: Så sokk er innsiden ut, så vi gjorde ingen feil sjekker, kort sagt. Vi gjorde ikke sjekke om tilstanden i verden er som vi forventer. Vi gjorde ikke sjekk hvis vi faktisk funnet det vi leter etter. Og selv om dette er liksom en latterlig eksempel involverer sokker, på slutten av dagen, er dette nøyaktig det slags tankesett må du ha når du skriver programmer, selv i Scratch samt i C, i JavaScript, i PHP, fordi ellers vil dine programmer fremvise den tilsvarende at spinning badeball eller bare gi unøyaktige resultater. Så mange takk her til våre skriftlærde Joseph. [Applaus] DAVID MALAN: All right, så hva er, i Faktisk et dataprogram? Vel, la oss ta et raskt blikk på en representant en her. Så dette er et program skrevet i et språk som heter C. C er ganske gamle i disse dager, men mange nyere språk er bygget på toppen av det. Faktisk, PHP, en av de web-sentriske språk vi vil bruke mot begrepet slutt, har selv det som kalles en tolk, et program som er skrevet i C, men mer om det i mange uker fra nå. Men dette programmet, og dette er hva det vil si å skrive en program, om enn en svært enkel en. Vi har noen ganske kryptisk syntaks her, men du kan sikkert gjette, selv om du aldri har programmert før, hva dette programmet gjør. Faktisk, jeg vet ikke hva printf er, men ut sikkert maner frem ideen om å skrive ut noe. Og så ja, er dette programmet slutt kommer til å skrive ut ordene "Hello, World." Nå, om du har en Mac eller en PC eller en Linux-datamaskin, odds er, i hvert fall hvis du lastet ned noen fritt tilgjengelig programvare, kan du ha vært å skrive programmer på din egen laptop for en stund nå. På Mac OS, for eksempel, er det dette programmet som heter Terminal som kommer med en Mac, det er vanligvis i Verktøy-mappen, og det åpner som regel en svart og hvitt eller hvitt og svart vindu der du har en spør hvor du kan skrive kommandoer. Så dette er faktisk minner om hva datamaskiner pleide å være før grafisk brukergrensesnitt grensesnitt, GUI, kom. Nå, i Windows, har du en lignende mekanisme i form av ledeteksten. Men hva jeg skal gjøre her er å åpne opp, la oss si, TextEdit igjen, så det samme programmet vi bruker for pseudokode et øyeblikk siden, og jeg kommer til å gå videre og skrive min første program. Inkluder stdio.h, uansett hva det betyr, int main ugyldig, uansett hva det betyr, og deretter i midten her, printf ("Hei, verden."). Og så tett sitat, lukk paren, semikolon. Nå skal jeg gå videre og bare trykke Kommando-S. Jeg skal å gå videre og lagre dette som hallo.c, så konvensjonen i verden av C-programmering er navnet på filen dot c. Jeg kommer til å bare sette i John Harvard hjemmekatalog, her, klikker du Lagre, og nå er jeg kommer til å gå over til denne terminal-vinduet, som igjen er svart og hvit spørsmål hvor jeg kan kjøre kommandoer. Jeg kan kjøre programmer ved å skrive navnet deres, ikke av dobbeltklikke ikoner i vanlig forstand. Men tingen er om C er at et språk som C første kommer i denne formen, som heter noe kildekode. Noe som ser litt ut som engelsk, men er definitivt mindre som engelsk enn Josefs pseudokode en øyeblikk siden. Det er litt mer uforståelige. Det synes å følge noen mønstre eller regler. Det faktum at jeg har klammeparentes, semikolon, sitater, vinkel bukseseler, føles som en datamaskin kom opp med dette slags språk. Men hvis jeg går nå, til denne terminalen vinduet, kan jeg kjøre en kommando som kommer til å konvertere kildekoden er noe som kalles objektkode. Det kommer til å konvertere engelsk-lignende syntaks til nuller og de, de samme slags nuller og enere vi snakket om onsdag. Nå kommer jeg til å kjøre en kommando som heter Clang. Mer om dette i ukene som kommer, men det er et program med som jeg kan konvertere hallo.c inn en hel haug av nuller og enere. Nå har jeg kjørt denne kommandoen. Jeg har kjørt Clang, og så sa jeg kjøre selv på denne filen kalt hallo.c, som jeg laget for et øyeblikk siden, og ingenting synes å skje. Men faktisk, hvis jeg stakk rundt mitt hjem katalog, ville jeg se at dette stupidly navngitte programmet a.out eksisterer nå. Dette er bare standardnavn for et program når du skriver i C. Vi kan overstyre dette til slutt, men a.out er Navnet på programmet jeg nettopp konvertert til nuller og enere. Og nå som det er nuller og enere, min Mac, i dette tilfellet, eller Windows-PC, kan forstå de bitene, de nuller og enere. Og så når jeg trykker på Enter, ser jeg "Hei, verden!" Men det er litt buggy. Jeg skjønte ikke helt si "Hei, verden: air: - jharvard." Air er navnet på datamaskinen min. Jharvard er navnet på kontoen, så hva gjorde jeg klart utelate fra programmet? En slags linjeskift. Jeg slo ikke tilsvarende Enter eller linjeskift, og dette er, igjen, testament til det faktum at datamaskiner kan bare gjøre det du ber dem om å gjøre. Og det faktum at jeg ikke fortelle datamaskinen flytte markøren til neste linje - vel, det er sikkert ikke kommer til å bare gjøre det dristet for meg. Så hvis jeg går tilbake til mitt program, og jeg sier \ n - Så \ n, som vi vil snart se, er veien for representerer rare ting som nye linje tegn, ting som ellers ville være resultatet av trykke Enter. Men for nå, bare vet at å trykke Enter ville bare gjøre vår kode ser merkelig, så verden besluttet, vet du hva, å holde ting penere, for å holde det på en linje, la oss bare si \ n representerer en ny linje. La meg resave filen min, gå tilbake til terminalen vinduet, og re-run a.out, Enter. Fortsatt buggy, men hvorfor? PUBLIKUM: [uhørlig] DAVID MALAN: Ja, så jeg trenger å rekompilere det. Så for å kompilere et program betyr bare konvertere den fra kilden kode for å objekt kode, kildekode til nuller og enere. Nå har det faktum at jeg traff Lagre i denne TextEdit no peiling på disse nuller og enere fordi jeg må først fortelle Clang hei, jeg har endret disse linjer med kode, kildekode. Du må regenerere a.out. Ingenting ser ut til å ha skjedd, men i en datamaskin, på en kommandolinje, så å si, når ingenting skjer, som vanligvis betyr alt er vel. Når noe skjer, betyr det du søl opp, generelt. Så la oss nå gå til a.out, og faktisk nå har jeg "Hei, verden. " Og nå, hva om disse nuller og enere? Hvor, faktisk er de? Vel, jeg kan egentlig ikke bare slags rote rundt svært effektivt. La meg åpne opp TextEdit. Her er a.out. La meg gå videre og åpne denne, og dette er tydeligvis hva min Programmet ser ut. Så jeg har åpnet, ikke hallo.c, men a.out. Men dette er faktisk ikke hva mitt program egentlig er. Åpenbart er dette en slags alfabetiske tegn. Jeg ser ingen nuller og enere, men dette er fordi a.out er et program. Nuller og enere - men TextEdit, som navnet antyder, er det akkurat som Notisblokk i Windows, er bare en tekst editor, så det er forvirrende alle disse nuller og enere som om de var, hva? ASCII-tegn. Så husker på onsdag, vi bare kom opp med denne vilkårlig kartlegging av tall, eller biter, til bokstavene i alfabet og tegnsetting symboler og lignende. Så TextEdit, at det er en tekst editor er mistolking disse mønstrene av nuller og enere som er ment å være utskrift ord, som "Hei, verden." Det er å vise dem som ASCII, og det er derfor det ser litt rotete. Nå er det noen hint av riktigheten i her. Legg merke til om jeg fremheve, det er et snev av faktisk "Hei, verden ", så et sted i dette programmet er setningen jeg skrev. Men la oss gå videre og ser nå med et annet program. Dette er ikke en vi vil bruke så ofte, men det kommer også med en Mac og vil være inne i CS50 apparatet. La meg gå videre og åpne med et program som heter XXD. Tilbake i dag, var de fleste programmer som heter ganske kryptisk, og så trenden fortsetter. Men-b betyr spytte dette programmet ut binært. Ikke kjøre den. Vise det til meg som nuller og enere, og dette er C programmere vi bare skrev. Nå, jeg, som et menneske her, jeg ærlig har ingen anelse om hva disse ulike mønstre av nuller og enere representerer. Tilbake i dag, jeg, med mine hullkort eller lignende, ville faktisk nødt til å slå opp hva disse ulike mønstre av 01111000, faktisk representerer. Eller verre, ville jeg trenger å gjøre punching eller etablering av disse mønstrene av nuller og enere. Men for nå, ta på tro at en CPU, Intel inne, så å snakke, på innsiden av alle våre datamaskiner i disse dager, vet hvordan man skal tolke disse nuller og enere. Og noen nuller og enere betyr print. Noen nuller og enere betyr spille av en lyd. Noen nuller og enere betyr ta brukerens input fra et tastatur. Det er alle slags forskjellige mønstre, men vi heldigvis, som mennesker, bare generelt trenger å bekymre deg programmering på dette ganske høyere nivå. Og i andre CS klasser kan du fordype deg ned dypere og se på ting som de nuller og enere, eller enda andre ting fortsatt. Så la oss nå konvertere dette. La oss bevege seg svært raskt bort fra C og flytte til noe litt mer trøstende, litt mer spennende ved at vi kan få tilbake våre animasjoner og lyder og sånn klart har rømt oss i denne ganske primitive grensesnitt. Så denne samme programmet i C kan representeres nå i denne programmeringsspråk kalt Scratch som følger. Dette tilsvarer dette hello world program skrevet i dette puslespillet stykke stil språk kalt Scratch. Så la meg gå videre og åpne opp dette veldig programmet. Det er igjen kalt Scratch. Det er fritt tilgjengelig, og dette er det samme vi startet i dag på. Så dette her er Scratch, og det er brutt opp i noen forskjellige stykker. På toppen til høyre, har vi den såkalte scenen, og faktisk, det er der cookies utført bare litt siden. Og på det stadiet er ting som kalles sprites, tegn eller gjenstander eller enheter. Det spiller egentlig ingen rolle hvor du tenker på dem, men de er programmerbare, bevegelige ting, og i dette tilfellet er dette program som vår student skrev har et par pepperkaker cookies, et par sirkulære informasjonskapsler, en hel haug av hjerter, en hel haug av briller. På grunn av dette, er han eller hun i stand til å programmere hver av dem individuelle tegn for seg. Nå hva betyr det å programmere disse tegnene? Vel, la meg gå videre og klikk på denne venstre cookie og blar over til venstre her. I øvre venstre av skjermen min er nå såkalte skript området. Dette er liksom en blank tavle, i utgangspunktet, hvorpå jeg kan dra og slipp brikkene som, ærlig, nøyaktig hva de sier. På toppen av denne bunken av brikkene er ordet Når Grønt Flagg Clicked, og hvis du ikke merke før, måten jeg startet som cookie sangen ble klikke, bokstavelig talt, et grønt flagg. Slik at puslespillbit øverst til venstre der betyr når menneskelige klikk den grønne flagg, fortsatte å gjøre følgende ting. Nå, hva gjorde de cookie fortsette å gjøre? Jeg vet egentlig ikke hvordan du skal tolke dette ennå, men det cookie tilsynelatende satt sin groove til null, så det ventet tre sekunder, deretter skiftet gruppe til en, så det ventet et sekund, så det skiftet groove tilbake til en. Og så dette ser faktisk ut som en bit av en bug, bør ikke må endre sin groove igjen og igjen med mindre det er endres andre steder, men disse trinnene er det som er dikterer atferden til denne spesielle cookie. Så la oss faktisk bla tilbake og ikke se på noe ganske så komplisert ennå. La meg gå videre og gå til File, New, og få et rent rulleblad. Så nå, jeg faktisk har en tom script område, en tom scene, med vår standard sprite Scratch, og øverst til venstre på skjermen min har jeg pallen av alle sine tilgjengelige brikkene. Og vi vil ikke gå gjennom nesten at mange av disse tingene i dag fordi, igjen, de fleste er selvforklarende, men vi vil forsøker å kategorisere dem og påpeke likhetene med disse fremtidige språk som vi vil dykke. Og øverst til venstre her er den første Når Grønt Flagg Clicked, så la meg dra dette over her, zoome ut litt. Og hvis jeg klikker på den grønne flagg, skjer det ingenting egentlig fordi Jeg har ikke festet noen logikk, noen uttalelse så å si, til at grønt flagg, så la meg gå opp til kategoriene over her. Jeg er for tiden i Control kategorien. Jeg istedenfor kommer til å gå ned til Looks kategori, og det er en hel haug med ting her som sier Say, Tenk, endre farge, Switch Costume. Så du kan gjøre dumme ting med kostymer og lyder og lignende. La meg gå videre og bare si si, og nå merker som jeg drar og slippe dette puslespillet stykke, det kommer til å ønske å klinke inn i den tilsvarende form. Så når jeg går videre og gi slipp på musen min, låse de sammen, og nå hvis jeg går over her og klikk på den grønne flagg, katten sier faktisk hei fordi det er hva som er inni av denne hvite boksen. Vi vil snart se at denne hvite boksen er det som kalles en argument, eller en parameter. Det er en måte for å endre virkemåten av, i dette tilfellet, en puslespill brikke, men hvis jeg ønsker å si nøyaktig hva jeg sa før, si hei, verden, kan jeg nå gå tilbake over her, Klikk play, og "Hello, World" er hva som er sagt. Så vi er bokstavelig talt programmering nå. Det er ikke alle som overbevisende av et program, men minst det er litt mer overbevisende enn noe som ser, på første øyekast, som dette. Og vi kan raskt få enda mer uttrykksfulle fordi i Scratch, som i andre språk, er det all slags setninger, ikke bare si eller skrive noe, men du kan gjøre ting som venter, som vi nettopp så med informasjonskapselen, noen flere sekunder. Du kan spille av lyder i miljøet av Scratch bare som du kan i et vanlig dataprogram spille lyd. Du kan sjekke det som kalles boolske uttrykk. Så nå, la oss begynne å legge til vår verktøykasse noen terminologi som relaterer faktisk med det eksemplaret som Josef og jeg gjorde her med sokker. Så uttalelser er bare faktaopplysninger. Gjør dette. Et direktiv for sprite, eller meg menneskelig, å gjøre noe. Et boolsk uttrykk er noe som har en verdi, en såkalte sannheten verdi, det er enten en null eller en, falske eller sant, av eller på, eller ingen ja. Spiller egentlig ingen rolle hvordan du tenker på dette, men det er en binær tilstand. Som Nate diskutert i onsdagens video, to forskjellige ting. Så i Scratch, boolske uttrykk tilfeldigvis se som disse blå gjenstander her, og i dette tilfellet, er spørsmålet mark innebærer at du spør et spørsmål. Er katten, eller sprite, rørende musepekeren? Så dette er bare ett eksempel på en Scratch blokk som kommer å tillate oss å sjekke ja eller nei, er musen berøre sprite på skjermen? Og dette kan være nyttig hvis du faktisk ønsker å gjøre ting med musen. I tillegg til boolske uttrykk, har vi ting som er musen ned, slik at du kan oppdage den slags spørsmålet også. Vi kan gjøre matematikk hvis du faktisk ønsker, og det er faktisk mer overbevisende bruksområder for denne enn bare ren av aritmetikk, som vi skal se. Pseudo tilfeldigheten og gjør programmet ser ut til å tenke eller oppfører seg annerledes basert på noen tilsynelatende tilfeldige verdier, og da har vi ting som boolske uttrykk som AND. Så hvis du faktisk ønsker å sjekke to verdier, vil vi se på Skrap at vi faktisk kan teste om dette er sant, og dette er sant. For eksempel, i tilfelle av mine sokker, jeg kunne har på Helt til slutt stilte spørsmålet om venstre sokk er på og rett sokk er på, sluttet. Du er ferdig for dagen, så det ville være en mulighet for det. Så la oss gå videre og prøve å sette noen av disse sammen og gå inn i et par eksempler mer overbevisende enn dette. Så la meg gå videre her og åpne opp noen av eksemplene som alltid vil være på kursets hjemmeside også, og åpne opp hello2. Så i hello2 her har vi et program som gjør noen ting, men det er ikke å gjøre det så effektivt som vi kan. Så her står det "Hei, verden" i ett sekund, og deretter venter et sekund. Og gjør da det igjen, og deretter gjør det igjen. Så hvis jeg klikker på den grønne flagget, sier Scratch "Hello, world. Hei, verden. Hei, verden. "Og dette er åpenbart kandidat nå forbedring. Hva er marginal forbedring, forhåpentligvis, kan vi nå gjøre hvis Scratch støtter konseptet? En slags loop. En slags repetisjon, nå, ville være hyggelig, så la meg faktisk prøve det. La meg faktisk gå og flytte denne. Så varsel kan koble blokker like enkelt som du kan legge til feste dem. La meg gå under kontroll, bla nedover her, og ja, Det er dette puslespillet stykke her, Gjenta og Forever and Alltid If. Så det er en rekke måter å uttrykke looping konstruksjoner i Scratch. Den jeg sannsynligvis vil her er ikke alltid fordi jeg bare ønsker at dette skal skje tre ganger, men sannsynligvis Gjenta. Så la meg dra Gjenta over her, dra og slipp den, og nå i stedet for å si "Hei, verden" tre ganger, la meg dra dette puslespillet stykke her. Og selv om det ikke synes å passe, er programmet smart nok til å innse det vil vokse til å fylle, så det er det figurer som materie og ikke den absolutte størrelse. La meg endre repetisjon til tre, og nå la meg gå fremover og dra vente ett sekund i der også. Det kommer til å knipse i så vel, og så nå skal jeg dra disse gutta over her og bare kaste dem bort fordi jeg trenger dem ikke lenger. La meg zoome ut og klikk på den grønne flagget nå, og vi har samme program, men som jeg spådde før, bedre designet fordi du kan forestille deg hvor ille dette programmet ville komme, sikkert estetisk, hvis du måtte begynner å kopiere og lime inn, kopiere og lime inn, eller dra og slippe de samme darn ting igjen og igjen. Nå, bare si ting på skjermen, skrive til skjermen, egentlig alt ikke så spennende, så la oss åpne en tredje avviket her. Og nå, som du ser, vil dette raskt bli irriterende - [MEOW] DAVID MALAN: - men det er også litt søt. [MEOW] DAVID MALAN: Ok, så bedre, og vi kan sikkert bruke det samme overgangen chunking dette opp i en loop struktur, men la oss gjøre det mer interessant likevel. La meg gå videre og åpne opp kvart varians her, hvor jeg ta ting et skritt videre. Så ifølge dette, dum om dette er først øyekast, er hva dette programmet kommer til å gjøre? Det kommer til å meow gang. Hvorfor? Vel, man er, så vidt jeg vet, alltid mindre enn to. Det er ingen forestilling om tilfeldigheter her. Jeg har bokstavelig hardkodet en og to, men dette er et eksempel nå for å faktisk bruke en boolsk uttrykk. Mye som som Josef gjorde i pseudokode hans innrykket IF du finne matchende sokker gjør deretter følgende, her har vi et uttrykk hvis man er mindre enn to DERETTER - og faktisk enda vi har en liten bit av innrykk, hvor den lilla er litt innrykket til høyre - Da er du kommer til å spille av lyden meow. Nå, i dette tilfellet, er at man alltid er mindre enn to, så dette er slag av en sløsing med en betingelse. Men vi vil være i stand til, som vi skal se, å plugge andre ting i disse plassholderne der en og to nå er. Så la oss nå gå videre til eksempel fem av disse flere hellos og se på hva dette programmet kommer til å gjøre. Så nå, i en engelsk setning, hvordan fungerer dette Programmet oppfører seg? PUBLIKUM: meows halve tiden. DAVID MALAN: Meow er halvparten av tiden, så dette er en måte å formidle en veldig enkel idé. Selv om vi måtte bruke noen ulikheter her i noen tall, er dette egentlig bare en programmatical måte, en presis måte, sier hvis mynten kommer opp hoder, går fremover og meow. Eller omvendt, hvis mynten kommer opp haler, ikke meow. Og i dette tilfellet, hvordan vi uttrykker det? Vi vil plukke et tilfeldig tall fra 1 til 10, og hvis det tallet er mindre enn 6, gå videre og meow. Og hvordan kom dette her? Vel igjen, merker bare å dra og slippe og ting låses på plass. Så la oss nå se om denne tilfeldigheten fungerer. La meg gå videre og klikk på den grønne flagg. [MEOW] DAVID MALAN: Ok. [MEOW] DAVID MALAN: Ok. Ok, bra, så vi fikk hoder, hoder, haler effektivt. Haler. [MEOW] DAVID MALAN: Heads. [MEOW] DAVID MALAN: Excellent. Det er alltid vanskelig når bare statistisk du får en dårlig kjøre, og det er alle hoder, og programmet faktisk ikke fungere som du ville håpe. Men denne gangen, det virket, og vi synes å ha, hvis vi gjorde dette et uendelig antall ganger, 50% sjanser. Nå igjen, ikke alle som interessant, bare gjør katter meow, så la oss se om vi ikke kan fremme dette litt lenger her i versjon seks. Så nå har vi virkelig irriterende versjon - [Meows med noen sekunders] DAVID MALAN: - og dette er det som kalles, generelt, som en uendelig loop. Så uendelig loop i dette tilfellet føler seg dårlig. Det er definitivt kommer til å begynne å høres dårlig, og likevel uendelig løkker er ikke alltid dårlig. Kan du tenke deg konteksten dataprogrammer der du vil faktisk ønsker en uendelig loop? Ja? PUBLIKUM: Når du vil sjekke en tilstand. DAVID MALAN: Ok, når du vil fortsette å se en tilstand? Som hva da? PUBLIKUM: [uhørlig] DAVID MALAN: Ok, bra, så hvis du hadde noen program, noen slags hjemme automasjon ting, der du vil hele tiden skjermen er noe tilfelle. Er lysene på? Er lysene på fordi kanskje du har en timer, og du vil ha dem til å gå av, må du kanskje gjøre noe igjen og igjen. Og faktisk, snakker om tidtakere, som har noen av dere klokker på datamaskinen eller digitale klokker, er at en uendelig loop. Det fortsetter å oppdatere tid fordi det er stadig sjekke og sjekke og sjekke har tid endret, og hvis så, oh, min gud. Klokken er endelig endret. Den trenger vise at verdi for deg. Så mens de fleste av tiden uendelige løkker er en feil, eller minst en dårlig design beslutning, noen ganger gjør de har sin verdi. Vel, la oss avansere videre her hello7. Så nå vil programmet bli litt mer interaktiv. La meg zoome inn her, og igjen, dette er hva som er fint om Scratch. Og vi vil bruke den til å være klar, Scratch, bare i dag og i neste ukes problem satt. Men på mandag, dykke vi inn C. I dette programmet her, det gjør det, evig, følgende. HVIS berøre musepekeren - nå, hvem sammenheng her? Vel, og merker at hvem som velges her nede på bunnen høyre er katten, en sprite, så disse skriptene, dette Programmet gjelder for ham spesielt. Så hvis det katt berører musepekeren, så det kommer å spille dette ned og vent to sekunder, og Deretter gjentar ad nauseum. Så la oss gå videre og trykke play. Ingenting skjer, men hvis jeg ønsker å pet cat nå, kan jeg bare. [MEOW] DAVID MALAN: Adorable. [MEOW] DAVID MALAN: Okay, mindre irriterende, men får også kjedelig, så la oss gå videre og se om vi ikke kan injisere litt mer logikk. Det var f.eks sju. Her i eksempel åtte, skal vi innføre en ELSE tilstand. Så mye som en bokstavelig veiskille, der du kan gå venstre, eller du kan gå rett, en tilstand i et programmeringsspråk språk som Scratch, eller som vi vil se C, kan tillate deg å gå i en eller annen retning via en IF ELSE konstruere. Så bokstavelig talt, IF berøre musepekeren, dette vil spille noen lyd, ELSE det kommer til å spille denne andre lyd, meow. Nå, hvis du kan slutte fra navnet på disse lydene, kan du sikkert gjette hva dette programmet er ment å trylle frem ideen. Denne katten er meowing lykkelig. [MEOW] DAVID MALAN: Lykkelig, men ikke ganske liker å bli berørt. [Brøler] DAVID MALAN: Så nå har vi en katt som vil kjefte på deg. Greit, vel, en siste eksempel med katter her, og la oss åpne versjonen ni av dette her. Så nå har vi den nest mest irriterende lyd som jeg kunne finne, så vi har en hvalross eller sjø løve her som kommer til å gjør følgende. [SEAL BARK] DAVID MALAN: Ok, så dette vil gå på før du finne ut hvordan Dette programmet fungerer. Så denne gangen har dette dyret to skript, og hva som er interessant her er at disse skriptene kommer til å utføre parallelt. Så fordi de begge starter med en grønn flagg klikket, det er som å gå som dette, og begge programmene å kjøre det gang selv om de er looping evig. Så i den øverste script, jeg har noen logikk. Hvilke funksjoner gir det der oppe? [SEAL BARK] PUBLIKUM: [uhørlig] DAVID MALAN: Hvis det er hva? [SEAL BARK] PUBLIKUM: Hvis dempet til null, det kommer til å fortsette å spille høres. [SEAL BARK] DAVID MALAN: Ok, bra. Så hvis dempet, uansett hva dette er, dette oransje ting er null, Deretter spille Sjøløve lyd og tenke "Åh, hei, "for to sekunder. Nå vet jeg ikke hva dempet er, men null maner opp ideen om falsk eller av. Så hvis dempet er falsk, så hvis ikke er dempet, fortsette å spille lyden. Greit, vel, hvordan vi deaktivere denne tingen? Vel, la oss se på den andre script der nede. Det andre skriptet sier satt dempet til null. Legg merke til det er også oransje, så hva Scratch gjør er det farger blokker i samme nyanse hvis det er liksom av logisk sammenheng. Så akkurat som dempet opp toppen var oransje, så dempet ned her nevnt i oransje blokk. Men dette er en variabel oppdrag, så akkurat som i algebra, har du x og y og z, i programmering du har variabler, men de er generelt - la oss stoppe et øyeblikk og figur hvordan å stoppe dette bjeffing. Hvordan gjør jeg dette? [SEAL BARK] DAVID MALAN: Ok. Det stoppet. Okay. Så akkurat som i algebra du har variablene x, y og z, men i programmering, ha variabler som x, y, og z er vanligvis mislikt fordi de ikke er i det hele tatt uttrykksfulle. De har ingen semantiske betydning overhodet, så i de fleste programmeringsspråk, kan variabler ha full fledged navn eller ord eller setninger, liker dempet, for å si hva de gjør. Så denne andre script også lyttet alltid, og det sa Hvis nøkkelen, tast på tastaturet Space, er trykket, spørsmålstegn. Så det er en tilstand med en boolsk uttrykk som er kommer til å svare på et spørsmål enten sannferdig eller falsk, da har jeg på innsiden av det hvis plassen trykkes OG HVIS dempet er null, sett dempet til en, andre satt dempet til null. Så denne andre veiskille, og legg merke til hvordan jeg har nestede to hvis betingelser, er en metode for å kontrollere er Space Bar trykket fordi hvis så, jeg enten ønsker å gå denne måte eller på den måten. Og hvordan invertere jeg verdien av dempet? Jeg må sjekke er det null? Hvis ja, gjør det en, andre gjør det null å derfor veksle sine to stater. All right, så vi har da noen av disse grunnleggende konstruksjoner. Vi har boolske uttrykk, og innse, også, disse er ikke alle som ukjente. Faktisk, her er en rask skjermbilde av Harvard kursets CS50 shopping verktøy, og hvilken som helst nettside der ute som har avkrysningsbokser og drop downs har virkelig, hele tiden, brukt Boolske uttrykk. I dette tilfellet her, hvis du klikker på boksen ved siden av kurs større enn eller lik 4,5, eller den samme ved siden fakultetet, du angi en boolsk uttrykk. Vis meg kurs som det uttrykket er sant. Eller til høyre, ikke er i strid med kurs jeg er tar, hvis det er merket av, så ja, du vil sjekke den tilstanden, annet du ønsker å ignorere det. Så boolske uttrykk er liksom alt rundt, men når vi setter dem i forhold, enten IF forhold, IF Andens, eller vi kan selv simulere dypere nivåer, IF ELSE IF ELSE - så det er liksom et trefoldig tilstand. Du kan gå på denne måten eller denne måten eller på denne måten. Vi kan holde hekkende ting å gå i forskjellige retninger. Så Scratch har disse loopene, som alltid. Den har disse funksjonene som Repeat 10, noen endelig antall ganger. Vi har muligheten på å konfigurere variabler, så i dette tilfellet Jeg har erklært, for eksempel en variabel kalt sokker. Jeg har initialisert til 0, og det er enda en retning vi kunne ha tatt opp her med Joseph, der kanskje jeg bare holde rede på hvor mange sokker jeg har på og avslutte programmet når den variabelen verdi er 2. Det ville være en annen måte å slags generalisere at problemet og gjør noe igjen og igjen. Vel, la oss gå videre og introduserer nå et par nye ting. Så de av dere med tidligere programing erfaring vil vet at mange språk har matriser, eller vektorer eller lister, og faktisk har Scratch noe som dette, også. Så la oss se om vi ikke kan ta ting til neste nivå her. Hvis jeg har muligheten nå, med disse brikkene til legge til noe, som et ord eller tall, til en variabel, kan jeg begynne å samle ting. Og dette er faktisk ganske apropos for ting som spill, rollespill der du er slags vandre rundt noen fantasiverden samle ting, plukke opp ting, tjene poeng, eller lignende. Du ønsker kanskje å holde styr på en slags inventar, og faktisk, det er hva en av våre tidligere studenter her gjorde med noe som kalles Fruitcraft RPG. Så la meg gå videre og åpne opp denne tingen her, og i Fruitcraft, har vi denne verden opp på toppen. Så la meg gå videre og klikk på den grønne flagg. Varsel øverst til venstre er en slags inventar. Det er implementert i Scratch som det vi kaller en matrise eller en liste, og nå har vi denne lille animasjonen. Så akkurat som vi startet tidligere med denne informasjonskapselen kjærlighetshistorie, og vi avanserte til katter og sjøløver, nå kan vi ha ting som er enda mer interaktiv. Og denne lille blå fyren, kan jeg begynne å flytte rundt hans lite hjemme her. Så det ser ut som han har en avkjøring her nede, så jeg bruker piltastene, opp, ned, venstre høyre. Og nå er jeg ute, så la det jeg har her. Ser ut som en appelsin, og faktisk, så snart jeg berører orange, blir det plopped i lagerbeholdningen min. Hvis jeg går over her til kirsebær, nå har jeg noe annet i utvalget mitt. Og dette er alt fint og søt, men tenk på hvor nå, dette er implementert. Vel, vi har denne oppfatningen av en liste, og det er tilsynelatende en puslespill brikke som du bare si hva du vil legge til det, legger orange, legge kirsebær. Nå er det denne lille blå fyren gjør? Vel, han er en sprite. Og antagelig den oransje og kirsebær - de selv var separate sprites. Og bruker forholdene i boolske uttrykk, de student var trolig i stand til å uttrykke IF blå fyren er rørende kirsebær deretter legge ordet kirsebær til hans inventar, og deretter også skjule kirsebær sprite. Så under panseret, er det trolig fortsatt et kirsebær sprite der. Vi har bare fortalt det til å bli effektivt usynlig. Nå, hvis jeg fortsett å gå over her, kan vi også gjøre dette proksimale ting, hvor jeg kan gå og lese skiltet. Så hvis blå fyr rørende tegn, kan vi ha denne Say blokk akkurat som katten snakket til oss i ord, hallo, tidligere, "Got litt frukt? Bringe den til frukt sted. "All right, så nå, tilsynelatende, Jeg har mine retninger. Jeg kan gå over her til frukt sted, stille meg opp med døren. Nå er jeg her. Jeg kan gå opp til mannen på telleren. Han oppdager at jeg er nær ham, så det trenger ikke å være ganske likt rørende, og jeg har vunnet spillet. Så det har vi Fruitcraft RPG. Så vi kan gjøre ting enda mer avanserte enn dette. Vi kan legge til lyder. Vi kan legge til pseudo tilfeldigheter. Vi kan legge til kompleksitet. La meg gå videre her, og i stedet gjøre dette selv, la meg vise deg en av de mer avanserte innleveringer vi fikk i fjor fra et visst noen som heter Blake. Kan vi ha en frivillig som er behagelig vises på kamera og er opp for å spille et spill? Hva med der? Kom opp. All right, så spillet som du nettopp har uvitende frivillig å spille - [Applaus] DAVID MALAN: - er noe fra yesteryear kalles "Frogger". Hva er ditt navn? Renda: Renda. DAVID MALAN: Redna? Renda: Det er som Brenda med en b. DAVID MALAN: Ok, Renda. David. Hyggelig å treffe deg. Så her i "Frogger", og hvis vi kunne øke volumet bare litt, er du denne lille grønn frosk på bunnen. Du kan bruke venstre, høyre, opp og ned, og målet ditt er å krysse gata, krysse elven, og berør lilje pads øverst. Aw. En mer t - redo, ok? La oss hit stopp. Ingen så det. [Applaus] [Applaus] DAVID MALAN: Yeah. Veldig godt gjort. Utmerket, takk. Slik at det var Frogger. Nå som du vet hva du har fått dere inn, en mer frivillig for en annen Spillet presentert av en annen student. Du ønsker å komme på opp? Hva heter du? RICHARD: Richard. DAVID MALAN: Richard. Greit, Richard, kom opp. [Applaus] DAVID MALAN: Du har noe som vil høres kjent snart, så her er dine instruksjoner. Så i et øyeblikk, er noen brikkene kommer til å bla opp fra skjermen som ser enten venstre eller rett opp eller ned. Du kommer til å måtte treffe piltastene på en slik måte at det tilsvarer de brikkene kø med plassholderne på toppen. Så når du ser en pil venstre, og det er på linje med den venstre pil traff den venstre pilen. Du kan begynne. [MUSIC - "sterkere" Kayne West] DAVID MALAN: All right, stor applaus for Richard. [Applaus] DAVID MALAN: Veldig godt gjort. Takk. [Applaus] DAVID MALAN: Så moro og, tilsynelatende, liksom skremmende som det kan være å implementere noe som tilsynelatende sofistikert som dette, innser at studenten ikke satt ut og bare skrive alt dette på en gang. Snarere kan du bryte ned et problem som tilsynelatende komplekse som dette i mye mindre biter, og også dette er kommer til å bli et tema. Det verste du kan gjøre i å skrive et program i de fleste helst språket er å sitte ned, få virkelig begeistret, skriver Hele greia, og så bare håpe at det fungerer ved gang du er ferdig med å skrive. Snarere prosessen med programmering bør generelt være svært bevisst, preget av gjentakelser, der du bare satt veldig små skritt for dere selv, bite-size stykker vil du bite av, og slik at du har disse forstanden sjekker, små milepæler du kan møtes. Og så kan du bygge på toppen av dem å skape mer sofistikerte ting fortsatt. Så for eksempel, hvordan kunne vi gå om implementere et spill som dette? Vel, ærlig, ville jeg absolutt starte med bare støtter én tast av gangen. La oss bare implementere støtte for venstre pilen. Slik at studenten måtte liksom lage i Photoshop, eller i Klø seg selv ved hjelp av den lille grafisk editor, en piltasten som ser ut som den på toppen igjen der, bare den grå plassholder. Da studenten måtte finne ut hva x, y koordinere til si det, hvor du skal sette den i vinduet. 0, 0 er her oppe, så du må finne ut hvor mange piksler eller punkter, for å oppveie at pil fra toppen av skjermen. Og deretter en gang det er på plass, gjør ikke programmet faktisk gjøre noe ennå, så du må deretter en andre sprite, for eksempel en grønn pil som også peker til venstre, og du Deretter må du begynne å skrive noen skript for det. Og du merker kanskje at disse tingene begynte å komme på ulike hastigheter, og fargene var i forskjellige steder, og det er fordi studenten brukte en bit av pseudo tilfeldigheter. Og ved pseudo tilfeldigheter, jeg mener bare plukke et tall mellom noe og noe fordi du kan begynne å kartlegge ting, som hvis tallet er mellom ett og fem, vel, la oss gjøre ting grønt. Hvis det er mellom 6 og 10, la oss gjøre det puslespillbit rødt i stedet. Så lenge du har en måte å generere noen form for tilfeldigheten, kan du ta avgjørelser basert på det tilfeldigheter. Og jeg fortsetter å si pseudo tilfeldig fordi det er en litt skitten hemmelighet. Datamaskiner kan ikke komme opp med tilfeldige tall. De kan bare gjøre som de får beskjed fordi de er menneskeskapte enheter. De kan ikke bare gjette et tall som vi mennesker føler at vi kan. En datamaskin har å gjøre noe matematisk å trylle opp illusjon av matematisk nummer, noen ganger med gjeldende dag av tid som en inngang til å finne ut hva for å gå tilbake, men mer om det en annen gang. For nå, bare vet at vi kan generere pseudo tilfeldigheter. Så når jeg har muligheten til venstre pilen for å starte vises til forskjellige tider og ved forskjellige hastigheter, da Jeg kan gå tilbake og legge noen av disse hvis forholdene. HVIS dette sprite berører den andre, og pil venstre har trykket - så tre forhold i denne saken. Jeg kan bruke den og blokkere kanskje, i så fall - SÅ jeg ønsker å gå videre og øke poengsummen. Og på toppen, vi har en score, vi har Awesome, Cool, God og Boo. Så det er tydeligvis fem variabler som denne studenten brukes til å holde styr på disse ulike beregninger. Så kort sagt, er sluttresultatet fantastisk. Det er morsomt, det er gøy å spille, er det engasjerende, men dette er ikke der studenten begynte. Han eller hun begynte på en mye mindre sett med trinn. Så hva er noen andre byggesteiner som vi kan veve inn i disse programmene? Vel, det er denne andre begrep i de fleste språk, Skrap blant dem, kjent som tråder. Så en datamaskin kan faktisk ikke gjøre flere ting på en tid, i det minste ikke vanligvis. Snarere, har en datamaskin vanligvis bare en CPU, og selv skjønt datamaskiner er super rask og kan, derfor, skape illusjonen av å gjøre flere ting på en gang - sjekke e-posten din, få en umiddelbar melding, skrive ut et dokument - egentlig er en datamaskin bare hoppe fra utskrift til IMing til e-post, tilbake og tilbake og frem og tilbake så fort at vi langsomme tenkende mennesker bare ikke innse at det er faktisk kjører disse programmene litt om gangen. Nå, dette er litt av en hvit løgn i disse dager fordi, i dag, mange våre datamaskiner er det som kalles multi-core, så du har en CPU, men flere kjerner, noe som er ganske like ha flere prosessorer. Og så noen ganger kan datamaskiner virkelig gjøre flere ting gangen, men generelt innenfor et program, programmer stole på disse tingene kalles tråder. Så en tråd er liksom som en miniatyr program som kan eksistere sammen med en annen miniatyr program og kan kjøre parallelt, eller i det minste kan kjøre under illusjonen om at de kjører samtidig. Så Scratch støtter disse tingene kalles tråder. Du kan ha flere skript som utfører på en gang, akkurat som vi gjorde med sjøløver og dette gir oss mulighet til faktisk deretter har samspill mellom disse sprites. La meg gå videre her og trekke opp, la oss si, tråder, og spille dette som følger. Vi har to sprites, hver av dem vi vil se har bare ett skript. Og du merker det synes å være noen intelligens i katt i dette fordi han får nærmere - [Brøler] DAVID MALAN: - og nærmere den lille fuglen. Så hvordan er fuglen fløyet? Vel, la oss ta en titt på fuglen først. Fuglen script sa når den grønne flagget er klikket, gå til x lik negative 115 og y er lik 150. Så jeg bare funnet ut en tilfeldig sted hvor jeg ville fugl å starte, og jeg bare plopped ham der som standard. Så Alltid IF ikke berøre katt, så dette er en annen slags looping konstruksjon, men samme idé, gjøre dette igjen og igjen og igjen. Så lenge du ikke berører katten, flytte tre trinn, og hvis du er på kanten, sprett, hvor det er liksom en refleksjon i biljard forstand. Så det er slik fuglen beveger seg rundt slags tilsynelatende tilfeldig, men det er bare fordi det er retur av veggene i dette tilfellet. Nå katten, i mellomtiden, er slags juks. Katten, når den grønne flagget er klikket, ja, starter i noen plassering, et tilfeldig sted - i det minste delvis som per pick tilfeldig grønn blokk der - og deretter Alltid IF berøre fugl, spille løven lyd, og deretter stoppe skriptet. Så når jeg sa avslutte, eller avslutte før, det er et puslespill brikke i Scratch som bare vil drepe programmet på det peke fordi det er slags logisk gjort. Men ellers, her merke til hva som kommer til å skje. Peker mot fugl og flytte ett trinn. Så dette peker mot fugl er slags en fordel katten har i at det er homing på bevegelige fugl, og vi kan nå gjøre dette programmet enda mer interessant. Istedenfor å flytte ett skritt om gangen per CPU syklus, per streik toll av gongongen, så å si, la meg gå videre og flytte, la oss si, fem skritt om gangen, så katten. Klikk Kjør, og nå er han virkelig finner ham raskt. Hvis vi dobler dette videre til 10 trinn, den slags går riktig for ham. Nå kan vi gi fuglen, kanskje litt av en fordel. La oss gå til fugl og sier i stedet for å flytte tre trinn, la oss flytte ham 30 trinn. Men han fortsatt fikk fanget til slutt. Så her har vi to tråder. Det er fengslet i Scratch med to skript og to sprites, men ideen på andre språk er at du kan skrive, i hovedsak, for mange programmer som dette og har dem kjøre virkelig, eller imaginarily, parallelt. Nå er det også dette konseptet i programmering kjent som hendelser, og dette er noe vi ikke vil se i C, de språk kjent som C. Vi vil se det mot semesters slutt i web-programmering, når vi introduserer JavaScript og oppfatningen av bygge websider som er dynamisk og samhandle med brukerne. Så i dette tilfellet, har vi et veldig enkelt eksempel av to sprites, gutt og jente, hver av dem har sine respektive tråder, men noe disse to er inter-kommunikasjon ved hjelp av noe som kalles hendelser. Så la meg gå videre her og zoome inn på gutten manus, som ser ut som dette. Når grønt flagg klikket, alltid gjøre følgende. Dersom nøkkelen Space, eller mellomromstasten, trykkes, sier Marco for to sekunder, det er rent estetisk på skjerm, en liten tale boble, men så kringkastes. Så kringkasting er en annen Scratch stykke som er representerer en klasse av funksjonalitet i programmering som gjør at ulike programmer, ulike tråder, til inter-kommunisere, å liksom sende meldinger, en til en annen. Passerer et stykke papir i klassen er liksom den lave tech tilsvarende. Så kringkaste arrangementet. Jeg kan sende denne meldingen, og ordet hendelsen er helt vilkårlig. Scratch har noen ganger disse drop downs, så jeg bare kom opp med en tilfeldig ord som hendelse fordi nå, hva gutten gjør når jeg trykker på nøkkelen er han sender denne hendelsen. Og hvis jeg ser nå på jenta manus, er hennes script super enkelt fordi alt hun trenger å gjøre er ikke handle når grønt flagg klikkes. Hun er utformet til handling når hun mottar sitat, unquote, "Hendelse", og på det punktet, hun lytter derfor for den såkalte hendelse igjen og igjen. Så snart hun får så fall hun kommer til å rope Polo i to sekunder. Og så kan du kanskje slutte fra dette nøyaktig hva neste resultatet kommer til å bli. La meg klikker det grønne flagget. Ingenting skjer fordi jeg trenger å gjøre hva? PUBLIKUM: Space Bar. DAVID MALAN: Space Bar. Boy sier Marco, sier jenta Polo. Men det er ikke vanskelig kodet per se. Det er inter-kommunikasjon mellom skript, så nå er vi har muligheten til å gjøre enda mer komplekse programmer hvor disse to er liksom inter-kommunikasjon. Så i hvilke retninger kan vi ta dette? Vel, i oppgavesettet 0, egentlig, er målet å ha det gøy med Scratch. For hacker utgave, vil du i stedet ha det gøy med en mer sofistikert versjon av Scratch kalt BYOB, Bygg Din egen blokker, men ideen er den samme. Du vil kunne - Ja, det var bevisst. Det kom fra Berkeley. BYOB er hacker utgave versjon av denne, men begge demografi, standard utgave og hacker utgave alike, den målet på hånden for den kommende uken er egentlig bare å dykke i dyp, få hendene skitne med programmering, og gjøre noe interessant, gjøre noe interaktivt, gjør noe kunstnerisk, gjør noe gøy å faktisk demonstrere, slik at ved ukens slutt, vil du ha et prosjekt, ikke bare for den første CS50 pset, men du vil ha en Noe som du kan vise frem i Annenberg til venner eller familie ved å laste den opp til MIT hjemmeside. Og så som jeg sa på onsdag, forventer vi 90% av klassen, generelt, for å gjøre de vanlige utgavene. Innse at det er også dette uttaket for de av dere som ellers finne deg selv litt lei med det grunnleggende og virkelig ønsker å dykke i og lage en visjon du allerede har med tidligere bakgrunn i dette mer vennlig miljø. Så la meg trekke opp en annen eksempel at en av våre tidligere studenter her gjorde og fortelle litt noe gjennom sang. Det samme som dette spiller, tenk på hvordan du går om implementere dette programmet ved hjelp av nettopp disse samme byggeklosser, en liten bit av pseudo tilfeldigheten, og en litt kjent sang. Hvis vi kunne øke volumet bare litt? [MUSIC - "Det regner menn" The Weather Girls] DAVID MALAN: Det er nok for CS50. Vi vil se deg på mandag. [Applaus]