[Musik spelar] [Musik spelar] DAVID MALAN: Okej. Detta är CS50. [Musik spelas Tritonal, Cash,  "Kastlös"] [Musik spelar] TALARE 1: Jag kommer att Frankrike, och du kommer också. [Musik spelar] DAVID MALAN: Detta är CS50, Harvard University introduktion till den intellektuella företag i datavetenskap och konst av program-- och för första gången i historien, Yale University också. I själva verket, oavsett om du är här i Cambridge eller i New Haven eller Miami eller St Louis eller Amsterdam eller någonstans runt världen ta CS50, dator vetenskap E50, CS50X, CS50 AP, vi är alla en och samma. Välkommen till CS50. Vad vi have-- [APPLÅDER] [Skrattar] [APPLÅDER] Så jag gjorde ett misstag själv några tid sedan när jag började college. Och jag kom till college, och jag bestämde oss för att uppriktigt sagt, stick i min komfortzon. Jag hamnade förklara en koncentration, eller en större, av regeringen. Ant som var mest en funktion av mig är ganska bekant med regeringen eller åtminstone historia eller jag gillade konstitutionell rätt i high school. Och så när jag kom hit, jag typ av drogs mot saker som jag var redan bekant. Höger? Gud förbjude jag gör dåligt i klassen. Jag ville verkligen att bo inom min komfortzon, och det var inte förrän sophomore år som jag äntligen fick upp modet att kliva fot i ett klassrum som kallas CS50. Och på den punkten, jag slutligen inser att min Gud, läxor kunde faktiskt var rolig. I själva verket var jag en av dessa barn att på fredag ​​kvällar när P-apparater skulle släppas, jag skulle gå tillbaka till mitt rum och dyka i nattens P-set. Och för mig, det var ett tecken att detta var ett område för mig. Men vad var viktigare var faktum att jag fick upp denna nerv att utforska vatten obekanta för mig och få bortom min egen komfortzon och ärligt talat, jag kunde bara göra det andra år genom att ta denna klass godkänd / underkänd. I själva verket var det den allra sista dagen som Jag äntligen gått över och slutligen förklarade CS som min koncentration, sätta gov på den punkten bakom mig. Och så vi inte fastställer i denna kurs att vända er alla i CS majors eller anrikningsverk, men snarare att ge dig en möjlighet att förhoppningsvis gå bortom världen som du för närvarande bekant och föra tillbaka från denna värld färdigheter och kunskaper och kunniga som du kan använda till din egen värld, oavsett om det är inom humaniora, samhällsvetenskap, naturvetenskap, eller utanför. Faktum är att om du är känslan lite intrepid om att vara i det här rummet att inte tala om i denna klass, inse att om historien är någon indikation, 72% av dig har aldrig tagit en CS kurs innan. Så det är med alla medel inte fallet att studenten som sitter till vänster eller till höger eller framför eller bakom dig vet mycket mer om CS eller programmering i synnerhet än dig. Det är i själva verket inte fallet. Och faktiskt, en stor del av stödstrukturen att vi har satt upp i detta Naturligtvis under de senaste många år har varit för just detta reason-- till tillhandahålla en ramp som fortfarande lämnar lika strikt och lika hög som ever-- men vars lutning tillåter studenter mindre bekväm och bekvämare Lika att lyckas oavsett av hans eller hennes tidigare bakgrund. I själva verket, vad slutligen frågor i denna klass är inte så mycket där du hamnar i förhållande till dina klasskamrater men där man i vecka 12 hamna i förhållande till sig själv i vecka noll, vilket är där vi är här i dag. I själva verket och detta kan mycket väl och förmodligen ser ut som grekiska för många av er. Men lita på att detta och så mycket mer kommer att vara helt i din gripa in bara lite tid. Men i dag, fokuserar vi på några av idéerna på högre nivå att ge dig en smak av CS50 och datavetenskap i en känsla för vad du registrerar dig för. Och faktiskt, datavetenskap kan destilleras mer helt enkelt som beräknings thinking-- tänka som en dator, om ni så vill. Och det finns så många olika saker ingredienser som går in i det, men låt oss föreslå bara tre för idag. Om målet av klassen slutligen är inte att lära dig programmering, är inte att lära dig C eller PHP eller SQL eller valfritt antal ord och akronymer i Naturligtvis beskrivning, utan snarare att lära dig att lösa problem på ett mer effektivt och att tänka mer metodiskt och mer algoritm, så att säga. Låt oss se vad exakt detta innebär. Så jag skulle föreslå att tänka beräknings kokar ner att lösa problem. Vad behöver du för att lösa ett problem? Du behöver input-- som insignalen till problem-- du behöver en utgång, som förhoppningsvis lösningen, och sedan är det en process för att lösa detta problem, som vi kallar en algorithm-- en uppsättning instruktioner för att lösa vissa problem. Men först, låt oss fokusera på den första och den sista av dessa in- och utgångar. Datorer trots allt, som synes bara förstår nollor och ettor. Men hur kan det möjligen vara? Även om du inte är bekant alls med vad som finns under huven, du förmodligen åtminstone hört att datorer förstår binary-- bara nollor och ones-- men hur kan du kanske göra något intressant? Jo, en av de teman av klassen går att vara så här layering-- där i dag, vi ska ta en snabb blick på den lägsta nivån detaljer, men med varje dag som går, där vi lager eller abstrakt ovanpå dessa uppgifter att faktiskt lösa högre nivå problem av intresse för oss. Så här är vad vi kan kalla binary-- med bara ett alfabet av 0 och 1. Men vi människor är mestadels bekant med decimal. December mening 10. Bi betyder två. Och så i decimal systemet, har vi 10 siffror på vår disposal-- av Naturligtvis noll till nio. Så om du tittar på ett antal så här, de flesta av er intuitivt bara förstå att är 123. Det finns inget riktigt hårt om det. Men varför är det 123? Tja, om du tänker tillbaka på grade school-- eller åtminstone hur jag lärde mig detta typ av world-- du kanske kommer ihåg att vi behandlade dessa saker i kolumner, eller platser. Så vi har de platsen till höger. De tiotals plats i mitten. De hundratals plats till vänster. Och sedan hur får vi från detta mönster symbols-- 1 2 3-- till denna högre nivå Tanken att vi känner som 123? Tja, det är bara några enkla aritmetik. Höger? Den finns innebär i huvudsak ge oss 100 gånger 1 plus 10 gånger 2 plus 1 gånger 3. Och naturligtvis om vi gör ut matematik där, det är 100 plus 20 plus 3-- annars känd som 123. Så om du är på samma sida som denna rätt nu och är bekväm med sk decimalsystemet som en människa, det är faktiskt väl inom din räckvidd av komfort överväga nu det binära systemet. Ta en vild guess-- detta representerar, i en värld av datorer i binary-- hur många? Noll. Men varför är det? Tja, visar det sig att de kolumner eller platser här-- de är inte befogenheter 10. 1, 10, 100, 1000, och så vidare. De är i stället helt Enkelt befogenheter 2. Så, 1, 2, 4, 8, 16, 32, och så vidare. Och så nu har vi naturligtvis få till 0 här helt enkelt eftersom vi har 4 gånger 0 plus 2 gånger 0 plus 1 gånger 0, vilket naturligtvis ger oss 0. Men hur går jag till väga representerar antalet 1? Vad är mönstret för nollor och ettor att representera siffer vi människor känner som en? 001. Och 2? 010. Och nu mönstret börjar upprepas. Nu är det 011. Och återigen, 0 fours, en två, en 1. Så två plus ett. Det är tre. Och nu att representera fyra, vi inte bara ändra på det 0 till 1. Du sorts måste bära, så att säga, och siffrorna börja vända runt bara som i den decimala världen. Så det här är fyra. Detta är fem. Detta är sex. Detta är 7. Och så har vi räknat så högt som 7. Nu behöver vi bara är mer en bits-- mer nollor och en s. Och faktiskt "bitar", om du har hörde detta term-- binär siffra. Bit är där det kommer ifrån. Och så om vi vill representera större siffror, behöver vi fler bitar. Men låt oss komma bort från glider nu till något lite mer verklig. Antag att vi vill faktiskt representerar denna sak. Nå, låt oss ta en titt nu på en liten demonstration. Så det här är en webbaserad applikation att en av CS50: s egna, Michael G, sätta ihop i sommar för att hjälpa oss klargöra exakt denna idé. Och skulle någon som att våga upp på scenen framför allt sina klasskamrater? Rakt framför. Kom upp. Du måste vara bekväm på kameran och internet. Åh, just här. OK. Vi är OK. Okej. Kom upp. Vad heter du? Emily komma på upp. Så det här är Emily. Vilket år är du? Förstaårselev. Emily trevligt att träffa dig. David. Okej. Så upp på skärmen här, vi har denna pekskärm som kommer att ge oss möjlighet att faktiskt interagera med detta program, och det är bara en webbläsare. Det är Chrome fullt skärmad just nu är men det programmerats av Michael till reagera på ett sätt som gör att oss att leka med binära siffror. Så till exempel, här har vi inte tre men åtta bits-- nollor och ettor. Just nu är vi titta på siffran 0. Och faktiskt, alla åtta nollor i decimal betyder noll. Så det är allt som är som antytt här. Så om du ville representerar antal 8, Vad är mönstret av nollor och de som du vill? Du kan helt enkelt peka uppåt eller nedåt eller siffrorna själva. Okej. Så det är naturligtvis 8, som du kan se upp där. Och om vi ville gör 16, vad gör vi? Japp, trycker bara det igen. 16. Okej. Så det här är alla fina och bra, det är fortfarande mycket låg nivå. Vi behöver ett sätt i verkliga världen för Emily för att faktiskt representerar dessa saker. Och så antar att vi vänder dessa nollor och ettor, vilket är mycket konceptuella, till faktiska glödlampor. Höger? En dator är en fysisk, mekanisk, elektrisk anordning. Och dess input-- åtminstone om du ansluter den eller avgift det-- är att ha batterikraft och elektroner strömmar in och ut. Så nu, varför inte vi sluta tänka om bitar som nollor och ettor, men något mer fysiskt som glödlampor här. Och om Dan Armendariz kunde gå mig för bara en moment-- komma på up-- vi kommer att köa en ansökan. Kom över, Emily. Tyvärr är detta den mest besvärliga demo för du någonsin. Kom hit. Vi kommer att köa med tack till Dan Armendariz, en annan medlem av vår personal, ett program som kallas binär glödlampa. Så vad vi har här är en iPad-applikation som har följande användare gränssnitt på skärmen för Emily. Det är bara fick exakt samma gränssnitt i huvudsak det är borta. Och om du nu vill representerar antal, säger 8, Hur skulle du gå om att göra detta märker till höger, glödlampor som vi har här? Ah-ha. Magisk. Så om vi vill nu göra detta till något lite mer utmanande, och låt oss gå vidare och välja en slumpmässig nummer som nummer 50 här. Ingång detta. Och om du kan nu utmanas att komma med siffran 50, vi kommer att ha en fantastisk pris för dig. EMILY: OK. Herregud. DAVID MALAN: Aritmetiskt är verkligen svårt framför av hundratals av dina klasskamrater. Men 50 har svaret här. [APPLÅDER] Och så nu detta är tänkt att vara demonstrativa för Emily. Så här är lite ljus lökar helt som dessa, men det är faktiskt små magnetremsor. Och vad är hett om dessa och anledningen till att vi använder dem i CS50 är att de stöder något som kallas en API-- ett programmerings gränssnitt, som är bara ett fint sätt att säga att vad en av våra medarbetare gjorde under sommaren var skapa en iPad ansökan här som talar över internet de glödlampor över här, vilka är trådlöst ansluten till en annan enhet. Men detta är nu ett alternativ för examensarbeten. Och så Emily, om du skulle så liknande, vid slutet av perioden, du kan pryda ditt studentrum under tiden med dem. Tack till Emily också. [APPLÅDER] Men nu, låt oss vända vår uppmärksamhet på vad meddelandet kan ha sett ut, och det är en liten sak som denna. I själva verket är detta en exempel precis som en teaser av vad som komma på vad som är kallas en begäran API. Och så vad vi har här är helt enkelt exakt vilka typer av meddelande att efter några veckor tid i CS50, du kunna skicka till något ganska bekant som det faktiskt slå på och av. Men detta är alla fina och bra. Höger? Vi har den mentala modell förhoppningsvis för att representera tal med nollor och en s. Och från nollor och ettor, vi kan får högre siffror som 50, som Emily just gjorde, eller vi kan röra sig upp från det. Och jag hävdar att vi kan representera saker som bokstäver också. Höger? Datorer är mycket mer intressant än bara siffror. Och så hur ska du gå om som representerar ord på skärmen eller e-post eller essäer eller liknande? Tja, visar det sig att datorer helt enkelt abstrakt ovanpå dessa låg nivå detaljer, och människor för en tid sedan, kom upp med ett godtyckligt, men en konsekvent, kartläggning av siffror att letters-- så att varje gång du ser en stor bokstav A på din dator skärm, oddsen är vad under huven är en mönster av ettor och nollor som står för antal, per detta diagram, 65. Och mer fysiskt insidan av din dator, finns miljontals saker som kallas transistors-- dessa days-- som är bara växlar om du vill, saker som kan gå på och av och så föreställa sig. Inte åtta av dessa stora glödlampor men miljontals dessa lilla ljus lökar, eller switchar eller transistorer, som kan sätta på och stänga baserat på hur du programmerar dem. Och så nu har vi ett sätt att representerar bokstäver samt. I själva verket, om jag skulle använda detta kartläggning här och försöker faktiskt stava ut något, kan vi se Detta mönster av decimaler just nu. Så vi kommer inte att ens fokusera på binär längre. Låt oss bara betrakta dessa som decimaltal 72, 73, 33. Men vad kan detta representera? Någon har en tillräckligt fotografiskt minne att veta vad som stavas på skärmen här? Ja några. Så hej. H-I och sedan ett utropstecken, som inte var faktiskt på skärmen. Men i själva verket finns det en kartläggning för varje brev till varje nummer att du kanske vill skriver på tangentbordet. Men siffrorna inte behöver representerar bara bokstäver. Höger? Alla vi vet om bilder och fotografier och ljudfiler och videofiler och liknande. Så klart kan vi representera högre ting nivå fortfarande. Och så vad en dator gör är helt enkelt välja att tolka mönster av noll ettor på olika sätt beroende på sammanhanget. Om du dubbelklickar på en Microsoft Word ikon, du ser ord på skärmen i stället för färger och bilder eftersom ord vet att detta är en uppsats som du faktiskt har skrivit. Om du istället dubbelklicka på en JPEG eller GIF eller PNG, det öppnar upp och är en bild på grund av PNG eller .docx eller vad filen förlängning är och vilka program du använder vet att tolka ett mönster av ettor och nollor på olika sätt baserat på vad dess syfte i livet är. Så till exempel, detta samma sekvens av siffror kan representera hur mycket rött gör du vill, hur mycket grönt vill du, och hur mycket blått gör du vill. Och faktiskt, om du någonsin hört RGB-- så bara röd grön blå. Och så om jag ser siffror som denna ge mig 72 röd, ge mig 73 grön, och 33 blått, är detta hur en dator med tre bytes-- där en byte är åtta bitar eller 24 bits-- skulle innebära en ganska otäck nyans av brunt eller gult här. Och i olika sammanhang, kunde de exakt samma mönster i nollor och ettor betyda något helt annorlunda. Så har vi nu ett sätt att representera information-- nollor och ettor. Ovanpå det, vi får brev. Ovanpå det, kan vi få färger. Och låt oss anta för dag att vi kan få ljud och video och saker så mycket mer sofistikerad än så. Men nu ska vi överväga hur vi använder dessa ingångar och framställning av sådana utgångar nu att vi har ett sätt att representera denna information. Tja, vi behöver något kallas en algoritm. Återigen, en uppsättning instruktioner för att lösa vissa problem steg för step-- och mer exakt, desto bättre. Och så ett exempel som människor är visserligen mindre kända dessa dagar, men icke desto mindre är fortfarande med oss ​​i programvara, är processen att leta upp någon i en telefonbok. Nu, allt färre människor känner varandra år vad denna relik faktiskt är här. Men tillbaka i min dag, Detta var en telefonbok med tusentals sidor och siffror och människors namn från A till Z. Och även om vi slags fusk en bit-- detta är mestadels gula sidorna. Det fanns också vit sidor på den tiden, som hade alla dessa namn och antalet faktiska människor. Och om jag ville se någon i en telefonbok som här i dag, naturligtvis, Jag skriver bara i de första få tecknen i hans eller hennes namn, och min telefon finner denna information. Men den process genom vilken din iPhone eller Android-telefon eller vad som faktiskt hitta någon i din kontaktlista är identisk med vad vi människor antagligen har gjort under en längre tid. Nu kunde jag ta detta problem, om man så vill, och ingångarna här är inte nollor och ettor. De pages-- liknande, låt oss säga 1000 sidor. Och om jag ville söka upp någon gillar Mike Smith i denna telefonbok, Jag kunde börja från början och se att jag är i ett avsnitt och sedan slå en sida på en tid, ser och ser som jag gör till B: s och C: s och D's och så vidare för Mike Smith. Smith börjar med ett S, jag förhoppningsvis så småningom hitta honom. Är detta algorithm-- som process-- korrekt? Ja. Det är rätt. Jag hittar Mike om han är här, men Vad är förbehållet att du kan erbjuda. Det är långsam. Höger? Jag vet att Mike S är typ av mot den senare hälften av telefonboken. Varför i helsike är jag med början vid början och går sida vid sida för sida. Så naturligtvis, kan jag vända det runt och börja från baksidan, men det kommer att få mig det i samma takt, Om du willl-- sida efter sida efter sida. Och det kommer inte att fungera om jag vill för att söka efter någon annan vars Namnet kommer tidigare i alfabetet. Så vad händer om jag gör vad jag lärt sig i skolan, igen, gör det inte av dem men två och två. Så 2, 4, 6, 8, 10, 12, och så vidare. Är det rätt? Nej. Det är typ av rätt. Men en del av er som mumlade något, där är problemet, eller felet, misstaget så att säga. Ja. STUDENT: Du kan hoppa över den högra posten. DAVID MALAN: Ja. Jag skulle hoppa över Mike Smith är eftersom jag har tagit två sidor på en gång och han råkar bara vara inklämt mellan dessa två sidor. Jag kan förstå att Jag är på till T avsnitt inte ha funnit Mike Smith ännu. Och så vad kan det fasta finnas? Tja, om jag träffade Ts i telefonboken, Jag kan behöva fördubblas backa en eller så sida. Så det är fastställbara, men det är inte riktigt så enkelt som bara går genom två till påskynda min prestation. Men vad? Kom igen. Vad är vad de flesta människor kommer att göra med denna typ av telefonbok? Du har gett telefonboken. Vad gör du? Vad är det? Gå till mitten. Så hörde jag gå till mitten, och jag befinner mig ungefär i M avsnittet så att säga. Och nu vad vill jag göra? Bra jobbat. Vad heter du? JAMES: James. DAVID MALAN: James, okej. Vad ska jag göra nu? JAMES: Du går i halv som har S-talet. DAVID MALAN: Okej. Jag kommer att gå in i hälften har S i det eftersom, återigen, en bestämmelse här var att denna sak sorteras. Det är en ganska värdelös 1000 sidor om Verizon faktiskt inte sortera dessa saker för oss A till Z. Så om jag vet Mike är förmodligen i den senare hälften av telefonboken, Jag kan nu. [Skrattar] Riv problemet i halv. [APPLÅDER] Tack. Riv problemet i halv. Det var faktiskt real-- denna kamp. Så riva telefonboken på mitten, lämnar mig med i grunden samma problem. Men naturligtvis, hälften så stor. Och om jag följer James råd igen, och jag går här. Jag säger, åh nu är jag i T avsnitt. Och så naturligtvis, jag kan riva telefonboken i halv ett mer tid, lämnar mig med ett problem som är nu en fjärdedel av storleken. Så jag har gått från 1000 till 500 till 250 till 125 och så vidare. Det känns som jag är ta större bites ut om detta problem med varje iteration, eller varje steg i den. Och faktiskt, när jag kommer att tillbringa hitta Mike Smith i detta exempel är så mycket mindre eftersom så småningom jag kommer att skära detta skjuta upp boken ner bara en ensam sida. Och om Mike är på den sidan, jag är kommer att gå vidare och ge honom ett samtal har funnit honom. Men hur mycket bättre är att algorithm-- som vågar säga intuitivt algorithm-- än de vi började som vi är mycket linear-- vänster right-- i en takt av 1 eller 2x? Nåväl, låt oss rita detta. Vi behöver inte oroa sig alltför mycket om matematik eller siffror i det här fallet här. Vi ser bara på en tomt. Så på x eller horisontell axel, är storleken på den problem-- hur många sidor finns. På y, eller den vertikala axeln, är hur mycket tid kommer det att ta mig för att lösa det. Och kanske det är hur många sidan varv hur många sekunder, hur many-- någon enhet av åtgärder. Och jag har ritat en röd räta linjer här eftersom om varje ny sida av telefonboken kräver jag för att göra ett ytterligare steg. Så om Verizon lägger en mer sida nästa år, Jag kanske måste vända en mer sida att hitta någon som Mike Smith. Under tiden, den andra algoritmen, som Jag gick två och två, är samma form. Det är fortfarande väldigt linjär, mycket kvar att höger, med lika byte varje gång, men lutningen är lite lägre. Till exempel om storleken på problemet var ungefär här och jag använde min första algoritm, Jag kan sluta hela vägen på toppen av den röda linjen. Men om jag istället använda till twosies närma, den gula linjen antyder eftersom det är lägre, att det kommer att ta mig mindre tid att lösa. Men vad är formen på tredje algorithm-- igen, utan tvekan den mest intuitiva algoritm? Tja, det ser lite något som det här. Det är böjd eller logaritmisk, i form. Och även om det aldrig typ av planar ut, det asymptotiskt inches upp och upp och upp, men fruktansvärt långsamt kontra allt annat. Och vad är ta bort? Tja, vi kallar det log n. Men vad innebär det egentligen? Tja om Verizon fördubblat antalet sidor i telefonboken nästa år från 1000 till 2000. Hur många fler steg är min första algoritmen kommer att ta? Min första algoritm. Kanske 1000 fler steg. Om de fördubblades telefonbok, jag kommer att behöva bläddra igenom en annan 1000 sidor för att hitta Mike. Naturligtvis, om den andra algoritm, kanske 500 eftersom jag är går dubbelt så fort. Men om Verizon fördubblar antalet sidor mellan detta år och nästa, med mitt tredje algorithm-- klyftan och erövra att James föreslog går i hälften och hälften och half-- hur många fler steg kommer det tar mig nästa år att ha en telefonbok med en storlek 2000? Bara en. Eftersom med en bit, kan jag ta, av det problemet, halv av sidorna bort. Och om du tycker om det här lite vansinnigt now-- om telefonboken inte har 1000 eller 2000 sida, men låt oss säga 4000 miljoner pages-- Det är en stor telefon book-- hur många gånger eller hur många steg kommer det att ta mig för att hitta Mike Smith i telefonboken med 4 miljarder sidor. Du kan slags börja göra matten. Okej. 4 miljarder delat med två. Så det är 2 miljarder dividerat med en. Det är 1 miljard. Sedan en halv miljard. Då 250-- så att du kan göra det igen och igen men inte så många gånger tidigare du får en sida. Och faktiskt, även om telefonen Boken är 4 miljarder sidor lång eller databasen du söker är 4 miljarder poster lång, det kommer att ta dig att ge eller ta 32 steg bara för att upptäcka Mike Smith. Och om du dubbla telefonboken nästa år från fyra miljarder till 8 miljarder dollar 33 steg i stället för bara 32. Och detta är ett bevis till en av de idéer att vi kan omfamna i datorn vetenskap i allmänhet, som är denna computational tänkande och närmar ett problem uppriktigt att använda verktyg från din redan bekanta verktyg kit-- din verkliga världen med som du känner, men utnyttja dessa idéer att faktiskt lösa problem. Men vi måste formalisera vår lösningar på dessa problem. Och så låt mig presentera för ett ögonblick något som vi kan kalla pseudokod. En stor del av terminen, vi tillbringar med hjälp av faktiska koden i språk som C och PHP och JavaScript och SQL och liknande. Men nu, låt oss titta bara på något ganska intuitivt som engelska. Jag kan destillera det algoritm med vilken Jag hittade Mike i steg som denna. Plocka upp telefonboken Öppen för mitten av telefonbok Titta på namns Om Mike är bland namns ringa Mike Else om Smith är tidigare i boken Öppet till mitten av den vänstra halvan av boken Annars gå till linje 3 Else om Smith är senare i boken Öppet till mitten av högra halvan av boken Gå till linje tre Annan Ge upp Och det finns några egenskaper nu av detta som är värt att påpeka. Så en, alla linjer Jag har markerat i gult vi kommer att börja ringa uttalanden eller funktioner eller procedurer. De är bara åtgärder göra detta, och det finns inte så mycket variation till det. Nästa steg här men är dessa conditions-- om, annars, annars om, annars. Och dessa kallas förhållanden, eller grenar, och de är beslutspunkter. Och de tillåter oss att göra något villkor. Och i själva verket, låt oss ta en snabb titta på kanske en bekant face-- vi kallar honom Bill-- och exakt vad dessa villkor, hur dessa kan användas. Bill Gates: Människor gör beslut varje dag. Till exempel, innan du går utanför du typ av har en if-sats som säger, om det regnar, då jag behöver för att få min jacka. Och datorer är häpnadsväckande när du besluta om dessa typer av uttalanden att de tillförlitligt kan exekvera dessa saker på otrolig hastighet. Och så ett datorprogram verkligen är en liten bit av matematik och vissa om uttalanden där beslutet skickas ut. DAVID MALAN: Så nu ska vi fokus på några olika lines-- de som jag har markerat i gult här. Och det visar sig att det finns olika sätt att uttrycka denna idé. Men intuitivt vad våra linjer 8 och 11 att jag har markerat här berätta att göra? Ja, gå till linje 3, men vad beteende är att verkligen inducera? Det är någon slags slinga eller cykel, och du kan typ av se det. Höger? Om linjen 8, går du tillbaka till linje 3, och sedan slog linje 8 igen, du kan gå tillbaka till linje 3, tillbaka till linje 3, tillbaka till linje 3. Det finns denna typ av cykel eller slinga. Och faktiskt, det är induceras i linje 11 potentiellt också. Och detta är en grundläggande programmering konstruera liksom. Du kanske inte vill bara göra något med ett uttalande eller göra något villkorligt med ett tillstånd eller en filial. Du kanske vill göra något cykliskt med en slinga. Och vi kommer att ha någon annan med vilken du kan vara familiar-- vi kallar honom Mark-- förklara detta koncept här. Mark Zuckerberg: En sak att datorer är riktigt bra på upprepar kommandon. Som person, skulle du få verkligen uttråkad om du var tvungen att göra samma sak massor av gånger i rad, men en dator kan göra samma sak miljoner eller miljarder gånger och inte bli uttråkad och kunna att utföra den riktigt bra. Så till exempel, om jag vill önska alla på Facebook på födelsedagen genom att skicka ett e-post, det kan ta mig mer än en talet faktiskt skriva ut alla dessa e-postmeddelanden till alla. Men med bara några få rader kod, kan jag har ett system skicka ett e-postmeddelande till alla på Facebook som önskar dem en trevlig födelsedag. Så det är vad slingor är och varför de är värdefulla och något att datorer kan göra mycket bra. DAVID MALAN: Ett stort tack till våra vänner på code.org för dessa två filmer. Och förra veckan, kanske du har sett att Mark Zuckerberg och Facebook postat detta tillkännagivande, nämligen att de bara har passerat en viktig milstolpe för första gången någonsin. 1 miljard människor använde Facebook i en enda dag, särskilt i måndags. En av sju människor på jorden tydligen inloggad på Facebook. Tja, verkar detta ett bra tillfälle att se tillbaka på var Facebook började, och vi gick igenom CS50 egen arkiv eftersom det visar sig i 2005, Mark gav en gästföreläsning i CS50. Du ser att produktionsvärden var inte riktigt samma tiden i termer av den teknik tillgängliga, och du kommer också se att närvaron av detta pensionat föreläsning inte nödvändigtvis väcka intresse av studenterna, era föregångare, så mycket som det kan ha bara några år senare. Så låt oss ta en titt på Science Center C. TALARE 2: Vänligen gå mig, och välkommen. [APPLÅDER] Mark Zuckerberg: Yo. Okej. Cool detta är första gången jag har någonsin har varit tvungna att hålla en av dessa saker. Så jag ska bara fästa det riktigt snabbt. Okej. Hör du det? Är det bra? Är detta förstärks alls? Okej. Ljuv. Så, detta är som en av de första gångerna Jag har varit på en föreläsning vid Harvard, men-- DAVID MALAN: Så småningom Science Center gjorde zooma in på videon, men inte innan du tar detta utdrag där Mark pratar, som han diskuterade sin rumskamrat, Dustin, som ville hjälpa till med detta plats som kallas den Facebook.com och insåg att Mark är på väg att nämna programmering languages-- en kallade Perl, en kallas PHP-- som han diskuterar ursprunget till Dustins bidrag. Mark Zuckerberg: Jag började driva sajten och lanserade det i Harvard i februari 2004. Så jag antar att nästan två år sedan nu. Och inom ett par veckor, en några tusen personer hade anmält sig, och vi började få några e-postmeddelanden från människor på andra högskolor frågar för oss att lansera den på sina skolor. Och jag tog 161 vid den tidpunkten. Så jag vet inte om ni vet rykte den kursen, men det var typ av tunga. Det var en riktigt rolig kurs, men det inte lämna mig med mycket tid att göra något annat med Facebook. Så min rumskamrat Dustin, som jag antar hade precis avslutat CS50, var som, hej. Jag vill hjälpa till. Jag vill göra expansionen och hjälpa du räkna ut hur man gör saker. Så jag var som, det är ganska cool, dude. Men du vet inte riktigt något PHP eller något liknande. Så veckoslutet gick han hem, köpte boken Perl for Dummies, kom tillbaka och var, okej. Jag är redo att gå. Jag var som, dude, är platsen skriven i PHP inte Perl, men det är coolt. Han plockade upp PHP över som några dagar eftersom jag lovar att om du har en bra bakgrund i C, PHP är en mycket enkel sak att plocka upp. Och han bara typ av gick till jobbet. Innan vi tar en titt nu på där kursen är på väg, Låt mig bjuda bara några av SC50 personal upp på scenen. Några av dem handlar sina egna kurser. Men om dessa TF och CAS och kurs huvuden som är här kunde komma på upp och gå med mig för en snabb hej. Tillåt mig att presentera i synnerhet Hanna Maria, Daven, och Rob, CS50 kurs huvuden här i Cambridge. [APPLÅDER] DAVID MALAN: Faktum är bevis på den stödstruktur att kursen har byggd under de senaste många år, CS50 personal i år siffror nästan 100, och det är här i Cambridge ensam. Under tiden i New Haven, är det något 40 TF och CA och anställda där att köra kursen också. Tillåt oss att presentera först, Rob Bowden. ROB BOWDEN: Hej. Jag är Rob. Detta är min sjätte året TFing i kursen. Så, hela vägen tillbaka i min freshmanår, det gjorde jag inte ta CS50. Din förstaårselev fall-- du kanske känner att du bara kan ta fyra kurser och det finns så många kurser i dag. Så jag är som, eh. Jag tog AP CS mitt sista år av high school det var hemskt. Så jag är som, eh. Datavetenskap är inte för mig. Så då var det över loppet av mitt första falla, att jag hade en vän i CS50, och Jag tror att jag deltog i en föreläsning med henne. Det är som, oh, detta är typ av bättre än vad jag hade i high school. Och under loppet av den år, hade jag mina egna problemsamlingar i kurserna jag faktiskt tar. Men jag fann att när jag ville procrastinate på dem, Jag skulle gå tillbaka till CS50 och titta på några av det där. Så ja. Jag är cool. Jag Förhalande med kodning. Så då är det i slutet av hösten som jag inser, hej, datavetenskap är ganska cool. Jag sluta med CS51. I nästa termin, Jag sluta med CS61. Och allt därifrån, då hamnar jag upp att förklara datavetenskap, som jag hade absolut ingen avsikt att göra När jag kom in i högskolan. Och nu är jag här. Så kursen är vad du gör av det. Jag hoppas du tycker om det. [APPLÅDER] DAVID MALAN: Tack till Rob. Och nu Maria, vår huvudet kursassistent. MARIA: Hey guys. Mitt namn är Maria. Jag är en sophomore i Cabot House, som kommer från Bulgarien, och jag är superglad att vara del av den personal i år. Jag tog CS50 som en nybörjare förra året, och jag har aldrig ens tänkte på CS förväg. Jag älskar absolut kursen, och jag hoppas att ni alla älskar det lika mycket som jag gjorde. Och, ja. Välkommen till CS50. DAVID MALAN: Tack till Maria. [APPLÅDER] Nu Hanna, vår huvud undervisning karl. HANNA: Hej, jag är Hanna. Jag är en senior i Cabot studera datavetenskap. Jag tog CS50 som en nybörjare och hade varit TFing-- detta blir mitt tredje år. Så jag kommer att vara lyckligt involverade i CS50 för alla fyra år, och jag ser fram emot att arbeta med er alla. DAVID MALAN: Tack till Hanna. [APPLÅDER] Och slutligen, Daven, vår precepter. Daven: Hey guys. Jag är en föreskrift över i datavetenskap här. Detta blir min fjärde året undervisning. Jag hjälper också hantera kursen. Så jag är säker på att du kommer att se mig omkring, särskilt på kontorstid. Jag är alltid på kontorstid. Så om du ser mig gå runt, definitivt komma säga hej. Jag älskar att träffa alla. Annars har kul, och jag ser dig omkring. DAVID MALAN: Tack till Daven också. Så du möter alla dessa människor innan lång. Men utan vidare väsen, om ni skulle vill fortsätta era platser från tidigare. Tillåt mig att presentera avstånd nu några av våra vänner från New Haven, i synnerhet kursens huvuden som kommer att att övervaka CS50 there-- Professor Brian Scassellati, Jason, och Andi, som bara-- så att vi inte utmana ödet med någon Facetime eller like-- har precis skickat oss minuter sedan följande video där de säga hej från föreläsningssal vid Yale, där föreläsning är strömmas just nu. Så våra vänner från Yale. BRIAN Scassellati: Hej, David. Hej, alla på Harvard. Vi är så glada över att vara föra CS50 till Yale denna termin. Mitt namn är Brian Scassellati, men alla kallar mig bara SCAS. Och jag är här i dag för att införa till er CS50 personal. [GLÄDJANDE] Och ännu viktigare, jag här för att införa och alla studenter vid Yale som från och med i morse har gjort detta det mest populära kurs på Yale de CS50 studenter. [GLÄDJANDE] Så vi är mycket glada att se dig här på fredag ​​och på lördag för Pussel dag och har en stor föreläsning. Bye. [APPLÅDER] DAVID MALAN: På skärmen här är namnen på några av 140 anställda medlemmar som väntar dig över loppet av semester-- vissa av dem här i Cambridge, några av dem här i New Haven. Och faktiskt har du en tillfälle denna lördag, som SCAS anteckningar, till närvara CS50 Puzzle dag. Du kanske har sett små pusselbitar halkade under dina dörrar nyligen. Vi har några extra här senare när du finns. Om du monterar alla fyra pussel bitar och sammanfoga styrkor med rum närliggande er i din hus eller sovsal, de ska montera in en QR-code-- eller en tvådimensionell streckkod, som en gång monterade och skannas med telefonen kommer att leda dig till några fantastiska pris eller-- jag antar du kan bara fotografera detta nu också. Men hitta de pusselbitar ändå för att vinna den fantastiska pris. Och faktiskt en av de traditioner i SC50-- ah, för långsam. En av de traditioner i CS50 är att servera tårta efter den första föreläsningen. Och så sannerligen, i en några minuter från nu, det kommer att bli kaka serveras utanför både här och New Haven också. Men first-- vi dekorerade dem själva. Men first-- och förhoppningsvis det kommer att räcka. Men först, en snabb titt. Så föreläsningar är verkligen kommer att vara produceras mestadels här i Cambridge. Men varje månad, kommer vi hoppa ner till Yale med CS50: s produktionsteam och ström kursen i omvänd riktning samt så att föra dessa två campus verkligen för första gången i historien så nära varandra som möjligt som en i samma kurs. I termer av den stödstruktur som är har stått upp här i Cambridge samt som i New Haven, är sektioner. I själva verket, som en del av er kan vet, har vi olika spår inom loppet för de mindre bekväm, bekvämare, och någonstans däremellan så att oavsett din tidigare bakgrund, kan du i slutändan lyckas i klassen. Kontorstid Samtidigt är en möjlighet på måndagar och tisdagar och torsdag kvällar att arbeta både här och i New Haven på vår kursens problem sätter med dussintals kursens personal nära dig. Problem sätter tiden är stöds av saker som vi kallar genomgångar, som videobaserad tutorials som verkligen svara FAQ av var man ska börja en veckas utmaning. Och postmortems att gå genom möjliga lösningar så att änden av det problem satt för, du vet exakt vad du kunde ha gjort annorlunda eller helt annorlunda. Problemet ställer sig komma i två versioner, en vanlig utgåva att vi förväntar oss och bjuda in de flesta av den class-- cirka 90% plus att do-- och en så kallad hacker edition där varje sida är tryckt hacker upplagan, hacker upplaga, hacker upplagan, så att du har den karma om man så vill, för dykning till mer avancerade versioner av kursens problemsamlingar som täcker skenbart samma material men med en mer sofistikerat tillvägagångssätt och med ytterligare bakgrunds ibland introduceras. Samtidigt är det nio sena dagar som du kan ansöka till kursen problem sätter liksom den lägsta poängen, som vi släppa vid termer änden. Men vad som väntar? Tja, en smak av problemet sätter till hands på fredag och nästa vecka där vi plaska för bara ett par dagar i något kallas Scratch, en grafisk programmering språk som utvecklats av våra vänner vid MIT Media Lab som låter dig att programmera antingen för första gången eller i en ny miljö helt med hjälp av en dra och släpp typ miljö. Varvid pusselbitar endast interlock tillsammans om det gör logisk mening att göra det. Under tiden i problembild två förra året till exempel, vi införa klassen till en värld av kryptografi, konsten att kryptera eller förvrängningsinformation. I själva verket denna text här om dekrypteras, kommer faktiskt leder dig till lite kul destination. Och i det problemet satt, vad vi hade studenter göra är att genomföra exakt de typer av saker-- en algoritm, eller en uppsättning instruktioner för kryptering och krypteringsinformation. Och i hacker edition av att samma problem set, vi utmanar studenter att ta en krypterad fil från en vanlig dator Systemet med massor av användarnamn och krypterade lösenord och att knäcka dessa passwords-- faktiskt räkna ut vad de var utan att veta något a priori om de faktiska lösenord. Samtidigt gör vi övergången i problemet sätter att sedan titta på världen av grafik. Och i själva verket kan du tänka dig nu att detta kan kanske vara det enklaste sättet att representera en svartvit bild. En vit pixel, eller fyrkantiga, som uppe till höger där, kan vara representerade med en en och en svart fyrkant kan representeras med en 0. Och bara genom att använda fler bitar som vi föreslagna tidigare med 72 och 73 och 33, kunde vi representerar färgpunkter också. Och vad vi gör under detta problem uppsättning är i allmänhet ta en promenad runt campus med en digitalkamera, ta fotografier av personer, platser och saker. Sedan på något sätt varje termin, vi verkar misstag bort eller skada minneskortet där alla dessa bilder är, och så du utmanas att sedan skriva programvara som att återvinna dessa JPEG från en kopia av vår kamerans kort. Samtidigt behöver vi hand du senare i termen ett lexikon för engelska ord som har 143.000 ord, och du måste komma upp med ett smart sätt att lägger dem i minnet, eller RAM så att säga, för att svara frågor av formen: är detta ett ord, är detta ett ord, att genomföra snabbaste stavningskontroll som du kan, även klämma fast själv potentiellt mot klasskamrater för att se vilka av er använder den minsta mängden tid när du kör din kod och även minsta minne. Senare i tiden gör du faktiskt genomföra en egen webbserver. Så inte bara en webbplats i en språk som kallas HTML och mer, men en webbserver som faktiskt lyssnar på förfrågningar på internet och svarar på dem. Och faktiskt, det är hur vi överbrygga vår värld av C som du kommer bekanta nästa vecka och PHP och HTML och JavaScript och CSS och liknande. Eftersom en av de första webbaserade projekt vi göra senare i termen är historiskt CS50 Finance. Etrade.com stil en webbplats som tillåter dig att köpa och sälja aktier nästan samtidigt skriva kod för att prata med Yahoo Finans få semi realtid lager citat för att uppdatera din egen portfölj. Men slutligen naturligtvis, är den slutliga project-- en möjlighet att göra de flesta något av intresse för dig att lösa ett problem här eller bortom av intresse för du det är på något sätt inspirerade av lärdomar i klassen. Och klassen, som ni kanske vet, kulminerar i så kallade CS50 hackathon och CS50 Fair och valfritt antal andra kulturevenemang hela terminen som tillåter dig att engagera med varandra och kursen personal. Till exempel, vid eld och is i Sitar detta år, ja, på fredag ​​eftermiddag, vi bjuda in några 50 studenter till lunch, vem vill ansluta sig till oss, själv, och personalen, och våra vänner från industrin och alums att prata om livet i den verkliga världen och bortom medan du njuter av en god lunch. Vid hackathon kommer du ser sådana bilder eftersom dessa, inklusive massor av candy-- och från och med 2014 för första time-- grönsaker. [APPLÅDER] Men vid 05:00, gör scenen vanligtvis ser lite ut ungefär så här. Och sedan bara en vecka eller så senare, är CS50 Fair som vissa 2000 plus studenter och personal och lärare medlemmar från hela campus och över campus i år kommer att se och glädje i prestationer av CS50 studenter, som är du nu. Och faktiskt, medan detta år kommer vi vara inbjudande och busing någon vid vid Yale som vill komma upp till Cambridge denna lördag för CS50 Puzzle Dag, och vi kommer att göra exakt samma sak i december för CS50 hackathon så att Harvard och Yale studenter likadana tar del i båda dessa händelser. Vi kommer också att hålla CS50 mässor i Cambridge och i New Haven i år så att eleverna på båda campus och personal och lärare kan se respektive campus s prestation. Och de prestationer kommer att inducera en sådan minnes eftersom detta och detta och slutligen detta där ni alla gå ur klassen bär en liten något som du var förhoppningsvis glad eller stolt att säga att jag tog CS50. Men innan dess och innan vi serverar tårta, Vi har lagt together-- tack vare CS50: s produktionsteam och en viss själv stick, ett tillfälle som vi använder sådana saker for-- när vi skickade det inte bara här till Cambridge men också till New Haven att samla några hellos från kurs personal och alla folks du kommer att möta både här och i New Haven under de följande månaderna. Tillåt mig att presentera en några fler av CS50 personal. Mark Zuckerberg: Har som gör det? Åh, det kommer. Det går. Ooh. Yarr! [Musik spelas ANDY GRAMMER, "Älskling, jag är  BRA"] MARY: Detta är Caitlin. Det är Jay, och jag är Mary. SATO: Hej, killar. Jag Sato. MICHAEL G .: Hej. Mitt namn är Michael, G. DOUG Lloyd: Jag är inte. Nej. Jag är Doug Lloyd. Jag kan inte tro att jag håller en selfiepinne just nu. TALARE 4: Hej. TALARE 5: Hej. TALARE 6: Hej. TALARE 7: Hej. TALARE 8: Hej. Vi umgås på Yale. Vi är verkligen glada för denna termin eftersom det är första gången den kommer till Yale. Det kommer att bli häftigt! [Musik spelar] JACOB SCHERBA: Mitt namn är Jacob Scherba. Jag är glad över att lära CS50 eftersom jag tror det ta datavetenskap till människor i och lättillgänglig sätt. TALARE 9: Jag är verkligen glada att lära CS50 eftersom jag tog klassen förra året, och det är en av de bästa klasserna. TALARE 10: Ja. Mitt råd är att du ska ta CS50. JACOB SCHERBA: Jag valde CS eftersom Jag tycker det är ett roligt och kreativt sätt att lösa problem på ett analytiskt sätt. TALARE 11: Tillbaka när jag var en liten nybörjare och rädd för datavetenskap och rädd för att göra teknik och sånt, Det var den första hårda klass tog jag, och det var också min favorit klass någonsin. DOUG Lloyd: Detta är min nionde året undervisning CS50. Det gör mig låter så gammal! Det finns alltid något nytt. Det finns alltid något spännande. Det finns alltid nya utmaningar som möter nya studenter, och det är roligt att hjälpa dem och uppleva dem utmaningar med dem och hjälpa dem att lösa sina problem. TALARE 12: När jag först lärt sig hur man gör CS, Det var som att lära en supermakt. Och se till att andra studenter och att hjälpa dem genom denna process är en av de mest givande saker jag någonsin. TALARE 7: Jag valde CS eftersom det i början, var jag en math koncentrator och jag tog CS50 och förälskade sig i den. Jag kände också att med CS, jag kunde bygga saker. Och att jag tänkte, var en riktigt cool aspekt. TALARE 13: Några råd för ny studenter är att gå till kontorstid och umgås med awesome TF. TALARE 14: Börja P-apparater tidigt, gå till kontorstid, bli frends med din TF. TALARE 15: Ja. Allt hon sade. TALARE 16: Var inte rädd för att be om hjälp. TALARE 17: Ja. TALARE 18: Börja P-apparater tidigt. TALARE 19: Det är en stor social upplevelse. Göra en massa vänner på detta sätt. TALARE 14: Gå till avsnittet Det är roligt. TALARE 11: Jag menar, gå för det. Det är verkligen svårt. Du får ut av det vad du lagt ned på det, men det är en riktigt kul klass särskilt om du är villig att lägga tid på det, men det hjälper om du lägger tid på det. Du får en mycket mer ut ur den senare. Mike: Jag är Mike. CAMILLE: Jag är Camille. Hanya: Jag är Hanya. MATT: Jag är Matt. PETER: Jag är Peter. PHILLIP: Jag är Phillip. PATRICK: Jag är Patrick. ROB BOWDEN: Jag är Rob Bowden. BRIAN Scassellati: My namn är SCAS, och this-- ALL: --is CS50. TALARE 20: vid Yale. TALARE 21: vid Yale. [SKRATTANDE] DAVID MALAN: Det är det för CS50. Vi kommer att se dig från Yale på Fredag, pussel dag på lördag. Kaka serveras nu. Detta är CS50. [Musik spelar]