>> David: Velkommen, mitt navn er David Malan og dette er CS50. Og, dette er ikke din typiske high school informatikk kurs. Dette kurset er litt noe spesielt. Og det er ikke fordi jeg er lærer det. det er fordi dette er en av, vi liker å tenke, de sjeldne kurs som faktisk presser hjernen så mye og timeplanen din så mye at ved semester slutt at du virkelig føler deg smartere. Så, det var slik jeg følte da jeg selv tok dette kurset tilbake i 1996. Jeg var en regjering stor på den tiden her bodde i Mather House. Og, I. [Heier] Som er den andre, de fem andre der. Så var jeg en regjering stor på den tiden. Og jeg var en regjering stor fordi jeg alltid hadde likt historien. Jeg likte statsrett i videregående skole. Og så satte jeg ut på denne veien freshmen i år gjør det jeg gjør best, å gjøre det jeg visste at jeg likte. Og jeg hadde alltid vært litt av en geek, ville jeg alltid babbled med datamaskiner. Men, jeg selv, kanskje ironisk i ettertid, ville jeg alltid sett gutta som tok computer science i mitt high school, mine venner som den virkelige geeks. Og likevel, til slutt gjorde, sophomore året jeg tar dette lille kurset kalt CS50, som faktisk hadde skremt meg vekk min egen Freshman året. Og jeg var en bruker assistent på den tiden. Så var jeg visst allerede kvalifisert, minst, å være blant dem, de geeks som jeg gjorde narr av på videregående skole. Men, jeg var redd. Det er, hadde det dette ryktet på den tiden og kanskje fremdeles blant annet at det var en, det var en skremmende kurs. Det var mye arbeid. Det var vanskelig og ennå, det er en av de tingene der, min Gud, barken var langt verre enn bite av det. Jeg fant meg selv sophomore året, for første gang, faktisk finne lekser morsomt. Og Jeg sier ikke dette bare for å kaste dette kurset for deg. Dette var en genuin erkjennelse for meg. Nå, tror jeg, på et tidspunkt, det gjorde jeg krysse linjen til sann geekdum der jeg faktisk pleide å se frem til fredag kveld, fordi jeg kunne krølle seg foran min lille MacBook, og arbeidet med CS50 problem sett. Så, på det tidspunktet, jeg tror jeg hadde klart krysse linjen. Og, er vårt mål i dette kurset ikke å slå alle av dere inn i den personen, men bare for å si at det er et lite noe spesielt om dette kurset, litt noe spesielt med datateknologi generelt, spesielt i disse dager. Og, jo mer acclimated vi har alle fått inn teknologier, jo mer leker vi bærer rundt i våre lommer som er seg selv datamaskiner. Jeg mener, er min iPhone faktisk en høyere resultater datamaskin enn min laptop var på college. Du kan gjøre mye fin ting med disse tingene. Og nå, de fleste av oss i dette rommet, sikkert bare bruke andres programvare, andre folks verktøy, andre løsninger på problemer fordi vi gå til iTunes, laste vi noen app fra App Store og Walla vi kan gjøre noe virkelig fine. Men, innen utgangen av dette semesteret, kan du være den personen gjør som problemløsning. Du kan bli den personen løse noe problem, bygning som app, som programvare, som verktøyet det, heller, man bare morer meg, morer deg. for eksempel kontroll, sier iTunes-biblioteket fra med leiligheter klart en app som allerede finnes, eller du kan finne shuttle planer lettere for eksempel. Så faktisk, en av de aller første tingene jeg gjorde etter å ha tatt CS50 var igjen, var det sannsynligvis på dette punktet fredag kveld og lørdag kveld, var det denne muligheten på den tiden der Harvard løp skyttelbusser. Og til denne dag, har de fortsatt trykt tidsplaner. Men, det var virkelig betyr ikke noe på nettet for å finne ut når neste shuttle var. Nå, det gjorde jeg ikke bryr, for selv om jeg bodde i Mather Jeg var ikke blant dem som vanligvis tok shuttle. Men, hadde jeg mange venner i Pfoho for eksempel. Og en av dem spurte meg, tror jeg inn på ett punkt. [Heier] Ok Pfoho er bedre enn Mather tilsynelatende. Så, fikk en av mine venner slags meg tenke kanskje jeg kan skrive et lite program for å slags hjelp mine venner se shuttle tidsplaner. Og slik ble født den klønete kalt shuttle gutt, dette stykke leksikon som har oppholdt seg i nærheten for noen flere år på minst blant noen av de upperclassmen. På den tiden var dette denne lille kommandolinje program som ligner i ånden til Dos. Det ble brukt et UNIX miljø. Så var det ikke særlig sexy i det hele tatt. Du bare skrevet et par kommandoer og det fortalte deg når skyttelbussene var. Vel, i disse dager det er litt mer sofistikert. Og, det er faktisk representerte nettopp hvilke typer prosjekter som studentene i dette kurset ende opp med å gjøre av vilkår slutten. Så, er denne versjonen fire, om lag 15 år senere, i Shuttleboy. Synes Google Maps blir litt treg der. Men, for de av dere som har å komme ut herfra etter klasse og gå, sier fra Memorial Hall og må gå opp til, si, Quad. Vel, kan du enten gå i to minutter hvis av, dette virkelig ikke fungerer for deg ennå, eller du har så mange andre alternativer som du kanskje liker. Og, kommer snart, kan vi kaste dette fra CS50, vil det være det samme evnen på SMS. Du kan tekst Shuttleboy via telefon. Du syner Shuttleboy. CS50 telefonnummer i år, ja, utrolig dette var tilgjengelig, 617-BUG-CS50. Så vil det debut snart. Så ikke kall det ennå fordi jeg har fått reprimande for, akkurat nå er det videresendt til vårt system hodet undervisning stipendiatens mobiltelefon. Så, vil du bare få ham hvis du har spørsmål om den shuttle tidsplanen nå. Men, som snart vil bli gjennomført. Så, andre ting, egentlig, at vi selv brukte i sommer på egentlig i forberedelse til dette semesteret var en hel haug med andre problemer som vi ønsket å løse. For eksempel er det en hel masse ting som foregår i denne campus på en gitt dag. Og faktisk, legger en annen måte, det er en hel masse ting som skjer på dette campus som jeg visst aldri ta nytte av. Og, selv om jeg nå er overveldet over hvor mange ting som skal på, på campus, jeg fortsatt synes aldri å finne tid. Men, Walla, selv der, CS50 forelesning. Det er der du er, så dette var en, var dette et program vi skrev til å samle alle hendelsene på campus. Og dette er noe som andre elever i samme kurs har håndtert på egen hånd. Og har vi samarbeid med andre enheter på campus for å virkelig gjøre dette skje. Men poenget til CS50 dette begrepet er at alle disse små programmene vi har jobbet med enten denne eller om en for aggregere alle Harvards nyheter på ett sted, alle Google News, er alle disse tingene kommer til å ha det kalles API, Application Programming Interface. Og dette er bare fancy taler for evnen til å la andre mennesker, folk i dette rommet, faktisk gjør noe med det samme dataene. Så, av vilkår slutt, hvis du bestemmer implementere den endelige prosjektet relatert til nyheter eller hendelser eller kart, godt vi, i det minste som et kurs, vil gjøre at alle de mer lett i år ved å gi deg et grensesnitt, en slags funksjon, så å si programvare som du kan bruke i dine egne prosjekter til å gå utover hvor elevene, kanskje, har gått i tidligere tider, fordi disse rammene ikke har vært på plass for dem. Og igjen, alt dette begynte, for meg i alle fall, om lag 15 år siden implementere Shuttleboy. Jeg så mailet min venn Ken i Pfoho. Jeg sa hei hva tror du? Er dette nyttig? Han sendte det ut på Pfoho åpne listen og Walla, alle disse år senere er jeg tydeligvis fortsatt melking dette prosjektet. Og pene ting om det, og det er her også et kurs som dette i ingeniørfag og informatikk, tror jeg, er litt spesiell, er at når du gjør ditt hjem fungerer og når du gjør dine prosjekter i dette kurset, du vet, mange av dem, ja, vil du sette til side, og egentlig ikke bruke igjen. Men noe av det, vil du. Og det er dette virkelig mektig ting, iallfall for meg, dette virkelig spennende ting, når du gjør noe og andre mennesker faktisk omsorg, gjøre andre mennesker ikke bare smile og klappe deg på ryggen og deretter sortere i går om sitt eget liv. De faktisk bruker det du gjorde i sitt eget liv selv om det er for noe så dumt, eller så enkelt som bare å finne når de kan få ut av her for å ta neste transport til Quad. Så, med bruk av begreper slutten, det er ett av målene for dette kurset, for å styrke dere å bare identifisere noen problem enten det er på campus eller forhåpentligvis langt utover campus, og faktisk bruke dine egne ferdigheter, dine egne tanker og løse det problem i enkelte del, teknologisk. Så er dette også et kurs som vi sier i pensum, og kursene offisielle beskrivelsen som lærer deg hvordan du tenker, og det lærer deg hvordan du kan løse problemer mer effektivt. Vel, hva betyr det? Vel, når du har 600 megahertz i lommen eller tre gigahertz under skrivebordet hjemme, kan du løse mange problemer effektivt bare ved å skjære rå kraft. Men, det er mye problemer i denne verden, enten det er å søke, sier Facebooks nettverk eller Internett via Google, at det ikke spiller ingen rolle hvor rask din datamaskin er, er det ikke mulig i helvete du skal søke milliarder websider raskt med mindre du faktisk nærme seg dette problemet intelligent. Du trenger ikke bare søk, for eksempel en veldig liste over alle nettsider på jorden fra topp til bunn på jakt etter noe relatert til det søkeord du leter etter forhåpentligvis Google og antagelig Google og Facebook, og noen av disse store enheter har mange smarte folk tenker om hvordan de kan finne data raskere, hvordan de kan behandle informasjon mer effektivt, og hvordan de kan bare generelt returnere resultater raskere, slik at du kan gjøre enda mer interessante ting med disse enhetene. Og så, hva mener vi, skjønt, over hvor, lærer folk hvordan å tenke mer forsiktig, mer algoritmer. Vel, synes denne lille visuelle alltid å gå over bra. Og, den synes å være minneverdig. Og jeg ble enda spurt i går av en tidligere student, er oh du skal gjøre telefonboken ting igjen. Og jeg ganske mye på stedet besluttet alright sikker på at vi bygger en telefonbok ting. Og han spurte meg når du rev den i to rett, var jeg liker godt yeah teknisk vi rev den i to, men ikke på den måten, i datavitenskapsavdelingen måten vil jeg være i stand til å rive denne ting i halvparten. Og så, her var problemet at vi presentert for en stund. Så, her telefonboken. Det har minst tusen eller så sider. Og det enkle målet for hånden svært virkelige verden er å finne, sier en person her inne. Så, Mike Smith, etternavn som begynner med S. Så, jeg er en typisk menneskelig, plukker jeg opp denne telefonen boken. Og noen der ute, hva ville du, en typisk person, gjøre for å begynne å finne Mike Smith, selvsagt ikke vite på forhånd hvilken side han er faktisk på. Høyre, så du går omtrent i midten, til høyre. Og på dette punktet i historien, er jeg trolig i N-eller M's, du vet, omtrent halvveis gjennom telefonboken. Slår ut, siste gang jeg gjorde dette eksempelet jeg liksom fant meg selv i eskorte delen. Så, det er faktisk ikke like balansert mellom A og M og N gjennom Z. Men, i dag, er vi faktisk i M's, alright så, nå er jeg på M's. Men hva er min takeaway nå akkurat som et vanlig menneske ut av gaten? Hvor går jeg neste for Mike Smith. [Hørbar] Og så, akkurat nok på denne halvdelen, retten, fordi S kommer etter M. Og så, i dette ligger det visuelle dramaet. Det er egentlig ikke river den i to, høyre. Jeg slags jukset i midten. Men vi vet nå at Mike er i alle fall ikke at halvparten. Vi kan bokstavelig talt kaste halvparten av problemet borte. Og jeg sitter igjen med problemet som er fundamentalt fortsatt det samme, finner Mike Smith i en virkelig stor bok. Men, problemet er nå halvparten så stort. Hvis det hadde tusen sider før, nå har den 500. Vet du hva, kan jeg gjøre det samme igjen. Jeg kan slags rekursiv eller gjøre det samme. Nå er jeg ikke helt på S. Jeg er på T. Og så, oh jeg gikk litt for langt. Men, jeg vet nå at Mike ikke er til høyre, er der kommer til å bli noen klasse en dag hvor jeg bare ikke kan rive dammen ting, bet jeg. Men nå, jeg vet han ikke er til høyre. Så, nå er problemet er innkvartert. Så har jeg gått fra tusen til 500 250 sider. Og videre, hvis du fortsetter logikken, fortsetter matematikk, jeg chopping dette problemet i to, i to, i halvparten før slutt jeg enten kommer til å ikke finne noen Smiths i det hele tatt, lite sannsynlig, eller jeg kommer til å finne det jeg leter etter. Men det, da, trygler spørsmålet, er dette noe bedre enn den enkle tilnærmingen til rettferdig ordtak, vet, du A, nope, B, nei, fra venstre til høyre går lineært gjennom boken? Vel, instinktivt ja. Det kommer til å bli mye raskere. Men, hvor mye mindre? Vel, hvis jeg har tusen side telefonkatalogen eller la oss si 1024 for de av dere som liker potenser av to, hvor mange gang ville jeg ha å dele dette problemet i to før du finner Mr. Smith? >> Ti. >> David: Så, ti, akkurat. Hvis du har 1024 sider og du dele dem i to, i to, i to, i to, jeg at ti ganger som betyr at jeg går fra 1.000 sider til den personen jeg leter etter i bare ti sider svinger. Og det er slags ryddige, men, du vet, hvis du tenker over det du har gjort dette hele ditt liv. Det er ikke så dramatiske. Men nå, at telefonboken er ikke bare for Boston, er det for hele USA og hele verden, og denne tingen har milliarder av sider i den, så forestille seg en telefonbok med fire milliarder sider. Hvor mange svinger siden jeg nødt til å gjøre maksimalt for å finne Mike Smith i et fire milliarder siden telefonbok? >> Logg base to. >> David: Så ja, hvis du er typen regnestykket type dette er loggen base to. Men hvis du tror 4000000000-2000000000 to one milliarder, slik at en halv milliard. Jeg mener, som faktisk går whittles seg ned pen darn fort. Faktisk med 32 halvings av telefonboken og med fra fire milliarder, vil jeg komme ned til én side. Og det er når slike ting blir kraftig, tror jeg. Det er når disse ideene blir spennende når du kan ha en fire milliarder side problem, og i 32 trinn du kan finne personen du leter etter. Og så, det er hva vi mener når vi sier at du vil lære å tenke mer nøye, flere algoritmer, mer intelligent om å løse problemer. Og avkastningen er stor når du faktisk kan gjøre dette, og igjen, til dette punktet i Googles av verden Facebooks som har den luksus av å ha store datasett. Du har til å nærme seg disse problemene på denne måten ellers er det rett og slett ikke til å fungere. Vel, hva er hva gjorde studenten faktisk husker? Jeg, vi liker å gjøre ting som er litt dumt noen ganger til å liksom ta kanten av av det som ellers er mye nytt materiale. Og så, han faktisk sendte denne tidligere studenten meg denne linken som jeg gikk videre, bare for spark og angret på det på slutten, trakk opp på utube her. Så tenkte jeg at jeg ville dele det en ikke-datamaskin vitenskapsmann mener når han tårer en telefonbok i halvparten. [Latter] [Silence] [Uhørlig] >> Du vet over 200 sider, fine rene linjer, legitime rive. [Latter] >> David: så, vel, arbeider hans vei også. Så, det jeg fikk ut av dette kurset alle disse år siden er ja, Shuttleboy, og så ja en grad i informatikk, og så ja en doktorgrad i informatikk. Og det er ikke det vi prøver å slå de fleste studenter i dette kurset inn. De fleste av dere i dette kurset er ikke tenkt å gå på en major i informatikk. Noen av dere kanskje mindre, men for noen av dere dette vil være en terminal kurs. Og det er helt greit fordi dette kurset er, faktisk, strukturert på en måte der selv om du bare betaler kontingent i flere måneder, og du virkelig fokus på, og du virkelig ta så mye ut av dette kurset som du kan, vil du, i faktisk være godt rustet til å gå tilbake til verden av økonomi, biologi, psykologi, anvendt matematikk, og faktisk gjøre bruk av det som til syvende og sist så interessant kurs som vi håper å konseptuelt som det er grunnleggende praktisk. Og det er for noe som er kanskje litt sjelden å finne. Jeg tenkte jeg skulle dele noen få kommentarer at studenter fra i fjor høst satt i denne siste årene stikkordet guide når de blir spurt om hva ønsker du å fortelle fremtidige studenter. Vel, hvis du ikke allerede har sett på disse kommentarene, sier en student dette kurset vil ta en god del av din tid opp. Men, hvis du setter ditt arbeid inn i en helt ny verden, en hel, hvis du setter arbeidet, hvis du setter arbeidet inn i, alright, så dette er hans grammatikk ikke min, så hvis du setter, legger i arbeidet, en helt ny verden åpnes opp til deg. Utrolig hvor mye jeg lærte på bare 12 uker. En annen student skrev, du burde ta dette, eller du skal angre. En annen skrev, litt mer rett ut, vil det banke deg og la deg følelsen stor. Og så til slutt, er dette en kanskje noe jeg kan bare vise skriftlig, men andre fra bunnen her. [Latter] Så, jeg er ikke sikker på om du har mange venner som tok dette kurset, men vi gikk over gjorde mye skade på fjorårets studenter. Vi introduserte, i starten, foredrag flere, noen quizer, et par problemer sett, denne oppfatningen av lolcats. Du kan ikke se hva jeg kan se her, men i et øyeblikk vil du se en ung mann ved navn lykkelig katt som er leder for det såkalte lolcat. Dette er en av de dumme internett framover som jeg tror ærlig problematiseres dikotomien mellom disse to herrene her og det vi nå har på skjermen er kanskje. [Latter] En av de mest upassende bruk av dette teatret ennå. Og, hvorfor ikke vi lage en litt mer reell litt mer personlig denne oppfatningen av faktisk å løse et problem mer effektivt. Et enkelt problem på dag én av skolen er å sitte eller stå opp og begynne å telle studentene, rett navneopprop av arter. Vel, det mest naive, men likevel, veldig riktig tilnærming at en lærer kan ta er én, to, tre, fire, fem, seks, syv, og vi vil være her en stund. Så, hva er en marginal forbedring på dette selv som du kanskje har gjort som barn? Hvordan teller dere folk raskere? Og, ikke begynne å lese av min egen instruksjoner? Hva ville du ha gjort som barn? Start teller toere, høyre, som så jeg er ganske god på to, fire, seks, åtte, ti, tolv. Så, det er noe interessant høyre. Så, hvor mye av en forbedring er det der? Derfor er det selvsagt en faktor på to. Det tar meg halvparten så mye tid. Men, vet du hva, slik vi finner i hele dette semesteret, big deal, som setter farten opp kjøretiden ved å bare en faktor på to er ikke så interessant fordi den analoge her i dataverdenen er at jeg er en CPU Jeg er en datamaskin, vel pokker, hvis jeg bare vente 12 måneder, 18 måneder, jeg maskinen vil bare være i stand av natur, med antall gigahertz jeg har i meg å kunne å telle folk i dette rommet raskere. Så, slike, slike lineære speedups som faktor på to faktor på tre, og med faktor på ti, som bryr seg? Høyre, kan vi kaste maskinvare på problemet. Vi kan vente ting ut. Vi kan utvikle raskere maskiner. Men, intellektuelt, ja det var litt flink, men det gjorde egentlig ikke fundamentalt endre problemet. Jeg er fortsatt å gå fra venstre til høyre, forfra og bakover. Det er virkelig den samme algoritmen. Men, tilbyr jeg at vi kan gjøre bedre. Vi kan gjøre smartere enn dette og gjøre fundamentalt en raskere gjennomføring. Men, for å demonstrere dette, må vi deg å humor oss for bare et øyeblikk. Og det er på dette punkt hvor det vil være meg å snakke mindre, og du snakker mer. Men jeg trenger deg med å gjennomføre trinn en sammen, noe som er hvis du ville humor oss, kan du stå opp. Instruksjonene her på bordet, vet du, ok, et par av dere har til å sitte ned. De av dere i ryggen, der vi går, alright. Takk. Så, er programmet her før deg. Du er nå maskinene kjøre dette programmet. Det er ganske selvforklarende på dette punktet. Ja, du burde være nummer en. Få det? Høyre, er mange av dere sikkert tro at dette allerede er likevel først Freshman året. Så, tenk for deg selv, du er nummer én. Så, tre trinn her, par av med noen som stod, legge til to tallene sammen og adoptere den summen som din nye nummer og vi vil gjøre en tilregnelighet sjekk. [Støy fra publikum] Vet du hvor mange vi har? >> [Uhørlig] >> Nei [uhørlig]. >> Vi må ha et svar nøkkel. [Silence] >> Ja. [Støy fra publikum] >> David: På dette punktet algoritmen skal være svingete ned. [Støy fra publikum] Kanskje vi burde ha gått med min tilnærming likevel. >> 43. >> 163. >> David: Ooh aritmetisk foran 300 pluss personer. [Latter] Hva er vår endelige opptelling skal bli? >> 180. [Latter] >> 1200. >> 386. >> David: 386, og du er den siste som står? Er det alle? Kjenner du svaret? >> Hva? >> David: Vet du hva svaret er? Vi hadde ikke med ett svar nøkkel med oss så, 386 er faktisk nøyaktig det rette svaret for første gang. [Heier] [Applaus] Det er helt greit. [Applaus] Veldig, veldig pent gjort. Så, hva var takeaway fordi det definitivt følte litt tregere enn min veldig enkel, men likevel veldig riktig tilnærming til bare tenkt onesies og twosies og bare få det gjort med fra venstre til høyre. Men, hva gjorde vi egentlig bare gjøre der? Vel, hvis det var grovt, la oss si, 400 av det du står på ett punkt, og deretter halvparten av deg, veldig raskt, fra det jeg kunne fortelle, ville sitte ned. Så halvparten av dere satte seg ned, gikk vi 400-200 deretter til 100 og deretter til 50 og deretter til 25. Så igjen, det er det samme splitt og hersk ideen vi hadde med telefonboken. Igjen, med alle gjennomkøyring halvert vi størrelsen på problemet, halvert vi det, halvert vi det. Så, i teorien, bør algoritmen har blitt mye raskere enn min lineær tilnærming fordi min tilnærming ville har tatt si 400 skritt, eller kanskje hvis jeg er litt flink 200 trappetrinn. Men, vil din har tatt langt færre, rett 400-200, 100, 50, 25, 13, seks, så færre enn ti skritt i slutten versus min 200 eller 400. Og det er kimen til en virkelig interessant idé. Og ja, matematisk hva du nettopp gjorde var noe som er litt logaritmisk i naturen ved å logge base to, delte vi i to og to igjen. Og vi kommer tilbake til dette senere i dette semesteret. Men deri ligger igjen en svært intelligent implementering. Og, er vi bare skraper i overflaten av veldig flink til veldig intelligente effektivt problemstillinger som vi kunne til slutt løse. Så, hvem er de menneskene du nettopp chattet med hvis kort? En vanlig bekymring i et kurs som dette er at alle til venstre for deg og alle til høyre for du må tydelig vet mer enn deg. Vel, det er absolutt ikke tilfelle. Og faktisk, de siste årene, har dette kurset gjort en felles innsats for å nå ut til de mindre komfortable, så å si. Og med det mener vi ikke folk som aldri har rørt en datamaskin før fordi det er virkelig vanskelig å finne her i disse dager, men folk som bruker e-post, bruke Facebook, kanskje til og med akkurat nå, men er ikke nødvendigvis helt sikker på hva du skal gjøre når noe går galt, eller når de blir spurt om noe teknologisk, du vet, det hender går opp eller de slags presse maskinvaren til en venn som er kanskje mer bevandret i det enn de. Vel, dette er noen statistikk fra fjorårets semester. Så, når de blir spurt, da vi spurte våre 400 slik at studenter i fjor, vet du, hva er ditt nivå av komfort som kommer inn i denne klassen, skrev vel 34% seg ned blant de mindre komfortabel. Så, hvis du har kommet inn i dette rommet og fortsatt tenker nå, det, vet du hva, dette begrepet mindre komfortable beskriver meg, vet at du er i veldig godt selskap. Men, skjønner også at, hvis du kommer i dette kurset med bakgrunn i informatikk, og du var virkelig så geek på barneskolen og videregående skole som var å skrive kode og undervisning dere språk, vel det helt greit også fordi det er definitivt en triviell store publikum med den bakgrunnen også, rundt 13%, siste leddet. Og så, det er alle andre, liksom noen som tror ikke de er mindre komfortable, de definitivt tror ikke de er mer komfortable, men de er bare i et kurs for å få noe ut av det. Så innser dette kurset gjør trekker ganske spekteret av studenter. Og å sette dette i mer konkret, 71% av elevene, i fjor hadde null kurs bak seg. Så hvis du går inn i dette kurset tenke oh alle som tar CS50 var en datavitenskap suse i videregående skole ikke, det er saken. De fleste er antakelig bare interessert i det. Og noen få, ja, absolutt har tatt noen kurs, noen, eller minst én person i fjor hadde tatt fem kurs tidligere. Så vi definitivt har noen uteliggere men igjen kjøtt av kurven er i de lavere verdier helt. Og en annen interessant statistikk vi delte de siste par årene er kjønn forholdet. Så, historisk, i hvert fall i informatikk, er det litt av en mannlig kvinnelig skjeve. Jeg par år siden det var mye mer markert enn i fjor. Så, vi er nesten nå på 40% nivå. Og om jeg kan kaste ned en gapestokk bare for skyld for å ha en tredjedel sektordiagram neste år, det er enda mer rettferdig. Jeg vil påpeke at det er absolutt ingen grunn fra kursene perspektivet at menn og kvinner bør ikke melde deg inn i denne typen kurs. I relativt like tall, og innser til 38 prosent, 48 prosent, vi er egentlig ganske tilfreds med at vi er nesten på det, i hvert fall, selv statistisk verdi på 50%. Så, hvis du er, faktisk, kvinnelige, forsikrer hvile gjør også at dette ikke er i virkeligheten en mannsdominert klasse. Vel, dette skjer bare så å være CS50 hadde 20-årsdag. Jeg, vel takk. [Heier] [Applaus] Det er veldig snilt av deg fordi vi brakt kake for deg egentlig. Og så, når du går ut her senere i dag, vil du faktisk få en sjanse til å møte mange av kursene undervisning kamerater som vil være dvelende i gangen. Og ja det blir en fin slags incentivized måte å møte undervisningen fellows. Men, vi tar en tur opp til en liten bakeri og igjen i tråd med kurset er lekne naturen mens allikevel forventer triviell mye arbeid samtidig som vi har det gøy. Men, vi har en av disse kaker for deg. [Latter] Så, hvis du ler det er faktisk bra fordi selv om du er blant en av de mindre komfortable minst du er klar over det. De av dere i de 14 prosent foretrekker denne smaken. [Latter] Og så, hvis du ikke vet hva faen som skjer akkurat nå, har vi også dette for resten av dere. [Heier] [Applaus] Så, er de som blir hakket opp i biter ute som vi snakker. Så igjen, la oss ta ting opp et hakk og minst introdusere noen grunnleggende leietaker at vi vil deretter ta for gitt i de resterende av dette semesteret. Så vi alle sikkert vet at datamaskiner til slutt koke ned liksom nuller og enere, kalt disse tingene biter. Hva betyr det? Vel du kan tenke på det rett og slett som en lyspære, er litt en lyspære som er enten av eller den er av. Det er en bryter, er det enten på eller den er av. Nå dataforskere vanligvis tenker på av som null vilkårlig og, og begrepet på som en. Så hvis du kaster en lysbryter på som en slå den av det er en null. Eller, ekvivalent, skru på lyset som er verdien av sann slå den av det er verdien av falske. Så, dette er bare synonymer. På slutten av dagen, ja, alle databehandling, alle ting som foregår under panseret på en datamaskin gjør slutt koke ned til nuller og de. Og, når du slutter å tenke på det, det er ganske bemerkelsesverdig demningen hva verden har gjort med disse grunnleggende byggesteinene inkludert noen av enhetene du holder i hånden. Vel, hvorfor er nuller og de nyttige? Min Gud, selv i den virkelige verden vi minst ha ti sifre, fra null til ni. Hvorfor så begrenset? Vel i maskinvare betingelser det er veldig enkelt. Det er mye lettere å representere to tilstander, akkurat. Dersom maskinene er koblet i veggen, som regel, har du dette enkelt kilde til binære naturen. Det er enten av eller på. Elektrisitet strømmer, eller det ikke er. Så, det er slags en av de første grunnene til at verden gikk med bare nuller og de i datamaskiner. Men, kan du bruke dem som byggeklosser. Så dette er egentlig litt liten på skjermen her, men vi kan telle i binær eller vi kan representere noe vi ønsker i binær akkurat som vi kan, si, desimal, akkurat som vi kan, selv faktisk, med alfabetisk bokstaver. Og så, her er de raske systemet. På bare et par minutters tid du vil nå vite hvordan man teller, hvordan du skriver, hvordan de snakket binære mye som din egen laptop. Vel, har du, i verden av binære, liksom akkurat som grunnskolen kolonner eller verdier. Så i grunnskolen lærer vi at dette er de kolonnen dette er titalls kolonnen, de hundrevis kolonnen og så videre. Med andre ord, hvorfor er tallet vi kjenner som 123 nummeret 123? Vel, læreren min lærte meg dette er de kolonne, dette var spent, var dette i hundrevis. Vel hva gjorde det? Vel, for å finne ut hva den totale verdien er av det som ellers streng med sifre, kun hash merker på brettet. Vel, vi har en 100, så det er en ganger 100, og pluss det to 10 er så det er 2 ganger 10 pluss tre enere, så det er 3 ganger 1, ok, så jeg synes å ha fått tilbake til der jeg startet. Men, dette er veldig enkel prosess for bare å gange tallene med verdien i kolonnen hva binær handler om. Men i binær du bruke krefter de ikke makter av ti. Så, her er en serie på åtte lyspærer. Computer forskere liker å bruke verdier som to og åtte og 16 og 24 og 32 fordi de er alle stort sett praktiske verdier til bruk. Så, når vi snakker om åtte verdier i rekkefølge er dette som kalles byte. Og disse dagene vi sjelden snakker på bare byte, snakker vi megabyte gigabyte og terabytes i disse dager. Men det er alle til sist det samme. Her er åtte biter AKA en byte, bare enkel sjargong. Så, alle disse lyspærene er av. Så er det matte faktisk veldig enkelt. Så det på høyre, men det er lite å se, er det ens kolonne, på to og to, til fire, i åttere, den 16S, 32s, 64s, 128s. Alright, kanskje det er vanskelig å huske i begynnelsen, men det er bare multiplisert to av fra høyre til venstre. Så kan du alltid gjenopprette. Vel, alle er av slik det er 0 ganger plassholder, 0 ganger plassholder. Så, er dette tallet 0 representert i binær. Med andre ord, hvordan skriver du tallet vi kjenner som 0 i binær? Vel, en, to, tre, fire, fem, seks, sju, åtte, og teknisk akkurat som i desimal, alle disse ledende nuller, gjør de ikke legge noe til formelen de er bare der fordi vi vilkårlig bestemte vi oss vil åtte av disse tingene på rad, til høyre. Hvis de er fysiske gjenstander, har vi åtte, slik at de er nødt til å alle være av. Så kunne vi har akkurat fått unna med en null. Vel hvordan du representerer nummer en? Vel, instinktivt du skal kaste en av bryterne. Du kommer til å slå en pære på. Så, det er nummer én fordi vi nå legger en, en lyspære som skjer, i en posisjon. Hvordan skal vi representere to? Vel, vi faktisk kommer til å kaste to brytere nå minst versus denne tilstanden, må vi slå på de to i kolonnen slå dem kolonnen, og nå har vi verdien av én i toere kolonnen. Så det at den totale verdien av to. Nå, en rask mental trening, hva som skal skje med neste sekvens? Hvordan presenterer jeg nummer tre? Vel, jeg trenger en fra toere kolonnen, en fra trær kolonnen og ah ha. Så, nå har jeg økes den. Og nå, det samme grunnleggende mønsteret gjentar. Hva er nummeret fire? Vel la oss se, jeg trenger bare en en i fire kolonnen og deretter nuller i toere og de. Så fortsetter det slik. Og, det er bare denne sekvensen av trinn. Og i begrepet binære er virkelig ikke så komplisert. På toppen er det vi har åtte nuller. Nedenfor at vi har syv nuller og ett. Nedenfor at vi har seks nuller, en og en null og det er binære. Now, thankfully, we computer scientists, we programmers by terms end are not going to often be writing in binary, talking in binary, thinking in binary because we've built many layers of the traction on top of that. In fact, people rarely talk about bits except in a networking context they talk about bytes because one bit, not that useful, eight bits these days still not that useful, but at least eight bits, one byte is at least getting us toward more useful units of measure. But, when we start looking underneath the hood, when we do certain problems such as look at files and look perhaps at network traffic, it will become interesting to know how you're representing data because you're going to have to figure out how to display that same information. And, in fact, we, if we only have zeros and ones, how do we go about representing, say alphabetical letters? Well, we're going to have to have some mapping between binary and letters. But that's as of yet unclear. But to hammer this point home and to give me a break from speaking at, I thought I'd pause for a moment and see if we can't recruit eight volunteers, one byte eight people. Can I get eight people for whom it is not too awkward to come on up. good, good one, two, three, four, five, six, seven, eight very enthusiastic eight, come on down. So, you all, for just a moment here, oh and you have to be willing to not be on the internet because there is in fact a camera in the back of this room. So, turn back now if you don't want to be on the, hello mom, in perpetuity. So, let's see, you here will be the 128th column. And let me ask that you simply hold this before you. And actually, if you could scooch this way just a little bit, then I will get out of your way. You'll be the 64's column, you shall be the 32's column and the 16's. 32's, 16s, 8's, 4's, 2's and 1's. All right. So perfectly lined up with the place holders from before, but we need a little bit of mapping, so a quick set up. We just need an arbitrary way of mapping binary numbers, which really could be converted very easily to decimal numbers. So we need a way of converting numbers to letters if our computers are actually going to show us emails or type URL's or actually display non numeric information. And, in fact, there is a system for that, it's called ASCII, an acronym whose meaning is not so interesting, but whose utility is. This is just a mapping from letters to numbers and there's actually a lot more numbers on the screen, and you guys, don't worry, aren't going to have to test yourselves with this in just a moment. But there's a mapping between numbers and letters and I'm just going to get us started by pointing out a couple of these. The numbers of interest right now are going to be, whoops, are going to be this. Whoops. So in this column here, I can't seem to zoom in simultaneously, we have decimal. Dec for decimal. And then we have the character on the right hand side. So if I hop over into this column, thought it's a bit small on the screen, the number 65 represents what letter? Capital A. And the number 97? Lowercase A. All right. So those two alone, right, so do not go home and try to remember ASCII chart. Come quiz time, do not try memorizing an ASCII chart. Memorize two, 65 is capital A and 97 is lowercase A. And from there you can bootstrap yourself to all of the other alphabetical characters. But all this chart says, and I just downloaded this chart from ASCIItable.com, this is a standard that's been around for many, many, many years, but most computers still use it. What we now have is a means of encoding alphabetical information using what's ultimately numeric. So if these guys are just switches, light bulbs, computers, we can actually convey messages. So each of you has some hints on the back. We're going to have three rounds here where these guys are going to spell out in English, in ASCII, a very short message, a three letter word. It will involve them either raising their hand, thereby representing a one or just standing there awkwardly, thereby representing a zero. So why don't we proceed immediately with round one and you can either raise or not raise your hands. So the audience doesn't get off the hook. What number are they currently representing? 66. Right. Not hard because we have a one, a hand up in the 64s column, a hand up in the 2's column. 64 times one plus two times one is 66. They're representing the number 6, which means the first letter is B. So not too bad, right? Round two. First letter was a B. [Latter] >> Seventy Nine. >> David: Can someone second that? Yes. All right. So 79, which means it's now an O. So B,O. There's a third letter. Actually that is kind of, yeah. Third round. Third and final round. What number is this? I heard an 87. Someone else agree? All right, yeah. This is in fact 87, which maps to, and this is a very clever set up at which point you all B, O, W, it's bow. Very good. So actually besides that little souvenir, that was not a very enthusiastic applause, so I'll take care of you. So we do have a little something for these guys here now that they just appeared on center stage doing perhaps the geekiest thing they could. So maybe if we could humor them if only because I'm feeling a little bit awkward now. A little round of applause for these guys here. [ Applause ] All yours. All right. Thank you very much. So, so, it turns out that we can take this one step further, but you are now entering a community of people who understand things like this. [ Silence ] It's slowly spreading, yes? [ Laughter ] It's not cool that you understand this now. So we've already done some damage here today, but yes, there is now such a thing as geek humor that you might just catch a little bit more on to. So what are we going to do throughout this semester? So there's 12 weeks, zero index, so 13 weeks in total. You'll find throughout the semester that computer scientists tend to count starting from zero for reasons that will soon become clear. But what we're going to do this week, starting this Friday, is introduce you to programming. Now you may already be coming at this course with a background in the same, and that's perfectly fine, but we'll also be able to introduce some more sophisticated topics than are typically covered, things like events and threading, so just to toss out a couple of buzz words for those unfamiliar. But what we're going to do is not dive into what the typically traditional language like Java or C++ or C sharp catch phrases that you might have heard in the past, but we're going to use a programming environment, a graphical programming environment that was actually developed by MIT's media lab. And this is an environment that allows you to program, quite literally, by dragging and dropping puzzle pieces that fit together logically that lets you implement these things called loops and conditions and Boolean expressions and you can actually, on day one, after this Friday, write a program that actually some of your friends might care about. So in yester year, say when you've taken a computer science course in high school, odds are one of your first programs was the equivalent of hello world, like wow mom, I just made the computer type some characters on the screen. It's a very underwhelming experience. Much more interesting is it to implement a little something like this, as one of last year's students did. So I give you the work of a former classmate. It's a love story, of sorts, about dancing cookies. [ Music ] So this was actually from a student who had never programmed before. And just to give you a teaser of this interface, and we're only going to use this for one week time, really to get the comfort levels up and to really get folks excited about what you can actually make these machines do, this is an environment where you'll be programming by, for at least a week, just dragging and dropping puzzle pieces that fit together, as we'll see, in a logical fashion. And it lets you do fun, silly things quickly. And for any of you who are a little bit familiar with things like Java and C++, it's usually a good semester or two or three before you finally get to start writing something that another person might actually enjoy watching. Well, in week one of the course, or the second week, zero index, where we dive into a little more traditional environment. In this course we'll spend much of our time on a language called C. This is one of the earliest languages that, unlike Java, actually gives us much greater access for better or for worse, to manipulating hardware and actual memory, and we can do a lot of damage with that. In fact, any time you read of web servers being exploited or computers being hacked into, very often to this day it's the result of people having run software in a language called C or C++ without sufficient care given to what are called buffer overruns or lengths of arrays, so some fairly technical concepts that are not that hard to understand, but there's been a lot of humans making a lot of mistakes for years and with this language we'll actually understand some of those security implications. But each week, typically, we'll introduce also an interesting domain that will inspire that week's problem set. So we'll also take a look this week at the field of cryptology, cryptanalysis, the notion that you can encipher information in such a way that people can't read your messages, but if clever enough perhaps you can, in fact, crack what are otherwise secret messages. In week three we'll then look at some basic fundamentals of computer science like searching and sorting and we'll actually look at this notion of recursion, how to debug things. In short, we'll take things up to the level of problem solving and not so much about mere syntax and implementing short little cookie cutter programs. In week four we'll introduce more sophisticated problems still. What does it mean to manage memory? What does it mean to run out of memory? What does it mean to actually segfault, if you've heard this expression, and odds are you haven't, but very bad things happen and frankly by terms end you'll understand terms like my code segfaulted which actually is generally not going to be a good thing. But then again, we'll introduce some domain specific stuff. So actually one of my internships during graduate school was to work for the local Middlesex County District Attorney's office doing forensic investigations in a digital sense. The local Mass state police would bring to our office hard drives and floppy disks and sometimes for no reason mice and keyboards. And we would be tasked with finding evidence. Now it turns out, maybe just an FYI, that the criminals in Cambridge, Massachusetts, at least, not necessarily that clever. Very often our forensic analysis boiled down to booting the computer up and double clicking on the My Documents folder, and therein laid the evidence. But what we'll do this week is give you a sense of what it actually means to store information on a hard drive, on a flash drive, and why can't otherwise private information be disclosed to third parties when you drop off a computer to be repaired or even when you discard it. Well someone might very well be sifting through those hard drives and it's really not that hard to find data if you know how to look for it. Well, in week five we'll look at more sophisticated data structures, tools and techniques that you can use ala phone books and ala searching huge data sets much more intelligently. And the week's problem set will task you competitively to see just how fast the code you can write is and how little memory you can use. Toward terms end though we'll take things up to a higher level in terms of programming languages and put C behind us and introduce a web programming language known as PHP, one of the popular languages these days. Much of Facebook is still written in PHP, at least outward facing, and it's just a very easy language to learn quickly once you already know another. So with PHP we'll be able to solve problems and implement websites that do interesting things. The news site I showed you, the events site, the shuttle boy site, all of those all happen to be written in PHP. But by no means is that prerequisite. What you'll also find throughout this course is that you're not going to exit this course knowing C. You're not going to exit this course knowing PHP. Those are not interesting skills to claim, but knowing how to program, knowing how to use data structures and algorithms in an interesting way, that's a compelling story. Even I, all these years later, throughout college and graduate school, the only time I ever learned a language was probably in CS50 where it was still taught in C and CS51, which is one of the successor courses. Everywhere along the way since has been go learn this language and then work on this problem set because computer science is not supposed to be about here's a language, let's spend seven weeks teaching you where the semi colons are. There are much more interesting ideas out there. Databases, for one. And in week two we'll introduce you to this query language called SQL that'll allow you to store information in databases and actually implement some fairly interesting final projects. The week after we'll look at what's called client side programming, doing interesting things on a user's computer, taking advantage of their CPU cycles, doing things ala Google maps and these websites that actually use JavaScript, which is actually a language we'll introduce to let you do client side things, make more interesting, more sophisticated user interfaces, but at the end of the day have to be really mindful when implemented of a lot of sticky issues like network speeds, network performance and security. So it's not about again just coding something up that's fun to use or pretty to look at, but actually thinking about the design that'll be the interesting process. And then, the end result aesthetically will often be a really neat toy to show yourself or a friend. And then we'll look at hardware. We're going to take for granted that there are these physical boxes throughout much of the semester that will do what we tell them to do. But how are they doing that. So we'll actually take a peak under the hood and talk about what a compiler really is, what a CPU really is and actually consider what's making all of this fanciness from stupid YouTube videos on down possible. So what are the expectations? Attending lectures and sessions, completing nine problem sets assigned roughly weekly, two quizzes, the final project and there is in fact no final exam. Grades, it's always a question, broken down as follows here. You can take the course pass-fail. But let me say it here, and I've said it many times. I personally care relatively little about grades. I think they are a wonderful, well, they are a useful pedagogical tool with which to motivate and unfortunately sometimes de-motivate, but you'll find in this course that at the end of the day it's more about seeing how far you can go from weeks zero to week 12, as we say in the syllabus than it is about absolutely ranking all students in this course. So if you're coming into this course among those less comfortable, though a large demographic do not assume that that's automatically putting you in the lower third of the so called distribution. At terms end do I sit down with the TF's and discuss each and every one of the students. We take into account where a student came from, what kind of trajectory they were actually on and so at the end of the day please focus more on, and I don't mean to sound too grand, the process of learning and less on the numeric's. And you'll actually see that we grade problem sets, in particular, very coarsely, whereby along three axis, you will get a score of 1, 2, 3, 4, or 5, where 3, is in fact good. 3 is not C. 3 is good, 4 is better, 5 is best. But more on that as the problem sets are released. So the course's website is where you will find, as in most cases, a whole lot of useful things, if not silly things, too. And we have the luxury, as computer scientists of implementing it ourselves. So over the course of the semester you will see various new features rolling out. You'll find out over the course of the semester that the bulletin board is a wonderful place, certainly in the course of this size, to turn when you have questions about the problem set, questions about some computer science concept. You'll be able to check your grades, download all handouts in advance of lecture typically will I post the slides, if you're the type who wants to scribble on notes. But as you've seen, usually I shy away from long lists of details and more like pictures of cats and other visual cues. So you'll find, too, that we will provide printouts of code when we actually think it particularly advantageous to write right on the paper. Software, videos will be available, usually around 1 to 2 to 3 days maximally after each lecture. So the courses are being filmed and every lecture will go online in various formats including QuickTime and MP3's for downloads to iPods and such. And also you will find a link to download what we call the virtual terminal room, which as you'll see is related to virtual office hours. Books are expensive and in the computer world also not that useful. They are on the shelves of the coop, although we're told that last year they ordered like 120 books for the course and 30 were actually purchased, but this perhaps speak to the fact that there are places like Amazon.com, so if you are the type who actually enjoys the sort of support structure that a book provides, if you like to read up more than say a course's typical materials offer, by all means, procure one or more of the books that we recommend here and discuss more in detail in the syllabus. But realize there are so many resources that this course provides in printed form and electronic form, and my God, there's the whole internet out there. Books are not something that are required for this particular course. Lectures, in general, will be Monday's and Wednesday's, except for this Friday and next Friday, simply because of shopping period and Labor Day. So we'll meet this Friday, next Wednesday, next Friday, but there after this is just a Monday, Wednesday course. So this little visual cue here is to remind me that yes, we do distribute videos in QuickTime formats, MP3's, fun ways that you can, if you're actually this type, maybe in the 14 percent, watch a computer science lecture on your iPod, but it reminded me that at terms end last year, the course culminates in final projects, in which students can design most anything they want, and we actually had some students tackle some iPhone applications. Some one of these at least is now in the Apple store. It's called Rover. It's been adopted essentially by Harvard agencies and it's the iPhone version of the unofficial guide to life at Harvard. They did a brilliant job. I bring this slide up too, just to point out what other technologies might very well be down the road. Some of you may have seen this before, but just to give you a teaser of apparently what's in the pipeline, I thought I would offer this brief distraction here. [Musikk] >> With the MacBook wheel, Apple has replaced the keyboard with a sleek, touch sensitive click wheel. Apple CEO Steve Jobs introduced the product yesterday at the annual Mac Expo. Senior product innovator says the MacBook wheel will make typing a thing of the past. >> At Apple our philosophy is create products that are simple to use and nothing's more simple than a single giant button. >> Gilman showed me how the revolutionary new computer works. >> Gilman: Just open the intuit-type alphabet menu here, scroll to the letter you need and center click to select it and click again to capitalize and repeat this process for each new letter. It couldn't be simpler. You could also let the predictive sentence technology complete the sentence for you. >> Gilman says the MacBook wheel has also simplified organization of files, so searching your hard drive will be a snap. >> Gilman: Just press both sides of the wheel concurrently and center click and there, you have an alphabetical list of every file on your hard drive. Everything is just a few hundred clicks away. >> Apple is calling the MacBook wheel the most intuitive product every designed. >> Here at Apple we like to think that we're giving customers features they don't even know they want yet. >> While the MacBook wheel won't hit the shelves for another 3 to 15 months, many apple users already have it on their wish list. >> I'll buy almost anything [inaudible] and made by Apple. >> Alex [inaudible] was one of the lucky few to get to try out a MacWheel and spent 45 minutes typing an email to his friend. >> I never really realized how much I hated keyboards until I saw this thing. >> I like how it automatically says, sent with a MacBook Wheel, so people automatically know you have one. >> With a price tag of just under 2600 dollars for the lowest end MacBook Wheel, it is an investment. But the super thin laptop features numerous innovations, like the new ultra thin hummingbird battery, which can power the MacBook Wheel for a fill 19 minutes before needing to be recharged and the computer is virtually unbreakable unless dropped or hit. But Apple isn't resting on its laurels, Bryan Gilman says they're already hard at work on the next generation of the MacBook Wheel, which will be four ounces lighter due to its lack of streaming hard drive or wheel. For the Ugly news Network, I'm Jeff Tate. >> Thank you for that, Jeff. It remains to be seen if the wheel will catch on in the business world where people use computers for actual work and not just dicking around. Moving on, police warn. >> David: So I've seen that thing at least a half a dozen times now, including once at like two a.m. last night and I was scrolling down on YouTube and literally like an hour prior, some guy in all seriousness posted, just a wheel? That's the stupidest product I've ever seen. [ Laughter ] And then the rants ensued in the thread thereafter. So besides lectures there are also sections and it is your teaching fellow and the course's course assistants that you will get to know very well over the course of this semester. Sectioning won't begin for a week or so's time. More on that in the lectures to come. But know that the course will have several different tracks of sections, much like First Knight's has for music. Sections targeted more at those less comfortable, those more comfortable and those somewhere in between. And we also offer most Sunday nights before a problem set is due on the following Friday is what we call code walkthrough's where one of the course's teaching fellows will lead a session targeted specifically at the week's problem set and will help you answer the question where do I begin, how should I approach this? And that too will be filmed and made available online and always linked on the course's website. So this course has a huge staff. Our staff is larger than Harvard's average class size. We have over 50 people involved in the production of this course on a weekly basis. Some of them teaching fellows who hold sections, grade work, hold office hours and more. Course assistants who are former students, who are offering on a volunteer basis in fact multiple hours of office hours in the computer lab per week. System administrators, folks doing all of our AV and video production. Someone who will actually be taking notes for you. So it is actually my opinion that scribbling down almost every word that someone like me says is not a very good use of one's time. It's much more interesting I think to actually engage with what's on the screen, what's being presented. And so what we will do as a course is post PDF's online within a couple of days of lectures of scribe notes, which is essentially an authoritative version of course notes, unedited, but documenting what went on in lecture that day, thereby hopefully freeing your minds and pencils from jotting information down. We have some of our team here. Most of our team is actually shopping courses. But if a few of your guys would like to come on stage for a moment with our head teaching fellow and assistant head teaching fellow. Allow me to ask the latter to say a quick hello. And as these guys come up in absentia allow me to say that also on staff this year besides the folks you see here are Alex, Alice, Andrew, Batul, Charlotte, Chris, Dan, Dan, Daniel, David, David, David, Derek, Dev, Didi, Doug, Drew, Erica, Fil, Glen, Greg, Janice, Jason, Jean, Jeff, Jesse, John, John, Jonathan, Jordan, Josh, Karim, Kelly, Ken, Kent, Kyu Bok, Lee, Madhura, Marta, Matthew, Michael, Michelle, Mike, Mike, Nathan, Patrick, Peter, Peyton, Rose, Saba, Sanjay, Shannon, Stacey, Ted, Wellie, Yair and me. So our course is teaching fellows and course assistants, Cansu and Yuhki, would you like to say a quick hello? >> Hi. It's definitely a great honor to be back here for the third time. And if you're one of those who are like less comfortable. [ Laughter ] I think I can [inaudible]. Okay. [ Laughter ] If you're one of those [inaudible]. There's no need to be afraid. I walked in here two years ago with no experience what so ever, and I thought that I was like dumb and I was sure that I was going to fail the class. And I came back for the third time. I did not fail the class. This course is great because it has such a good community. As you can tell by the names listed by David. All the CA's and TF's are here to help you. So if you have any questions at all, just come up to us. Not taking this class because it's hard is not a good excuse. So, hi. >> [Inaudible]. >> Hi, so well both as a student and TF, I've really enjoyed being a part of this course. And even though it's a course that requires a lot of work from you, we've put a lot of work in to it for you as well to make it as enjoyable and as fun as possible. So, we really hope that all of you stay and take part in this very special experience. >> Thanks. >> David: So you will find, thank you, all of you, you will meet them in the hallway in just a few minutes as well. So you'll find that this course, perhaps more so than many is very much a shared experience. This is not a competitive course. This is not your premed course. This is a course which ultimately yes is about doing independent work, as you'll see each week by way of the problem sets. But you can't help but to get close to someone when you're fighting with some bug and banging your head against the computer screen proverbially to try to track down some bug. And I think you'll find that past students will concur that you exit this course with a lot of friends among students and also on staff. So where does that happen? Well, within office hours in the basement of the science center there's some large computer labs and we pretty much take them over five nights a week. These won't start for some time, and this, to be honest, is perhaps the most beautiful picture of the science center I've ever seen. [ Laughter ] It does not look like that on the inside. But it is a place where a good percentage of students do choose to spend time to get one on one assistance with each of the week's problem sets. Each week we will offer more than 100 hours of assistance one on one in the science center per the schedule that will eventually go online. And for those of you who live, say in the quad, or in Mather, or who just don't want to trek all the way to the science center to ask that quick question, we also offer what are called virtual office hours, much like remote technical support where you'll be able to log into a glorified chat room, in which yes, you can type back and forth with a TF or a CA, but you can also share your screen or share control of your mouse with them subject to your consent so that they can help you troubleshoot any problem or any question you have remotely. To give you a sense of what's involved in the course, these are statistics from last year. So you will, I think it's quite fair to say, work your ass off in this course. But per my promise from the start, this is one of those experiences that I don't think a typical student regrets. If you flip through, for instance, the Q Guide forms that are all on the course's website, you'll find that only by putting in the time to a course like this do you really exit having felt like you got something out of it and frankly might very well even have emerged even smarter. So what does it mean to actually write programs and implement problem sets? Well, the first problem set last year, a quick retrospective here, was to implement your very own programming scratch. And we spend just the first week there, and the goal is to implement your own game or animation or art or anything that appeals to you. In week one, then do you implement some basic C programs to get acclimated to some more traditional programming environments at the command line, at Linux so you get comfortable with some of these basics that will certainly serve you well in the long run. Last year's Problem Set 2 was about cryptography. We gave students the opportunity to implement some ciphers, some algorithms that let them encrypt information. And we also offered some students the opportunity to do the opposite. Each problem set, many problem sets, as you'll see are implemented in two editions. A standard edition that we expect almost everyone to do, say 90 percent of the class. And then a hacker edition, which presents the material from a more sophisticated angle, expects perhaps a bit more clever work for those more experienced, and for this one did those students get handed in the hacker edition pre existing user names and passwords in encrypted form and they had to figure out what those passwords for. We actually got into trouble for this a few years ago because all of the sudden FAS Computer Services saw like 50 people running a crack program on nice.fas.Harvard.edu, so they now have been given a heads up for programs like that. Last year students implemented the game of 15. Not all that much fun to play as a party favorite, moving the numbers up down, left, right, but a real stepping stone to implementing something interactive that involves a human and the hacker edition for this one had students implementing God mode, which actually solved this thing for the human, maybe cheat mode is the more apt term, in Sudoku, which was a step up toward that, where we provided the students, you, with a framework with a whole bunch of code that you needed to first understand before taking things the final mile and implementing some of the remaining functionality. And then we dabbled in forensics and this grew out of a real world experience between me and a friend. For this problem set last year, this buddy and I, who he being a particularly good photographer, strolled around campus and we shot photographs of unique, non obvious, but identifiable places on campus. And this was using his digital camera. All of these JPEGs got stored on a digital flash card or what not. And then I accidentally formatting the thing, or erased it. Well, it turns out formatting something or erasing something, usually means neither. It just means doing a little bit of work to make the human think their data has been erased, when in reality it hasn't. It's just been forgotten. And so we tasked last year's students with writing a program in C to actually recover these photos for my friend. We gave everyone a forensic image, so to speak, a big file representing that compact flash card, and they had to recover the several dozen photographs. And they also had to solve this little murder mystery. We provided folks with this image here. Those of you who've seen this before might be doing that squinting thing right now where you're trying to look through the picture, well you look pretty awkward, because this is not a magic eye puzzle. This is just random red noise that actually has behind it an actual message. And it turns out, I think it was Colonel, let's see, I've got my little solution here. Last year it was Colonel Mustard in the study with the candlestick. And this was the murder message recovered by students who wrote code to do so. And then in Problem Set 6 last year. We challenged students with implementing the fastest spell checker possible. What do we mean by that? Well, we handed the students a big text file containing 140 plus thousand English words, and we said write a program that loads all of these words into memory, but very quickly and very efficiently can tell us yea or nay, is this document perfectly spelled or are there errors? And what we provided was a testing framework, a harness, that students, if they wanted to compete, could run their code against some benchmarks, against some testing programs that we wrote. And then, ranked on the course's website from fastest to slowest were the running times, the amount of time it took for each student's code to actually execute, complete opt in. It's by no means required. And we took a bullet for the team and made sure that one of our own teaching fellows intentionally, I think, was at the very bottom of the list. So, there was definitely a lower bound. But the odd, the funny thing was we saw this in the cue guide evaluation, this problem set of all things, was apparently the one that people sunk the most time into. Not because it took any longer than all the other p sets, but they would come back from like dinner, look at the board, and realize dam my friend, my roommate just ever so slightly inch higher than me and so it incentivized people if only to one up their friends and roommates. In Problem Set 7, last year, we asked students to implement their own E*Trade like website, whereby you had to create a website using that language call PHP a database called mysql that actually lets people log in and then manage a portfolio of stocks, buy stocks quote unquote, sell stocks quote unquote, get stock quotes. And from where? Well, we have the students; we had the student patch into Yahoo Finance where they grabbed merely the Real time stock quotes to actually simulate the process of buying and trading stocks. Unfortunately some students, perhaps some economics majors or just folks with too much free time figured out last year how to gain the system. So, even though we gave everyone 10,000 virtual dollars, I think our winner turned teaching fellow this year actually, right don't push them away make them one of your own, for a billion dollars something like that ridiculous. Turns out we weren't really checking whether or not people were trading after hours. And it turns out that also, Yahoo stalk quotes are not in fact perfectly Real time which means if you just have a real E*Trade account you can see the future and see where the stocks are going. [ Laughter ] So, apparently you can exploit that if you put your mind to it. and then, in Problem Set 8, the course's final problem set last year, we had students implement a mash up where they take Google News and Google Maps and mash them together using JavaScript, PHP and SQL in such a way that they had a website that they could find all of the local news from whether it's zip code 02138 or 90210. And, you would actually pull the local current even articles by this thing called XML and integrate it into the view of a Google Map. And then, at very course's end was the true climax of the course. This course culminates in final projects, which ultimately will be your opportunity to design your very own piece of software, designed by you or two or three friends. And the course then climaxes with the new and improved, with the second annual computer science 50 fair which last year was an exhibition across the street in one of the engineering buildings with 300 laptops atop tables, popcorn was popping, music was playing, stress balls with CS50's logo were being thrown around. And this was an opportunity for our 300 plus students to exhibit their final projects not only to each other but also to some 900 attendees in total. And we also invited some recruiters as well. So, that is what you have to look forward in this course. You also have cake to look forward to in the hallway. This is CS50 and we'll see you on Friday. [Applaus] ==== Transcribed by Automatic Sync Technologies ====