>> David: Velkommen, mit navn er David Malan, og det er CS50. Og det er ikke din typiske high school datalogi kursus. Dette kursus er en lille noget særligt. Og det er ikke fordi jeg undervise dem. er det fordi det er et af, vi vil gerne tro, de sjældne kurser, der rent faktisk presser din hjerne så meget, og din tidsplan så meget, at ved semesters afslutning du virkelig føler klogere. Så det var den måde jeg følte når jeg tog dette kursus tilbage i 1996. Jeg var en regering stort på det tidspunkt her, der bor i Mather House. Og I. [Hepper] Som de andre, de fem andre er. Så jeg var en regering stort på det tidspunkt. Og jeg var en regering større, fordi jeg altid havde ønsket historie. Jeg kunne godt lide forfatningsret i high school. Og ja, jeg afsted på denne vej freshmen år gør, hvad jeg er bedst til, gør hvad jeg vidste, jeg kunne lide. Og jeg havde altid været lidt af en nørd, vil jeg altid lallede med computere. Men jeg selv, måske ironisk nok set i bakspejlet, ville jeg altid set de fyre, der var under computer science i min high school, mine venner som den egentlige geeks. Og dog, til sidst gjorde, sophomore år tager jeg dette lille kursus kaldet CS50, der rent faktisk havde skræmt mig væk min egen freshman år. Og jeg var en bruger assistent på det tidspunkt. Så jeg var jo allerede kvalificeret, i hvert fald, at være blandt dem, de nørder, som jeg gjorde grin med i high school. Men jeg var bange. Der er den havde dette ry på det tidspunkt og måske stadig er i en del, at det var en, det var en skræmmende kursus. Det var et stort arbejde. Det var hårdt, og alligevel er det en af de ting, hvor min Gud, bark var langt værre end dens bid. Jeg befandt mig sophomore år, for første gang, faktisk at finde hjemmearbejde sjovt. Og jeg siger ikke dette bare for at pitch dette kursus for dig. dette var en reel erkendelse for mig. Nu tror jeg på et tidspunkt, jeg gjorde passerer linjen til sande geekdum hvor jeg rent faktisk bruges til at se frem til fredag aften, fordi jeg kunne krølle op foran min lille MacBook og arbejde på CS50's problem sæt. Så på det punkt tror jeg, jeg havde helt klart passere linjen. Og vores mål i dette kursus er ikke at vende jer alle til denne person, men bare for at sige, at der er lidt specielt ved dette kursus, lidt noget særligt ved datalogi i almindelighed især i disse dage. Og jo mere akklimatiseret vi har alle fået i teknologier, jo mere legetøj vi bære rundt på i vores lommer, som selv computere. Jeg mener, min iPhone er faktisk en højere udfører computer end min laptop var i college. Du kan gøre en masse smarte ting med disse ting. Og nu, de fleste af os i dette rum, formentlig bare bruge andre folks software, andre folks værktøjer, andre folks løsninger på problemer, fordi vi går til iTunes, vi downloade nogle app fra App Store og Walla, vi kan gøre noget rigtig pænt. Men ved udgangen af dette semester, kan du være den person, der udfører denne problemløsning. Du kan blive den person løse nogle problemer, bygning, app, at stykke software, som værktøjet, der enten, én lige morer mig, morer dig. for eksempel, kontrol, siger, dit iTunes-bibliotek fra med din lejligheder klart en app, der allerede eksisterer, eller du kan finde shuttle tidsplaner lettere for eksempel. Så i virkeligheden en af de allerførste ting jeg gjorde efter at have taget CS50 var igen, det var sandsynligvis på dette tidspunkt fredag aften og lørdag nat, var der denne mulighed på det tidspunkt, hvor Harvard kørte shuttle busser. Og den dag i dag stadig de har trykt tidsplaner. Men der var virkelig ingen måde online for at finde ud af, hvornår den næste shuttle var. Nu, jeg var ligeglad, for selv om jeg boede i Mather var jeg ikke blandt dem, der generelt tog shuttle. Men jeg havde en masse venner i Pfoho f.eks. Og en af dem spurgte mig, tror jeg i på et tidspunkt. [Hepper] Okay Pfoho er bedre end Mather tilsyneladende. Så en af mine venner slags fik mig tænker jeg måske kan skrive et lille program til type hjælpe mine venner se shuttle skemaer. Og således blev født den akavet opkaldt shuttle dreng, dette stykke leksikon, som har opholdt sig omkring for nogle flere år i hvert fald blandt nogle af de upperclassmen. På det tidspunkt var dette denne lille kommandolinje-program af samme ånd til Dos. Det var kører i en UNIX miljø. Så det var ikke meget sexet ved alle. Du har lige skrevet et par kommandoer, og det fortalte dig, når pendultrafik var. Nå, disse dage er det en lidt mere sofistikeret. Og er det faktisk repræsenteret af netop den type projekter, at de studerende i dette kursus ende med at gøre af udtryk ende. Så det er version fire omkring 15 år senere, i Shuttleboy. Synes Google Maps er at være en lidt langsom der. Men for dem af jer, der har at komme ud af her efter klasse og gå, sige fra Memorial Hall og behovet for at gå op til, sige, at Quad. Nå, kan du enten lade i to minutter, hvis den, det er virkelig ikke fungerer for dig bare endnu, eller du har som mange andre muligheder, som du måske gerne. Og kommer snart, kan vi pitch dette fra CS50, vil det være den samme kapacitet som SMS. Du kan tekst Shuttleboy via telefon. Du kalder Shuttleboy. CS50 telefonnummer i år, ja, utroligt det var ledigt, 617-BUG-CS50. Så vil der debut snart. Så du skal ikke kalde det bare endnu, fordi jeg har fået en reprimande for, lige nu er det at blive omdirigeret til vores system hoved undervisning fyr's mobiltelefon. Så skal du blot få ham, hvis du har spørgsmål om shuttle tidsplanen nu. Men der vil snart blive gennemført. Så andre ting, faktisk, at vi selv brugte denne sommer på virkelig som forberedelse til dette semester var en hel bunke af andre problemer, som vi ønskede at løse. For eksempel er der en hel masse ting, der foregår i denne campus på en given dag. Og i virkeligheden, sagt på en anden måde, er der en hel masse ting, der foregår på denne campus, som jeg bestemt aldrig at drage fordel af. Og selvom jeg nu overvældet med, hvor mange ting, der foregår på campus, jeg synes stadig aldrig at finde tiden. Men Walla, selv der, CS50's forelæsning. That's, hvor du er, så det var en, det var et program skrev vi til at samle alle de begivenheder på campus. Og det har været noget, som andre studerende i samme kursus har tacklet på egen hånd. Og har vi samarbejde med andre enheder på campus til virkelig at dette kan ske. Men det punkt, CS50 dette udtryk er, at alle disse små programmer, som vi har arbejdet på, hvorvidt denne eller om man for en sammenlægning af alle på Harvard's nyheder på ét sted, alle de Google News, er alle disse ting vil have, hvad kaldes API's, application programming interfaces. Og det er bare lyst taler for muligheden for at lade andre mennesker, folk i salen, faktisk gør noget med det samme data. Så ved vilkår ende, hvis du beslutter at gennemføre det endelige projekt i forbindelse med nyheder eller begivenheder eller kort, godt vi i det mindste som et kursus, vil gøre, at alle mere nemt i år ved at give dig en grænseflade, en slags funktion, så at sige software, som du kan bruge i dine egne projekter at gå ud over hvor studerende, måske er gået i tidligere tider, da denne ramme ikke har været på plads for dem. Og igen, alt dette begyndte for mig i hvert fald, omkring 15 år siden gennemførelsen Shuttleboy. Jeg så mailede min ven Ken i Pfoho. Jeg sagde hej hvad synes du? Er det nyttigt? Han sendes ud på Pfoho åbne liste og Walla, alle disse år senere Jeg er åbenbart stadig malkning dette projekt. Og pæn ting om det, og det er her også et kursus som dette i ingeniør-og datalogi, tror jeg, er lidt speciel, er, at når du gør dit hjem fungerer, og når du gør dine projekter i dette kursus, du ved, mange af dem, ja, vil du sætte til side og ikke rigtig bruge igen. Men noget af det, du vil. Og der er det virkelig kraftfulde ting, i det mindste for mig, det virkelig spændende ting, når du laver noget og andre folk faktisk pleje, gøre andre mennesker ikke bare smile og klappe din på ryggen og derefter sortere i går om deres eget liv. De rent faktisk bruge det du har lavet i deres eget liv, selv om det er for noget så fjollet eller så simpelt som bare at finde, når de kan få ud af her for at fange den næste shuttle til Quad. Så ved vilkår udgangen, det er et af målene for dette kursus, for at give jer til kun at identificere nogle problem, om det er på campus eller forhåbentlig langt ud over campus, og faktisk bruger dine egne evner, dit eget sind og løse dette problem i nogle del, teknologisk. Så det er også et kursus som vi siger i pensum, og kurserne officiel beskrivelse, der lærer dig, hvordan du tænker og det lærer du, hvordan man løser problemer mere effektivt. Nå, hvad betyder det? Nå, når du har fået 600 megahertz i din lomme eller tre gigahertz under skrivebordet derhjemme, kan du løse en masse problemer effektivt blot ved at forskyde rå magt. Men der er en masse problemer i denne verden, hvad enten det er at søge, siger, Facebook's netværk eller internet via Google, at det er ligegyldigt hvor hurtigt din computer er, er der ingen måde i helvede du vil søge milliarder af websider hurtigt, medmindre du rent faktisk griber dette problem intelligent. Du behøver ikke bare søgning, for eksempel en enorm liste over alle de websider på jorden fra top til bund på udkig efter noget i forbindelse med, hvad søgetermer, du søger efter forhåbentlig Google og formentlig Google og Facebook, og nogle af disse store enheder har en masse intelligente mennesker tænker på, hvordan de kan finde data hurtigere, hvordan de kan behandle oplysninger mere effektivt, og hvordan de kan bare generelt at returnere resultaterne hurtigere, så du kan gøre endnu mere interessante ting med disse anordninger. Og ja, hvad mener vi dog, ved hvordan, undervisning folk, hvordan de tænker mere omhyggeligt, mere algoritmisk. Nå, denne lille visuelle altid synes at gå over godt. Og det synes at være mindeværdig. Og jeg var endda spurgt i går af en tidligere elev, er åh du vil gøre telefonbogen ting igen. Og jeg temmelig meget på stedet besluttede alright sikker på, vi vil bygge en telefonbog ting. Og han spurgte mig, når du rev den i halv ret, jeg var som godt yeah teknisk vi rev det i halve, men ikke på den måde, i datalogi måde vil jeg være i stand til at rive denne ting i halve. Og så, her var det problem, at vi præsenteres for et stykke tid. Så her er telefonbogen. Det har i det mindste en tusind eller deromkring sider. Og det simple mål ved hånden meget virkelige verden er at finde, siger, at en person herinde. Så Mike Smith, efternavn begynder med S. Så jeg er en typisk menneskelig, jeg afhente denne telefon bog. Og nogen derude, hvad ville du, en typisk person, skal du til at finde Mike Smith, naturligvis ikke vide på forhånd, hvilken side han er faktisk på. Højre, så du går nogenlunde i midten, til højre. Og på dette tidspunkt i historien, jeg sandsynligvis i N's eller M's, du ved, nogenlunde halvvejs gennem telefonbogen. Slår ud, sidste gang jeg gjorde dette eksempel jeg nøjes befandt mig i escort afsnit. Så det er faktisk ikke lige så afbalanceret mellem A gennem M og N gennem Z. Men i dag er vi i virkeligheden i M's, okay så, nu er jeg på M's. Men hvad er min takeaway nu bare som en normal menneskelig ud af gaden? Hvor kan jeg gå næste for Mike Smith. [Uhørligt] Og så, bare nok af denne halvdel, højre, fordi S kommer efter M. Og ja, det er først den visuelle drama. Det er ikke rigtigt at rive det på midten, til højre. Jeg slags snydt i midten. Men vi ved nu, at Mike er i hvert fald ikke i, at halvdelen. Vi kan bogstaveligt talt smide halvdelen af problemet væk. Og jeg tilbage med det problem, der er fundamentalt stadig de samme ting, finde Mike Smith i en virkelig stor bog. Men problemet er nu halv så stor. Hvis det havde en tusind sider før, nu er det fik 500. Ved du hvad, jeg kan gøre det samme igen. Jeg kan slags rekursivt eller flere gange at gøre det samme. Nu er jeg ikke helt ved S. jeg er på T. Og så, åh jeg gik lidt for langt. Men jeg ved nu, at Mike ikke til højre er, er der vil være nogle klasse en dag, hvor jeg kan bare ikke rive dæmningen ting, jeg vil vædde med. Men nu, jeg ved, han er ikke til højre. Så nu er problemet blevet indkvarteret. Så har jeg gået fra en tusind til 500 til 250 sider. Og igen, hvis du fortsætter den logik, fortsætte matematik, jeg hakke dette problem i halve, på midten, i halv indtil endelig jeg enten vil ikke finde nogen Smiths slet usandsynligt, eller jeg har tænkt mig at finde den, jeg er på udkig efter. Men at så rejser spørgsmålet, er dette noget bedre end den simple metode for bare at sige, ved, du A, nope, B, nej, startende fra venstre mod højre går lineært igennem bogen? Nå, instinktivt ja. Det kommer til at være meget hurtigere. Men hvor meget mindre? Tja, hvis jeg har en tusind side telefonbogen eller lad os sige 1.024 for dem af jer der kan lide beføjelser to, hvor mange gang kan jeg nødt til at opdele dette problem i halve før at finde Mr. Smith? >> Ti. >> David: Så, ti, til højre. Hvis du har 1.024 sider og du splitter dem i halve, på midten, på midten, på midten, jeg gør det ti gange, hvilket betyder jeg går fra 1.000 sider til den person, jeg leder efter i bare ti sider vender. Og det er sådan pænt, men du ved, hvis du tænker over det du har gjort alt dette i dit liv. Det er ikke så dramatisk. Men nu, at telefonbogen ikke kun er for Boston, er det for hele USA eller hele verden, og denne ting har milliarder af sider i det, så forestil dig en telefonbog med fire milliarder sider. Hvor mange side vender jeg nødt til at gøre maksimalt for at finde Mike Smith i en fire milliarder side telefonbog? >> Log base to. >> David: Så yeah, hvis du er sådan de math type det er log base to. Men hvis du tror 4-2000000000 to one mia så en halv milliard. Jeg mener, at der faktisk går whittles sig ned temmelig darn hurtigt. Faktisk med 32 halvings af telefonbogen, selv fra fire milliarder, vil jeg komme ned til én side. Og det er da det her bliver kraftigere, tror jeg. Det er, når disse ideer bliver tvingende, når du kan have en fire milliarder side problem og i 32 trin, du kan finde den person, du leder efter. Og ja, det er, hvad vi mener, når vi siger, at du vil lære at tænke mere grundigt, mere algoritmisk, mere intelligent om at løse problemer. Og afkast er enorme, når du rent faktisk kan gøre dette, og igen, at dette punkt i Googles af verden Facebooks der har den luksus at have store datasæt. Du har fået at nærme disse problemer på denne måde ellers er det simpelthen ikke gå på arbejde. Nå, hvad er hvad gjorde den studerende faktisk huske? Jeg, vi gerne gøre ting, som er en lille smule fjollet til tider at sortere i tage brodden af, hvad der ellers en masse nyt materiale. Og ja, han rent faktisk, denne tidligere studerende har sendt mig dette link, som jeg gik videre, bare for spark og derefter fortrudt det i slutningen, trak op på utube her. Så jeg tænkte jeg ville dele, hvad en ikke-datalog, når han tårer en telefonbog i halve. [Latter] [Silence] [Uhørligt] >> Du ved mere end 200 sider, pæn ren linje, legitime tåre. [Latter] >> David: ja, jeg formoder, hans måde virker også. Så hvad jeg fik ud af dette kursus alle disse år siden er ja, Shuttleboy, og derefter ja en grad i computer science, og derefter ja en PHD i datalogi. Og det er ikke det, vi forsøger at gøre de fleste studerende i dette kursus til. De fleste af jer i dette kursus ikke vil gå på en major i datalogi. Nogle af jer måske mindre, men for nogle af jer vil dette være en terminal kursus. Og det er helt fint, fordi dette kursus er i virkeligheden struktureret på en måde, hvor selv hvis du bare betaler din kontingent i flere måneder, og du virkelig fokusere på og du virkelig tage så meget ud af dette kursus, som du kan, vil du i Faktisk være godt rustet til at gå tilbage til din verden i økonomi, biologi, psykologi, anvendt matematik, og faktisk gør brug af, hvad der er i sidste ende så interessant et kursus, som vi håber at konceptuelt, da det er fundamentalt praktisk. Og det er også noget, der er måske en smule sjældent at finde. Jeg troede, jeg ville dele et par bemærkninger om, at studerende fra sidste efterår sat i denne sidste år cue guide når de bliver spurgt om, hvad vil du gerne fortælle kommende studerende. Tja, hvis du ikke allerede har kigget på disse bemærkninger, en studerende sagde dette kursus vil tage en hel del af din tid op. men hvis du lægger dit arbejde i en helt ny verden, et helt, hvis man lader arbejdet, hvis du lægger arbejdet i, okay, så dette er hans grammatik ikke mine, så hvis du lægger, lagt i arbejdet, en helt ny verden vil åbne sig for dig. Utroligt, hvor meget jeg lærte på kun 12 uger. En anden elev skrev, du bedre tage dette eller du vil fortryde det. En anden skrev, en lidt mere ligefremt, vil det sparke din røv og lad dig følelse stor. Og så endelig, denne ene er måske noget, jeg kan kun vise skriftligt, men for det andet fra bunden her. [Latter] Så jeg er ikke sikker, hvis du har mange venner, der tog dette kursus, men vi slags gjorde en masse skade på sidste års studerende. Vi indførte i starten, flere foredrag, et par quizzer, et par problemer sæt, denne idé om lolcats. Du kan ikke se hvad jeg kan se her, men i et øjeblik vil du se en ung mand ved navn glad kat, der er leder af den såkaldte Lolcat. Dette er en af de dumme internet fremad, at jeg synes ærlig talt det modsætningsforhold mellem disse to herrer her, og hvad vi nu har på skærmen er måske. [Latter] Et af de mest uhensigtsmæssige anvendelser af dette teater til dato. Og hvorfor vi ikke lave en lidt mere reel lidt mere personlig denne idé om faktisk at løse et problem mere effektivt. En simpel problem på dag et af alle skoler er at sidde ned eller stå op og begynde at tælle de studerende, højre navneopråb slags. Nå, det mest naive, men ikke desto mindre, meget korrekte fremgangsmåde, at en lærer kunne tage, er en, to, tre, fire, fem, seks, syv, og vi vil være her et stykke tid. Så, hvad er en marginal forbedring på dette, selvom man måske kunne have gjort som barn? Hvordan du regne folk hurtigere? Og ikke begynde at læse fra min egen vejledning? Hvad ville du have gjort som barn? Start tælle toere, til højre, som så jeg er temmelig god til to, fire, seks, otte, ti, 12. Så det er noget interessant ret. Så hvor meget af en forbedring er, at der? Så det er selvfølgelig en faktor to. Det tager mig halvt så meget tid. Men ved du hvad, så finder vi i hele dette semester, big deal, ligesom fremskynde din køretid ved blot en faktor to er ikke alle, der interessant, fordi den analoge her i computer verden er, at jeg er en CPU Jeg er en computer, samt dælen, hvis jeg bare vente 12 måneder, 18 måneder, jeg vil computeren bare kunne i sagens natur, med antallet af gigahertz jeg har i mig at være i stand til at tælle folk i dette værelse hurtigere. Så den slags, den slags lineær speedups gerne faktor to faktor på tre, selv faktor ti, hvem bekymrer sig? Højre, kan vi kaste hardware ved problemet. Vi kan vente tingene ud. Vi kan udvikle hurtigere maskiner. Men intellektuelt, yeah det var slags smart, men den har ikke reelt grundlæggende ændring af problemet. Jeg er stadig i gang fra venstre mod højre, forreste tilbage. Det er virkelig den samme algoritme. Men jeg tilbyde, at vi kan gøre det bedre. Vi kan gøre smartere end det, og synes grundlæggende en hurtigere gennemførelse. Men at demonstrere dette, vi har brug for dig til humor os for bare et øjeblik. Og det er på dette punkt, hvor det vil være mig taler mindre, og du taler mere. Men jeg har brug for dig til at udføre trin et sammen, hvilket er, hvis du vil humor os, bedes du stå op. Retninger her på bord, du ved er, okay, et par af jer er nødt til at sidde ned. De af jer i ryggen, der vi gå, okay. Tak. Så er programmet her er foran dig. Du er nu computerne fuldbyrdende dette program. Det er temmelig selvforklarende på dette punkt. Ja, skal du være nummer et. Få det? Højre er mange af jer tænker sikkert dette allerede alligevel først freshman år. Så tænker selv, du er nummer et. Så tredje trin her, pair off med nogen stående, tilføje dine to numre sammen og vedtage dette beløb som din nye nummer, og vi vil gøre en tilregnelighed check. [Støj fra crowd] Ved du, hvor mange vi har? >> [Uhørligt] >> Nr. [uhørligt]. >> Vi skal have et svar nøgle. [Silence] >> Yeah. [Støj fra crowd] >> David: På dette punkt i algoritmen skal opløses ned. [Støj fra crowd] Måske skulle vi have gået med min tilgang alligevel. >> 43. >> 163. >> David: Ooh aritmetiske foran 300 plus mennesker. [Latter] Hvad er vores endelige stemme overens vil være? >> 180. [Latter] >> 1.200. >> 386. >> David: 386, og er du den sidste stående? Er det alle? Kender du svaret? >> Hvad? >> David: Ved du hvad svaret er? Vi har ikke bringe et svar nøgle med os så, 386 er faktisk netop det rigtige svar for første gang. [Hepper] [Bifald] Det er okay. [Bifald] Meget, meget pænt gjort. Så hvad var det takeaway, fordi det helt sikkert var lidt langsommere end min meget enkle, men alligevel meget korrekte fremgangsmåde bare onesies og twosies og bare få det gjort med fra venstre mod højre. Men hvad gjorde vi egentlig bare gøre der? Nå, hvis der var groft, lad os sige, 400 af jer stående på et tidspunkt, og så det halve af jer, meget hurtigt, efter hvad jeg kunne fortælle, ville sidde ned. Så halvdelen af du sad ned, gik vi fra 400 til 200 så til 100 derefter til 50 derefter til 25. Så igen, er der den samme del og hersk idé vi havde med i telefonbogen. Igen, hvor hver iteration vi halveret størrelsen af problemet, vi halveret det, vi halveret det. Så i teorien skulle din algoritme har været meget hurtigere end min lineære tilgang, fordi min tilgang ville har taget sige 400 trin eller måske hvis jeg er lidt klog 200 trin. Men ville din har taget langt færre, lige fra 400 til 200, 100, 50, 25, 13, seks, så færre end ti skridt i den sidste ende over for min 200 eller 400. Og der er kimen til en virkelig interessant idé. Og ja, matematisk, hvad du netop gjorde, var noget, der er en lille logaritmisk i naturen ved log base to, vi delt i to og to igen. Og vi vil vende tilbage til dette senere i dette semester. Men deri ligger igen en meget intelligent gennemførelse. Og er vi bare ridse overfladen af de meget kloge de meget intelligent effektive metoder til problemer, som vi i sidste ende kan løse. Så der er mennesker, du lige snakkede med, hvis kort? En fælles interesse i et kursus som dette er, at alle til venstre for dig og alle til højre for dig, skal det tydeligt vide mere end dig. Nå, det er absolut ikke tilfældet. Og i virkeligheden, i de seneste år har dette kursus gjort en samordnet indsats for at nå ud til de mindre behagelige, så at sige. Og ved at sige, at vi ikke folk, der aldrig har rørt en computer før, fordi det er virkelig svært at finde rundt her i disse dage, men folk, der bruger e-mail, så brug Facebook, måske endda lige nu, men er ikke nødvendigvis helt sikker på hvad man skal gøre, når noget går galt, eller når de bliver spurgt om noget teknologisk, du kender, hænder gå op, eller de slags skubbe hardware til en ven, der måske mere bevandret i det, end de. Nå, dette er nogle statistikker fra sidste års semester. Så når du bliver spurgt, da vi spurgte vores 400 så studerende sidste år, ved du, hvad er dit niveau af komfort, der kommer i denne klasse, samt 34% skrev sig ned som blandt de mindre behagelige. Så hvis du er kommet ind i dette rum og er stadig tænker nu, at du ved, hvad dette begreb mindre komfortable beskriver mig, ved, at du er i meget godt selskab. Men indse også, at hvis du kommer i dette kursus med en baggrund i datalogi, og du virkelig var så nørd i midt skole og gymnasium, der var at skrive kode og undervisning selv sprog, og det er også fint, fordi der er helt sikkert en nontrivial mellemstore publikum med denne baggrund så godt, omkring 13%, sidste valgperiode. Og så er der alle de andre, en slags person, der ikke tror, de er mindre komfortable, de absolut ikke tror, de er mere komfortable, men de er bare i et kursus for at få noget ud af det. Så klar over dette kursus ikke trække helt spektrum af studerende. Og at sætte dette i mere konkret 71% af de studerende, sidste år, havde nul kurser bag sig. Så hvis du angiver dette kursus tænker åh alle, der tager CS50 var en computer science whiz i gymnasiet, er det ikke tilfældet. De fleste mennesker er formentlig blot er interesseret i det. Og et par, ja, absolut har taget nogle kurser, nogle eller mindst én person sidste år havde taget fem kurser tidligere. Så vi helt sikkert have nogle outliers men igen kødet af kurven er i disse lavere værdier helt. Og en anden interessant statistik vi delte i de seneste par år er de kønsbestemte forhold. Så historisk, i det mindste i datalogi, er der lidt af en mandlig kvindelig skew. Jeg par år siden var det meget mere markant end sidste år. Så vi er næsten nu på 40% niveau. Og hvis jeg kan kaste ned en spidsrod blot for at faae tredjedel cirkeldiagram næste år, det er endnu mere retfærdig. Jeg vil påpege, at der er absolut ingen grund fra kurserne perspektiv, at mænd og kvinder ikke bør indskrive i denne form for kursus. I forholdsvis lige mange og indse at 38 procent, 48 procent, men vi er faktisk ret glad for at se, at vi er næsten ved at i hvert fald statistisk selv værdien på 50%. Så hvis du er i virkeligheden kvinder, gør resten forsikre for, at dette ikke er i virkeligheden en mandsdomineret klasse. Nå, det bare så sker for at være CS50's 20 års fødselsdag. I godt tak. [Hepper] [Bifald] Det er meget pænt af dig, fordi vi bragte kage til du faktisk. Og så, når du forlader her senere i dag, vil du faktisk får en mulighed for at møde mange af de kurser, undervisning karle, der vil være langvarig i gangen. Og ja det bliver en dejlig slags anspores måde at møde undervisningen stipendiater. Men vi tager en tur op til en lille bageri og igen i overensstemmelse med forløbet er legende karakter, mens alligevel forventer nontrivial mængde arbejde, mens vi har det sjove. Men vi har en af disse kager for dig. [Latter] Så hvis du griner man rent faktisk godt, fordi selvom du blandt en af de mindre behagelige i det mindste du er opmærksom på det. De af jer, i de 14 procent vil foretrække denne smag. [Latter] Og så, hvis du ikke ved, hvad fanden der foregår lige nu, har vi også dette til resten af jer. [Hepper] [Bifald] Så er dem, der hakkes i stykker udenfor, som vi taler. Så igen, lad os tage tingene op et hak, og mindst indføre nogle grundlæggende forpagter, at vi så vil tage for givet i de resterende af dette halvår. Så vi alle ved sikkert, at computere i sidste ende koges ned eller anden måde at nuller og ettaller, disse ting kaldet bits. Hvad betyder det? Nå du kan tænke på det ærlig talt som en pære, en smule er en pære, der er enten på eller den er slukket. Det er en switch, er det enten på eller den er slukket. Nu dataloger generelt tænker på sluk som tallet nul vilkårligt og, og begrebet om som én. Så hvis du kaster en lyskontakt på det er en slukke den, der er et nul. Eller, ækvivalent, tænde lyset, der er værdien af ægte slukke for den, der er værdien af falske. Så det er blot synonymer. I slutningen af dagen, ja, alle beregning, alle ting, der går på undersiden af emhætten i en computer omfatter i sidste ende koges ned til nuller og ettaller. Og når du holder op med at tænke over det, er det temmelig dæmningen bemærkelsesværdige, hvad verden har gjort med disse grundlæggende byggesten, herunder nogle af de enheder, du holder i hånden. Nå, hvorfor er nuller og ettaller nyttig? Min Gud, selv i den virkelige verden, vi i det mindste har ti cifre, nul gennem ni. Hvorfor så begrænset? Nå i hardware form det er meget nemt. Det er meget lettere at repræsentere to stater, til højre. Hvis computere er sluttet til væggen, som regel, du har denne let kilde til binære karakter. Det er enten tændt eller slukket. El er flyder eller er det ikke. Så det er sådan en af de oprindelige årsager til, at verden gik med bare nuller og ettaller i computere. Men kan du bruge dem som byggesten. Så det egentlig er lidt lille på skærmen her, men vi kan regne i binær eller vi kan repræsentere noget vi ønsker i binær ligesom vi kan sige, decimal, ligesom vi kan, selv i virkeligheden med alfabetisk bogstaver. Og så, her er den hurtige system. På bare et par minutter, vil du nu vide, hvordan man tælle, hvordan man skriver, hvordan man taler binær meget gerne din egen bærbare computer. Nå, du har, i verden af binære, en slags ligesom grade skole kolonner eller værdier. Så i lønklasse skolen lærer vi dette er dem kolonne dette er titusinder kolonne, de hundreder kolonnen og så videre. Med andre ord, hvorfor er det tal, vi kender som 123 antallet 123? Nå, min lærer lærte mig det er dem kolonne, dette var titusinder, det var hundreder. Nå, hvad gjorde det betyde? Nå, for at finde ud af, hvad den samlede værdi er, hvad der er ellers streng af cifre, bare hash mærker på bord. Nå, vi har en 100, så det er 1 gange 100 og derefter plus hvad to 10's, så det er 2 gange 10 plus tre dem, så det er 3 gange 1, okay, så jeg synes at have fået tilbage, hvor jeg startede. Men denne meget enkel proces for bare at gange cifre med værdien af kolonnen er præcis, hvad binære handler om. Men i binær du bruge beføjelser to ikke beføjelser ti. Så her er en serie på otte glødepærer. Dataloger gerne bruge værdier som to og otte, 16 og 24 og 32, fordi de er alle alment praktisk værdier til brug. Så når vi taler om otte værdier i rækkefølge dette er som kaldes byte. Og i disse dage vi sjældent taler bare bytes, vi taler megabyte gigabyte og terabyte disse dage. Men det hele er i sidste ende det samme. Her er otte bits AKA én byte, simpel jargon. Så alle disse pærer er slukket. Så math er faktisk virkelig nemt. Så der til højre, selvom det er små til at se, er det ens kolonne, to og to, den fours, ottere, den 16s, 32s, 64s, 128s. Okay, måske er det svært at huske i starten, men det er bare ganget med to fra højre til venstre. Så kan du altid genskabe denne. Nå, de er allesammen så det er 0 gange pladsholder, 0 gange pladsholder. Så det er tallet 0 er repræsenteret i binær. Med andre ord, hvordan kan du skrive nummeret vi kender som 0 i binær? Nå, en, to, tre, fire, fem, seks, syv, otte, og teknisk set ligesom i decimal, alle disse nuller, de ikke tilføjer noget til formlen de er der bare, fordi vi vilkårligt besluttede vi ønsker otte af disse ting i en række, til højre. Hvis de er fysiske objekter, vi har otte, så de har fået alle være slukket. Så kunne vi lige har sluppet af sted med et nul. Men hvordan kan du repræsenterer nummer et? Nå, instinktivt du vil smide en af switches. Du kommer til at tænde en pære på. Så der er nummer et, fordi vi nu sat en en, en pære, der er på, i den ene stilling. Hvordan skal vi til at repræsentere to? Nå, vi rent faktisk kommer til at smide to afbrydere nu mindst versus denne tilstand, vi er nødt til at tænde de to klumme slukke dem kolonne og nu har vi værdien af en i toere kolonne. Så det er den samlede værdi af to. Nu, en hurtig mental øvelse, hvad der vil ske med den næste sekvens? Hvordan kan jeg præsentere nummer tre? Nå, jeg skal have fra toere kolonne, en fra træerne kolonne og ah ha. Så nu har jeg forøges, at en. Og nu, denne samme grundlæggende mønster gentager. Hvad er nummer fire? Jamen så lad os se, jeg skal bare have en en i fours kolonne og derefter nuller i toere og ettaller. Altsaa, det fortsætter på den måde. Og det er netop denne sekvens af trin. Og i begrebet binær er virkelig ikke så kompliceret. På toppen er der vi har otte nuller. Nedenfor, at vi har syv nuller og et. Nedenfor at vi har seks nuller, en en, og et nul, og det er binær. 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. [Musik] >> 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. [Bifald] ==== Transcribed by Automatic Sync Technologies ====