[MUSIK AFSPILLER] [MUSIK AFSPILLER] DAVID MALAN: Okay. Dette er CS50. [Musik spiller Tritonal, Cash Cash,  "Untouchable"] [MUSIK AFSPILLER] SPEAKER 1: Jeg har tænkt mig at Frankrig, og du vil også. [MUSIK AFSPILLER] DAVID MALAN: Dette er CS50, Harvard University introduktion til den intellektuelle virksomheder af datalogi og kunst af program-- og for første gang i historien, Yale University er så godt. Faktisk, uanset om du er her i Cambridge eller i New Haven eller Miami eller St. Louis eller Amsterdam eller hvor som helst jorden rundt tager CS50, computer videnskab E50, CS50X, CS50 AP, vi er alle én og samme. Velkommen til CS50. Det vi have-- [BIFALD] [Griner] [BIFALD] Så jeg har lavet en fejl selv nogle tid siden, da jeg startede college. Og jeg fik på college, og jeg besluttede at ærligt, holde inden for min comfort zone. Jeg endte hvorved en fusion, eller en større, for regeringen. Ant, der var for det meste en funktion af mig være temmelig bekendt med regeringen eller i det mindste historie eller jeg kunne virkelig godt lide forfatningsret i gymnasiet. Og så når jeg fik her, jeg slags af gravitated mod ting som jeg var allerede bekendt. Højre? Gud forbyde jeg gør dårligt i klassen. Jeg bestemt ønskede at blive inden min comfort zone, og det var ikke før sophomore år, at jeg endelig stod op den frækhed at skridt mund i et klasseværelse kaldet CS50. Og på det tidspunkt, gjorde jeg endelig indser at, min Gud, hjemmearbejde kunne faktisk være sjovt. Ja, jeg var en af ​​de børn der på fredag ​​aftener, når P-SÆT ville blive frigivet, jeg ville gå tilbage til mit værelse og dykke i nattens P-SÆT. Og for mig, der var et tegn at dette var et felt for mig. Men hvad var vigtigere var den faktum, at jeg fik op denne nerve at udforske farvande ukendte for mig og komme ud over min egen komfort zone og helt ærligt, jeg kun var i stand til at gøre det sophomore år ved at tage denne klasse bestået / ikke bestået. Faktisk var det den sidste dag, Jeg endelig skiftede og endelig erklæret CS som min koncentration, sætte gov på det tidspunkt bag mig. Og så er vi ikke sætte i dette kursus for at slå jer alle ind i CS majors eller koncentratorer, men snarere at give dig en mulighed forhåbentlig gå ud over verden som du i øjeblikket kender og bringe tilbage fra denne verden færdigheder og viden og kyndige at du kan anvende til din egen verden, uanset om det er inden for humaniora, samfundsvidenskab, naturvidenskab, eller ud over. Ja, hvis du er følelse lidt frygtløs om at være i dette rum endsige i denne klasse, indse, at hvis historien er nogen indikation, 72% af jer har aldrig taget en CS kursus før. Så det er med alle midler ikke tilfældet at den studerende sidder til venstre eller til højre eller foran eller bag dig ved langt mere om CS eller programmering især end dig. Det er faktisk ikke tilfældet. Og ja, meget af støttestrukturen at vi har sat op i denne kursus i de seneste mange år har været for netop dette reason-- til tilvejebringe en on rampe, der stadig kommer ud lige så strengt og lige så højt som ever-- men hvis hældning tillade studerende mindre komfortabel og mere behagelig både til at lykkes, uanset af hans eller hendes tidligere baggrund. Faktisk hvad i sidste ende spørgsmål i denne klasse er ikke så meget, hvor du ender i forhold til dine klassekammerater men hvor man i uge 12 ender i forhold til dig selv i uge nul, hvilket er hvor vi er her i dag. Faktisk og dette kan meget vel og sandsynligvis ser ud som græsk til mange af jer. Men bare rolig, der dette og meget mere kommer til at være helt inden for dit gribe i bare en lille smule tid. Men i dag har vi fokus på nogle af de højere niveau ideer at give dig en smag af CS50 og datalogi i en fornemmelse af, hvad du tilmelder dig for. Og ja, datalogi kan være destilleret mere blot som beregningsmæssige thinking-- tænke som en computer, hvis du vil. Og der er så mange forskellige ting ingredienser, der går ind i denne, men lad os foreslå blot tre for i dag. Hvis målet af klassen i sidste ende er ikke at lære dig at programmere, er ikke at lære dig C eller PHP eller SQL eller en række af ordene og akronymer i kursus beskrivelse, men snarere at lære dig at løse problemer mere effektivt og til at tænke mere metodisk og mere algoritmisk, så at sige. Lad os se, hvad der præcist betyder. Så ville jeg foreslå, at tænkning beregningsmæssigt koges ned at løse problemer. Hvad har du brug for at løse et problem? Du er nødt til input-- ligesom input til problem-- du har brug for et output, som er forhåbentlig løsningen, og så skal du have en proces, som at løse dette problem, som vi vil kalde en algorithm-- et sæt af instruktioner til at løse nogle problemer. Men først, lad os fokusere på den første og den sidste af disse indgange og udgange. Computere trods alt, tilsyneladende kun forstår nuller og ettaller. Men hvordan kan det muligvis være? Selv hvis du ikke kender overhovedet med, hvad der er under hætten, du formentlig mindst hørt, at computere forstår binary-- bare nuller og ones-- men hvordan kan du overhovedet gøre noget interessant? Tja, et af temaerne af klassen går at være denne layering-- hvor der i dag, vil vi tage et hurtigt blik på det laveste niveau detaljer, men med hver dag der går, hvor vi lag eller abstrakt på toppen af ​​de detaljer til faktisk løse højere niveau problemer af interesse for os. Så her er, hvad vi kunne kalde binary-- med blot et alfabet af 0 og 1. Men vi mennesker er for det meste fortrolig med decimal. December betydning 10. Bi betyder to. Og så i decimal systemet, har vi 10 cifre på vores disposal-- af Selvfølgelig nul til ni. Så hvis du ser på en række som dette, de fleste af jer intuitivt bare fatte det er 123. Der er ikke noget virkelig hårdt om. Men hvorfor er det 123? Tja, hvis du tænker tilbage på klasse school-- eller i det mindste den måde, jeg lærte dette slags verden-dig kan huske, at vi behandlede disse ting i kolonner eller steder. Så vi har dem sted til højre. TEN sted i midten. De hundredvis placerer til venstre. Og så hvordan får vi fra dette mønster symbols-- 1 2 3-- til dette højere niveau idé, at vi kender som 123? Tja, det er bare nogle simple aritmetiske. Højre? Den ene er det væsentlige betyder give os 100 gange 1 plus 10 gange 2 plus 1 gange 3. Og selvfølgelig, hvis vi gør ud matematik der, det er 100 plus 20 plus 3-- ellers kendt som 123. Så hvis du er på samme side som denne ret nu og er fortrolig med såkaldt decimal system, som et menneske, det er faktisk godt inden Deres anvendelsesområde komfort at overveje nu det binære system. Tag en vild guess-- dette repræsenterer, i verden af ​​computere i binary-- hvad nummer? Nul. Men hvorfor er det? Tja, det viser sig, at søjlerne eller steder her-- de ikke er beføjelser 10. 1, 10, 100, 1000, og så videre. De er i stedet, helt simpelthen, potenser af 2. Så, 1, 2, 4, 8, 16, 32, og så videre. Og så nu vi naturligvis komme til 0 her simpelthen fordi vi har 4 gange 0 plus 2 gange 0 plus 1 gange 0, hvilket naturligvis giver os 0. Men hvordan kan jeg gå om repræsenterer tallet 1? Hvad er mønsteret af nuller og ettaller til at repræsentere de numeriske vi mennesker kender som en? 001. Og 2? 010. Og nu mønstret begynder at gentagelser. Nu er det 011. Og igen, 0 fours, en 2, en 1. Så 2 plus 1. Det er tre. Og nu til at repræsentere 4, vi ikke bare ændre det 0 til en 1. Du slags nødt til at bære, så at sige, og tallene begynde at spejlvende rundt bare ligesom i decimaltegnet verden. Så dette er fire. Dette er 5. Dette er 6. Det er 7. Og så vi har talt så højt som 7. Nu mangler vi bare brug for, er mere en bits-- mere nuller og ens. Og faktisk "bits", hvis du har hørte dette term-- binært ciffer. Bit er hvor der kommer fra. Og så hvis vi ønsker at repræsentere større tal, vi har brug for flere bit. Men lad os bevæge sig væk fra dias nu til noget lidt mere reel. Antag, at vi ønsker at faktisk repræsenterer denne ting. Jamen så lad os tage et kig nu ved en lille demonstration. Så dette er en webbaseret applikation at en af ​​CS50 egen, Michael G, sat sammen denne sommer til at hjælpe os belyse netop denne idé. Og ville nogen som at vove op på scenen foran alle hans eller hendes klassekammerater? Lige der foran. Kom op. Du er nødt til at være behagelige på kamera og internettet. Åh, lige her. OKAY. Vi er OK. Okay. Kom op. Hvad hedder du? Emily kom op. Så dette er Emily. Hvilket år er du? Freshman. Emily, rart at møde dig. David. Okay. Så op på skærmen her, vi har denne touch screen som vil tillade os at faktisk interagere med dette program, og det er bare en browser. Det er Chrome fuld screenet i øjeblikket, men det er programmeret af Michael til reagere på en måde, der tillader os til at lege med binære cifre. Så for eksempel, her har vi ikke tre, men otte bits-- nuller og ettaller. Lige nu er vi se på antallet 0. Og ja, alle otte nuller i decimal betyder nul. Så det er alle, der er bliver antydet her. Så hvis du ønsker at repræsenterer antallet 8, hvad er mønster af nuller og dem, som du ønsker? Du kan blot trykke op eller ned eller numrene selv. Okay. Så det er naturligvis 8, som du kan se deroppe. Og hvis vi ønskede at gør 16, hvad gør vi? Jep, bare røre det igen. 16. Okay. Så dette er alt fint og godt, det er stadig meget lavt niveau. Vi har brug for en måde i virkelige verden til Emily af faktisk repræsenterer disse ting. Og så formoder, at vi slå disse nuller og ettaller, som er meget konceptuelle, til egentlige pærer. Højre? En computer er et fysisk, mekaniske, elektriske apparat. Og dens input-- mindst hvis du tilslutter den eller afgift det-- er at have batteristrøm og elektroner flyder ind og ud. Så nu, hvorfor vi ikke stoppe med at tænke om bits som nuller og ettaller, men noget mere fysisk ligesom pærer her. Og hvis Dan Armendariz kunne slutte mig for bare en moment-- komme på spiller det, vi kommer til at stå i kø en ansøgning. Kom forbi, Emily. Beklager dette er den mest akavet demo for dig nogensinde. Kom herover. Vi kommer til at stå i kø op med tak til Dan Armendariz, et andet medlem af vores medarbejdere, en ansøgning kaldet binære pære. Så hvad vi har her er en iPad applikation der har følgende bruger grænseflade på skærmen for Emily. Det har lige fået nøjagtig de samme UI væsentlige det er derovre. Og hvis du nu ønsker at repræsenterer antallet, siger 8, hvordan ville du gå om at gøre denne bemærke til højre, pærer, som vi har her? Ah-ha. Magical. Så hvis vi ønsker at nu gøre dette til noget lidt mere udfordrende, og lad os gå videre og vælge en tilfældig tal som tallet 50 her. Input dette. Og hvis du kan nu blive udfordret til at komme op med nummeret 50, vi får en fabelagtig pris for dig. EMILY: OK. Åh gud. DAVID MALAN: Arithmetic er faktisk hårdt foran af hundredvis af dine klassekammerater. Men 50 har været svaret her. [BIFALD] Og så nu, det er meningen, at være demonstrative for Emily. Så i her, er lidt lys pærer ganske som disse, men det er faktisk den små magnetiske strimler. Og hvad er cool om disse og årsagen til at vi bruger dem i CS50 er, at de støtter noget, der hedder en API-- en application programming interface, som er bare en fancy måde at sige, at hvad en af ​​vores medarbejdere gjorde i løbet af sommeren blev skabe en iPad applikation her der taler over internettet til de pærer herovre, som er trådløst forbundet til en anden enhed. Men det er nu en mulighed for de endelige projekter. Og så Emily, hvis du ville så lignende, ved slutningen af ​​udtrykket, du kan pryde dit kollegieværelse i mellemtiden med dem. Tak til Emily så godt. [BIFALD] Men nu, lad os vende vores opmærksomhed på, hvad dette budskab kunne have set ud, og det er lidt noget som dette. I virkeligheden er dette en eksempel blot som en teaser af hvad der er at komme af, hvad der er kaldes en API anmodning. Og så det, vi har her, er simpelthen præcis de typer meddelelser at efter et par uger tid i CS50, vil du kunne sende til noget temmelig velkendt sådan til rent faktisk slå dem til og fra. Men det er alt fint og godt. Højre? Vi har den mentale model forhåbentlig til at repræsentere tal med nuller og ens. Og fra nuller og ettaller, kan vi komme til højere tal som 50, som Emily lige gjorde, eller vi kan bevæge sig op fra det. Og jeg påstå, at vi kan repræsentere ting som breve samt. Højre? Computere er langt mere interessant end bare tal. Og så hvordan kan du gå om der repræsenterer ord på skærmen eller e-mails eller essays eller lignende? Tja, det viser sig, at computere simpelthen abstrakt oven på disse lavt niveau detaljer og mennesker for nogen tid siden, kom op med en vilkårlig, men en konsekvent, kortlægning af numre til letters-- så at hver gang du ser et stort bogstav A på din computer skærm, odds er, hvad der er under emhætten er en mønster af nuller og ettaller at repræsenterer antallet, per dette skema, 65. Og mere fysisk indersiden af ​​din computer, er millioner af ting kaldet transistors-- disse days-- som er bare skifter hvis du vil, ting der kan gå til og fra og så forestille sig. Ikke otte af disse store pærer men millioner af disse lillebitte lys løg, eller kontakter eller transistorer, der kan tænde og slukke baseret på hvordan du programmere dem. Og så nu har vi en måde at repræsenterer breve så godt. Faktisk, hvis jeg skulle bruge denne kortlægning her og forsøge at faktisk stave noget ud, kunne vi se på dette mønster af decimaltal lige nu. Så vi kommer ikke til at selv fokusere på binære længere. Lad os bare betragte disse som decimaltal 72, 73, 33. Men hvad kan dette repræsenterer? Nogen der har en tilstrækkelig fotografisk hukommelse at vide, hvad er stavet på skærmen her? Ja et par stykker. Så hej. H-I og derefter et udråbstegn, som ikke var faktisk på skærmen. Men faktisk er der en kortlægning for hvert bogstav til hvert nummer at du måske ønsker at skrive på tastaturet. Men tal behøver ikke at repræsenterer kun bogstaver. Højre? Alle os vide om billeder og fotografier og lydfiler og videofiler og lignende. Så klart kan vi repræsentere højere niveau ting stille. Og så hvad en computer gør, er simpelthen vælge at fortolke mønstre af nul dem forskelligt baseret på sammenhængen. Hvis du dobbeltklikker på en Microsoft Word-ikon, du ser ordene på skærmen i stedet for farver og billeder fordi ord ved, at dette er en essay, at du faktisk har indtastet. Hvis du i stedet dobbeltklik på en JPEG eller en GIF eller en PNG, den åbner op og er et billede, fordi det .PNG Eller .docx eller hvad filen udvidelse er og hvad software du bruger ved at fortolke et mønster af nuller og ettaller forskelligt baseret på, hvad dens formål i livet er. Så for eksempel dette samme sekvens af tal kan repræsentere hvor meget rød gør du ønsker, hvor meget grøn vil du, og hvor meget blå vil du. Og ja, hvis du nogensinde har hørt RGB-- så bare rød grøn blå. Og så hvis jeg ser numre som dette giv mig 72 røde, giv mig 73 grøn, og 33 blå, det er sådan en computer ved hjælp tre bytes-- hvor en byte er otte bits eller 24 bits-- ville udgøre en temmelig ubehagelig skygge af brun eller gul her. Og i forskellige sammenhænge, ​​kunne de, nøjagtig samme mønstre i nuller og ettaller betyde noget helt anderledes så godt. Så vi har nu en måde at repræsentere oplysninger-- nuller og ettaller. Oven i det, får vi breve. Oven i det, kan vi få farver. Og lad os antage, for i dag at vi kan få lyd og video og tingene så meget mere sofistikeret end det. Men lad os nu overveje hvordan vi bruger disse input og producere dem udgange nu hvor vi har en måde at repræsentere disse oplysninger. Tja, vi har brug for noget kaldes en algoritme. Igen, et sæt instruktioner for at løse nogle problem trin step-- og mere præcis, jo bedre. Og så et eksempel, som mennesker er ganske vist mindre kendte disse dage, men ikke desto mindre er stadig med os i software, er processen med at se up person i en telefonbog. Nu, færre og færre folk ved hver år, hvad denne levn faktisk er her. Men tilbage i min dag, dette var en telefonbog med tusindvis af sider og tal og folks navne fra A gennem Z. Og selvom vi er slags snyd en bit-- dette er for det meste gule sider. Der var også hvide sider på det tidspunkt, hvor havde alle disse navne og antal faktiske mennesker. Og hvis jeg ønskede at se en person op i en telefonbog som denne dag, selvfølgelig, Jeg bare skrive de første par tegn i hans eller hendes navn, og min telefon finder, at oplysninger. Men den proces, hvorved din iPhone eller Android-telefon eller hvad er faktisk at finde person på din kontaktliste er identisk med det, vi mennesker sandsynligvis har gjort i nogen tid. Nu kunne jeg tage dette problem, hvis du vil, samt input her er ikke nuller og ettaller. De er Og den slags lignende, lad os sige 1.000 sider. Og hvis jeg ønskede at se op nogen gerne Mike Smith i denne telefonbog, Jeg kunne starte ved begyndelsen og se, at jeg er i A sektionen og derefter slå en side ad en tid, leder og leder som jeg gør til BS og C-og D's og så fremdeles for Mike Smith. Smith begynder med et S, jeg vil forhåbentlig med tiden finde ham. Er dette algorithm-- der process-- korrekt? Ja. Det er korrekt. Jeg vil finde Mike hvis han er i her, men hvad er det forbehold, at du kan tilbyde. Det er langsom. Højre? Jeg ved Mike S er slags mod den sidste halvdel af telefonbogen. Hvorfor dælen er jeg begyndende ved begyndelsen og går side ved side for side. Så selvfølgelig, kunne jeg vende det rundt og starte fra bagsiden, men det kommer til at få mig der i samme tempo, hvis du willl-- side efter side efter side. Og det kommer ikke til at fungere, hvis jeg vil have at søge efter en anden, hvis navn kommer tidligere i alfabetet. Så hvad nu hvis jeg gør, hvad jeg lært i folkeskolen, igen, gør tingene ikke af dem, men af ​​toere. Så 2, 4, 6, 8, 10, 12, og så videre. Er det korrekt? Ingen. Det er slags korrekt. Men nogle af jer, der mumlede nej, hvor er problemet, eller fejlen, den fejl så at sige. Ja. STUDENT: Du kan springe over højre post. DAVID MALAN: Ja. Jeg kunne springe over Mike Smith er fordi jeg har taget to sider på en gang og han tilfældigvis bare for at være indlagt mellem disse to sider. Jeg kunne indse, at Jeg er på til T-sektion ikke har fundet Mike Smith endnu. Og så hvad kan den faste der være? Tja, hvis jeg gør ramt Ts i telefonbogen, Jeg skal muligvis til at fordoble sikkerhedskopiere en eller så siden. Så det er fixable, men det er ikke helt så enkel som bare går med to for at fremskynde min præstation. Men hvad? Kom nu. Hvad er hvad de fleste mennesker går at gøre med denne slags telefonbog? Du er givet telefonbogen. Hvad laver du? Hvad er det? Gå til midten. Så hørte jeg gå til midten, og jeg finde mig nogenlunde i M sektion, så at sige. Og nu, hvad gør jeg ønsker at gøre? Godt arbejde. Hvad hedder du? JAMES: James. DAVID MALAN: James, okay. Hvad gør jeg nu? JAMES: Du går i halvdelen har S '. DAVID MALAN: Okay. Jeg har tænkt mig at gå ind i halvdelen har S 'i det, fordi, igen, en bestemmelse her var at denne ting er sorteret. Det er en temmelig ubrugelig 1000 sider, hvis Verizon faktisk ikke sortere disse ting for os en gennem Z. Så hvis jeg ved, Mike er sandsynligvis i den sidste halvdel af telefonbogen, Jeg kan nu. [Griner] Riv problemet i halve. [BIFALD] Tak. Riv problemet i halve. Det var faktisk real-- denne kamp. Så rive telefonbogen i halve og efterlod mig selv med grundlæggende det samme problem. Men naturligvis halvt så stor. Og hvis jeg følger James ' rådgivning igen, og jeg går her. Jeg siger, åh nu er jeg i T-sektion. Og så selvfølgelig, jeg kan rive telefonbogen i halvdelen en gang mere, hvilket efterlader mig med et problem, der er nu en fjerdedel af størrelsen. Så jeg har gået fra 1000 til 500 til 250 til 125 og så videre. Det føles som om jeg er tager større bid ud af dette problem med hver iteration, eller hvert trin i det. Og ja, den tid, jeg har tænkt mig at bruge finde Mike Smith i dette eksempel er så meget mindre, fordi i sidste ende er jeg gå til skære denne pone bog ned til blot én enlig side. Og hvis Mike er på denne side, er jeg kommer til at gå videre og give ham et opkald have fundet ham. Men hvor meget bedre er, at algorithm-- der tør sige intuitiv algorithm-- end dem, vi i gang med som vi er meget linear-- venstre til right-- i et tempo på 1 eller 2x? Nå, lad os plot dette. Vi behøver ikke at bekymre dig for meget om matematik eller tal i dette tilfælde her. Vi ser netop på et plot. Så på x eller vandret akse, er størrelsen af ​​den problem-- Hvor mange sider er der. På Y, eller den lodrette aksen, er, hvor meget tid er det vil tage mig at løse det. Og måske det er, hvor mange side sving, hvor mange sekunder, hvordan many-- nogle enhed af foranstaltninger. Og jeg har tegnet en rød lige linjer her, fordi hvis hver ekstra side af telefonbogen, jeg kræver at gøre et yderligere trin. Så hvis Verizon tilføjer en mere side næste år, Jeg måske nødt til at vende endnu en side at finde en som Mike Smith. I mellemtiden er den anden algoritme, som Jeg gik toere, er den samme form. Det er stadig meget lineær, meget overladt til ret, idet lige byte hver gang, men hældningen er lidt lavere. For eksempel, hvis størrelse problemet var groft her og jeg brugte min første algoritme, Jeg måske ender hele vejen på toppen af ​​denne røde linje. Men hvis jeg bruger i stedet til twosies nærmer, den gule linje antyder fordi det er lavere, at det kommer til at tage mig mindre tid på at løse. Men hvad er formen af tredje algorithm-- igen, velsagtens den mest intuitive algoritme? Tja, det ser lidt noget som dette. Det er buet eller logaritmisk, i form. Og selv om det aldrig slags flader ud, det asymptotisk inches op og op og op, men frygtelig langsomt versus alt andet. Og hvad er det tage væk? Nå, vi kalder det log n. Men hvad betyder det egentlig? Tja, hvis Verizon fordoblet antallet af sider i telefonbogen næste år fra 1.000 til 2.000. Hvor mange flere skridt er min første algoritme vil tage? Min første algoritme. Måske 1.000 flere trin. Hvis de fordoblet telefonbog, jeg har tænkt mig at skulle bladre gennem en anden 1.000 sider for at finde Mike. Selvfølgelig, hvis det andet algoritme, måske 500, fordi jeg er går dobbelt så hurtigt. Men hvis Verizon fordobler antallet af sider mellem år og næste år, med min tredje algorithm-- kløften og erobre, at James foreslog, går i halvt af og half-- hvor mange flere skridt vil det tage mig næste år at have en telefonbog med en størrelse 2000? Bare en. For med et bid, kan jeg tage, ud af dette problem, halvdelen af ​​siderne væk. Og hvis du tænker over dette lidt sindssygt nu-- hvis telefonbogen ikke gør har 1.000 eller 2000 Side, men lad os sige 4 milliarder Og den slags det er en stor telefon book-- hvordan mange gange, eller hvor mange skridt er det vil tage mig at finde Mike Smith i telefonbogen med 4 milliarder sider. Du kan slags begynde at gøre det math. Okay. 4 milliarder divideres med 2. Så det er 2 mia divideret med en. Det er 1 mia. Så en halv milliard. Så 250-- så du kan gøre det igen og igen, men ikke så mange gange før du kommer til en side. Og faktisk, selvom telefonen bog er 4 milliarder sider eller den database, du søger er 4 milliarder optegnelser lang, det vil tage dig give eller tage 32 trin kun at finde Mike Smith. Og hvis du fordobler telefonbogen næste år fra 4 milliarder til at 8 milliarder, 33 trin i stedet for kun 32. Og dette er Testamente til en af ​​idéerne at vi kunne omfavne i computer videnskab mere generelt som er denne beregningsmæssige tænkning og nærmer sig et problem helt ærligt ved hjælp af værktøjer fra din allerede velkendt redskab kit-- din virkelige verden med som du er fortrolig, men udnytte disse idéer til faktisk at løse problemer. Men vi er nødt til at formalisere vores løsninger på disse problemer. Og så lad mig introducere et øjeblik noget, vi kunne kalde pseudokode. En stor del af semestret, vil vi bruge hjælp faktiske kode i sprog som C og PHP og JavaScript og SQL og lignende. Men for nu, lad os bare se på noget temmelig intuitiv som engelsk. Jeg kunne destillere at algoritme, med hvilken Jeg fandt Mike i trin som denne. Pick up telefonbogen Åben for midten af ​​telefonbog Kig på navns Hvis Mike er blandt navns Ring Mike Else hvis Smith er tidligere i bogen Åben for midten af den venstre halvdel af bogen Else går til linje 3 Else hvis Smith er senere i bogen Åben for midten af højre halvdel af bogen Gå til linje tre Andet Give op Og der er et par karakteristika nu af dette, der er værd at påpege. Så en, alle linjer Jeg har markeret med gult vi kommer til at begynde at kalde udtalelser eller funktioner eller procedurer. De er bare handlinger gør dette, og der er ikke så meget variation til den. Næste skridt her selv, er disse conditions-- hvis ellers, ellers hvis andet. Og disse kaldes betingelser, eller grene, og de er beslutningspunkter. Og de tillader os at gøre noget betinget. Og i virkeligheden, så lad os tage et hurtigt se på måske en velkendt face-- vi vil kalde ham Bill-- og præcis hvad disse betingelser, hvordan disse kan anvendes. Bill Gates: Folk gør beslutninger hver dag. For eksempel, før du går udenfor dig slags har en if-sætning, der siger, hvis det regner, så jeg brug for at få min jakke. Og computere er forbløffende, når du beslutte den slags udsagn at de pålideligt kan udføre disse ting på utrolig hastighed. Og så et computerprogram virkelig er en lille smule af matematik og nogle hvis udsagn hvor afgørelsen bliver lavet. DAVID MALAN: Så lad os nu fokus på et par forskellige lines-- dem jeg har fremhævet i gul her. Og det viser sig at der er forskellige måder at udtrykke denne idé. Men intuitivt hvad vores linjer 8 og 11 at jeg har fremhævet her fortæller dig at gøre? Ja, gå til linje 3, men hvad adfærd er det virkelig fremkalde? Det er en form for løkke eller cykle, og du kan slags se det. Højre? Hvis der på linje 8, du går tilbage til linje 3, og så du rammer linje 8 igen, du kan gå tilbage til linie 3, tilbage til linie 3, tilbage til linje 3. Der er denne slags cyklus eller loop. Og ja, der er induceret i linie 11 potentielt så godt. Og dette er en grundlæggende programmering konstruere samt. Du kan ikke bare ønsker at gøre noget med en erklæring eller gøre noget betinget med en tilstand eller en filial. Du vil måske gøre noget cyklisk med en løkke. Og vi vil have en anden, med hvem du måske familiar-- vi vil kalde ham Mark-- forklare dette begreb her. Mark Zuckerberg: One ting, at computere er rigtig god til er at gentage kommandoer. Som person, ville du få virkelig keder sig, hvis du havde at gøre det samme masser af gange i træk, men en computer kan gøre det samme millioner eller endda milliarder af gange og ikke kede sig og være i stand til at udføre den rigtig godt. Altså for eksempel, hvis jeg ønsker at ønske alle på Facebook tillykke med fødselsdagen ved at sende dem en e-mail, det kan tage mig mere end en århundrede til rent faktisk at skrive alle disse e-mails til alle. Men med blot et par linjer kode, kan jeg have et system sende en e-mail til alle på Facebook, der ønsker dem tillykke med fødselsdagen. Så det er hvad loops er, og hvorfor de er værdifulde og noget at computere kan gøre meget godt. DAVID MALAN: Mange tak til vores venner ved code.org for disse to film. Og netop i sidste uge, har du måske set, at Mark Zuckerberg og Facebook bogført denne meddelelse, som er, at de blot have bestået en vigtig milepæl for første gang nogensinde. 1 milliard mennesker brugte Facebook i en eneste dag, specielt sidste mandag. En ud af syv mennesker på Jorden tilsyneladende logget ind på Facebook. Nå, synes dette en god mulighed at se tilbage på, hvor Facebook begyndte, og vi gik gennem CS50 egen arkiver, fordi det viser sig i 2005, Mark gav en gæsteforelæsning i CS50. Du vil se, at produktionen værdier var ikke helt det samme dengang med hensyn til teknologi tilgængelige, og du vil også se, at tilstedeværelsen af denne gæsteforelæsning ikke nødvendigvis vække interesse af de studerende, dine forgængere, så meget som det kunne have blot et par år senere. Så lad os tage et kig ved Science Center C. SPEAKER 2: Please join mig, og velkommen. [BIFALD] Mark Zuckerberg: Yo. Okay. Cool det er første gang, jeg nogensinde har har måtte holde en af ​​disse ting. Så jeg vil blot vedhæfte det virkelig hurtigt. Okay. Kan du høre det? Er det godt? Er det forstærkes på alle? Okay. Sød. Så det er ligesom en af ​​de første gange Jeg har været til et foredrag på Harvard, men-- DAVID MALAN: Så til sidst Science Center gjorde zoome ind på videoen, men ikke før du tager denne uddrag hvor Marks tale, som han diskuterede sin værelseskammerat, Dustin, der ønskede at give en hånd med dette websted kaldet Facebook.com og indså, at Mark er ved at nævne programmering languages-- en kaldet Perl, en kaldet PHP-- da han diskuterer oprindelsen af ​​Dustin bidrag. Mark Zuckerberg: Jeg begyndte at løbe sitet og lancerede det på Harvard i februar, 2004. Så jeg gætter næsten to år siden nu. Og inden for et par uger, en par tusinde mennesker havde tilmeldt, og vi begyndte at få nogle e-mails fra folk på andre gymnasier spørger for os at lancere det på deres skoler. Og jeg tog 161 på det tidspunkt. Så jeg ved ikke, hvis du fyre kender omdømme, at selvfølgelig, men det var slags tung. Det var en virkelig sjovt kursus, men det havde ingen mig med megen tid at gøre noget andet med Facebook. Så min roommate Dustin, som jeg gætte var lige blevet færdig CS50, var ligesom, hey. Jeg ønsker at hjælpe. Jeg ønsker at gøre udvidelsen og hjælpe du finde ud af at gøre de ting. Så jeg var ligesom, det er ret cool, dude. Men du ved ikke rigtig nogen PHP eller noget lignende. Så det weekend gik han hjem, købte bogen Perl for Dummies, kom tilbage og var ligesom, okay. Jeg er klar til at gå. Jeg var som, mand, er sitet skrevet i PHP ikke Perl, men det er cool. Så han tog PHP løbet ligesom en par dage, fordi jeg lover, at hvis du har en god baggrund i C, PHP er en meget simpel ting at samle op. Og han lige slags gik til arbejde. Før vi kigger nu på hvor kurset foregår, tillade mig at invitere blot nogle af SC50 personale op på scenen. Nogle af dem er ude deres egne kurser. Men hvis disse TF'er og CA og kursus hoveder, der er her kunne komme på op og slutte sig til mig for en hurtig hej. Tillad mig at præsentere i særdeleshed, Hanna, Maria, Daven, og Rob, CS50 kursus hoveder her i Cambridge. [BIFALD] DAVID MALAN: Ja, vidner om støttestruktur, at forløbet har bygget ud over de sidste mange år, CS50 medarbejdere i år antallet næsten 100, og det er her i Cambridge alene. I mellemtiden, i New Haven, er der nogle 40 TF'er og CA og medarbejdere der at køre forløbet samt. Tillad os at præsentere første, Rob Bowden. ROB BOWDEN: Hej. Jeg er Rob. Dette er mit sjette år TFing i løbet. Så helt tilbage i min freshman år, havde jeg ikke tage CS50. Din freshman fall-- du måske være bekendt at du kun kan tage fire kurser og der er så mange baner i dag. Så jeg er ligesom, eh. Jeg tog AP CS min senior år i gymnasiet det var forfærdelig. Så jeg er ligesom, eh. Datalogi er ikke for mig. Så det var over løbet af mit første falde, at jeg havde en ven i CS50, og Jeg tror, ​​jeg deltog en forelæsning med hende. Det er ligesom, åh, det er lidt bedre end hvad jeg havde i gymnasiet. Og i løbet af den år, havde jeg min egen problem sæt i kurserne var jeg faktisk at tage. Men jeg fandt, at når jeg ønskede at nøle på dem, Jeg vil gå tilbage til CS50 og se på nogle af de ting. Så, ja. Jeg er cool. Jeg Smøleri med kodning. Så så er det i slutningen af efteråret, at jeg indser, hey, datalogi er ret cool. Jeg ender med at tage CS51. I det næste semester, Jeg ender med at tage CS61. Og det hele derfra, så jeg ender erklære datalogi, som jeg havde absolut ingen intentioner om at gøre da jeg kom ind i college. Og nu er jeg her. Så kurset er hvad du gør det. Jeg håber du nyder det. [BIFALD] DAVID MALAN: Tak til Rob. Og nu Maria, vores hoved kursus assistent. MARIA: Hey gutter. Mit navn er Maria. Jeg er en sophomore i Cabot House, der kommer fra Bulgarien, og jeg er super glade for at være del af personalet i år. Jeg tog CS50 som en freshman sidste år, og jeg har aldrig selv tænkte CS forhånd. Så jeg elsker absolut selvfølgelig, og jeg håber du alle elsker det så meget, som jeg gjorde. Og, ja. Velkommen til CS50. DAVID MALAN: Tak til Maria. [BIFALD] Nu Hanna, vores hoved undervisning fyr. HANNA: Hej, jeg er Hanna. Jeg er en senior i Cabot studerer datalogi. Jeg tog CS50 som en freshman og havde været TFing-- dette vil være min tredje år. Så jeg vil blive lykkeligt involveret i CS50 for alle fire år, og jeg ser frem til at arbejde med jer alle. DAVID MALAN: Tak til Hanna. [BIFALD] Og endelig, Daven, vores precepter. Daven: Hey gutter. Jeg er en forskrift ovre i datalogi her. Dette vil være min fjerde år undervisning. Jeg hjælper også administrere kurset. Så jeg er sikker på du vil se mig omkring, især på kontortid. Jeg er altid på kontortid. Så hvis du ser mig gå rundt, helt sikkert komme sige hej. Jeg elsker at møde alle. Ellers har det sjovt, og jeg vil se dig omkring. DAVID MALAN: Tak til Daven så godt. Så du opfylde alle disse folk inden længe. Men uden yderligere ståhej, hvis du fyre ville gerne genoptage dine pladser fra tidligere. Tillad mig at præsentere langvejs nu nogle af vores venner fra New Haven, især kursets hoveder, der vil være tilsyn CS50 there-- Professor Brian Scassellati, Jason, og Andi, der bare-- så vi ikke friste skæbnen med enhver FaceTime eller like-- har netop sendt os minutter siden den følgende video, hvor de siger Hej fra auditoriet på Yale, hvor foredrag bliver streamet lige nu. Så vores venner fra Yale. BRIAN Scassellati: Hej, David. Hej, alle på Harvard. Vi er så glade for at være at bringe CS50 til Yale dette semester. Mit navn er Brian Scassellati, men alle bare kalder mig scas. Og jeg er her i dag for at indføre til dig CS50 personale. [JUBEL] Og endnu vigtigere, jeg er her at indføre, og alle eleverne på Yale, der som i morges har gjort dette til den mest populære kursus på Yale de CS50 studerende. [JUBEL] Så vi er meget glade at se dig her fredag ​​og lørdag for Puzzle Dag og har en stor forelæsning. Farvel. [BIFALD] DAVID MALAN: På skærmen her er navnene på nogle af 140 ansatte medlemmer, der venter dig over løbet af semester-- nogle af dem her i Cambridge, nogle af dem her i New Haven. Og faktisk vil du have en mulighed denne lørdag, som SCAS noter, deltage CS50 Puzzle Day. Du har måske set små puslespilsbrikker smuttede under dine døråbninger nylig. Vi har et par ekstra her senere, når du eksisterer. Hvis du samle alle fire puslespil stykker og flette sammen med værelser nærliggende dit i dit hus eller kollegieværelset, vil de samles til en QR code-- eller en todimensional stregkode, at er samlet og scannet med din telefon vil føre dig til nogle fantastiske præmie eller-- jeg formoder du bare kunne fotografere det nu såvel. Men find de puslespilsbrikker alligevel for at vinde denne fabelagtige præmie. Og faktisk en af ​​de traditioner i SC50-- ah, for langsomt. En af traditionerne i CS50 er at tjene kage efter den første forelæsning. Og så ja, i en få minutter fra nu, vil der være kage serveret udenfor både her og New Haven så godt. Men first-- vi dekoreret dem selv. Men first-- og forhåbentlig der vil være nok. Men først et hurtigt kig. Så foredrag er rent faktisk vil være produceret det meste her i Cambridge. Men hver måned, vil vi hoppe ned til Yale med CS50 produktion team og strøm forløbet i omvendt retning samt så for at bringe disse to campusser virkelig for første gang i historien så tæt sammen som muligt som en i det samme kursus. Med hensyn til støttestrukturen, der er blevet stod op her i Cambridge samt som i New Haven, er sektioner. Således som nogle af jer måske ved, har vi forskellige spor inden kurset for de mindre behagelig, mere komfortabel, og midt imellem, så uanset din forudgående baggrund, kan du i sidste ende lykkes i klassen. Kontortid mellemtiden er en mulighed på mandage og tirsdage og torsdag aftener til at arbejde både her og i New Haven på vores kursets problem sæt med snesevis af kursets personale i nærheden af ​​dig. Problem sætter i mellemtiden, er støttet af ting, vi kalder walkthroughs, som er video baseret tutorials, der virkelig besvare FAQ af hvor man skal begynde en uges udfordring. Og postmortems gå dig gennem mulige løsninger således at enden af problem indstillet for, du vide præcis, hvad du kunne have gjort anderledes eller helt andet. Problemet sætter selv komme i to udgaver, en standard udgave at vi forventer og invitere de fleste af den class-- omkring 90% plus at do-- og en såkaldt hacker udgave hvor hver side er indgraveret hacker udgave, hacker udgave, hacker udgave, så du har at karma hvis du vil, til dykning til mere avancerede versioner af kursets problemet sæt at dække angiveligt det samme materiale men med en mere raffineret fremgangsmåde og med yderligere baggrund undertiden introduceret. I mellemtiden er der ni sene dage, du kan anvende på kursets problem sætter såvel som den laveste score, som vi slip på vilkår ende. Men hvad der venter? Tja, en smag af problemet sætter hånden på fredag og i næste uge, hvor vi fuske for blot et par dage i noget kaldet Scratch, en grafisk programmering sprog udviklet af vores venner på MIT Media Lab, der giver dig at programmere enten for første gang eller i et nyt miljø helt ved hjælp af en træk og slip typen miljø. Hvorved puslespilsbrikker kun interlock sammen hvis det giver logisk mening at gøre det. I mellemtiden i problem sæt to sidste år for eksempel, vi introducerer klassen til en verden af ​​kryptografi, kunsten at kryptere eller scrambling information. Faktisk denne tekst her, hvis dekrypteret, vil faktisk føre dig til nogle sjove destination. Og i problemet indstillet, hvad vi havde elever gøre, er at gennemføre netop dem former for things-- en algoritme, eller et sæt af instruktioner til scrambling og scrambling information. Og i hacker-udgave i samme problem sæt, vi udfordrer de studerende til at tage en krypteret fil fra en typisk computer system med masser af brugernavne og krypterede adgangskoder og at knække disse passwords-- faktisk regne ud hvad de var uden at vide noget a priori om disse faktiske adgangskoder. I mellemtiden, gør vi overgang i problemet satte derefter se på verden af ​​grafik. Og i virkeligheden, kan du forestille dig nu, at dette kunne måske være den enkleste måde at repræsentere et sort-hvidt billede. En hvid pixel, eller firkantet, som øverst til højre der, kan være repræsenteret med en 1 og en sort firkant kan være repræsenteret med en 0. Og blot ved hjælp af flere bit ligesom vi foreslået tidligere med 72 og 73 og 33, kunne vi repræsenterer farvepixel så godt. Og hvad vi gør i løbet af dette problem sæt er generelt tage en tur rundt campus med et digitalt kamera, tage billeder af personer, steder og ting. Så en eller anden måde hvert semester, vi synes at et uheld slettet eller beskadige hukommelseskortet hvor alle disse billeder er, og så du bliver udfordret for derefter at skrive software med til at genvinde disse JPEG fra en kopi af vores kameras kort. I mellemtiden har vi afleverer du senere i udtrykket en ordbog af engelske ord at have 143.000 ord, og du har brug for at komme op med en smart måde lægger dem i hukommelsen, eller RAM så at sige, at besvare forespørgsler af formen: er dette et ord, er dette et ord, gennemførelse af hurtigste stavekontrol, at du kan, selv pinning dig selv potentielt mod klassekammerater for at se, hvem af jer bruger den mindste mængde af tid når du kører din kode og endda den mindste mængde hukommelse. Senere på sigt gøre du faktisk implementere din egen webserver. Så ikke bare en hjemmeside i en sprog kaldet HTML og mere, men en webserver, der faktisk lytter til anmodninger på internettet og reagerer på dem. Og ja, det er sådan vi bro vores verden af ​​C med som du blive fortrolig næste uge og PHP og HTML og JavaScript og CSS og lignende. Fordi en af ​​den første bane baseret projekt vi gøre senere i udtrykket er historisk CS50 Finance. Etrade.com stil et websted, der tillader dig til at købe og sælge aktier stort set samtidig skrive kode til at tale med Yahoo Finans få semi realtid lager citerer for at ajourføre din egen portefølje. Men endelig selvfølgelig, er den endelige project-- en mulighed for at gøre de fleste noget af interesse for dig at løse et problem her eller ud over af interesse for du, det er en eller anden måde inspireret af de erfaringer i klassen. Og klassen, som du måske ved, kulminerer i såkaldt CS50 hackathon og CS50 Fair og et vilkårligt antal af andre kulturelle begivenheder hele semestret der tillader dig at engagere med hinanden og kurset personale. For eksempel, på Fire and Ice i Sitar i år, godt, fredag ​​eftermiddag, inviterer vi nogle 50 studerende til frokost, hvem vil gerne slutte sig til os, mig selv, og personalet, og vores venner fra industrien og alums at chatte om livet i den virkelige verden og videre, mens du nyder en god frokost. På hackathon vil du ser sådanne billeder da disse, herunder masser af candy-- og fra 2014 for første time-- grøntsager. [BIFALD] Men ved 5:00, gør scenen normalt ser lidt noget som dette. Og så bare en uge eller så senere, er CS50 Fair som nogle 2000 plus studerende og medarbejdere og fakultet medlemmer fra hele campus og på tværs af campusser i år kommer til at se og glæde i resultater af CS50 studerende, der er nu. Og ja, mens dette år vil vi være indbydende og busing nogen ved på Yale, der gerne vil komme op til Cambridge denne lørdag for CS50 Puzzle Dag, og vi vil gøre præcis det samme i december for CS50 hackathon således at Harvard og Yale studerende både deltage i begge disse begivenheder. Vi vil også holde CS50 messer i Cambridge og i New Haven i år så eleverne på både campusser og personale og fakultet kan se hver respektiv campus s realisering. Og disse resultater vil fremkalde en sådan hukommelse da dette og dette og i sidste ende dette, hvor alle jer forlade klassen iført lidt noget, hvor du var forhåbentlig glad eller stolt af at sige, at jeg tog CS50. Men inden da, og før vi tjener kage, Vi har lagt together-- tak til CS50 s produktion team og en vis selv stick, den ene lejlighed, vi bruger sådanne ting for-- når vi sendt det ikke kun her til Cambridge men også til New Haven at samle et par hellos fra kursus personale og alle de folk du vil møde både her og i New Haven løbet af de følgende måneder. Tillad mig at præsentere en nogle flere af CS50 personale. Mark Zuckerberg: Har at gøre det gå? Åh, det går. Det kommer. Ooh. Yarr! [Musik spiller Andy Grammer, "Skat, jeg'M  GOD"] MARY: Dette er Caitlin. Det er Jay, og jeg er Mary. SATO: Hej, gutter. Jeg er Sato. MICHAEL G .: Hej. Mit navn er Michael, G. DOUG LLOYD: Jeg er ikke. Ingen. Jeg er Doug Lloyd. Jeg kan ikke tro, at jeg holder en selfie stick lige nu. SPEAKER 4: Hej. SPEAKER 5: Hej. SPEAKER 6: Hej. SPEAKER 7: Hej. SPEAKER 8: Hey. Vi hænger ud på Yale. Vi er virkelig glade for dette semester, fordi det er første gang det kommer til Yale. Det kommer til at være awesome! [MUSIK AFSPILLER] JACOB SCHERBA: Mit navn er Jacob Scherba. Jeg er spændt på at undervise CS50 fordi jeg tror det bringe datalogi til mennesker i og imødekommende måde. SPEAKER 9: Jeg er virkelig glade for at undervise CS50 fordi jeg tog klassen sidste år, og det er en af ​​de bedste klasser. SPEAKER 10: Ja. Mit råd er, at du skal tage CS50. JACOB SCHERBA: Jeg valgte CS, fordi Jeg synes det er en sjov og kreativ måde at løse problemer i en analytisk måde. SPEAKER 11: Tilbage da jeg var en lille Russer og bange for datalogi og bange for at gøre teknik og kram, det var den første hårde klasse tog jeg, og det var også min favorit klasse nogensinde. DOUG LLOYD: Dette er min niende år undervisning CS50. Det gør mig lyde så gammel! Der er altid noget nyt. Der er altid noget spændende. Der er altid nye udfordringer, som nye studerende, og det er sjovt at hjælpe dem og at opleve dem udfordringer med dem og hjælpe dem med at løse deres problemer. SPEAKER 12: Da jeg først lært, hvordan man gør CS, det var ligesom at lære en supermagt. Og at se, at i andre studerende og at hjælpe dem gennem denne proces er en af ​​de mest givende ting, jeg nogensinde har. SPEAKER 7: Jeg valgte CS fordi det i begynder, jeg var en matematisk koncentrator og jeg tog CS50 og faldt i kærlighed med det. Jeg følte også, at med CS, jeg kunne bygge ting. Og det, jeg tænkte, var en virkelig cool aspekt. SPEAKER 13: Nogle råd til nye studerende er at gå til kontortid og hænge ud med awesome TF'er. SPEAKER 14: Start din P-sæt tidligt, gå til kontortid, bliver frends med din TF. SPEAKER 15: Ja. Alt sagde hun. SPEAKER 16: Må ikke være bange for at bede om hjælp. SPEAKER 17: Ja. SPEAKER 18: Start din P-sæt tidligt. SPEAKER 19: Det er en store social oplevelse. Lav en masse venner på denne måde. SPEAKER 14: Gå til afsnittet Det er sjovt. SPEAKER 11: Jeg mener, gå til den. Det er virkelig svært. Du får ud af det hvad du har lagt i det, men det er en virkelig sjovt klasse især hvis du er villige til at sætte den tid i det, men det hjælper, hvis du lægger tid i det. Du får meget mere ud af det senere. MIKE: Jeg er Mike. CAMILLE: Jeg er Camille. Hanya: Jeg er Hanya. MAT: Jeg er Matt. Peter: Jeg er Peter. PHILLIP: Jeg er Phillip. PATRICK: Jeg er Patrick. ROB BOWDEN: Jeg er Rob Bowden. BRIAN Scassellati: My navn er SCAS, og denne-- ALL: --is CS50. SPEAKER 20: At Yale. SPEAKER 21: At Yale. [LAUGHING] DAVID MALAN: Det er det for CS50. Vi vil se dig fra Yale på Fredag, Puzzle Day på lørdag. Kage er nu serveret. Dette er CS50. [MUSIK AFSPILLER]