[BAGGRUND STØJ] Virker det? PATRICK REBESCHINI: Vi kan komme i gang. OKAY. Alle tiders. Lad os starte. Så det er min største fornøjelse at byde jer alle her i dag for første forelæsning af, godt, Introduktion til Computing og programmering. Også kendt som CS50 eller godt, CPSC 100, officielt her på Yale. Så vi kunne ikke være mere begejstret at byde jer alle her. Mit navn er Patrick Rebeschini. Jeg er hovedet instruktør for klassen. Jeg er her repræsenterer en gruppe af omkring 60 medarbejdere der vil arbejde med dig hele semesteret. Dette tal er næsten 60 af os. Endnu langs den ekstraordinære Niveauet for forpligtelserne at vi sætter ind i denne klasse, gør CS50 klassen på Yale University, der tilbyder den største grad af støtte til alle jer. Og vi kunne ikke være mere stolt af tilbyder denne klasse her igen. Faktisk som du vil snart opleve, CS50 er meget mere end en klasse. Det er et fællesskab. Og du vil være en del snart af dette fællesskab. Dette er det andet år, Yale tilbyder denne klasse. Vi bygger på den yderste succes sidste år, hvor for første gang, her på dette universitet, bachelor læring assistent blev vedtaget i klasseværelser. Det hele startede med denne klasse sidste år. Så som du ved, er klassen undervises sammen med Harvard University. At undervise dette kursus vi er relying-- vi kan regne med stor ekspertise David Malan og Harvard holdet. David har været undervisning CS50 for godt 10 år nu. Og hvert år har han været skubbe grænserne og forbedre oplevelsen klasseværelset. Igen kunne vi ikke være mere glade for at fortsætte dette samarbejde med dem. Faktisk er en af ​​de mest interessante dele, Jeg vil sige at køre denne klasse nu, både på Harvard og her på Yale, er det virkelig utroligt gensidig inspiration af ideer, der tager sigte på at forbedre lærerig oplevelse for jer alle. Så som et resultat af denne omfattende samarbejde mellem de to universitet, CS50 er stolt over at annoncere den nye version i år med mærkbare ændringer. David vil alle fortælle os om dem nu. Så please-- dette væsen sagde, bedes du tilmelde mig og velkommen til at give et store runde af bifald at byde velkommen til David og Harvard hold her på Yale. [BIFALD] DAVID MALAN: Tak. Tak. Dette er CS50, Harvard University og Yale University introduktion til den intellektuelle virksomheder af datalogi og kunsten at programmering. Og hvad det betyder, er, at dette kursus i sidste ende, handler om problemløsning. Faktisk mange af jer måske er kommet ud af gymnasiet eller har brugt de sidste par år gad vide hvad nogle af dine venner gjorde sidste år eller i andre klasser. Og dog, er virkeligheden er, uanset hvad vi gøre ved slutningen af ​​dagen i denne klasse, det vil være om problemløsning. Og som sådan, måske tage nogle tryghed i det faktum, at 73% af de studerende, der tage denne klasse, både her på Yale samt på Harvard, har aldrig taget en CS klasse før. Så hvis du sidder her i publikum i dag spekulerer hvorfor du sidder her i publikum i dag, eller måske du bare fulgt sammen med nogle venner, eller måske du har været en lidt spændt på, hvad datalogi og programmering er, indser at de fleste af dine klassekammerater til til venstre og til højre for dig er meget i samme demografiske. Og ja, hvis vi ser På sidste års statistik inden de studerende af CS50, både her og på Harvard, 58% af de studerende beskriver sig selv som mindre komfortabel. 9% er mere komfortabel. Og så 33% er et sted midt imellem. Og der er ingen formel definition hvad disse skovle betyder. Du slags ved, du er mindre behageligt, hvis du er. Du føler lidt urolig med måske at være i klassen. Du er ikke helt sikker på, om en computer videnskab klasse er i sidste ende for dig, og indse, at du er i meget godt selskab. Og faktisk sortering, og vurderingen, og den feedback, og alt dette støttestruktur i klassen til sidst meget individuel. Højere grad end de fleste helst anden klasse ved design. Og ja, der i sidste ende spørgsmål i denne klasse er ikke så meget, hvor du ender op i forhold til andre, men hvor man, i uge 11 eller sidste, og i forhold til dig selv i uge 0 her vores første. Så hvad betyder det? Nå, det betyder af disse 73% af studerende sidste år, der aldrig havde taget en CS klasse før, ved semesterstart, de var dypning i et sprog kaldet Scratch, som vi selv vil se her i dag. Og ved udgangen af semester havde de gået gennem hele denne liste over udfordringer. Startende med et sprog kaldet c. Implementering, hvad er ved første øjekast, går at være lidt af en udfordring for nogle, men temmelig glædeligt, når du få Super Mario hoppende op og ned en pyramide gennemført, omend, med blot noget, der hedder ASCII kunst. Implementering sidste year-- hvad de studerende sidste år derefter gjorde efter det var gennemføre deres egen Cæsar cipher og vigenere cipher. Så krypteringsalgoritmer som du kunne scramble oplysninger og derefter unscramble oplysninger til at sende hemmelige beskeder. Spillet af 15. Hvis du kan huske fra barndommen eller nogle af parterne fordel, den lille plastik spil hvor du flytter numrene op, ned, venstre og højre at forsøge at få dem i rækkefølge, faktisk at gennemføre det spil og løse logikken kræves der. Og så vi dabbled i retsvidenskab sidste år. Så i midten af ​​semesteret, studerende, der aldrig har haft brugt deres tastaturer til dette formål før, skrev software at komme sig, så at sige, JPEG eller fotografier at vi havde et uheld slettet fra et digitalt hukommelseskortet fra et kamera. Gendannelse hemmelige beskeder fra indersiden af ​​en bitmap billede, og andre sådanne typer af grafik samt. Vi omformede derefter til at give hele klassen en ordbog. Kun en virkelig stor tekstfil med 150.000 engelske ord. Og alle blev udfordret en eller anden måde at læse, så at sige, disse ord ind i hukommelsen. Ind i computerens hukommelse. Og så besvare spørgsmål af formen, er det et ord? Er det et ord? Er det et ord? Virkelig bare gennemføre en stavekontrol. Og så udfordrer hver andet med en stor board-- en leder bord for at se, hvem der kunne bruge den mindste mængde hukommelse, i det mindste beløb af tid til at faktisk stavekontrol store dokumenter. Vi skiftet fra da til gennemføre sin egen webserver. Så ikke gøre websider i sprog som HTML og CSS, hvis du er fortrolig. Men faktisk gennemføre den server, lytter på internettet for anmodninger fra browsere og derefter reagere på disse anmodninger. Så gennemføre vores egen e-handel som hjemmeside, hvor studerende kunne købe og sælge aktier. Tegning i næsten realtid aktiekurser fra Yahoo Finance. Og giver eleverne mulighed for at se hvordan deres portefølje udvikler sig. Og så endelig et mash up Google News og Google Maps hvorved studerende ved sigt ved vilkår ende havde evnen til at klikke, og runde, og søgning på et Google-kort. Og så se alle nyhedsartikler, der er proksimalt for disse særlige områder. Så virkelig går fra nul til 60. Og undervejs har det, vi havde sidste år kaldte, hacker tilføjelser. At hæve yderligere for dem af jer der kan meget vel have en god mængde erfaring bliver i at 9% på mere komfortabel. Så indser, at der er en meget høj loft selv inden de udfordringer for studerende kommer fra en anden baggrund. Fordi i slutningen af den dag, vi er i sidste ende fokuseret ganske enkelt på dette. Men hvad betyder dette betyde, problemløsning? Så lad os foreslå, at vi destillere det sådan. Så problemløsning er virkelig netop denne form for billede. Så du har fået input til nogle problemer, noget, du rent faktisk ønsker at løse. Målet er at få output, en løsning på dette problem. Og så i midten er hvad vi vil kalde en sort boks. Du behøver ikke nødvendigvis kender eller endda ligeglad med, hvad der er indeni den sorte boks. Alt du ved er, at når du fodrer input ind i det, du forhåbentlig få output eller en opløsning fra det. Og mens vi i dag vil se både på ind- og udgange, vi får lang sigt, og over løbet af hele semestret, fokusere på, hvad der er indeni den kasse. Og deri vil ligge noget, der hedder algoritmer. Trin for trin instruktioner til faktisk løse nogle problemer. Men hvad er et eksempel på nogle input? Så måske en simpel ting på start af hvert skoleår, nogen måske ønsker at tage fremmøde. Så vi kan gøre en, to, tre, fire, fem, seks, og hvordan ville jeg holde styr på disse oplysninger. Jeg kunne bare gå en, to, tre, fire, fem, seks. Og bare bruge slags enkelt cifre. Eller jeg kunne faktisk optage dette lidt længere sigt. Og hvordan gør jeg repræsenterer alle mennesker i dette rum? Tja, jeg kan gøre noget lignende, OK. Jeg ser en person. Okay. Jeg ser en anden person, en tredje person, og så videre. Men ingen tæller folk som dette. Så bogstaveligt, de fleste af os, hvis vi er selv kommer til at tegne noget som helst, sandsynligvis kommer til at gå en to tre fire, måske få lidt fancy, fem, seks, syv, otte, ni, ti og så videre. Og det er faktisk en system kaldet unary. Uno, ligesom uno indebærer en, hvor man bare have et bogstav i alfabetet. Du har lige fået denne hash mærke. Og jeg, for effektivitet, bare trak disse hash mærker, i sidste ende som lige linjer. Men jeg kunne have trukket dem som små tændstikmænd. Hvor til at repræsentere en person, en indgang, Jeg bare trække en pind figur eller en hash mærke. Men det er ikke alt, udtryksfulde. Hvis alt jeg har, er disse hash mærker, endsige tændstikmænd, hvordan kan jeg repræsenterer noget som nummer 15? Eller 15 mennesker i lokalet? Jeg måske nødt til at gøre noget som en, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15. Det bare ikke skalerer meget godt. Som indgangene få store, vi har brug for et bedre system end dette. Og det viser sig, at system, som computere bruger er ikke så forskellig fra hvad du og jeg ved. De fleste mennesker i dette rum, selv hvis du er blandt dem mindre komfortable, ikke nødvendigvis ved hvordan din Mac eller pc virkelig virker, du har sikkert mindst hørt, at under emhætten er 0'er og 1'er. Det såkaldte binære system. Så ja, computere har mere end bare hash mærker i deres ordforråd, men ikke så meget af en ordforråd som vi mennesker. Faktisk behøver vi mennesker ikke bruge binær. Bi betyder 2, 0 og 1. Men decimal, deca hvilket betyder 10, 0 til 9. Så vi har en meget mere udtryksfuld kapaciteter i vores normale menneskelige verden. Men jeg vil hævde, at disse systemer, binær, og decimal, og alt i mellem og ud over, er faktisk alle helt fortrolig. For eksempel overveje dette eksempel her, 123. Så dette virkelig er, selvfølgelig, et tal, vi kender som 123. Men alt jeg bare trak var bare denne mønster af symboler, glyffer så at sige. Slags figurer på tavlen med kridt. Men hvorfor gør vi det samme og intuitivt forstå dette som 123? Tja, hvis du var ligesom mig i folkeskolen, du sikkert erfaret, at dette er den 1s kolonne, er dette kolonnen 10s, dette er kolonnen 100s. Og hvorfor er det nyttigt? Tja, det er simpelt aritmetisk du nu gøre for at komme fra et mønster af symboler til en række vi forstår intuitivt. Er hvad, 100 gange 1, og derefter 10 gange 2, og 1 gange 3, hvilket naturligvis er kun 100, og dette er 20, og det er tre. Og så hvis vi tilføje dem together-- ah. Så deri ligger slags ræsonnement bag hvorfor dette sæt af symboler betyder noget virkeligt og numerisk. Nå, computere gør præcis det samme, men de kun kan tælle så højt som én. Betragtninger jeg var i stand til tæller så højt som tre. Og i virkeligheden, hvis jeg holdt vil jeg kunne gå så højt som ni i dette system. Computere har kun nuller og dem i deres alfabet. Så hvad betyder det? Tja, det betyder bare, at hvis en computer ønsker at repræsentere, siger tallet 0, måske ved hjælp af tre characters-- tre bogstaver i alfabetet så at sige, det er sådan en computer repræsenterer 0. Så ikke alt, skræmmende hidtil. Det er præcis, hvad vi mennesker ville gøre. Og i virkeligheden, de fleste af os ville bare ignorere nuller alligevel. En computer, hvis det ønsker at gemme nummeret 1, viser sig kommer til at gøre dette. Og en computer til at lagre nummer 2 er ikke vil gøre det unary systemet, som jeg hentydet til tidligere. Det er faktisk kommer til at gøre dette. Og det er sandsynligvis hvor mønstret begynder at blive mindre indlysende for de fleste folk. Det er to, det er 3. Mærkeligt, det er nu fire. Og nu er det virkelig synes at være måske kryptisk, men det er ikke, hvis vi betragter hvad binære egentlig betyder. Det betyder, at du har to bogstaver i dit alfabet. Så to mulige tegn for hver pladsholder. Så det virkelig betyder, at vi skal hen brug for en 1s sted, eller 2s sted, et 4s sted og derefter 8, og 16, 32, og 64. Og hvad er forskellen der? Ligesom disse er 1, 2, 4, 8, 16, 32, 64. Og før vi havde 110, 100.000, 10.000. Hvad er ligheden der? Og hvad er mønstret? Ja. STUDENT: beføjelser 2 i stedet for beføjelser 10. DAVID MALAN: Ja. Beføjelser to i stedet for beføjelser 10. Og så hvis jeg ønskede at holde går, 8, 16s og så forth-- men nu, hvis du har den slags af fingerpeg, nu det binære system er faktisk temmelig ligetil. Hvorfor er dette mønster af 0'er i verden af ​​computere 0? Tja, fordi det er 4 gange 0, 2 gange 0, 1 gange 0 og du får 0. Hvorfor er dette nummer 1? Samme ræsonnement, men nu er vi har en 1 i 1 kolonne. Hvorfor er dette 2? Vi har et 1 i den 2s kolonne. Og hvordan så gør jeg repræsenterer sige, nummer 7 i binær? Sig højere. STUDENT: Tre 1s. DAVID MALAN: Tre 1s. Så 1, 1, 1, fordi vi kun har brug for 4 plus 2 plus 1 giver mig 7. Okay. Så derfra, hvordan gør vi repræsenterer 8 med 3 pladsholdere? Ja. STUDENT: 1, 0, 0, 0. DAVID MALAN: Ja 1, 0, 0, 0. Og dog måske, jeg slags af teknisk brug at tilføje en anden pladsholder til bestyrelsen. Hvis jeg ønsker at passe, at jeg faktisk nødt til at gøre noget som dette. Så jeg faktisk nødt til at bruge nu den 8s kolonne, og det er fint. Men det mærkelige i computing er at der kommer til at koste os noget. Du har brug for mere RAM i din computer nu. Du har brug for mere hukommelse fordi du har brug for noget fysisk at lagre, at ekstra bit, så at sige. Binære cifre. Og ja alle, der er sket her, ligesom decimal systemet, hvis vi bliver ved med at tilføje numre op og op og op, vi går til 5 til 6 til 7 til 8 det er ligesom at bære en, bogstaveligt talt. Og så alt det andet går tilbage ned til nul. Men hvordan vi faktisk repræsenterer disse ting fysisk i en computer? Nå, i slutningen af ​​dagen, det eneste fysisk input går ind i min computer her er denne strømkablet, så elektricitet eller elektroner fra væggen. Og så hvordan får jeg fra noget fysisk sådan til rent faktisk repræsenterer en idé som denne i stedet. Tja, hvad kan vi gøre? Vi kunne overveje at, okay, måske hvis elektriciteten flyder Jeg kunne gemme det og holde fast i det. Og hvis jeg holder på til nogle el, der er lige til at vilkårligt repræsenterer en 1. Og hvis jeg trække stikket og der er ikke noget der, du ved, der er bare til vilkårligt at repræsentere en 0. Så hvis noget er der, en. Hvis intet er der, 0. Eller du kan gøre det lidt mere visuel. Her er en 0. Der er ikke noget interessant igangværende på omkring bagsiden af ​​min telefon. Men hvis jeg tillader lidt bit af elektricitet til at flyde, selvom det er lidt lys i her, min lommelygte gik. Så jeg opbevare en ladning og ergo, denne telefon er nu en 1. Så 0 1. Så med en iPhone hvor højt kan jeg tælle bruge denne form for tilgang? Jeg mener at en. Det er ikke alle, der overbevisende. Så hvad mere kan vi gøre? Jamen så lad os se, er nogen på deres telefon lige nu, at jeg kunne låne? Enhver, der har en telefon med en lommelygte indbygget? Må jeg låne? Jeg har ikke brug for det ulåst. Okay. Tak. Lad mig låne dette. Okay. Så hvis jeg nu rulle op og her, hvad skal jeg repræsenterer nu? Ja. Så det er en tre, fordi det er i 1s kolonne, er dette i 2s kolonne. Så 1 plus 2 er 3. Og så hvis vi forsøger at få virkelig creative-- Åh, tak. Meget forebyggende. Okay. Jeg har nu tre iPhones. Okay. Og nu denne-- jeg vil ikke gøre nogen videre end dette. Hvad skal jeg repræsenterer nu? Kun syvere. Men jeg havde brug for fysisk mere hukommelse i dette tilfælde. Men det er alt det er. Du kan tænke på, hvad der foregår on-- tak du-- indersiden af ​​din telefon som blot at være en switch, der er bliver slået til og fra. Og hvis du nogensinde har hørt ordet transistor. Eller hvis du nogensinde har hørt markedsføring taler Intel indeni, der er taler til den slags hardware der er inde i computeren. Intel gør CPU'er, CPU'er, som er ligesom hjernerne indersiden af ​​din computer. Og disse CPU'er og ting, de har forbindelse at have masser og masser af bittesmå switche. Millioner, milliarder af switche kan enten være tændt eller slukket. Så computere, heldigvis, ligesom vores Mac'er og pc'er, kan tælle måde højere end 7 eller 8 fordi de har måde mere end tre eller fire bit. Måde mere end hvad der svarer til den tre lommelygter, som vi netop haft. Men nu er dette begynder at få temmelig uinteressant hurtigt. Hvis jeg vil nu faktisk være i stand til til at gøre noget mere interessant, Jeg ønsker at være i stand til at hoppe til noget som dette. Så ASCII, det ikke er virkelig en nyttig akronym, men American Standard Code til udveksling af information. Det betyder bare, nogle år siden vi mennesker besluttet, Ved du hvad, vi ønsker at være i stand til at gøre mere med computere end bare tal. Vi ønsker ikke, at de bare være dyre regnemaskiner, vi vil gerne være i stand til at gøre ting som tekstbehandling, omend meget enkelt. Senere havde vi e-mail og andre sådanne medier. Og så verden besluttede nogle år siden ifølge dette system ASCII, du ved hvad? I visse typer af programmer enhver gang du se hvad der svarer til antallet 65, ligesom det mønster af bit. Og vi kunne gøre det matematik her på brættet. Mønstret af bits, der repræsenterer 65. Tror ikke på det som 65 i decimal. Tænk på det som vilkårligt, men globalt, konsekvent som hovedstad EN. Og derefter verden besluttet, ved du hvad? Lad os tage et andet mønster af bit. Og hvis vi nogensinde se nummer 66, lad os bare antager, at det er kapital B. Hurtigt frem til H og jeg, hvis du ser 72 eller 73, at bør være et H og en I, henholdsvis. Og så længe hele verden er enig i dette. Så når du modtager en e-mail, eller du ville få en fil på en USB-stick, eller noget lignende at-- når du se, at mønstret af bits, De ved, at det bør være denne brev eller en anden skrivelse. Men det er kontekst specifik, højre. En e-mail-program kan fortolke disse ting som figurer, men en grafregner eller lommeregner kan repræsentere eller fortolke disse ting, selvfølgelig, som breve. Så med det sagt, hurtig lille anmeldelse. Dette er måske en tre tegn e-mail, der er blevet sendt til mig. Under hætten det hele er i 0'er og 1-taller, men vi er ligeglade. Vi vil begynde at abstrakte over 0'er og 1'er til breve. Og hvis jeg ser et mønster af 0'er og 1'er, der virkelig repræsenterer 72, tip, tip, 73, og derefter 33, hvad er budskabet? STUDENT: [uhørligt] DAVID MALAN: Så hvis du tror tilbage bare for et øjeblik siden, HI var det budskab, jeg forsøgte at kommunikere her, fordi H er 72, Jeg er 73, og nu 33-- ikke ville du nødvendigvis vide dette på forhånd, men det viser sig, hvis du rent faktisk se mere af diagrammet og systemet at menneskeheden aftalt år siden, det er bare et udråbstegn. Og ja, der er et mønster af symboler og tal for hvert tegn at du kan have på dit tastatur. Okay. Lad os abstract yderligere. Hvis vi ikke ønsker at bare have ting som tal og bogstaver, vi faktisk ønsker at gennemføre grafik. Tja, hvis du nogensinde har hørt akronymet RGB. Det er lidt dateret nu, men det er stadig slags der. RGB er rød, grøn, blå. Og det er bare et system at sige, ved du hvad, lad os bruge tre sæt bits. Et sæt af 8 bit, et andet sæt af 8 bits, og et andet sæt af 8 bit. Og lad os bruge disse bits at lagre, hvor meget rødt vi ønsker på vores skærm, hvor meget green vi ønsker på vores skærm, og hvor meget blå, vi ønsker på vores skærm. Og dette betyder blot, at hvis du har en lot-- et stort antal for rød, det betyder at give mig en masse rød. Hvis du har en stor nummer til grøn, giver mig en masse grønt. Og hvis du har bare en lille smule blå eller et lille antal som 33, give mig en lille smule blå. Og hvis du tilfældigvis til at kombinere dem tre størrelser, så at sige, du får her-- du næsten ikke kan se på projektoren her, men dette skumle nuance af gul eller brun. Men dette er at sige, ved hjælp af denne mønster af 8 plus 8 plus plus 8-- dette mønster på 24 bit er, hvordan en computer ville gemme disse nuance af gul i én lille prik en pixel på skærmen. Så vi er gået fra 0'er og 1'er til decimal numre til bogstaver i alfabetet. Eller mere interessant, farvede prikker. Nå, hvad selvfølgelig så kommer det næste? Nå, hvad er et billede, som du se på Facebook eller komme i en e-mail? Eller lignende? Hvad er definitionen teknisk af et billede? Ja. Hvad er et billede, der består af, hvis du ser virkelig tæt på din skærm? Ja. Det er bare en hel masse pixels. Faktisk, hvis du tager din laptop måske senere, og ser virkelig nøje på det-- afhængigt om hvor dyrt den bærbare computer er, og hvor høj kvalitet skærmen er, du kan meget vel se alle de små prikker på skærmen. Og de prikker eller pixels, hvilket betyder, at der er 24 bit, som repræsenterer hver pixel i det fotografi, som du ser på Facebook, eller at du bare tog på din iPhone for nylig. Og så er, hvordan vi får til ting som grafik. Nå, hvad er en video? En video er blot et sæt af grafik fører ved skærmen igen og igen og igen. Og så videoer rigtig, er blot mønstre af bits, der repræsenterer gitre, rækker og søjler af prikker, fører ved skærmbilledet, efter billedet, efter billedet, alias Film. Så det er det for ind- og udgange. Alt, hvad vi har nu, er en antagelse, at du hvad, hvis vi ønsker en computer at repræsentere information, vi har et system til at gøre det. Vi kan gøre det med 0'er og 1s ved udgangen af ​​dagen. Men vi kan abstrakt, så til at tale, oven i købet således at udgøre mere interessante ting. Og her på ud i CS50, og datalogi mere generelt, vi nu står på skuldrene af alle de mennesker, der kom før os, der regnede med, at ud. Og nu bare antage, at computere kan repræsentere ind- og udgange. Men lad os nu faktisk gøre noget med dem. Så en algoritme er blot et sæt af instruktioner, trin for trin, for at løse nogle problemer. Og hvad kunne man sådan problem være. Så dette er en gammel skole teknologi, en telefonbog. Og inde i en telefonbog er en hel masse navne og numre. Og disse navne er generelt sorteret alfabetisk. Så hvis jeg ønskede at finde en person i denne telefon bog som Mike Smith, hvad er en typisk menneske kommer til at gøre? Nå, du kunne blot åbne det op, se på den første side. Jeg kan ikke se Mike Smith. Drej til den anden side, Jeg kan ikke se Mike Smith. Og bare holde ud og gå. Er dette trinvis fremgangsmåde korrekt? Ja. Det er lidt dumt, højre. Det er ineffektivt, højre. Fordi det vil tage for evigt at komme til Mike, men det er korrekt. For hvis Mike er her Jeg vil faktisk finde ham. Så hvad er en lidt mere fornuftig person vil gøre? De kan stadig åbne til fronten, og måske flyve gennem telefonbogen to sider ad gangen. To, fire, seks, otte. Jeg kan faktisk ikke fysisk gør det meget godt. Men i teorien, bør dette være dobbelt så hurtigt, to sider ad gangen. Er denne algoritme korrekt? STUDENT: [uhørligt] DAVID MALAN: Ikke nødvendigvis. God. Hvorfor dette forbehold? STUDENT: Fordi han kunne være på én af de sider, som du springer. DAVID MALAN: Ja. Så selv om jeg kommer tættere og tættere på. Hvad hvis han er bare et uheld, ved dårlig held, klemt inde mellem de to sider at jeg flyver over? Så vi har brug for en rettelse til dette. Vi har faktisk brug for at så sige, vent et minut, måske hvis vi går for vidt, måske hvis vi ramte T-sektion, for T kommer efter Smith, så vi skal mindst dobbelt tilbage mindst én side. Så fixable, men der er en betinget problem der. Så det er dobbelt så hurtigt, men du måske nødt til at fordoble tilbage bare en lille smule. Men ingen i hans værelse, selvom du ikke rigtig bruge telefon bøger længere, kommer til at starte ved begyndelsen. Hvad vil du gøre leder efter Mike Smith? Du kommer til at gå nogenlunde til S '. Eller hvis du ikke rigtig har snyde ark på papiret, du kommer til at gå mindst omtrent til midten. Og slet ikke til forsiden af ​​bogen. Du kommer til at kigge ned. Og matematisk du sandsynligvis vil se M sektion, der er nogenlunde i midten. Og så du kommer til at indse, hvad der er sandt? Hvor er Mike? STUDENT: [uhørligt] DAVID MALAN: Ja. Så han er over på denne side. Og så hvad kan du gøre? Tja, både billedligt og bogstaveligt kan du rive problemet i halvdelen én gang? Og så vide, at du kan smide denne halvdel af problemet væk. Og nu er vi tilbage med fundamentalt det samme problem, men det er halvt så stor. Og så nu, hvad der er den sæt af instruktioner? Hvad er algoritmen til at finde Mike Smith? Det er præcis det samme. Nu er dette sker for at være M sektion og dette er Z sektion, men det grundlæggende formel er stadig den samme. Gå omtrent til midten, se ned, åh, darn det. Nu er jeg i T-sektion, Jeg har gået for vidt. Men også her kan du anvende den samme logik. Kast halvdel af problemet væk og nu er vi tilbage med et problem, der er en fjerdedel af størrelsen. Og vi kan gentage og vi kan gentage, og vi kan gentage indtil teoretisk der er bare én side tilbage på som Mike enten er eller ikke er. Så hvad er så kraftig, om denne idé? Jeg mener trods alt, er det temmelig intuitiv. Ingen kommer til at starte på begyndelsen af ​​telefonbogen og flip 1.000 sider for at finde Mike Smith. De fleste alle i dette rum går at gøre nogenlunde den slags algoritme Gem for tåreflåd. Og så hvorfor gjorde vi det? Nå, overveje effektiviteten. Tænk, hvor meget bedre dette algoritme var ved at bryde det ned i dens bestanddele. Så hvad gjorde jeg først gøre? Jeg tog telefonbogen. Og en datalog, og en programmør, mere generelt det viser sig, går at begynde at tælle alt på 0. Hvorfor? Tja, det er lidt mærkeligt at vi mennesker noget ud, generelt, startende fra én. For hvad er det mindste tal Vi kan tydeligt repræsenterer baseret selv på vores gamle klasse skole matematik? Nå, det var 0, hvorvidt det er i decimal eller binær. Og så kan du se i verden af computere og programmering, specifikt, vi starter tælle alt fra 0. Så jeg tog telefonen bog trin 0. Jeg har tænkt mig at åbne for Midt i telefonbogen. Og det er faktisk en udtryk for, hvad jeg gjorde. Og så trin to var kig på navnene. Trin tre er lidt forskellige konceptuelt. Jeg spørger mig selv et spørgsmål. Hvis Smith er blandt de navne, Jeg har tænkt mig at tage en beslutning. Hvis han er blandt de navne, så jeg har tænkt mig at ringe til Mike. Og jeg har tænkt mig at tage en beslutning baseret på denne oplysning. Men hvis ikke, hvis Smith er tidligere i bogen til venstre, Jeg har tænkt mig at åbne til midten af den venstre halvdel af bogen. Og så her er den dygtighed, Jeg har tænkt mig at gå tilbage til trin to. Jeg har tænkt mig at sortere i stå på mine egne skuldre og bare gentage det tidligere arbejde jeg gjorde. Men det arbejde, jeg har tilbage, er mindre og mindre og mindre. Men det er stadig at gå på arbejde. Men hvis Mike, stedet, er senere i bogen til højre, Jeg har tænkt mig at åbne til midten af den højre halvdel af bogen, derefter gå tilbage til trin to. Men der er faktisk en fjerde scenario. Mikes enten her, eller her, eller her, eller-- STUDENT: Ikke der. DAVID MALAN: Ikke der. Og ja, hvis vi forventer ikke denne fjerde og sidste scenarie vores program kan være fejlbehæftet eller fejlbehæftet på en eller anden måde. Else, quit i tilfælde af, at Vi har ikke fundet Mike overhovedet. Og ja, hvis du nogensinde har lagt mærke til din computer hængende, eller alle pludselig ord eller en anden program bare afsluttes uventet, og nogle gange dig fejl besked er bogstaveligt det. Dette program afsluttes uventet. Det kan være for en række årsager. Men nogle gange er det noget så simpelt som dette. Den humane programmør der skrev, at software var ikke klar over at, åh, der er en frem ting, der rent faktisk kan ske. Og hvis du ikke skrive kode til fange den fjerde scenarie, det er faktisk uventet tider hvad computeren kan faktisk gøre. Lad os nu kalde en nogle af disse ting. Så i gult her, jeg har fremhævet vilkår der nu er vi bare vil kalde funktioner. Funktioner i verden af programmering er ligesom tiltag, opgørelser af handlinger. Så afhente, åben for, se på, ring, åben, åbne, holde op. Det er en funktion, en procedure, en handling, helst antal synonymer ville fungere så godt. Nu hvad er disse ting nu er i gult? Hvis andet, hvis andet, hvis andet, det er dem vi vil kalde forhold i programmering, eller grene, beslutning peger, hvis du vil. Men hvordan kan du vide, hvilken gaffel i vejen for at tage, så at sige? Vi er nødt til at fremhæve vilkårene til højre der, som er disse ja, ingen spørgsmål. Disse sande falske spørgsmål. Smith blandt navne? Smith tidligere i bogen? Smith senere i bogen? Det er spørgsmål til hvor der er et ja eller nej, eller ækvivalent sandt eller falsk, eller ækvivalent, et eller nul svar. Og i mellemtiden er der kun et sidste stykke. Denne her har, hvad slags effekt? Uanset om du programmerer før, hvordan ville du beskrive, hvad trin syv og 10 gør? Hvad sagde du? STUDENT: En rekursiv trin. DAVID MALAN: En rekursiv trin. Ja, det væsentlige. Det er teknisk iterativ her, hvis du er fortrolig. Men vi vil vende tilbage til. Men det gør noget klart. Igen, det inducerer en cyklus, en løkke, højre. Du bogstaveligt går tilbage til en tidligere trin. Og så ja, det kommer til at gennemføre en form for cyklus. Men du kommer ikke til at få fast i denne uendelige, højre. For hvis du konstant tjekker er Mike her, eller til venstre, eller ikke her, i sidste ende er han ikke kommer til at være der. Og du kan bare afslutte helt som pr den sidste linje. Så det er det for ordforråd. Og det var, hvad vi ville generelt kalder pseudokode kode. Det er ikke en egentlig sprog. Det er bare meget lakoniske engelsk, men det kommunikerer det punkt. Der er ingen formel struktur her. Du bruger bare det er nogle ord, men så klare ord som du kan for at kommunikere din idé. Nu hvor god er, at algoritmen og hvor meget bedre er det? Nå, har vi ikke at komme ind i detaljerne i tal eller noget sådan. Men vi kan se på form af denne opløsning. Så hvis vi bare trække nogle xy plot her på den vandrette akse her. Lad os bare kalde størrelsen af ​​problemet. Og en datalog ville bruger typisk n som variablen her. Så n sider, eller n personer i rummet, eller hvad det er du prøver at tælle. Og så på den lodrette akse på venstre, vil der være tid til at løse. Så hvor mange sekunder gør det tage mig at finde Mike Smith? Eller hvor mange skridt tager det? Hvor mange side drejninger tager det? Så det er, hvor meget det koster mig i tide til at løse et problem. Og vi kunne trække den første algoritmer hældning, hvis du vil, som netop denne lige linje i rødt. Og jeg vil kalde det n. Hvorfor n? Hvorfor er det bare denne ene til én forhold? Tja, hvis Verizon eller uanset teleselskab tilføjer endnu en side til telefonbogen næste år, der kan skubbe Mike én endnu et skridt tættere på slutningen, afhængigt af hvor den pågældende side er. Og så effekten kan bare være at tilføje endnu en anden. Eller én side mere tur. En en til en forhold. Derimod anden algoritme. Hvor meget hurtigere var det intuitivt? Hvor jeg gik to sider ad gangen? Ja. STUDENT: [uhørligt] DAVID MALAN: Ja. Så det kommer til at være dobbelt så hurtigt. Og vi ville tegne det her afhængigt af omfanget. Det er stadig en ret linie, men lavere end den røde linje. Fordi nogle nummer sider, hvis det tager du dette mange trin med den første algoritme, det vil tage dig halvdelen som mange skridt med den anden. Og så den gule linje beskriver den anden algoritme er bare at ligge under det. Men hvad er virkelig kraftfuld, er at tænke på den tredje og sidste, og forbløffende mest intuitive algoritme, der har denne form. Teknisk vi ville kalde dette en logaritmisk kurve. Log bund 2 af n i dette tilfælde. Men det betyder ikke rigtig noget. Det afgørende er virkelig den fundamentalt forskellig form, det har. Og du kan overveje, hvor meget kortere denne linje virkelig er i det lange løb. Det er konstant stigende. Det betyder ikke flade ud perfekt. Men det vokser stadig så meget langsommere da problemet bliver større og større. Og du kan tænke på det på denne way-- hvis Verizon ikke bare tilføje en side til næste år, men double antallet af sider i telefonbogen, den første algoritme might tage dobbelt så mange trin. Hvis det er 1.000 sider dette år, 2.000 sider næste år, Mike kunne være, at meget længere væk. Så det er 1.000 ekstra skridt for at finde ham. Den anden algoritme måske kun 500 mere skridt til at finde ham, fordi igen, Jeg flyver gennem det to ad gangen. Men hvad med den tredje algoritme? Hvis Verizon fordobler størrelsen af ​​telefonbogen næste år fra 1000 til 2000 sider, hvor mange flere trin er min tredje algoritme vil tage? Ja, det er kun én. Og det er den kraftfulde idé. Du kan tage 1000 side bid ud af dette problem på en gang. Og nu, hvis du overveje en dum situation, men det slags taler til effekt af dette slags intuition-- hvis en telefonbog havde ligesom, fire milliarder sider, føles som en rigtig stort problem. Og ja, måske det tage mig fire milliarder side vender sig for at finde Mike Smith i, at tilfældet med den første algoritme. Men hvor mange skridt ville det tage i den tredje algoritme at finde Mike blandt fire milliard stykker papir? Så fire milliarder du rive i halve. Du får to milliarder. Så en milliard, så 500 millioner, 250 mio, 125 million-- men det føles som det er kommer til at tage et stykke tid. Jeg muligvis 32 fingre at tælle det højt op. Men det er faktisk som få som 32 sider tårer. Du kan gå fra fire milliarder til én side dividere det oprindelige antal sider i halvdelen 32 gange indtil du er tilbage med bare, at enkelt side. Nu, selvfølgelig, jeg snyder her. Det er ikke, at vi bare er ved at blive sort af dum helt med de to første algoritmer. Jeg snyd i en vis forstand, eller virkelig jeg udnytte en antagelse. Hvad var sandt om telefonbogen i sin oprindelige form, der tillod mig til selv at bruge det tredje algoritme? Ja? PUBLIKUM: Det blev ordnet alfabetisk. DAVID MALAN: Det blev ordnet alfabetisk, ikke? Hvis det var bare i tilfældig orden, det er spild af tid, hele denne samtale. Jeg er nødt til at se på hver side, hvis det er i tilfældig rækkefølge at finde Mike Smith, før jeg kan konkludere, at han er der eller ej. Og så om hjørnet, vi har skåret er, at jeg har antages, at en anden i dette tilfælde gjorde arbejdet for mig. Og så i sidste ende invitationer spørgsmålet, ja, vent et øjeblik. Hvordan du sortere 1000 sider af navne og numre? Det er faktisk en anden problem, noget vi vil vende tilbage til i fremtiden. Men når man tænker over hjemmesider som Facebook og Google Gmail og ting som Googles egne søgning indekser, når du har millioner eller milliarder af stykker af data, der lagres i disse dage, searching-- og ikke at nævne sortering disse problems-- er i sidste ende en udfordring i sig selv. Og ja, det er da blot en af ​​disse udfordringer at vi vil se på. Så lad os nu tage et øjeblik og tage et kig på CS50 selv og give dig en følelse af hvad der er i vente i dette semester. Ja, hvis du ikke allerede har, tager et kig på denne webadresse. Og da Patrick hentydede til, i år er vi at gøre en betydelig investering alle den mere i løbet støtte struktur i form af TAS og CA'er, kontortid, §§ tilgængelighed, og digitale materialer online, så godt. Faktisk, i form af kursets foredrag, vi er her i dag. Og forventningerne dette år officielt af kurset er deltage til i dag, kursets sidste forelæsning, og et kursus omtrent i midten af ​​semestret med hvert foredrag i mellem stilles til rådighed generelt på en fredag ​​eftermiddag online, både for Yale studerende og Harvard studerende i år. Faktisk er en af ​​de grundlæggende ændringer er at vi vedtager på Harvard et paradigme meget som vi gjorde her sidste år og nu i år, så ens, vi stadig filme mest af kursets forelæsninger i Cambridge men gøre dem tilgængelige tidligere end vi har i fortiden således at de af du-- hvis du gerne, for eksempel, få et forspring på materialer på den første weekend i stedet end den anden weekend, har du adgang til disse former for materialer, søgbar, indlejres, hyperlinkable til relaterede ressourcer desto tidligere. Med hensyn til de emner, for at give dig en følelse af kursets trajectory-- og nogle af dette kan være jargon for nu, men ikke for længe, ​​bare rolig. Vi starter i dag, i sidste ende, med at se på en programmering sprog kaldet Scratch. Vi vil overgangen derefter næste uge til noget, der hedder C og derefter se på andre bygning blokke til løsning af problemer, ting kaldet arrays og algoritmer, hvordan vi bruger hukommelse til vores fordel og ulempe, og ting som datastrukturer, og derefter mod den bageste ende af klasse kigger på machine learning og ser på en anden sprog kaldet Python, hvordan internettet fungerer, hvordan internettet mere generelt fungerer, protokoller som HTTP, sprog til databaser som SQL, JavaScript til web, og i sidste ende at binde samtlige anmodninger. Og så ja, på slutningen af ​​dagen, du vil ikke lære i denne klasse Scratch eller C eller Python eller SQL eller JavaScript. Du vil i stedet mere generelt lære datalogi og grundlaget deraf, og du vil lære at programmere i vilkårligt blandt disse sprog undervejs. Så ja, et af målene af kurset i sidste ende er at tage ud alle kursets uddannelse hjul med disse sidste uger så efter dette, kan man vende tilbage til din egen fields-- om dette er eller er ikke datalogi eller ingeniør, i den naturlige videnskaber, kunst, humaniora, eller beyond-- og bringe nogle af denne kursets ideer og dette feltets ideer og praktisk færdigheder til dit eget domæne for at løse problemer deri. Det, vi vil gøre her i mellemtiden i de fleste torsdage efter dag er med kursets hoveder førende hvad vi vil kalde walkthroughs af kursets problemet sæt. Så hver uge, når vi har et problem sæt, vil vi være at gå igennem på et sted ligesom dette kursets udfordringer, tilbyder dig nogle tips og tricks og design teknikker. Men hvis du ikke er i stand at gøre dem i person, realisere dem samme ressourcer vil blive indlejret af en af ​​kursets undervisningsassistenter i problemet sætter sig selv, så godt. Problemet sætter i år, i modsætning til sidste år, baseret på feedback, vil stadig blive udgivet om fredagen. Men snarere end at være på grund af den efterfølgende fredag hvilket giver dig kun syv dage vil effektivt være på grund 10 dage senere. Og ja, vil det betyde, at de vil overlappe med en weekend. Men vi håber, at dette år især dette vil give studerende mulighed for bedre plads ebbe og flow i deres tidsplaner, uanset om det er akademikere eller extracurriculars eller atletik eller midtvejs sæson. Du kan enten front-load eller back-load din uge med fokus på CS50 baseret på din egen uges aktuelle kursus belastning. Problemet sætter sig selv vil dække en række sprog, selvom vi vil fokusere overvejende tidligt på C før vi fokuserer derefter på højere niveau, flere web-centreret sprog. Og så et par ofte stillede spørgsmål her-- bør du tage en klasse som CS50 som et første-år? Så absolut. Og ja, det er ikke nødvendigvis noget du bør udskyde, indtil du har skåret dine tænder på andre typer af klasser. Men snarere, overveje at for mange studerende, inklusive mig selv tilbage i dag, dette er en meget uvant område, især hvis du aldrig tage en AP CSA eller sådan noget i gymnasiet. Men indse, at tidligt, uanset om det er dette kursus eller en anden indledende kursus, nu er faktisk det bedste tidspunkt, Jeg tror, ​​at finde nogle nye sti eller nogle nye akademisk interesse, så godt. Og derefter at tage med andre courses-- så en af ​​de vigtigste forskelle her versus Harvard er, at vi kun tage fire kurser pr semester på Harvard eller anden grund. Og jer faktisk trække fra nogle 36 kurser i alt i løbet af dine fire år, hvilket betyder generelt fire eller fem klasser. Og jeg synes det er helt fair at sige og at fralægge CS50, ved design, er sandsynligvis ikke den type klassen at du skal typisk tage med fire andre kurser for i alt fem fordi psets er ved designe temmelig intensiv. Ja, jeg også lært dette tilbage i dag. Jeg vil ikke beskrive CS50 og datalogi, programmering som så meget hårdt, som det er blot tidskrævende. Det er ikke den slags ting hvor efter middagen, du kan gå tilbage til din kollegieværelse værelse, sidde ned, og start fokus på pset tænker, okay, Jeg vil bang det ud i aften og derefter flytte videre til mit næste emne næste dag. Nogle gange du bare ramt en mur. Du har fejl i din kode. Du behøver ikke nødvendigvis kender hvordan man løser nogle problemer. Og en af ​​de vigtigste elementer i programmering for mig selv den dag i dag er du lige slags nødt til at tage et skridt tilbage nogle gange, sove på det eller tror på det i løbet af en løbetur eller en anden aktivitet, og derefter vende tilbage til det friske. Og du skal bare disse vinduer af tid. Og ja, det er derfor vi har forlænget tidsrum til rådighed for problemet sæt i år og også, pr denne webadresse Jeg sætter op tidligere for at hvad der er nyt i dette semester, trimmet problemet indstiller således at de er fundamentalt ikke mindre strenge, og grillbarer er ikke mindre, men der er en masse mindre forreste sag, en masse mindre benarbejde, at du skal gøre på forsiden af ​​ethvert problem sæt, som du kan se, før du kan faktisk dykke ned i kød af det. Så indse, at disse og andre ændringer er i horisonten til bedre rumme studerende, men i sidste ende for at sikre at grillbarer er faktisk så højt som muligt. Så mens mere arbejde, end det kan være i en typisk klasse, Vi håber, at afkastet for dig og grillbarer for dig og de færdigheder og ideer som du afslutter er så meget mere overbevisende som et resultat. Og for at få dig there-- og dette er en af ​​de vigtigste grillbarer, som Patrick hentydede earlier-- er kursets støttestrukturen. Så ikke alene CS50 har en af de største kursus stabe på campus. Det har også en af ​​de mest bachelor. Faktisk CS50 sidste år var den første klasse at have en bachelor lærerkræfter. Og bevis på, at succes gør nu mange andre kurser inden for Yale CS har det, samt. Og for studerende, specifikt vil disse AT'er og kursus assistenter være støtte en hel netværk af supportressourcer, blandt dem sektioner eller recitationer, ugentlige muligheder at have mere intime diskussioner og anmeldelser af materiale målrettet for forskellige spor, for studerende mindre behagelig, mere komfortabel, eller midt imellem. Disse vil følge tilgængeligheden af forelæsningerne ved flere dage hver uge mandag og tirsdag. Og så office hours-- en-til-én muligheder om hjælp fra kurset CA'er og AT'er vil være på onsdage og torsdage og søndage på flere gange, som alle vil blive lagt ud på kursets hjemmeside, endnu mere end sidste år, så godt. Men hvad er nøglen til CS50, hvis ikke ganske vist lidt usædvanligt, er kursets kultur, vi har prøvet at dyrke, både i Cambridge i mange år og nu senest i New Haven. Og i virkeligheden, kommer op denne Lørdag, hvis du ikke har hørt, er CS50 Puzzle Day, som har intet at gøre med datalogi men er udelukkende beregnet til at sende en besked om, at datalogi er om problemløsning. Og ja, hvis du gerne vil partner med en eller to eller tre venner og danne et hold til CS50 Puzzle Day, tage et kig på reklamer, der er på vej ud. Og tre timer af pizza og gåder og præmier venter. Og ja, for første gang i år, det vil ikke blive afholdt i fællesskab med Harvard. Det vil være her uafhængigt på Yale. Så hold øje med dem, hvis du ikke har. De fleste hver fredag ​​i semesteret skal vi forsøge at gøre en stor klasse føler små og bringe nogle 50 elever til frokost med kursets personale, med alumni, venner fra industrien til at tale om, hvordan livet er efter en klasse som CS50 og over somre og efter endt uddannelse. Så hold øje med invitationer til at. For første gang nogensinde i år vil vi holde den første nogensinde CS50 kodning konkurrence, en valgfri opt-in mulighed mid-semester, efter at alle af os har haft nogle seks eller syv ugers programmering i C under deres bælter til at konkurrere, hvis du vil så choose-- igen på teams-- forsøger at løse så mange udfordringer som du kan i programmering med af dine venner mod andre. Og mod halen af ​​semestret vil vi charter nogle busser, faktisk bruge lidt tid i Cambridge, hvis du ville gerne slutte sig til os, for såkaldte CS50 hackathon. Ved 19:00 vil vi begynde. Omkring 09:00, vil vi have pizza. Omkring 01:00, vil vi have burritos. Og nogen stadig vågen på bustur hjem omkring 05:00, vi stoppe til pandekager på IHOP på vej home-- en 12-timers mulighed for at fordybe dig selv med klassekammerater og personale i løbet endelige projekt, der er en mulighed til at gå langt ud over den kursets problem sæt og design og implementere de fleste noget af interesse for dig, der i sidste ende vil være featured her i Commons. Den første nogensinde CS50 messen var sidste år, en end-of-semester udstilling eller fejring af, hvad alle i klassen havde udført, især dem, igen, der gik fra intet til noget, fra nul til 60, ikke har nogen forudgående baggrund og som udviser, i sidste ende, noget for hele campus og, hvis online, til verden se, så godt. Nu, disse her er blot et par af de TAs og CA'er, der gør CS50 muligt. Tillad mig at invitere nogen af disse ansatte der er her for at komme op på scenen, samt kursets hoveder, at tilbyde nogle ord inspiration, samt. ANDI: Hej, gutter. Kan du fyre høre mig? Tak for slutter sig til os på denne dejlige, regnfuld torsdag eftermiddag. Mit navn er Andi. Jeg er en junior i Berkeley. Og sammen med Stelios og sommer, vi vil være din tre hoved undervisning assistenter til denne kommende år. Så jeg tror, ​​show af hands-- hvor mange af jer har ikke til hensigt at være en CS større eller virkelig dykning dybt i datalogi som en vigtig her? Awesome. Det er strålende. Så jeg er faktisk en global anliggender og kognitiv videnskab major. Jeg bogstaveligt talt kom til Yale med den hensigt af aldrig at skulle se på en nummer nogensinde igen i mit liv. Da jeg kom til Yale, var dette noget, der var aldrig på min radar. Jeg ønskede at lære om poesi. Jeg ønskede at lære om internationale anliggender. Jeg ønskede at lære om akvarel tegninger. Ja, vi tilbyder en klasse på akvarel tegninger. Men jeg har aldrig rigtig var interesseret i noget STEM relateret. Men så ældre jeg fik, jo mere jeg indså at alle områder virkelig i nogle fornuft beskæftiger datalogi, eller hvis ikke datalogi, beregning. Faktisk for min globale anliggender capstone projekt, vi bruger data analytics at analysere terrorangreb for Boko Haram i Nigeria. Og så som du kan se, uanset af, hvad store du ender forfølger eller hvad dine interesser her på Yale er, programmering og grundlaget uanset færdigheder er super nyttige. Og CS50 virkelig er godt rustet til slags låne en masse af sine ressourcer til dig, uanset hvordan komfortable du er eller hvordan interesserede du er i at forfølge klassen. Sommer kommer til at snakke lidt lidt om, hvad du fyre er kommer til at lære om dette år. SOMMER: Hej, alle. Jeg er Summer Wu. Jeg er en junior i Morse. Og jeg faktisk startede ud som CS50 studerende selv. Så tre år siden, var jeg på et hul år. Jeg havde aldrig taget en CS klasse i gymnasiet, men jeg tænkte, at i min fritid, det ville være fedt at lære at kode. Så jeg gjorde en hurtig Google-søgning, så for hvad var tilgængelig online, og så denne video med muppets og DJs og cool websites. Jeg var ligesom, jeg ønsker at lære at gøre det. Så jeg tog kurset, og jeg lige faldt i kærlighed med det. Men jeg kan huske at være så jaloux på børn, der kunne deltage i hackathon, deltage Puzzle Day, deltage kontor timer, få hjælp fra TAs personligt. Og så jeg aldrig forestillet mig at jeg ville få chancen at være her involveret i kurset, der først fik mig interesseret i computer videnskab og er grunden Jeg er en computer science stor dag. Så jeg vil advare dig, denne klasse kommer til at strække dig. Det kommer til at udfordre dig. Men det er også kommer til at lære dig at gøre ting at du aldrig forestillet du kunne. Stelios: Hej, alle. Mit navn er Stelios. Jeg er en junior i Branford College og en CS major. Jeg er også fra Athen, Grækenland. Jeg ser virkelig frem til at møde jer alle, chatte med dig på afsnittet på kontortid, ved fredag ​​frokoster. Jeg er virkelig begejstret, fordi vi har lagt så meget arbejde i at skabe en unik støtte struktur for alle jer at gøre din oplevelse med kurset bedst muligt. Og jeg håber, at selv om de fleste af du har nok ikke taget en CS kursus før, jeg håber, det er CS50 for dig er, hvad gnister interesse til at fortsætte computer videnskab i fremtiden, som det har gjort med så mange mennesker i fortiden. Så tak fordi du er her, spændt på at se dig. Jason Hirschhorn. JASON HIRSCHHORN: Hej, alle. Mit navn er Jason Hirschhorn. Jeg bor i Silliman. Og jeg gik til Harvard som en bachelorstuderendes og hovedfag i samfundsfag og minored i datalogi. Og en af ​​mine vigtigste roller her er at støtte denne vidunderlige personale som de støtter jer alle. I virkeligheden er dette ikke dem alle. Der er 55 bachelorer og kandidater her for at støtte jer alle. Og jeg daresay en af ​​bedste dele af kurset for dig alle er at komme til at arbejde med dem, at kende dem, få at se dem, både i CS50 og uden for CS50 dette semester og for mange semestre til at komme. Så forhåbentlig vil du tage kursus, fordi forhåbentlig du komme til at interagere med vidunderlige personale, vi har på scenen. SPEAKER: Nå, lad mig slutte ved at sige, at det vil være sjovt. DAVID MALAN: Nå, takket være vores hele holdet. Tillad mig at dæmpe lyset og tillade nogle flere af vores team, både fra Cambridge og New Haven, for at sige hej, da disse fyre fil fra. Og efter det vil vi overgangen til den første af vores programmering træfninger med dette sprog kaldes Scratch. Så tak til holdet. Lad os dæmp lyset og høre fra et par andre. [BIFALD] [VIDEO PLAYBACK] -Den Mission CS50 er at gøre dig mere komfortabel med en helt ny måde at tænke på, denne beregningsmæssige tankegang. -Det Gjorde datalogi interessant, som er noget jeg ikke rigtig klar over var muligt, indtil jeg tog klassen. -Jeg Var ligesom, whoa. Jeg er virkelig oversætte mine tanker ind i en computer lige nu. -Selv Hvis du ikke har nogen baggrund i datalogi eller nogen erfaring, det er faktisk den klasse for dig. -Så Jeg absolut vil mine studerende til bare få begejstrede datalogi. Ikke bare programmering, men tænke som en datalog er virkelig, hvad jeg ønsker at forsøge at lære min freshman. -CS50 Er hård og givende. -En Oplevelse. -Extravaganza. -Det Er bringer os til det næste niveau. [MUSIK AFSPILLER] -De TF'er er, tror jeg, at livsnerven i kurset. -Jeg Glade for at have mine elever jeg hjælpe har at aha øjeblik til at realisere hvad de faktisk forsøger at gøre, for at finde ud af at gøre en pset. -CS50 Er helt sikkert en hård kurs. Men i modsætning til alle andre kursus virkelig på Yale, det har sådan en stor, støttende fællesskab. -Du Absolut ikke brug for at vide noget om kodning at kunne at tage kurset. -Det Er fantastisk at se, hvor langt folk kommer i et semester. -Du Var ikke alene sidder i dit værelse lære at kode, men det var mere end bare en klasse. Det var en oplevelse. -Den Bedste måde at lære begreber og at forarbejde dem er ved at undervise andre. -Hvad Er telefonen split? [MUSIK AFSPILLER] -Og Det er CS50. [MUSIK AFSPILLER] -Det Er CS50. -Got Et problem? Riv det i halve. [MUSIK AFSPILLER] Smide det væk. DAVID MALAN: Okay. Så lad os tackle-- i en lille bit øvrigt er det været denne tradition for anden grund i 10 år at tjene kage på start og afslutning CS50. Så venter dig i slutningen af dag, udover pensum, vil være nogle kage samt, og kursets personale til at sige hej. Men nu, lad os overgang til første af vores sprog, hvor vi vil tilbringe egentlig bare en uge og en problem indstillet på dette domæne, Scratch. Og du vil finde, hvis du har programmeret før, mange af de ideer og Mulighederne er velkendt for dig. Men du opdage, at det er sjovt undervejs at finde ud af præcis hvordan at oversætte nogle af de ideer, du allerede kender til denne særlige miljø til virkelig at imponere din familie og venner med dit arbejde, som kan gå online, hvis du ønsker det, bagefter. Og hvis du ikke har tidligere erfaring og er blandt flertallet af studerende mindre komfortable, indse, at mange af de tanker, vi bare udforsket med reality-- ting ligesom telefonbøger og fremmøde og så forth-- oversætte temmelig pænt til en computer, men ikke hvis du bruger, oprindeligt, et sprog som denne. Så dette er et program skrevet på et sprog, kaldet C. Og vi vil tilbringe en hel tid i C, i sidste ende. Men odds er, vil dette se lidt kryptisk for dig ved første øjekast. Faktisk er der er en masse underlige syntaks, parenteser, vinkelparenteser, krøllede parenteser, citater og semikoloner. Og ja, hvis du dykke ned i programmering for første gang ser på og prøver at skabe stuff som dette, ærligt, du bliver så nedsunket så ofte i bare dum minutia, der intet intellektuelt interessant om det. Men tænk, hvis du kunne skabe denne samme program-- som, som du måske slags udlede, sandsynligvis prints "Hej, verden" på en eller anden. Vi kan destillere den samme idé til blot to puslespilsbrikker, hvis du vil. Faktisk Scratch er interessant fordi det er det grafiske sprog. Du kan trække og slippe disse puslespilsbrikker der kun interlock hvis det giver logisk mening at gøre det. Og så i Scratch, vi vil snart se, det er hvordan du ville gennemføre denne samme program, med blot to puslespilsbrikker at stort set gøre, hvad de siger. Men vi vil se på bare et øjeblik, at nogle af byggestenene, som vi hentydede til tidligere og et par mere er alt, i sidste ende kommer til at udgøre nogle af vores tidligste programmer. Vi kommer til at have ting ligesom functions-- bare handlinger, der gør noget, gerne sige hej, verden. Vi kommer til at have sløjfer, ting, der inducerer cyklusser igen og igen, ligesom vi gjorde for et øjeblik siden med søgning for Mike Smith. Variabler, som i algebra, hvis du har x eller y, der kan lagre et tal. Tja, i et program, kan du faktisk lagre mere end bare tal. Du kan gemme ord og sætninger og grafik og andre ting stille. Boolske udtryk, bare questions-- ja eller nej, sandt eller falsk. Betingelser, beslutninger lave baseret på disse ja / nej svar. Og derefter mere avanceret ting som array og tråde og arrangementer og et vilkårligt antal andre funktioner, men som alle kort meget pænt til meget venlige blokke som denne. Dette vil være en funktion, en lilla brik, der bare siger hvad navnet is-- i denne sag, siger. Og så ofte, er der en hvid boks, som du kan skrive eller trække en vis værdi ind. Og det er, hvad der er generelt kaldes et argument eller en parameter. Det er en måde at ændre standard opførsel af et puslespil stykke eller en funktion, således at den gør noget skik for du kan lide at sige, hej, verden eller hej, Andy eller goddag, Jason eller en anden sætning i stedet. Hvis du vil sige, at en lot-- bogstaveligt forever-- du kan tage en anden puslespilsbrik kaldes evigt og lige klemt den to sammen på denne måde. Og at løkke, som billedet antyder, betyder bare sige hej, verden for evigt, igen og igen og igen. Eller, hvis du kun ønsker at gøre det en endeligt antal gange, ligesom 50 gange, Der kommer til at være en anden puslespil stykke for at-- gentag 50 gange. I mellemtiden, hvis du ønsker til et varierende i dette sprog er vi om at lege med, du kan bruge en appelsin blok som denne. Og denne variabel jeg vilkårligt opfordrede jeg til heltal. Og jeg bare sætte det lig med 0. Og så måske jeg, i dette case-- dette variable-- repræsenterer en persons score i et spil. Du starter ved nul, og hver gang du gøre et mål eller sådan noget, du får en ekstra punkt. Du kan stille spørgsmål i Scratch. Hvis vi trækker og slipper puslespil stykker i et øjeblik som dette, du kan stille spørgsmål som, godt, er jeg mindre end 50? Måske har du brug 50 point for at vinde. Og så det ville være det spørgsmål, du ville spørge. Eller mere generelt, du kunne sige, er x mindre end y, hvor der er to variabler involveret? Nu, dette er en meget større ved første øjekast, men virkelig ikke alt, mere kompleks. Dette er blot en kombination betingelser og variabler og boolske udtryk til at spørge tre questions-- er x mindre end y? Hvis ja, så sig det. Sig, x er mindre end y. Else, hvis x er større end y, skal ellers x være lig med y. Og mens med Mike Smith, var der fire scenarier, her i verden af ​​tal, x er enten mindre end, større end eller lig med. Alt, hvad vi har er tre gafler i vejen. Og så er der fancier puslespilsbrikker som denne for ting som arrays, hvor vi er vil være i stand til at lagre oplysninger. Vi kommer til at se blokke, der tillader os til at gennemføre flere tråde, en anden funktion vi vil bruge, og så også noget, der hedder begivenheder. Men før vi kommer til det punkt og skabe endnu, i sidste ende, vores egne brugerdefinerede puslespilsbrikker, lad os faktisk åbne selve programmet. Så dette er Scratch. Det er tilgængeligt på scratch.mit.edu. Og du er velkommen til at spille nu eller senere, så godt. Dette sker for at være offline version. For folk, der ikke gør nødvendigvis stor internet, du kan downloade samme software, samt. Og der er virkelig kun tre komponenter til denne software. På det øverste venstre hjørne af skærmen er den slags scenen at Scratch, der som standard ligner en kat, bor inde. Han kan bevæge sig op, ned, til venstre og højre og gøre en række andre ting, og kan se en række forskellige måder baseret på de kostumer, som du tildeler ham. Men det er, hvad vi vil kalde en sprite, en slags tegn. Og du kan have flere tegn, som vi vil snart se. I midten nu er alle disse puslespil stykker og disse kategorier eller paller deraf. Så lige nu, jeg klikkede på Motion. Og så jeg ser alle de motion-relaterede puslespilsbrikker eller blokke, så funktioner, der har at gøre med at gå op, ned, til venstre eller til højre eller nogle andre operation. Men hvis jeg klikkede på Looks, du kunne se ting som siger blokken at vi så bare et øjeblik siden. Og hvis jeg klikker på kontrol, vil du se ting som gentagelse og for evigt og hvis blok, vi så for et øjeblik siden. Og så finder du at vi bare ridse overfladen af ​​nogle af de puslespil stykker sammen, men det er alle temmelig intuitiv og punkt og klik. Faktisk Scratch designet for yngre studerende at hjælpe med at give dem en stikkontakt for kreativ tænkning. Og alligevel vidunderligt, det er en vidunderlig springbræt til nøjagtig de ideer, vi kommer til at udforske i C og Python og JavaScript, såvel. På højre side, endelig, her er dette, det såkaldte scripts område. Og dette er kun den blank tavle med som du begynder at skrive et program. Og jeg vil netop dette. Nu, jeg tilfældigvis at vide, hvor tingene er fordi jeg har gjort dette et par gange. Men jeg ved, at i henhold til kategorien Begivenheder, der er denne blok her-- når grønne flag klikkes. Og varsel, hvis jeg zoome ud og tilbage i over her på scenen, Skrab liv inden for dette lille rektangulær verden, oven som er en grøn flag og en rød stopskilt. Så gå og stoppe hhv. Og så hvad gør jeg ønsker at gøre når det grønne flag er klikket? Nå, lad mig gå til det Ser kategori. Og lad mig gå videre og trække og slippe dette. Og mærke, så snart det bliver tæt, de er slags magnetisk. Så hvis jeg nu giver slip, det klikker sammen flot og rent. Og jeg har tænkt mig at gå videre og sige noget lignende hej, verden i to sekunder. Lad mig zoome ud og klik nu på grønne flag, og sige, hej, verden. Okay. Så det er alt fint og godt. Ikke alt, spændende. Lad os gøre det lidt mere nuttet. Og jeg ved, at i forvejen, sker Scratch til at komme med nogle søde ting som dette. Så spille lyd meow indtil gjort. Så lad os gøre det. [MEOW] Øv, det er henrivende. Og hvis jeg klikker på det igen-- [MEOW] Og igen. [MEOW] Men jeg bliver ved at skulle genoplive Scratch. Men jeg kan gøre det bedre end dette. Hvorfor jeg ikke bare trække tre af disse. Og nu er det tre gange så yndig. [Mjavende] OK, faktisk, det er lidt utryg. Så vi har brug for noget i mellem der. Hvis jeg går til kontrol, det ligner der er faktisk en ventetid blok. Og så varsel, hvis jeg svæver over there-- og lad mig gøre dette til en lidt større. Hvis jeg hover, går det at falde på plads. Så vent et sekund, vent et sekund. Lad os hit grønne flag igen. [Mjavende] OK, lidt mere naturligt, men ikke meget effektiv. Så dette er korrekt, hvis min programmets Målet blev Meow tre gange. Men det er ikke meget veltilrettelagt. Jeg slags skære nogle hjørner. Jeg fik lidt doven. Hvad føler like-- hvad gør jeg synes at have gjort dårligt, ville du sige? Ja? Ja, i midten. PUBLIKUM: Bruges mere hukommelse end du behov for at fordi du bruger så mange forskellige linje. DAVID MALAN: Ja, så flere linjer. Og det ville ikke nødvendigvis være hukommelsen, selvom det kunne ses som den måde. Men det er definitely-- der er redundans. Og jeg bogstaveligt talt slags slæbt og faldt de samme ting. Og hvis du slags extrapolate-- hvis det er ikke indlysende her-- godt, hvordan ville Jeg meow 30 gange? Jeg ville trække og slippe, ligesom, 30 flere par af puslespilsbrikker. Og sikkert, der er en bedre måde. Og vi har set en bedre måde. Hvad intuitivt ville være den bedre måde? Ja, bare bruge en løkke. Ingen kopiere og indsætte. Og ja, når som helst dette semester, hvis du starter at finde dig selv at trække og slippe, eller virkelig kopiere og indsætte, farlig vane at komme ind, fordi det er bare ikke meget at vedligeholde. For eksempel, hvis jeg ønsker at ændre lyden til noget andet, Jeg er nødt til at ændre det nu i tre placeringer i stedet for bare én. Fordi ja, hvis jeg bryde denne away-- jeg bare kommer til at afkoble det sådan. Lad mig få fat i en gentagelse blok, og klik derefter på tre, skriv tre, smide nogle af disse væk ved blot at give slip. Og så bemærke det ligner ikke det passer, men magnetisk, går det til ikke kun snap på plads men vokser til at passe formen. Så det er godt. Og nu, hvis jeg klikker play. [Mjavende] Meget fint. Okay. Og nu er det meget nemt at ændre, også fordi jeg kan bare ændre et nummer på ét sted. Men også dette er ikke alt det interessant. Lad os rent faktisk har Scratch ikke mjave, men bevæge sig. Lad mig gå til Motion og flytte 10 trin inde of-- hovsa, lad mig ordne dette. Lad mig få det at flytte 10 steps-- faktisk, lad os ikke gentage. Lad mig få fat i en kontrol blok, og gør følgende for evigt. Forever, flytte 10 trin. Og klik på Afspil. OKAY. Så heldigvis, stopper han. Ellers ville børnene få meget ked når de slags mister deres kat. Men i det mindste jeg kan trække ham tilbage ind i skærmen. Men det er ikke alt, stor af et spil eller animation. Det ville være rart, hvis måske han sprang ud over kanten. Så hvad gør vi? Hvad konstruktion har vi brug for at have Scratch beslutter at hoppe, tror du, selv hvis du har aldrig set Scratch før? Ja, i ryggen. PUBLIKUM: Du har brug for en hvis blokken eller hvis-så. DAVID MALAN: Ja, så nogle slags hvis blok eller hvis-så. Så faktisk har vi en af ​​disse her. Så if-- så lad mig få slippe af bevægelsen. Lad mig zoome ind, så det er større. Så hvad med dette. Forever, hvis Sensing-- Vi har ikke set det før. Jeg har brug for en boolesk udtryk. Og det viser sig, om at røre hvad? Hvis røre kanten, hvad ønsker jeg at gøre? Tja, hvis jeg gå tilbage til Motion, viser sig, åh, jeg kan vende rundt. Lad mig trække denne her. Hvorfor kan jeg ikke gå videre og vende 180 grader? Og nu, lad mig bare flytte i slutningen. Jeg kunne sætte bevægelsen i begyndelsen eller slutningen. Men logisk, hver gang jeg flytter, jeg vil kontrollere, jeg rører kanten? Er jeg rører kanten? Er jeg rører kanten? Så logisk jeg vende rundt, hvis det. Så lad os hit spil. OKAY. Så det er lidt buggy, så at sige. Og en fejl er bare en fejltagelse i et computerprogram. Men i det mindste det virker. Og i virkeligheden, kan jeg gå ind her. Og lad mig gøre det ikke 10 trin på en tid, men det er alt animation er. Det er alt sammen en tegneserie eller endda en film er. Lad mig flytte 20 trin ad gangen. Så 20 gange så mange ting sker gang, eller dobbelt så mange, i dette tilfælde. Og han bevæger sig hurtigere. Lad mig ændre til 30. 100. 1.000. Og det går rigtig hurtigt. Og dette is-- yeah, OK. Så nu er vi bare rode med det. OK, så buggy. Men vi kan trække ham ud af vejen her. Men vi kan gøre mere sjov med dette, også. Hvad her-- han er på hovedet. Men det viser sig Scratch-- og der er faktisk, Jeg er nødt til at fralægge, ingen akademisk værdi til hvad jeg er ved at gøre. Men hvis jeg åbner mikrofonen, lad os stoppe ham og gøre noget som dette. Av! [GRINE] Det var sød. Tak. Nu, dette er hvad min stemme ser ud, når jeg råber ouch. Jeg tror ikke, vi fanget din latter. Det er ok. Lad mig spare dette som "Ouch." Lad os gemme denne som "av". Og nu vil vi gå tilbage til Scripts. Og nu need-- jeg lad os se, Sound. Åh, afspille lyd ouch. Så hvis jeg rører kanten, lad mig første play ouch, og derefter vende rundt. Og lad os nu sætte ham i midten. [SIGER "OUCH"] Dobbelt så hurtig. OKAY. Men det er bogstaveligt talt gør, hvad jeg siger. Så det er faktisk korrekt, er det bare lidt irriterende hurtigt. Så lad os tilføje noget mere interessant at dette. Lad mig faktisk åbne en, som jeg gjorde i forvejen, rammende kaldt Pet den Kat, der gør dette. Her er scriptet heroppe. Hvad er dette vil gøre i engelske termer? Hvad er det designet til at gøre? Ja, lad os gå some-- ikke? PUBLIKUM: Når du kæle katten, det mijaver. DAVID MALAN: Ja, så når du kæle katten, går det at mjave. Så med andre ord, er der nu et evigt loop stadig kombineret med en tilstand, kombineret med et Boolsk udtryk, kombineret med et par funktioner, effekten hvoraf, når jeg spiller dette program, er intet sker indtil jeg flytter markøren tættere og tættere og tættere og-- [MEOW] Så er det ligesom petting katten. [MEOW] Kun én gang du faktisk flytte markøren over ham. Nu, jeg pisket også op ikke kæledyr katten, der gør dette i stedet. [Mjavende] Så han er bare konstant meowing. [Mjavende] Men hvis jeg får for close-- [Mjavende] [BRØL] Så hvordan fungerer det? Nu jeg bare have en to-vejs gaffel i vejen. Hvis røre musemarkøren, derefter spille løven lyd. Else bare spille den meow lyd, og derefter vente tre sekunder, så at det er sådan at gøre det meget roligt. Okay. Så det er at kombinere nogle flere ideer stadig. Lad os tage et kig på dette eksempel Jeg pisket op kaldet tråde. Og denne ene er fundamentalt anderledes, idet der frigøres en funktion af mange programmeringssprog kaldet tråde, evnen af ​​et program til bogstaveligt gøre to ting samtidigt. Faktisk er disse dage, hvis du bruger Google Docs eller Microsoft Word, og dit dokument er konstant stave-kontrolleres selv som du Motortype- eller du hit Kommando-P eller Ctrl-P og udskrive noget, det udskrives, mens du fortsætter med at skrive. Programmer i dag kan faktisk gøre flere ting på én gang, ligesom i Scratch her. Så her, jeg har to sprites nu, en fugl og en kat. Og hvis jeg klikker på hvert af de tegn et ad gangen, Jeg ser lige nu fuglens scripts øverst til højre. Nu kan jeg se kattens. Birds, kattens. Så hver af dem har deres eget script. Men varsel, hvad puslespilsbrik har de begge begynde med? Når grønne flag klikkede. Og fugl, når grønne flag klikkes. Så når jeg klikker på den grønne flag, begge disse scripts eller programmer kommer til at løbe parallelt. Og du vil opdage, at fuglen er bare mindlessly hoppen ud over kanten. Katten tydeligvis er programmeret med en strategisk fordel. Og-- [BRØL] Okay. Så katten fanget fuglen i dette tilfælde. Hvorfor det? Nå, varsel først vi bare nødt fuglen bare mindlessly gå til denne indledende placering, og derefter for evigt, hvis ikke røre katten, bare flytte. Og hvis du er på kanten, hoppe. Og bare flytte. Og hvis du er på kanten, hoppe. Men katten, i mellemtiden, har nogle ekstra logik der siger denne-- første, bare så at dette ikke er helt forudindtaget mod fuglen, bemærke, at jeg har brugt en grøn puslespilsbrik der der faktisk opfanger et tilfældigt tal. Et træk ved mange sprog er at give du tilfældige eller pseudotilfældige tal. Så i dette tilfælde, katten oprindeligt vælger et tilfældigt tal mellem, lignende, 90 grader og 180 grader i det væsentlige, så at der er en lille smule af varians. Og så evigt, hvis rørende fuglen, spille løven lyd. Ellers bare pege mod fuglen. Pege mod fuglen. Peger mod fuglen, som er en brik i sig selv i dette tilfælde. Tja, vi kan gøre en anden ting her. Lad mig åbne events program her. Og her er vi igen har to sprites, der ligne disse to marionetter her. Og hvad er interessant her er dette. Den orange fyr har denne sæt puslespilsbrikker her. Forever gøre following-- hvis der trykkes på mellemrumstasten, så sige, Marco, og derefter transmittere en begivenhed. Og i mellemtiden, den blå fyr her har denne-- når du modtager begivenheden, siger Polo. Så det viser sig i Scratch og på andre sprog, der er måder til to programmer eller to scripts, i dette tilfælde, at intercommunicate så når jeg ramte mellemrumstasten, siger han Marco. Og den anden hører, at, så at tale, og siger Polo som svar. Så du kan skrive programmer, faktisk interagerer på denne måde. Og hvis jeg gør dette én i stedet, Jeg kan endda tilføje variabler, bare ved hjælp af en sprite i dette tilfælde. Denne ene er især irriterende. [SEAL BARKING] Nu, meddelelse om ret vi har fået nogle ekstra logik herovre. Hvordan kan jeg stoppe denne segl fra gøen? [SEAL BARKING] Det ligner på højre hånd side er, hvad der er at spille lyden. Men det er kun at spille en lyde, hvis det, der er sandt? Hvis en variable-- appelsin block-- dæmpet er nul. Hvordan ændrer jeg dæmpet til at være en, betyder sandt, gør dette dæmpet? Tilsyneladende, den anden skrift, kan jeg ramte mellemrumstasten, og nu stopper han. Så vi kan have denne indbyrdes kommunikation tværs scripts, så godt, ved blot at dele en variabel på tværs af to som denne. Nu, dette er ikke alt, interessant. Lad os gå videre og gøre det og kombinere en masse af disse ideer med dette program her. Før vi gør det, selv om, hvordan omkring en frivillig? Lad mig tage presset væk af mig, fordi jeg faktisk ikke spille dette spil. Lad os få en, vi ikke har set før. Du er nødt til at være behagelige kommer op på scenen her, på kameraet. OK, kom op. Meget modig. Hvad hedder du? IDRIS: Idris. DAVID MALAN: Undskyld? IDRIS: Idris. DAVID MALAN: Idris, rart at møde dig. Kom op. Og nu, på din egen mobil telefon, du spiller Pokemon GO? IDRIS: Nej. DAVID MALAN: Virkelig? IDRIS: Ja. DAVID MALAN: OK. Okay. Nå, rart at møde dig. Kom her over. Jeg gør heller ikke. Så vi vil finde ud af sammen, hvordan man spille dette, som nogen faktisk gik og gennemført i Scratch ved at ændre katten til væsentlige forskellige figurer alle sammen. Og hvis jeg fullscreen dette her, vi kommer at se følgende spil sammen. Opdaterer, stadig læsning. Kom nu. Lad mig gøre det. Kom nu. Dette spil er så stor, at det styrtede ned. Stå ved. Prøv en gang til. Kom nu. Okay. Sådan der. OKAY. Grøn flag. Så her vi går. [MUSIK AFSPILLER] Vælg den midterste niveau her. Klik på den blå fyr der. Okay. Og du kan bruge pilen keys-- op, ned, venstre, højre. Lad os nu betragte som vi gør denne-- og derefter gå efter tegnet der. Yep. Og nu klikke ham med musen. Åhh ja. Bevæge sig. Hvor er pilen? Vær så god. Så klik på der. Ja. Okay. Så nu, jeg har fået fortalt du har en Poke bold, at hvis klikker på det, vil det gøre det. Meget godt. Ved at øve for i dag, jeg fundet denne version af spillets faktisk ikke meget hårdt. Så hvis du ønsker at gå igen her, gå ned til denne Poke bolden. Og derefter gå til højre. Prøv at klikke på det. Åh, faktisk, det er butikken, tilsyneladende. OK, så lukker det. Aldrig gjort før. Måske gå op til denne ting op her. Åh, der du går. Vent, der er en derovre. Åh, der er en anden. OKAY. Ned. Ja, klik. OK, det er meget sød. OK, meget godt klaret. Dette spil er ikke meget hårdt. OKAY. Tillykke. Her har vi en CS50 stress bold for dig. Men tænk for et øjeblik, hvad nogle af grillbarer er der. Lettere end det rigtige spil, tilsyneladende. Men alt, hvad vi har at gå her er et tegn der sandsynligvis har en vis form af sløjfe forbundet med det. Det er ikke en kat. Det er denne karakter i stedet. Og at løkken er bare konstant sige, hvis det pil op presset, hvis pil ned presset, hvis venstre pil presset eller højre arrow presset, bevæge sig op eller ned eller til venstre eller højre. Eller hvis der er en anden brik der der siger ved berøring anden sprite, ved berøring en af ​​personerne til Poke bolden, hvis rørende, derefter gøre dette. Så alle de ideer, vi brugt hidtil virkelig kan bare anvendes i dette særlige sammenhæng at spille dette spil, så godt. Lad mig gå videre og trække op en anden her, faktisk. Lad mig gå videre og trække op, lad os sige, dette. Dette er noget, vi remixet. Lavet af en af ​​vores studerende i Cambridge, og så gik jeg igennem og ændrede stort set hver instans af Harvard til Yale denne gang. Vil nogen gerne konkurrere mod de Ivies her i en anden akkumulation af alle disse ideer? Kom ned, ja. Hvad hedder du? DINA: Dina. DAVID MALAN: Adina? DINA: Dina. DAVID MALAN: Dina, kom ned. Okay, Dina. Så dette spil bliver sværere og sværere, fordi der i dette spil, der er variable er anvendt såvel der er konstant at holde styr af hvilket niveau du er i spillet. Så rart at møde dig. Kom her omkring. Og så målet her er at sortere af gøre din vej gennem en labyrint at denne elev gennemføres. Og bare for at sætte scenen, hver af billederne på skærmen er sin egen sprite, sin egen karakter. Så disse var som standard katte, men den studerende ændrede dem til de forskellige Ivies logoer her. Og så vil du se, at netop ved anvendelse af betingelser og løkker og funktioner og mere, får du dette. [MUSIK AFSPILLER] [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Ja, OK. Ja, holde ud. Første niveau er meget let. Du har lige fået til at gå derovre. Men igen, overveje, dette er blot en loop lytte efter pilen keys-- op, ned, venstre, højre. Og nu en sensing blok. Meget fint. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Meget fint. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Meget fint. Temmelig let, Crimson. Okay. Levels-- uh-oh. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Og igen, i disse tre Harvard Kamme, du skal bare logik siger, hvis på kanten, bounce. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] OK, hvad du laver er mere interessant end hvorfor. Meget fint. Meget fint. Åh åh. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Jeg tror, ​​du har til at ofre sig selv. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Quick! [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Pæn. Det er ok. Du får det. Ja, ja! Meget fint. [JUBEL] [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Pæn! [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Forstået. Kom nu! Andet til sidste niveau. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Okay. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Ja. God brug af variabler her. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Ja. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Pæn. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Det er ok. Vi fik at komme til slutningen. Der. Oh! [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Måske køre sent i dag, men det bliver det værd. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Du kan gøre det! Yeah! [JUBEL] [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Denne ene er virkelig svært. [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Vi giver dig flere to liv. Kan du gøre det? [MUSIC - MC HAMMER, "U kan ikke røre  DENNE"] Okay. Hvad med en stor rund bifald alligevel. Du fik til det andet til sidste niveau. Tak. [BIFALD] Så det er kun at sige, hvor meget du kan gøre med den slags ting. Og indse, også, at når puslespilsbrikker ikke exist-- og ja, dette vil være en af de beføjelser, med det første problem sæt og beyond-- er at faktisk oprette din egen. Og dette er blot et uddrag af et af eksemplerne vil du være i stand til at spille med online, hvor hvis du ikke har bygget ind i Scratch noget som en hoste puslespilsbrik, du rent faktisk kan gøre det selv. Og så alt dette og mere venter. Og bare for at male en endelig billede af faktisk, hvad der er forude i vente for klassen for dig, baseret på nogle billeder fra klassekammerater fortid, tillad mig at dæmpe lyset en sidste gang og vise dig CS50. [MUSIK AFSPILLER] Okay. Det var det for CS50. Kage er nu serveret. [MUSIK AFSPILLER]