>> David: Välkommen, mitt namn är David Malan och det är CS50. Och, detta är inte din typisk high school datavetenskap kurs. Denna kurs är en liten något speciellt. Och det är inte för att jag är undervisning det. det är för att det är en av, vi vill gärna tro, de få kurser som faktiskt pressar hjärnan så mycket och schemat så mycket att av terminen slut du verkligen känner smartare. Så, det var så jag kände när jag själv tog den här kursen redan 1996. Jag var en regering viktig vid tiden här som bor i Mather House. Och I. [Cheering] Som de andra, de fem andra där. Så var jag en regering stor på den tiden. Och jag var en regering stor för jag hade alltid gillat historia. Jag tyckte om grundlagen på gymnasiet. Och så skall jag iväg på denna väg freshmen år gör det jag gör bäst, gör det jag visste att jag gillade. Och jag alltid hade varit lite av en nörd, skulle jag alltid babbled med datorer. Men jag själv, kanske ironiskt nog i efterhand hade jag alltid sett killarna som tog datavetenskap i min skola, mina vänner som de verkliga töntarna. Och ändå, till slut gjorde, andra år tar jag den här lilla kursen kallas CS50 som faktiskt hade skrämt bort mig min egen första år. Och jag var en användare assistent vid den tidpunkten. Så, jag var ju redan kvalificerade, åtminstone, att vara bland dem, de nördar som jag gjorde narr av på gymnasiet. Men, jag var rädd. Det finns, hade detta rykte på den tiden och kanske fortfarande en del att det var en, det var en skrämmande kurs. Det var en hel del arbete. Det var svårt och ändå är det en av de saker där, min Gud, var det bark långt sämre än sina bett. Jag fann mig själv andra år, för första gången, faktiskt hitta läxor roligt. Och Jag säger inte detta bara för att beck här kursen för dig. detta var en verklig insikt för mig. Nu tror jag på en punkt, jag passerar över linjen till sanna geekdum där jag faktiskt används för att se fram emot fredag natt eftersom jag kunde krypa ner framför min lilla MacBook och arbetet med CS50: s problem set. Så, vid den punkten, jag tror jag helt klart hade passera linjen. Och är vårt mål i denna kurs inte vända er alla till den personen, men bara säga att det finns en liten något speciellt med denna kurs, ett litet något speciellt med datavetenskap i allmänhet i synnerhet i dessa dagar. Och ju mer acklimatiserad vi alla har fått in tekniken, desto mer leksaker vi bär omkring i våra fickor som själva datorerna. Jag menar, är min iPhone faktiskt ett högre resultat dator än min laptop gick på college. Du kan göra en hel del fina saker med dessa saker. Och nu, de flesta av oss i detta rum, förmodligen bara använda andras program, andras verktyg, andras lösningar på problem, eftersom vi går till iTunes, hämta vi några app från App Store och walla vi kan göra något riktigt snyggt. Men i slutet av denna termin, kan du vara den person som gör att problemlösning. Du kan vara den person att lösa vissa problem, byggnad app, som mjukvara, det verktyg som, antingen en bara roar mig, roar dig. till exempel kontrollera, säger, iTunes-biblioteket från din lägenhet klart en app som redan finns eller kan du hitta skytteltrafik scheman lättare till exempel. Så i själva verket ett av de allra första sakerna jag gjorde efter att ha tagit CS50 var återigen var det troligen vid denna tidpunkt fredagskvällarna och lördagskvällarna var det denna möjlighet vid tidpunkten då Harvard körde buss. Och i dag, uppvisar de tryckta tidtabeller. Men, det var verkligen inte alls på nätet att ta reda på när nästa shuttle var. Nu har jag inte vård, för även om jag bodde i Mather Jag var inte bland dem som i allmänhet tog shuttle. Men, jag hade många vänner i Pfoho till exempel. Och en av dem frågade mig, tror jag in på en punkt. [Cheering] Okej Pfoho är bättre än Mather tydligen. Så, fick en av mina vänner typ av mig att tänka kanske jag kan skriva ett litet program för slags hjälp mina vänner kolla shuttle scheman. Och så föddes tafatt heter transfer pojke, denna del av lexikonet som har bott med ett tag sedan flera år minst bland några av de upperclassmen. Vid tidpunkten var detta den lilla kommandorad program i samma anda som Dos. Det var som körs i en realistisk miljö. Så var det inte särskilt sexigt alls. Du skrev bara ett par kommandon och anvisningar när pendeltågen var. Ja, dessa dagar är det lite mer sofistikerade. Och det är faktiskt representerad av just de typer av projekt som studenterna i denna kurs slut att ändå göra med termer slut. Så detta är version fyra, ungefär 15 år senare, av Shuttleboy. Verkar Google Maps är lite långsam där. Men för de av er som måste komma härifrån efter klass och gå, säga från Memorial Hall och behöver gå upp till, säg, Quad. Tja, kan du lämna antingen i två minuter om av, det verkligen inte fungerar för dig ännu, eller om du har så många andra alternativ som du kanske gillar. Och kommer snart, kan vi pitch detta från CS50 kommer det vara samma förmåga genom SMS. Du kan text Shuttleboy via telefon. Kallar du Shuttleboy. CS50 telefonnummer i år, bra, fantastiskt detta var tillgänglig, 617-BUG-CS50. Så kommer det debut snart. Så kallar inte det riktigt ännu, eftersom jag har fått en reprimand för, just nu är det som kopplas till vårt system chef undervisning stipendiatens mobiltelefon. Så får du bara honom om du har frågor om shuttle schemat nu. Men, som snart kommer att genomföras. Så andra saker, faktiskt, att vi själva tillbringade sommaren på riktigt inför den här terminen var en hel massa andra problem som vi ville lösa. Till exempel finns det en hel massa saker som pågår i denna campus en viss dag. Och faktiskt, annorlunda uttryckt, det finns en hel del grejer på gång på detta campus att jag verkligen aldrig dra fördel av. Och även om jag nu är överväldigad med hur många saker som händer, på campus, jag fortfarande verkar aldrig hitta tid. Men, walla, även där CS50 föredrag. Det är där du är, så detta var ett var detta ett program skrev vi att slå samman alla händelser på campus. Och detta har något som andra studenter i samma kurs har tagit itu med på egen hand. Och har vi samarbete med andra enheter på högskolan för att verkligen göra detta möjligt. Men det pekar på CS50 detta begrepp är att alla dessa små program som vi har jobbat på huruvida detta en eller om en för sammanläggning av alla på Harvard nyheter på ett ställe, alla Google News, är alla dessa saker kommer att få vad kallas API, Application Programming Interfaces. Och detta är bara inbillning talar för förmågan att låta andra människor, människor i detta rum, faktiskt gör någonting med samma uppgifter. Så, med uttryck slut, om man beslutar genomföra den slutgiltiga projekt som gäller nyheter eller händelser eller kartor, väl vi, åtminstone som en kurs, kommer att göra att alla lättare i år att ge dig ett gränssnitt, ett slags funktion, så att säga programvara som du kan använda i dina egna projekt att gå utöver där studenter, kanske, har gått förr, eftersom denna ram inte har funnits för dem. Och igen, började allt detta, för mig åtminstone, några 15 år sedan genomföra Shuttleboy. Jag mailade då min vän Ken i Pfoho. Jag sa hej vad tycker ni? Är detta bra? Han skickade ut det på Pfoho öppna listan och Walla, alla dessa år senare Jag är uppenbarligen fortfarande mjölka detta projekt. Och snygg sak om det, och det är också en kurs som denna inom teknik och datavetenskap, tycker jag är lite speciell, är att när du gör ditt hem fungerar och när du gör dina projekt i denna kurs får du vet, många av dem, ja, du lägga åt sidan och inte riktigt använda igen. Men en del av den kommer du. Och det finns det verkligen mäktig sak, åtminstone för mig, detta är verkligen spännande sak, när du gör något och andra människor egentligen söker, gör andra människor inte bara att le och klappa er på axeln och sedan sorts gå om sina egna liv. De använder faktiskt vad du gjorde i sitt eget liv även om det är för något så dumt eller så enkelt som att bara hitta när de kan komma härifrån för att fånga nästa shuttle till Quad. Så, med uttryck slut, det är ett av målen för denna kurs, för att ge er att bara identifiera några problem vare sig det är på campus eller förhoppningsvis långt utanför campus, och faktiskt använda dina egna kunskaper, ditt eget sinne och lösa detta problem i vissa sidan, tekniskt. Så detta är också en kurs som vi säger i den kursplan och de kurser officiella beskrivningen som lär dig att tänka och det lär dig hur du löser problem mer effektivt. Nå, vad betyder det? Jo, när du har 600 megahertz i fickan eller tre gigahertz under skrivbordet hemma, kan du lösa en massa problem effektivt genom att bara klippa rå kraft. Men, det finns en massa problem här i världen, oavsett om den söker, säger Facebook: s nätverk eller Internet via Google, att det spelar ingen roll hur snabb din dator är, finns det inget sätt i helvete du ska söka miljarder webbsidor snabbt om du inte verkligen närma sig detta problem intelligent. Du inte bara söka, till exempel en enorm lista över alla webbsidor på jorden från toppen till botten letar efter något som rör oavsett sökord du letar efter förhoppningsvis Google och förmodligen Google och Facebook och något av dessa stora enheter har en massa smarta människor att tänka på hur de kan hitta data snabbare, hur de kan processa information mer effektivt, och hur de kan bara i allmänhet ger resultat snabbare så att du kan göra ännu mer intressanta saker med dessa enheter. Och så, vad menar vi dock av hur, undervisning människor att tänka mer noggrant, mer algoritmiskt. Tja, verkar denna lilla visuella alltid gå igenom bra. Och, verkar det vara minnesvärd. Och jag var ens frågat mig i går av en tidigare student, är oh du göra telefonboken sak igen. Och jag ganska mycket på plats beslutade okej säker på att vi ska bygga upp en telefonbok sak. Och han frågade mig när du slet den i halv rätt, var jag väl ja tekniskt vi slet den i två halvor, men inte i vägen, i datavetenskap sätt kommer jag att kunna riva den här saken i halv. Och så här blev det problem som vi presenterade för en tid. Så, här är telefonboken. Det har fått minst ett tusental sidor. Och den enkla mål på sidan mycket verkliga världen är att hitta, säger en person här inne. Så, Mike Smith, efternamn som börjar med S. Så, jag är en typisk mänsklig, plocka jag upp den här telefonbok. Och någon där ute, vad skulle du, en typisk person göra för att börja hitta Mike Smith, naturligtvis inte veta i förväg vilken sida han egentligen på. Rätt, så man går ungefär i mitten, höger. Och på denna punkt i berättelsen, jag är nog i N: s eller M: s, du vet, ungefär halvvägs igenom telefonboken. Det visade sig, sista gången jag gjorde det här exemplet jag på något sätt hittade mig själv i eskorten avsnitt. Så, det är faktiskt inte lika fördelade mellan A till M och N genom Z. Men i dag är vi i själva verket i M: s, okej så, nu är jag på M's. Men vad är min takeaway nu precis som en normal människa ut på gatan? Var kan jag nästa för Mike Smith. [Ohörbart] Och bara så förmodligen på denna halv, höger, eftersom S kommer efter M. Och så, häri ligger den visuella dramat. Det är egentligen inte riva den på mitten, höger. Jag typ av lurade ner centrum. Men vet vi nu att Mike är åtminstone inte i den halv. Vi kan bokstavligt talat kasta hälften av problemet borta. Och jag är kvar med problemet att i grunden fortfarande samma sak, hitta Mike Smith i en riktigt stor bok. Men, problemet är nu hälften så stor. Om den hade ett tusen sidor innan, nu är det jag 500. Vet du vad, jag kan göra samma sak igen. Jag kan slags rekursivt eller upprepade gånger göra samma sak. Nu är jag inte riktigt på S. Jag är på T. Och så, åh jag blev lite för långt. Men jag vet nu att Mike är inte till höger, det kommer det att bli några klass en dag där jag bara inte kan riva dammen sak, jag slår vad. Men nu, jag vet han inte till höger. Så, nu problemet har inkvarterats. Så har jag gått från tusen till 500 till 250 sidor. Och igen, om du fortsätter logiken, fortsätta matematik, jag hugga problemet i halv i halv i halv ända tills jag antingen ska inte finna någon Smiths alls osannolikt, eller jag ska hitta en som jag letar efter. Men att sedan, väcker frågan, är detta något bättre än den enkla metoden för att bara säga, vet du A, nope, B, nej, från vänster till höger som går linjärt igenom boken? Ja, instinktivt ja. Det kommer att bli en betydligt snabbare. Men hur mycket mindre? Tja, om jag har tusen boksida telefon eller låt oss säga 1.024 för dig som gillar befogenheter två, hur många tid skulle jag dela detta problem i halv innan man hittar Mr Smith? >> Tio. >> David: Så, tio till höger. Om du har 1.024 sidor och du dela dem på mitten, på mitten, på mitten, på mitten, gör jag att tio gånger vilket betyder att jag går från 1.000 sidor till den person jag söker på bara tio sidor varv. Och det är ganska snyggt, men, du vet, om man tänker på det du gjort allt detta av ditt liv. Det är inte så dramatisk. Men nu, att telefonboken är inte bara för Boston, det är för hela USA och hela världen och det här har miljarder sidor i den, så föreställa en telefonbok med fyra miljarder sidor. Hur många Sidan vänder ska jag göra maximalt för att hitta Mike Smith i en fyra miljarder sida telefonbok? >> Logga bas två. >> David: Så ja, om du är typen av matten typ detta är loggen bas två. Men om du tror 4-2000000000 to en miljard så en halv miljard. Jag menar, det går faktiskt whittles sig ner ganska darn fort. I själva verket med 32 halvings i telefonboken även från fyra miljarder, jag får ner till en sida. Och det är då det här blir kraftfull, tycker jag. Det är när dessa idéer blir tvingande när du kan få en fyra miljarder sida problemet och i 32 steg som du kan hitta den person du söker. Och så, det är vad vi menar när vi säger att du lär dig att tänka mer noggrant, mer algoritmiskt mer intelligent om att lösa problem. Och avkastningen är enorma när du faktiskt kan göra detta, och igen, denna punkt i Googles av världen Facebooks som har lyxen att ha stora datamängder. Du måste närma sig dessa problem på detta sätt annars är det helt enkelt inte gå till jobbet. Nå, vad är vad gjorde den studerande verkligen minns? Jag, liksom vi göra saker som är lite dum ibland slags ta udden av det som annars en hel del nytt material. Och så, han faktiskt skickade detta fd elev mig den här länken som jag gick framåt, bara för sparkar och sedan ångrade sig i slutet, drog upp på utube här. Så, jag trodde jag skulle dela med en icke-datavetare menar när han tårar en telefonbok i hälften. [Skratt] [Tystnad] [Ohörbart] >> Du vet mer än 200 sidor, fin ren linje, legitima tår. [Skratt] >> David: så, antar jag, arbetar sin väg också. Så, vad jag fick ut av denna kurs för många år sedan är ja, Shuttleboy och sedan ja en examen i datavetenskap, och sedan ja en doktorsexamen i datavetenskap. Och det är inte vad vi försöker vända de flesta elever i denna kurs till. De flesta av er i den här kursen kommer inte att gå på en större i datavetenskap. Några av er kanske mindre, men för vissa av er kommer att bli en terminal kurs. Och det är väl bra, eftersom denna kurs är i själva verket struktureras på ett sätt där även om du bara betala dina skulder i flera månader och du verkligen fokusera på och du verkligen ta så mycket ur kursen som du kan, kommer du, i Faktum är att vara väl rustade att gå tillbaka till din värld av ekonomi, biologi, psykologi, tillämpad matematik, och faktiskt använda sig av det som i slutändan så intressant en kurs som vi hoppas att begreppsmässigt, eftersom det i grunden är praktisk. Och det är för något som kanske lite ovanligt att hitta. Jag trodde att jag skulle dela några kommentarer som studenter från i höstas placeras i senaste åren kö av när de får frågan vad skulle du vilja säga till blivande studenter. Tja, om du inte redan har besökt dessa synpunkter, sade en student den här kursen kommer att ta rätt mycket din tid upp. men om du lägger ditt arbete i en helt ny värld, en hel, om du sätter arbetet, om du sätter in arbetet i, okej, så detta är hans grammatik inte min, så om du sätter, sätta i arbetet, en helt ny värld öppnas för dig. Amazing hur mycket jag lärde mig i bara 12 veckor. En annan student skrev, du bättre ta detta eller du kommer att ångra det. En annan skrev, lite mer rakt på sak, kommer det att spöa skiten ur dig och lämnar dig må bra. Och slutligen är detta en kanske något jag kan bara visa skriftligen, men andra från botten här. [Skratt] Så, jag är inte säker på om du har många vänner som tog den här kursen, men vi slags gjorde en hel del skador på förra årets studenter. Vi introducerade i början, föreläsningar flera, några frågesporter, ett par problem set, detta begreppet lolcats. Du kan inte se vad jag kan se här men i ett ögonblick kommer du att se en ung man vid namn lycklig katt som är ledare för den så kallade lolcat. Detta är en av de dumma internet framåt som jag tror uppriktigt sagt dikotomin mellan dessa två herrar här och vad vi nu har på skärmen är kanske. [Skratt] En av de mest olämpliga användningar av denna teater hittills. Och, varför inte vi göra en lite mer verklig en lite mer personlig denna idé att faktiskt lösa ett problem mer effektivt. Ett enkelt problem på dag ett av en skola är att sitta ner eller stå upp och börja räkna de studenter, rätt namnupprop av slag. Tja, det mest naiva men ändå, mycket korrekt tillvägagångssätt som en lärare kan ta är ett, två, tre, fyra, fem, sex, sju, och vi skulle vara här ganska länge. Så, vad är en marginell förbättring på detta med att du kan ha gjort som barn? Hur räknar du folk snabbare? Och börjar inte läsa av mina egna anvisningar? Vad skulle du ha gjort som barn? Börja räkna tvåor, rätt, som så jag är ganska bra på två, fyra, sex, åtta, tio, 12. Så det är något intressant rätt. Så, hur mycket av en förbättring är att det? Så det är givetvis en faktor två. Det tar mig hälften så mycket tid. Men, vet du vad, som vi hittar i hela den här terminen, stor affär, som snabbar upp din speltid med bara en faktor två är inte så intressant eftersom den analoga här i datavärlden är att jag är en CPU Jag är en dator, väl fan, om jag bara vänta 12 månader, 18 månader, jag datorn kommer bara att kunna av naturen, med antalet gigahertz jag har i mig att kunna räkna människor i det här rummet snabbare. Så här typen av, är dessa typer av linjära uppsnabbat som faktor två tre gånger, till och med faktor tio, vem bryr sig? Visst, kan vi kasta hårdvara på problemet. Vi kan vänta ut saker och ting. Vi kan utveckla snabbare maskiner. Men, intellektuellt, ja det var ganska smart, men det inte riktigt att förändra problemet. Jag är fortfarande från vänster till höger, framifrån och bakåt. Det är verkligen samma algoritm. Men, erbjuder jag att vi kan göra bättre. Vi kan göra smartare än så och göra grunden ett snabbare genomförande. Men, som visar detta, behöver vi er att humor oss för bara ett ögonblick. Och det är här som det ska vara jag pratar mindre och du pratar mer. Men jag måste du utföra steg ett tillsammans, vilket är om du skulle humor oss, vänligen stå upp. Anvisningarna här på forumet, vet att du är, okej, ett par av er har att sitta ner. De av er i ryggen, där vi går, okej. Tack. Så är programmet här inför er. Ni är nu datorer verkställande detta program. Det är ganska självförklarande på denna punkt. Ja, bör du vara nummer ett. Skaffa det? Visst, många av er tänker säkert detta redan i alla fall, första första år. Så, tänk dig själv, du är nummer ett. Så, steg tre här, par av med någon som står, lägg till din två nummer tillsammans och anta den summan som ditt nya nummer så gör vi en förståndet check. [Ljud från publiken] Vet du hur många vi har? >> [Ohörbart] >> Ingen [ohörbart]. >> Vi måste ha en svarsknapp. [Tystnad] >> Ja. [Ljud från publiken] >> David: Nu kommer algoritmen bör avveckla. [Ljud från publiken] Vi kanske borde ha gått med min inställning trots allt. >> 43. >> 163. >> David: Ooh aritmetiska framför 300 plus personer. [Skratt] Det är vår sista stämmer överens kommer att bli? >> 180. [Skratt] >> 1.200. >> 386. >> David: 386, och är du den sista stående? Är det alla? Vet du svaret? >> Vad? >> David: Vet du vad svaret är? Vi har inte sätta ett svar nyckel med oss så, 386 är faktiskt exakt rätt svar för första gången. [Cheering] [Applåder] Det är okej. [Applåder] Mycket, mycket bra gjort. Så, vad var det takeaway eftersom det definitivt kändes lite långsammare än min mycket enkel, men ändå väldigt rätt inställning för att bara gå onesies och twosies och bara få det gjort med från vänster till höger. Men vad gjorde vi egentligen bara göra där? Tja, om det fanns ungefär, låt oss säga 400 av er stod vid en punkt, och sedan hälften av er mycket snabbt, från vad jag kunde säga, ville sitta ner. Så satt hälften av er ner, vi gick från 400 till 200 sedan 100 sedan 50 sedan till 25. Så återigen, det är samma söndra och härska idé vi hade med i telefonboken. Återigen, med varje iteration vi halverat storleken på problemet, halverade vi den, halverade vi den. Så i teorin borde din algoritm har varit mycket snabbare än min linjär metod eftersom min strategi skulle tagit säga 400 steg eller kanske om jag är lite smart 200 steg. Men skulle din har tagit mycket färre, rätt från 400 till 200, 100, 50, 25, 13, sex, så färre än tio steg till slut mot min 200 eller 400. Och det finns fröet till en mycket intressant idé. Och ja, matematiskt vad du just gjorde var något som en liten logaritmisk i naturen med hjälp av log basen två, delade vi på två och två igen. Och vi ska återkomma till denna senare i denna termin. Men däri ligger återigen en mycket intelligent genomförande. Och är vi skrapa bara ytan av mycket smart de mycket intelligenta effektiva strategier för problem som vi i slutändan kan lösa. Så, vem är de personer du bara chattat med om kortfattat? Ett gemensamt problem i en kurs som denna är att alla till vänster om dig och alla till höger om du måste tydligt veta mer än du. Tja, det är absolut inte fallet. Och faktiskt, på senare år har detta naturligtvis gjort en gemensam insats för att nå ut till de mindre bekväma, så att säga. Och med detta menar vi inte att människor som aldrig rört en dator innan eftersom det är verkligen svårt att hitta runt här i dessa dagar, men folk som använder e-post, använda Facebook, kanske just nu men är inte nödvändigtvis helt säker på vad man gör när något går fel eller när de tillfrågas om något tekniskt, du vet, händerna gå upp eller de slags tryck på hårdvara till en vän som är kanske mer insatt i det än de. Tja, detta är lite statistik från förra årets termin. Så, när frågade, när vi frågade våra 400 så studenter förra året, ni vet, vad är din nivå av komfort kommer i denna klass, skrev väl 34% ned sig som bland de mindre bekväma. Så om du har kommit in i detta rum och fortfarande tänker nu, att du vet vad detta begrepp mindre bekväma beskriver mig, vet att ni är i mycket gott sällskap. Men inser också att om du kommer i denna kurs med en bakgrund inom datavetenskap och du var verkligen att nörd i högstadiet och gymnasiet som skrev koden och er språkundervisning, väl det också bra eftersom det är definitivt en icke-triviala stora publiken med den bakgrunden också, cirka 13%, föregående termin. Och så finns det alla andra slags någon som inte tycker att de är mindre bekväma, de definitivt inte tror att de är mer bekväma men de är bara en kurs för att få ut något av det. Så inser denna kurs drar helt spektrum av studenter. Och att sätta detta i mer konkreta termer, 71% av eleverna, förra året hade noll kurser bakom sig. Så om du skriver in denna kurs tänker oh alla som tar CS50 var ett datavetenskap susa i skolan inte, det är så. De flesta människor är förmodligen bara intresserad av det. Och några, ja, absolut har tagit några kurser, en del, eller åtminstone en person som förra året hade tagit fem kurser tidigare. Så vi har definitivt några avvikare men återigen köttet av kurvan är i de lägre värden helt och hållet. Och annan intressant statistik vi delade under de senaste åren är kön förhållandet. Så, historiskt sett, åtminstone i datavetenskap, det är lite av en man kvinna skeva. Jag par år sedan det var mycket mer märkbar än förra året. Så vi nästan nu på% 40 nivån. Och om jag kan kasta ner ett gatlopp bara för att i ha en tredje cirkeldiagram nästa år, det är ännu mer rättvis. Jag vill påpeka att det finns absolut ingen anledning från kurserna perspektiv som män och kvinnor inte bör anmäla sig till denna typ av kurs. I relativt lika många och inse att 38 procent, 48 procent, vi är faktiskt ganska glad att se att vi är nästan som, åtminstone, statistiskt även värde på 50%. Så, om du är i själva verket, kvinnlig, gör försäkra resten också att detta inte är i själva verket en mansdominerad klass. Tja, här händer bara så att CS50 20-årsdag. Jag, ja tack. [Cheering] [Applåder] Det var mycket snällt av er eftersom vi tog tårta för dig faktiskt. Och så, när du avslutar här senare i dag, du får faktiskt en chans att träffa många av kurserna undervisning stipendiater som kommer att dröja sig kvar i hallen. Och ja det ska vara en trevlig form av incitament sätt att möta den pedagogiska stipendiater. Men vi tar en tur upp till ett litet bageri och åter överensstämmer med kursen är lekfull karaktär medan ändå väntar triviala mycket arbete samtidigt som vi kan ha med det roliga. Men vi har en av dessa kakor för dig. [Skratt] Så, om du skrattar det är faktiskt bra för även om du är bland en av de mindre bekväma åtminstone du är medveten om det. De av er på 14 procent kanske föredrar denna smak. [Skratt] Och sedan, om du inte vet vad fan som pågår just nu, har vi också detta för resten av er. [Cheering] [Applåder] Så är de huggs upp i bitar utanför medan vi pratar. Så återigen, låt oss ta det upp ett pinnhål och åtminstone införa vissa grundläggande hyresgäst som vi sedan tar för givet i återstoden av denna termin. Så vi alla förmodligen vet att datorer slutligen koka ner något sätt nollor och ettor, kallad dessa saker bitar. Vad betyder det? Ja du kan tänka dig det, uppriktigt sagt som en glödlampa, är lite en lampa som är antingen på eller bär det i väg. Det är en switch, det är antingen på eller bär det i väg. Nu, dator forskare tror i allmänhet ut som siffran noll godtyckligt och, och begreppet om som en. Så, om du kastar en strömbrytare om det är en stänga av den som är en nolla. Eller ekvivalent, vrid ljus på som är värdet av sann stänga av den som är värdet av falska. Så, dessa är bara synonymer. I slutet av dagen, ja, alla beräkningar, alla saker som går på under huven i en dator gör i slutändan kokar ner till nollor och ettor. Och när du slutar tänka på det, det är ganska dammen anmärkningsvärt vad världen har gjort med dessa grundläggande byggstenar inklusive några av de enheter som du håller i din hand. Tja, varför är nollor och ettor användbart? Herregud, även i den verkliga världen vi åtminstone har tio siffror, noll till nio. Varför så begränsade? Väl i hårdvara sett är det väldigt enkelt. Det är mycket lättare att representera två stater, till höger. Om datorerna är ansluten till väggen, vanligtvis har du detta enkelt källa till binär karaktär. Det är antingen på eller av. El är rinnande eller är det inte. Så, det är typ av en av de ursprungliga orsakerna till att världen gick med bara nollor och ettor i datorer. Men kan du använda dem som byggstenar. Så detta är faktiskt lite mindre på skärmen här, men vi kan räkna med i binär eller vi kan representera allt vi vill i binär precis som vi kan säga, decimal, precis som vi kan, även i själva verket med alfabetiska bokstäver. Och så, här är snabbt system. På bara ett par minuters tid du nu vet hur man räknar, hur man skriver, hur man talar binär ungefär som din egen laptop. Tja, du, i en värld av binära, typ av precis grad skolan kolumner eller värden. Så, i lönegrad skolan lär vi oss detta är de som kolumnen detta är tiotals kolumnen hundratals kolumnen och så vidare. Med andra ord, varför är det antal vi känner som 123 numret 123? Tja, lärde min lärare mig är de som kolumnen detta var tiotals var detta hundra. Nå vad gjorde det? Tja, att lista ut vad det totala värdet av det som annars rad siffror, bara hash märken på bordet. Jo, vi har en 100, så det är 1 gånger 100 och sedan plus vad två 10's så det är 2 gånger 10 plus tre sådana, så det är 3 gånger 1, okej, så jag verkar ha fått tillbaka där jag började. Men, detta är mycket enkel process för att bara multiplicera siffror med värdet i kolumnen exakt vad binär handlar om. Men i binär du använda befogenheterna för två inte befogenheter tio. Så, här är en serie av åtta glödlampor. Datavetare gillar att använda värden som två och åtta och 16 samt 24 och 32 eftersom de är alla allmänt bekväm värden att använda. Så, när vi talar om åtta värden i sekvens detta är som kallas byte. Och i dessa dagar vi sällan pratar om bara byte talar vi megabyte gigabyte och terabyte dessa dagar. Men det är i slutändan samma sak. Här är åtta bitar AKA ett byte, bara enkel jargong. Så, alla dessa lampor är släckta. Så, matematik faktiskt riktigt enkelt. Så det till höger, men det är små för att se är en spalt, som uppvisade ett dåligt, de fyra, de åttor, det 16s, 32s, 64s, 128s. Okej, kanske är det svårt att memorera vid första men det är bara multiplicerat med två från höger till vänster. Så, kan du återskapa alltid detta. Tja, de är alla iväg så det är 0 gånger platshållare 0 gånger platshållare. Så detta är antalet 0 representerade i binär. Med andra ord, hur gör man hur många vi känner som 0 i binär? Jo, en, två, tre, fyra, fem, sex, sju, åtta, och tekniskt precis som i decimal, alla dessa nollor, lägger de inte något av den formel de är bara där eftersom vi bestämde godtyckligt vi vill åtta av dessa saker i rad, till höger. Om de är fysiska objekt, vi har åtta så de måste ju alla vara släckt. Så, kan vi just kommit undan med en nolla. Nå hur gör du representerar nummer ett? Tja, instinktivt du ska kasta en av växlar. Du kommer att vända en lampa på. Så det är antalet en eftersom vi nu lagt ett en, en lampa som är på, i en ställning. Hur ska vi representerar två? Tja, vi faktiskt kommer att kasta två växlar nu åtminstone jämfört med detta tillstånd måste vi sätta på två spalt stänga av dem kolumnen och nu har vi värdet av en i tvåor kolumnen. Så det är det totala värdet av två. Nu, en snabb mental övning, vad som kommer att hända med nästa sekvens? Hur presenterar jag antalet tre? Tja, jag behöver en från tvåorna kolumn, en från treor kolonnen och ah ha. Så, nu har jag ökas det en. Och nu, samma grundläggande mönster upprepas. Vad är det för nummer fyra? Nåväl låt oss se, jag behöver bara en en i fyror kolumnen och sedan nollor i tvåor och ettor. Alltså fortsätter det så. Och, det är bara denna sekvens av steg. Och i begreppet binär är verkligen inte så komplicerat. På toppen där har vi åtta nollor. Nedan att vi har sju nollor och en en. Nedan att vi har sex nollor, en ett och ett noll och det är binära. 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. [Skratt] >> 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. [Applåder] ==== Transcribed by Automatic Sync Technologies ====