[ACHTERGRONDGELUID] Werkt het? PATRICK REBESCHINI: We kunnen aan de slag. OK. Grote. Laten we beginnen. Dus het is mijn grootste plezier u allen van harte welkom hier vandaag voor de eerste lezing van, nou ja, Inleiding om Computing en programmering. Ook bekend als CS50 of goed, CPSC 100, officieel hier bij Yale. Dus we konden niet meer opgewonden om u allen hier van harte welkom. Mijn naam is Patrick Rebeschini. Ik ben het hoofd-instructeur voor de klas. Ik ben hier wat neerkomt op een groep van ongeveer 60 personeelsleden dat zal werken met u het hele semester. Dit aantal is bijna 60 van ons. Maar langs de buitengewone niveau van de vastleggingen dat we gestoken in dit klasse, maakt CS50 de klas aan de Yale University, dat biedt het hoogste niveau van ondersteuning aan jullie allen. En we konden niet meer trots op te zijn het aanbieden van deze klasse weer hier. In feite, zoals u zult al snel ervaren, CS50 is veel meer dan een klasse. Het is een gemeenschap. En maak je deel zijn binnenkort van deze gemeenschap. Dit is het tweede jaar dat Yale is het aanbieden van deze klasse. We bouwen voort op de extreme succes van vorig jaar, waarbij Voor de eerste keer, hier aan deze universiteit, undergraduate onderwijs assistent werden in klaslokalen aangenomen. Het begon allemaal met deze klasse vorig jaar. Dus zoals u weet, wordt de klas geleerd samen met Harvard University. Om deze cursus te leren we zijn relying-- we kunnen rekenen op de grote deskundigheid van David Malan en de Harvard-team. David is het onderwijs CS50 voor goed, 10 jaar nu. En elk jaar is hij het verleggen van grenzen en het verbeteren van de klas ervaring. Nogmaals, we konden niet meer om gelukkig te zijn zetten deze samenwerking ermee. In feite is een van de meest interessante delen, Ik zal zeggen van het runnen van deze klasse nu, zowel aan Harvard en hier bij Yale, is het echt ongelooflijk kruisbestuiving van ideeën, die gericht zijn op het verbeteren van de leerervaring aan u allen. Zodat ten gevolge van deze uitgebreide samenwerking tussen de twee universiteit, CS50 is er trots op kondigt de nieuwe versie van dit jaar met merkbare veranderingen. David zal ons alles vertellen over hen nu. Dus please-- dit wezen zei, dan kunt u samen met mij en van harte welkom om een ​​te geven groot applaus om David te verwelkomen en Harvard team hier bij Yale. [APPLAUS] DAVID MALAN: Dank je wel. Bedankt. Dit is CS50, Harvard University's en Yale University's introductie het intellectuele ondernemingen van de informatica en de kunst van het programmeren. En wat dat betekent is dat deze cursus Uiteindelijk, gaat over het oplossen van problemen. Inderdaad veel van jullie misschien hebben van de middelbare school komen of hebben de afgelopen paar jaar doorgebracht afvragen wat sommige van je vrienden vorig jaar of in andere klassen. En toch, de realiteit is, ongeacht wat we , aan het eind van de dag in deze klasse, het gaat worden over het oplossen van problemen. En als zodanig, misschien nemen wat geruststelling in het feit dat 73% van de studenten die neem deze klasse, zowel hier Yale en Harvard, hebben een CS klasse nooit eerder genomen. Dus als je hier zitten in het publiek vandaag af waarom je hier zit in het publiek vandaag, of misschien heb je net gevolgd samen met enkele vrienden, of misschien heb je al een weinig nieuwsgierig naar wat informatica en programmering, te realiseren dat de meeste van je klasgenoten aan Links en rechts van je zijn zeer in dezelfde demografische. En inderdaad, als we kijken vorig jaar de statistieken binnen de studenten van CS50, zowel hier en aan Harvard, 58% van de studenten omschrijven zichzelf als minder comfortabel. 9% is comfortabeler. En dan is 33% ligt ergens tussenin. En er is geen formele definitie wat deze emmers betekent. Je weet dat soort bent minder comfortabel als u bent. Je voelt een beetje ongemakkelijk met misschien zijn in de klas. Je bent niet helemaal zeker of een computer wetenschap klasse is uiteindelijk voor u, en beseffen dat je bent in zeer goed gezelschap. En inderdaad de indeling, en de beoordeling, en feedback, en dat alles steunstructuur in de klasse uiteindelijk zeer geïndividualiseerd. Meer nog dan de meeste elke andere klasse door het ontwerp. En inderdaad, wat uiteindelijk kwesties in deze klasse is niet zo veel waar je terecht up opzichte van anderen, maar waar je, in week 11 of laatste, en ten opzichte van jezelf in week 0 hier op onze eerste. Dus wat betekent dat? Nou, dit betekent dat van die 73% van de studenten vorig jaar dat nooit had genomen een CS klasse voor, door de start van het semester zij werden ploeteren in een taal genaamd Scratch, die onszelf zal hier vandaag te zien. En aan het eind van de semester waren ze verdwenen door deze hele lijst van uitdagingen. Beginnend met een taal genaamd c. Implementeren, wat is op het eerste gezicht, gaan een beetje een uitdaging zijn voor sommigen, maar vrij verheugend als je eenmaal krijgen Super Mario stuiteren boven en beneden een piramide geïmplementeerd, alhoewel met slechts iets genaamd ASCII-art. Het implementeren van de laatste jaar-- wat de studenten vorig jaar dan heeft daarna werd hun uitvoering eigen Caesar cipher en vigenèrecijfer. Dus encryptie-algoritmen waarmee je kon scramble informatie en vervolgens ontcijferen informatie om geheime berichten te verzenden. Het spel van de 15. Als u zich herinnert uit jeugd of een partij gunst, dat kleine plastic spel waar je beweegt de cijfers omhoog, omlaag, links en rechts om te proberen om ze op orde te krijgen, daadwerkelijk uitvoering van dat spel en het oplossen van de logica zijn vereist. En toen we in dabbled forensisch onderzoek van vorig jaar. Dus door het mid-semester, studenten die nooit gebruikten hun toetsenborden hiertoe vóór, werden software schrijven te herstellen, om zo te zeggen, JPEG's of foto's dat we hadden per ongeluk verwijderd uit een digitaal geheugenkaart van een camera. Het terugkrijgen van geheime boodschappen van de binnenkant van een bitmapafbeelding, en andere dergelijke types van graphics ook. Vervolgens hebben we overgegaan tot het geven de hele klas een woordenboek. Gewoon echt een groot tekstbestand met 150.000 woorden Engels. En iedereen werd uitgedaagd een of andere manier te lezen, om zo te zeggen, deze woorden in het geheugen. In het geheugen van de computer. En dan vragen te beantwoorden van het formulier, is dit een woord? Is dat een woord? Is dat een woord? Eigenlijk alleen maar de uitvoering een spellingscontrole. En dan elkaar uitdagen andere met een grote board-- een leider boord om die zien kon het minst hoeveelheid geheugen, in de minste hoeveelheid tijd eigenlijk spellingcontrole grote documenten. We overgestapt van toen naar de uitvoering van de eigen webserver. Dus niet het maken van webpagina's in talen zoals HTML en CSS, als je bekend bent. Maar eigenlijk uitvoering de server die luistert op internet voor het aanvragen van browsers en dan reageren op deze verzoeken. Dan de implementatie van onze eigen e-handel, zoals website, waar studenten kunnen kopen en verkopen voorraden. Tekening in bijna real time aandelenkoersen van Yahoo Finance. En waardoor studenten om te zien hoe hun portfolio zich ontwikkelt. En dan eindelijk een mash-up van Google News en Google Kaarten waarbij studenten op termijn door termen einde had de mogelijkheid om te klikken, en rond, en zoeken op een Google map. En dan zie alle de nieuwsartikelen die proximaal zijn aan die bepaalde gebieden. Dus echt gaande van nul tot en met 60. En langs de weg hebben van wat we hadden Vorig jaar riep, hacker toevoegingen. Dat de lat verder voor degenen onder u die zou heel goed hebben een goede hoeveelheid ervaring om in die 9% van meer comfortabel. Dus beseffen dat er een zeer hoog plafond zelfs binnen die uitdagingen voor studenten uit een andere achtergrond. Omdat eind de dag, zijn we uiteindelijk gericht gewoon op dit punt. Maar wat betekent dit bedoel, het oplossen van problemen? Dus laten we stellen dat we destilleren het zo. Dus het oplossen van problemen is echt alleen dit soort foto. Dus je hebt inputs om een ​​probleem, iets wat je eigenlijk wilt oplossen. Het doel is om uitgangen te krijgen, een oplossing voor dit probleem. En dan in het midden is wat we een zwarte doos zullen noemen. Je hoeft niet per se weten of zelfs schelen wat er in die black box. Alles wat je weet is dat wanneer je voedt inbreng in het, je hopelijk uitgang of een oplossing ervan. En terwijl vandaag zullen we kijken zowel ingangen en uitgangen, we zullen op lange termijn, en over de loop van het hele semester, focussen op wat er in die doos. En daarin zal liggen iets genaamd algoritmen. Stap voor stap instructies voor het eigenlijk het oplossen van een aantal problemen. Maar wat is een voorbeeld van een aantal ingangen? Dus misschien een simpel ding op de begin van ieder schooljaar, iemand zou willen bijwonen nemen. Dus we zouden kunnen doen één, twee, drie, vier, vijf, zes, en hoe zou ik blijf spoor van die informatie. Ik zou gewoon gaan een, twee, drie, vier, vijf, zes. En gewoon gebruik maken van een soort van enkele cijfers. Of ik zou eigenlijk opnemen Deze iets langere termijn. En hoe kan ik vertegenwoordigen alle de mensen in deze kamer? Nou, ik zou zoiets doen, OK. Ik zie een persoon. Okee. Ik een ander persoon te zien, een derde, enzovoort. Maar niemand telt mensen vinden dit leuk. Dus letterlijk, de meesten van ons als we zelfs van plan om iets te tekenen op alle, waarschijnlijk gaan om te gaan een twee drie vier, misschien een beetje luxe, vijf, zes, zeven, acht, negen, tien enzovoort. En dat is eigenlijk een systeem genaamd unary. Uno, zoals uno impliceert één, waar u slechts één letter van het alfabet. Je hebt net dit hekje. En ik, naar efficiëntie, maar trok deze hash marks, uiteindelijk als rechte lijnen. Maar ik kon hen hebben getrokken zo weinig stok cijfers. Waar te vertegenwoordigen een persoon, een input, Ik trek gewoon een stok figuur of een hekje. Maar dit is niet zo expressief. Als alles wat ik heb is deze hash merken, laat staan ​​stok cijfers, hoe zou ik vertegenwoordig zoiets als de nummer 15? Of 15 mensen in de kamer? Ik zou kunnen hebben om iets te doen, zoals 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15. Het is gewoon niet zo goed schaal. Als de ingangen krijgen grote, we behoefte aan een beter systeem dan dit. En het blijkt dat de systeem dat computers gebruiken is niet zo verschillend van wat u en ik weet. In feite zijn de meeste mensen in deze zaal, zelfs als je onder degenen minder comfortabel, niet per se weten hoe je Mac of pc echt werkt, heb je waarschijnlijk op zijn minst gehoord, dat onder de motorkap zijn 0 en 1's. De zogenaamde binaire systeem. Dus inderdaad, computers hebben meer dan alleen hash marks in hun woordenschat, maar niet zo veel van een woordenschat wij mensen. Inderdaad, wij mensen geen gebruik maken van binaire. Bi betekenis 2, 0 en 1. Maar decimaal, deca 10 betekent, 0 tot 9. Dus we hebben veel meer expressieve capaciteiten in onze normale menselijke wereld. Maar ik zou beweren dat deze systemen, binair en decimaal, en alles tussen en daarbuiten, zijn eigenlijk allemaal heel vertrouwd. Bijvoorbeeld, overweeg dit voorbeeld hier, 123. Dus dit is echt, natuurlijk, een aantal die we kennen als 123. Maar alles wat ik net trok was alleen deze patroon van de symbolen, tekens zo te zeggen. Soort van vormen op het bord met krijt. Maar waarom doen we meteen en Deze intuïtief te begrijpen als 123? Nou, als je waren als ik op de lagere school, u waarschijnlijk geleerd dat dit de 1s kolom is de kolom 10s, Dit is de kolom 100s. En waarom is dat nuttig? Nou, het is eenvoudige rekenkundige je nu doen vanuit een patroon van symbolen te krijgen een aantal begrijpen we intuïtief. Is wat, 100 keer 1, en vervolgens 10 keer 2 en 1 keer 3, wat natuurlijk slechts 100, en dit is 20, en dat is drie. En dus als we die together-- ah toe te voegen. Dus daarin ligt het soort redenering achter waarom dit set van symbolen betekent iets echts en numerieke. Nou, computers doen precies hetzelfde, maar ze alleen zo hoog als men kan tellen. Terwijl ik was in staat om tellen als hoog als drie. En in feite, als ik ging door dat ik kon oplopen tot negen in dit systeem. Computers hebben slechts nullen en die in het alfabet. Dus wat betekent dat? Nou, het betekent gewoon dat als een computer wil vertegenwoordigen, zeggen dat het getal 0, misschien met behulp van drie characters-- drie letters van het alfabet om zo te zeggen, dat is hoe een computer vertegenwoordigt 0. Dus niet zo eng nu toe. Het is precies wat wij mensen zouden doen. En in feite, de meesten van ons zou gewoon negeren de nullen toch. Een computer, als het wil het nummer 1 opslaan, blijkt gaat om dit te doen. En een computer op te slaan het getal 2 is niet gaan naar de unaire systeem te doen, die ik zinspeelde eerder. Het is eigenlijk van plan om dit te doen. En dit is waarschijnlijk waarbij het patroon begint minder voor de hand liggende voor de meeste mensen geworden. Dat is 2, dit is 3. Merkwaardig is nu 4. En nu is het echt lijken misschien cryptisch te zijn, maar het is niet als we kijken naar wat binaire werkelijk betekent. Het betekent dat je hebt twee letters van het alfabet. Dus twee mogelijke karakters voor elke placeholder. Dus dat eigenlijk betekent dat we gaan naar een plaats 1s of 2s plaats nodig, een 4s plaats en dan 8 en 16, 32 en 64. En wat is het verschil daar? Als deze zijn 1, 2, 4, 8, 16, 32, 64. En voordat we hadden 110, 100.000, 10.000. Wat is de gelijkenis daar? En wat is het patroon? Ja. STUDENT: Bevoegdheden van 2 in plaats van de bevoegdheden van 10. DAVID MALAN: Yeah. Bevoegdheden van 2 in plaats van machten van 10. En dus als ik wilde houden gaan, 8, 16's en ga zo maar forth-- maar nu als je dit soort van de aanwijzing, nu het binaire systeem is eigenlijk vrij eenvoudig. Waarom is dit patroon van 0's in de wereld van computers 0? Goed omdat het 4 tijden 0, 2 tijden 0, 1 tijden 0 en je krijgt 0. Waarom is dit de nummer 1? Dezelfde redenering, maar nu zijn we een 1 in de kolom 1. Waarom is dit 2? We hebben een 1 in de kolom 2s. En hoe doe ik vertegenwoordig zeggen het nummer 7 in binaire? Zeg luider. STUDENT: Drie 1s. DAVID MALAN: Drie 1s. Dus 1, 1, 1 omdat we gewoon nodig 4 plus 2 plus 1 geeft me 7. Okee. Dus vanaf daar hoe kunnen we vertegenwoordigen 8 met 3 placeholders? Ja. STUDENT: 1, 0, 0, 0. DAVID MALAN: Ja 1, 0, 0, 0. En toch misschien, ik soort van technisch nodig naar een andere tijdelijke aanduiding toe te voegen aan de raad van bestuur. Als ik wil, dat ik inderdaad fit moet iets als dit te doen. Dus ik moet eigenlijk nu gebruiken de 8s kolom, en dat is prima. Maar het merkwaardige in de informatica is dat dat gaat ons iets kosten. Je moet meer RAM-geheugen in uw computer nu. Je hebt meer geheugen omdat je iets nodig hebt fysiek op te slaan dat extra bit, om zo te zeggen. Binaire cijfers. En inderdaad alles wat er gebeurd is hier, net als het decimale stelsel, Als we blijven toevoegen van nummers omhoog en omhoog en hoger, gaan we naar 5-6 tot 7-8 het is net als het dragen van de 1, letterlijk. En dan is alles anders teruggaat naar nul. Maar hoe weten we eigenlijk vertegenwoordigen deze dingen fysiek in een computer? Goed aan het eind van de dag, de enige fysieke inbreng in te gaan op mijn computer hier is dit snoer, dus elektriciteit of elektronen uit de wand. En dus hoe krijg ik van iets fysieke als dat daadwerkelijk wat neerkomt op een idee als deze plaats. Nou, wat kunnen we doen? We kunnen van mening dat, al goed, misschien als elektriciteit stroomt Ik kon het op te slaan en vast te houden. En als ik vasthouden aan sommige elektriciteit, dat is gewoon gaan willekeurig vormen een 1. En als ik trek de stekker en er is niets daar, je weet dat zal alleen maar willekeurig vormen een 0. Dus als er iets is daar 1. Als er niets is er, 0. Of u kunt dit doen iets meer visuele. Hier is een 0. Er is niets interessant going op de achterkant van mijn telefoon. Maar als ik toestaan ​​dat een beetje beetje elektriciteit stroomt, ook al is het een beetje helder hier, mijn zaklamp ging. Dus ik ben het opslaan van een lading en ergo, deze telefoon staat nu 1. Dus 0 1. Dus met 1 iPhone hoe hoog kan ik tellen gebruik van dit soort aanpak? Ik bedoel tot 1. Het is niet zo overtuigend. Dus wat zouden we nog meer doen? Nou laten we zien, is iedereen op hun telefoon nu dat ik kon lenen? Iedereen die een telefoon heeft met een zaklamp ingebouwd? Kan ik lenen? Ik heb het niet nodig ontgrendeld. Okee. Dank je. Laat mij dit lenen. Okee. Dus als ik blader nu en hier, wat moet ik die nu? Ja. Dus het is een drie, want dit is in de 1s kolom is de kolom 2s. Dus 1 plus 2 is 3. En dan, als we proberen te krijgen echt creative-- oh, dank je. Zeer preventieve. Okee. Ik heb nu drie iPhones. Okee. En nu dit-- ik zal niet doet verder dan dit. Wat ben ik die nu? Gewoon zevens. Maar ik moest fysiek meer geheugen in dit geval. Maar dat is alles wat het is. U kunt denken aan wat er gaande on-- dank je-- binnenkant van je telefoon als alleen maar een schakelaar die is worden in- en uitgeschakeld. En als je ooit hebt gehoord het woord transistor. Of als je ooit gehoord van de marketing spreken Intel inside, dat spreekt tot de aard van de hardware dat is binnenkant van uw computer. Intel maakt CPU's, centrale verwerkingseenheden, die als het brein binnenkant van uw computer. En deze CPU's en dingen die ze zijn aangesloten te veel en veel kleine schakelaars. Miljoenen, miljarden schakelaars dat kan zowel in of uit. Dus computers, gelukkig, zoals onze Macs en pc's, kan veel hoger zijn dan 7 of 8 tellen omdat ze veel meer dan drie of vier bits. Veel meer dan het equivalent van de drie zaklampen dat we net hadden. Maar nu, dit begint te krijgen vrij oninteressant snel. Als ik wil nu daadwerkelijk in staat zijn iets interessanter maken, Ik wil in staat zijn om te springen om zoiets als dit. Dus ASCII, het is niet echt een nuttig acroniem, maar American Standard Code for Information Interchange. Het betekent alleen, enkele jaren geleden wij mensen besloten, Weet je wat, willen we in staat zijn om te doen meer met computers dan alleen cijfers. We willen niet dat ze gewoon duur zijn rekenmachines, we willen graag in staat zijn om dingen te doen zoals tekstverwerking, zij het zeer eenvoudig. Later hadden we e-mail en andere dergelijke media. En dus is de wereld besliste enkele jaren geleden volgens dit systeem ASCII, Weet je wat? In bepaalde programma's op elk gewenst moment zie het equivalent van het aantal 65, zoals het patroon van bits. En we konden het doen math hier op het bord. Het patroon van bits die 65 vertegenwoordigen. Denk niet dat het als 65 in decimalen. Zie het als willekeurig, maar wereldwijd, consequent als de hoofdstad EEN. En dan is de wereld besloten, weet je wat? Laten we een ander patroon van bits. En als we ooit zien nummer 66, laten we gewoon veronderstellen dat de hoofdletter B. Fast forward naar H en ik, als je 72 of 73, dat dient een H en een I, respectievelijk. En dus zolang de gehele wereld is het eens op deze. Zodat wanneer u een e-mail of zou je een bestand te krijgen op een USB-stick, of iets dergelijks dat-- wanneer zie je dat patroon van bits, je weet dat het dit zou moeten zijn letter of een andere letter. Maar het is context specifieke, rechts. Een e-mail programma zou kunnen interpreteren deze dingen als personages, maar een grafische rekenmachine of calculator kunnen vertegenwoordigen of interpreteren deze dingen, natuurlijk, zoals brieven. Dus met dat gezegd, snelle kleine beoordeling. Dit is misschien een drie karakter e-mail die is verzonden naar me. Onder de motorkap is het allemaal in 0s en 1s, maar kan ons niet schelen. We gaan om te beginnen met abstract boven de 0s en 1s tot brieven. En als ik zie een patroon van 0s en 1s dat echt vertegenwoordigen 72, hint, hint, 73, en dan 33, wat is de boodschap? STUDENT: [ONVERSTAANBAAR] DAVID MALAN: Dus als je denkt terug zoëven, HI was de boodschap die ik probeerde te communiceren hier omdat H is 72, I is 73, en nu 33-- zou je niet dit per se van tevoren weten, maar het blijkt dat als je werkelijk Bekijk meer van de kaart en het systeem dat de mensheid overeengekomen jaar geleden, het is gewoon een uitroepteken. Inderdaad is er een patroon van symbolen en nummers voor elk karakter dat je zou kunnen hebben op uw toetsenbord. Okee. Laten we abstract verder. Als we niet willen gewoon dingen zoals cijfers en letters, we eigenlijk willen graphics implementeren. Nou, als je ooit hebt hoorde de afkorting RGB. Het is een beetje gedateerd, maar het is nog een beetje daar. RGB is rood, groen, blauw. En het is gewoon een systeem te zeggen, weet je wat, laten we gebruik maken drie sets van bits. Een set van 8 bits, een andere set van 8 bits, en een andere set van 8 bits. En laten we gebruiken die bits op te slaan hoeveel rode we willen op ons scherm, hoeveel groen willen we op ons scherm, en hoeveel blauwe willen we op ons scherm. En dit betekent gewoon dat als je hebben een lot-- een groot aantal voor rood, dat betekent geef me een veel rood. Als u een groot aantal voor groen, geef me een veel groen. En als je maar een klein beetje blauwe of een klein aantal, zoals 33, geef me een beetje blauw. En als je toevallig deze te combineren drie grootheden, zo te zeggen, je krijgt dit-- je nauwelijks kunt zien op de projector hier, maar dit duistere schaduw van geel of bruin. Maar dit wil zeggen, door deze patroon van 8 plus 8 plus plus 8-- dat patroon van 24 bits Zo zou een computer slaan die schaduw van geel in één kleine dot van een pixel op het scherm. Daarom hebben we gegaan van 0s en 1s naar decimaal nummers om letters van het alfabet. Of meer interessant, gekleurde stippen. Nou, wat natuurlijk komt dan de volgende stap? Nou, wat is een beeld dat je bekijk op Facebook of neem een ​​e-mail? Of iets dergelijks? Wat is de definitie technisch van een afbeelding? Ja. Wat is een beeld bestaat uit als je ziet er echt dicht op je scherm? Ja. Het is gewoon een hele hoop pixels. In feite, als u uw laptop misschien later, en ziet er echt dicht bij het-- afhankelijk hoe duurder de laptop is en hoe hoog de kwaliteit het scherm is, je zou heel goed zien alle de kleine puntjes op het scherm. En die punten of pixels, wat betekent dat er 24 bits die elke pixel in die foto die je ziet op Facebook, of dat je gewoon nam op je iPhone onlangs. En dus dat is hoe we om dingen zoals graphics. Nou, wat is een video? Een video is slechts een set van grafische vliegen door het scherm weer en opnieuw en opnieuw. En dus video's echt, zijn slechts patronen bits vertegenwoordigen roosters, rijen en kolommen stippen, vliegende beeld op het scherm door, na het beeld, als afbeelding, alias Bewegende beelden. Dus dat is het voor de in- en uitgangen. Alles wat we nu hebben, is een veronderstelling dat u Weet je wat, als we willen een computer informatie vertegenwoordigen, We hebben een systeem om dat te doen. We kunnen het met 0s en 1s aan het eind van de dag. Maar we kunnen abstract, dus om te spreken, op de top van die om zo meer te vertegenwoordigen Interessante dingen. En hier op uit in CS50 en in informatica meer in het algemeen, We staan ​​nu op de schouders van alle mensen die kwam voor ons die dat bedacht. En nu gewoon aannemen dat computers kan in- en uitgangen vertegenwoordigen. Maar laten we nu eigenlijk iets met hen te doen. Dus een algoritme is slechts een set instructies, stap voor stap, voor het oplossen van een probleem. En wat zou een dergelijk probleem. Dus dit is een oude school technologie, een telefoonboek. En de binnenkant van een telefoonboek is een hele hoop namen en nummers. En die namen zijn over het algemeen alfabetisch gesorteerd. Dus als ik wilde iemand in te vinden deze telefoon boek als Mike Smith, wat is een typisch menselijke gaan doen? Nou, je kon gewoon open it up, kijk naar de eerste pagina. Ik zie niet in Mike Smith. Draai naar de tweede pagina, Ik zie niet in Mike Smith. En gewoon blijven gaan en gaan. Is dit stapsgewijze aanpak correct? Ja. Het is een beetje dom, rechts. Het is inefficiënt, rechts. Omdat het gaat om altijd te nemen Mike te krijgen, maar het is juist. Want als Mike is hier Ik zal hem wel te vinden. Dus wat is een iets meer redelijk persoon gaan doen? Ze kunnen nog steeds te openen aan de voorzijde, en misschien vliegen door het telefoonboek twee pagina's tegelijk. Twee, vier, zes, acht. Ik kan eigenlijk niet fysiek doen het erg goed. Maar in theorie, deze moet twee keer zo snel, twee pagina's tegelijk. Hierdoor algoritme correct? STUDENT: [ONVERSTAANBAAR] DAVID MALAN: Niet per se. Goed. Waarom dat addertje onder het gras? STUDENT: Omdat hij zou kunnen worden op één van de pagina's die je overslaan. DAVID MALAN: Yeah. Dus zelfs als ik dichter en dichter. Wat als hij gewoon per ongeluk, door het slechte geluk, ingeklemd tussen de twee pagina dat ik vliegen over? Dus moeten we een oplossing voor dit. We moeten eigenlijk dan zeggen, wacht eens even, misschien als we te ver gaan, misschien als we druk op de T sectie, voor T komen na Smith, dan moeten we ten minste te verdubbelen ten minste één pagina terug. Dus opgelapt worden, maar er is een voorwaardelijke probleem daar. Dus het is twee keer zo snel, maar je misschien hebben om terug te verdubbelen maar een klein beetje. Maar niemand in zijn kamer, zelfs als u niet echt gebruik maken van de telefoon boeken meer, gaat om te beginnen bij het begin. Wat ga je doen op zoek naar Mike Smith? Je gaat ruwweg naar de S. Of als je niet echt de cheat sheet op het papier, je gaat op zijn minst te gaan ruwweg naar het midden. En zeker niet te de voorzijde van het boek. Je gaat naar beneden kijken. En mathematisch ben je waarschijnlijk ga naar de M sectie te zien, die is ongeveer in het midden. En dan zul je beseffen, wat waar is? Waar is Mike? STUDENT: [ONVERSTAANBAAR] DAVID MALAN: Yeah. Dus hij is meer dan aan deze kant. En dus wat kan je doen? Nou, zowel letterlijk en figuurlijk kunt u het probleem in tweeën scheuren keer? En dan te weten dat je kunt gooien Deze helft van het probleem weg. En nu zijn we vertrokken met fundamenteel hetzelfde probleem, maar het is half zo groot. En nu wat is het set instructies? Wat is het algoritme voor het vinden Mike Smith? Het is precies hetzelfde. Nu gebeurt dit om de M te zijn sectie en dit is de Z sectie, maar de fundamentele formule is nog steeds hetzelfde. Ga ruwweg naar het midden, kijk naar beneden, oh, verdorie. Nu ben ik in de T-sectie, Ik ben te ver gegaan. Maar ook hier kun je gelden diezelfde logica. Gooi de helft van het probleem weg en nu zijn we achter met een probleem dat een kwart van de grootte. En we kunnen herhalen, en we kunnen herhalen, en we kunnen herhalen totdat theoretisch er is maar één pagina links op Mike die ofwel is of niet. Dus wat is er zo krachtig over dit idee? Ik bedoel immers, het is vrij intuïtief. Niemand gaat om te beginnen bij de het begin van het telefoonboek en flip 1.000 pagina's Mike Smith te vinden. Bijna iedereen in deze kamer gaat ruwweg dat soort algoritme doen met uitzondering van de scheuren. En waarom hebben we dat doen? Nou, rekening houden met de efficiency. Bedenk hoe veel beter dit algoritme was door het af te breken in zijn samenstellende delen. Dus wat heb ik eerst doen? Ik pakte het telefoonboek. En een computer wetenschapper, en programmeur meer in het algemeen blijkt, gaat om te beginnen met het tellen van alles bij 0. Waarom? Nou, het is een beetje vreemd dat wij mensen tellen, in het algemeen, vanaf één. Want wat is het kleinste getal We kunnen duidelijk vertegenwoordigen op basis zelfs op onze oude lagere school wiskunde? Nou, het is 0, of het is in decimale of binaire. En dus zie je in de wereld van computers en programmering, in het bijzonder, we beginnen het tellen van alles, van 0. Dus pakte ik het telefoonboek stap 0. Ik ga om te openen voor de midden in het telefoonboek. En dat is inderdaad een uitdrukking van wat ik deed. En dan stap twee was blik op de namen. Stap drie is een beetje verschillende conceptueel. Ik vraag mezelf een vraag. Als Smith is een van de namen, Ik ga een beslissing te nemen. Als hij onder de namen, dan ga ik naar Mike bellen. En ik ga om een ​​beslissing te nemen gebaseerd op dat stuk van informatie. Indien niet, indien Smith eerder in het boek aan de linkerkant, Ik ga om te openen naar het midden van de linkerhelft van het boek. En dan is hier de slimheid, Ik ga terug naar stap twee. Ik ga voor het sorteren van staan ​​op mijn eigen schouders en herhaalt het verleden werk dat ik deed. Maar het werk wat ik nog heb is minder en minder en minder. Maar het is nog steeds aan het werk. Maar als Mike daarentegen later in het boek aan de rechterkant, Ik ga om te openen naar het midden van de rechterhelft van het boek, ga dan terug naar stap twee. Maar er is eigenlijk een vierde scenario. Mike's ofwel hier, of hier, of hier, of-- STUDENT: Niet daar. DAVID MALAN: er niet. En inderdaad, als we niet anticiperen deze vierde en laatste scenario ons programma zou kunnen zijn buggy of gebrekkig op een bepaalde manier. Else, stoppen in het geval dat we hebben helemaal niet gevonden Mike. En inderdaad, als je ooit opgevallen uw computer hangen, of alle plotseling woord of een andere programma wordt afgesloten alleen onverwacht, en soms thee error boodschap is letterlijk dat. Dit programma onverwacht afgesloten. Het kan voor een aantal redenen. Maar soms is het iets eenvoudigs als dit. De menselijke programmer die schreef dat software besefte niet dat, oh, er is een weer wat daadwerkelijk kan gebeuren. En als je geen code te schrijven aan vast te leggen dat de vierde scenario, het is inderdaad soms onverwacht wat de computer daadwerkelijk zou kunnen doen. Laten we nu eens roepen een Enkele van deze dingen. Dus in geel hier, ik hebben gewezen op termen opdat wij zijn gewoon naar functies aanroepen. Functies in de wereld van programmering zijn net als acties, uitspraken van de acties. Dus pick-up, open, kijk bij, bel, open, geopend, af te sluiten. Dat is een functie, een procedure, een actie, een aantal synoniemen zou eveneens werken. Nu, wat zijn deze dingen nu in het geel? Indien anders, als anders, als anders, deze zijn wat we gaan om te bellen omstandigheden in de programmering, of takken, besluit wijst, als je wil. Maar hoe weet je welke vork in de weg te nemen, om zo te zeggen? We moeten benadrukken de termen rechts zijn, die deze Ja geen vragen. Deze ware valse vragen. Smith onder de namen? Smith eerder in het boek? Smith later in het boek? Dit zijn vragen om waarop een ja of nee, of equivalent waar of onwaar, of equivalent, één of nul antwoord. En ondertussen is er slechts een laatste stuk. Dit heeft hier wat voor effect? Of je programmeert eerder, hoe zou u beschrijven wat stap zeven en 10 aan het doen zijn? Wat zei je? STUDENT: Een recursieve stap. DAVID MALAN: Een recursieve stap. Ja wezen. Het is technisch iteratieve hier als je bekend bent. Maar we zullen hierop terugkomen. Maar het is iets duidelijk te doen. Nogmaals, het is het induceren van een cyclus, een lus, rechts. Je bent letterlijk gaat terug naar sommige eerdere stap. En zo ja, dit gaat uitvoering van een soort cyclus. Maar je bent niet van plan om vastzitten in deze eindeloos, rechts. Want als je constant te controleren is Mike hier, of naar links of niet hier, Uiteindelijk hij niet van plan om daar te zijn. En je kunt gewoon stoppen helemaal volgens die laatste regel. Dus dat is het voor de woordenschat. En dit was wat we zouden over het algemeen noemen pseudo-code. Het is niet een echte taal. Het is gewoon heel beknopt Engels, maar communiceert het punt. Er is geen formele structuur hier. Je gebruikt gewoon dat het paar woorden, maar zo duidelijk woorden als je kunt om uw idee te communiceren. Nu hoe goed is dat algoritme en hoeveel beter is het? Nou, we hoeven niet te krijgen in de specifieke getallen of iets zoals dat. Maar we kunnen kijken naar de vorm van deze oplossing. Dus als we gewoon te trekken sommige xy plot hier op de horizontale as in. Laten we gewoon bellen met de omvang van het probleem. En een computer wetenschapper zou doen gebruiken meestal n als de variabele hier. Dus n pagina's of n mensen in de kamer, of wat het ook is dat u probeert te tellen. En vervolgens op de verticale as aan de linker, zou dat de tijd om op te lossen. Dus hoeveel seconden het doet Breng me naar Mike Smith vinden? Of hoeveel stappen duurt het? Hoeveel pagina beurten duurt het? Dus dat is hoeveel het kost me in de tijd om een ​​probleem op te lossen. En we kunnen trekken de eerste algoritmen helling, zo u wilt, aangezien alleen deze rechte lijn in het rood. En ik zal het n noemen. Waarom n? Waarom is het alleen deze ene een relatie? Nou, als Verizon of wat telefoonbedrijf voegt nog een pagina aan het telefoonboek volgend jaar, dat zou Mike één duwen stap dichter bij het einde, afhankelijk van waar de pagina is. En dus het effect zou wel eens om een ​​meer tweede voegen. Of nog een pagina aan de beurt. Een 12:59 verhouding. Daarentegen is de tweede algoritme. Hoeveel sneller was dat intuïtief? Waar ik ging twee pagina's tegelijk? Ja. STUDENT: [ONVERSTAANBAAR] DAVID MALAN: Yeah. Dus het gaat twee keer zo snel te zijn. En we zouden hier te tekenen dat Afhankelijk van de schaal. Het is nog steeds een rechte lijn, maar lager dan de rode lijn. Omdat gedurende een aantal bladzijden, al duurt je zoveel stappen het eerste algoritme, het zal je de helft te nemen zo vele stappen met de tweede. En dus is de gele lijn een beschrijving van de tweede algoritme is gewoon gaat worden eronder. Maar wat is echt krachtig is om na te denken over de derde en laatste, en verbazingwekkend meest intuïtieve algoritme, dat deze vorm heeft. Technisch gezien zouden we noemen dit een logaritmische kromme. Log base 2 van n in dit geval. Maar dat maakt niet echt uit. Waar het om gaat is echt de fundamenteel andere vorm die het heeft. En u kunt overwegen hoe veel kortere deze lijn echt is op de lange termijn. Het voortdurend toe. Het is niet perfect plat uit. Maar het groeit nog zo veel langzamer als het probleem wordt groter en groter. En kunt u denken aan het op deze way-- als Verizon niet alleen voeg een pagina volgend jaar, maar doubles het aantal pagina's in het telefoonboek, de eerste algoritme zou neem twee keer zoveel stappen. Als het 1000 pagina's dit jaar, 2000 pagina's volgend jaar, Mike zou kunnen dat veel verder weg zijn. Het is dus 1.000 extra stappen om hem te vinden. De tweede algoritme misschien maar 500 meer zijn stappen om hem omdat terug te vinden, Ik vlieg er doorheen twee tegelijk. Maar hoe zit het met de derde algoritme? Als Verizon verdubbelt de grootte van het telefoonboek volgend jaar van 1000 tot 2000 bladzijden, hoeveel trappen is mijn derde algoritme gaat duren? Ja, het is slechts een. En dat is het krachtige idee. U kunt een pagina beet 1000 te nemen van dat probleem in een keer. En nu als je bedenkt een domme scenario, maar het soort spreekt tot de kracht van dit soort intuition-- als een telefoonboek had, net als, 4000000000 pagina's, voelt als een heel groot probleem. En inderdaad, het zou kunnen neem me 4000000000 pagina wendt zich tot Mike Smith in die vinden bij het eerste algoritme. Maar hoeveel stappen zou het in het derde algoritme Mike vinden tussen vier miljard stukjes papier? Dus 4000000000 scheur je in de helft. Je krijgt twee miljard euro. Dan een miljard, dan 500 miljoen, 250 miljoen, 125 million-- maar het voelt als dit is gaat een tijdje duren. Ik nodig zou kunnen hebben 32 vingers te tellen zo hoog. Maar het is inderdaad zo weinig als pagina tranen 32. U kunt gaan van vier miljard naar pagina scheidslijn één het oorspronkelijke aantal bladzijden helft 32 tijden totdat je bent vertrokken met alleen dat enkele pagina. Nu, natuurlijk, ik ben hier bedriegen. Het is niet dat we net dat soort domme geheel bij de eerste twee algoritmen. Ik ben bedriegen in zekere zin, of echt ik gebruik te maken van een veronderstelling. Wat was waar over het telefoonboek in zijn oorspronkelijke vorm die toegelaten me aan die derde algoritme zelfs gebruiken? Ja? PUBLIEK: Het was gealfabetiseerd. DAVID MALAN: Het was gealfabetiseerd, toch? Als het waren gewoon in willekeurige orde, dit is een verspilling van de tijd, dit hele gesprek. Ik moet bij elke look pagina als het in willekeurige volgorde Mike Smith te vinden voordat ik kunnen concluderen dat hij daar of niet. En dus is de hoek we hebben gesneden is dat ik veronderstelde dat iemand anders in dit geval deed het werk voor mij. En zodat uiteindelijk uitnodigt de vraag, goed, wacht eens even. Hoe ga je sorteren 1000 pagina's van namen en nummers? Dat is eigenlijk een ander probleem, wat we zullen terugkomen in de toekomst. Maar als je erover nadenkt websites zoals Facebook en Google voor Gmail en dingen zoals Google's eigen zoektocht indexen, als je miljoenen of miljarden stukjes data worden deze dagen opgeslagen, searching-- en niet te vergeten sorteren die problems-- is uiteindelijk een uitdaging op zich. Inderdaad, deze dan gewoon een van die uitdagingen dat we zullen kijken naar. Dus nu laten we eens een moment en neem een ​​kijkje op CS50 zelf en geven u een gevoel van wat in petto dit semester. Sterker nog, als je nog niet hebt, heb een kijkje nemen op deze URL. En als Patrick gezinspeeld aan, dit jaar zijn we het maken van een aanzienlijke investering alle hoe meer ter ondersteuning van de cursus structuur in termen van de TA en de CA's, kantooruren, secties beschikbaarheid en digitaal materiaal online, als goed. Sterker nog, in termen van de cursus lezing, we zijn hier vandaag. En de verwachtingen dit jaar officieel van de cursus zijn bij te wonen tot vandaag, de cursus laatste college en een cursus ongeveer in het midden van het semester bij elke lezing in tussen algemeen beschikbaar gesteld op een vrijdagmiddag online, zowel voor de Yale studenten en Harvard studenten dit jaar. Inderdaad, een van de fundamentele veranderingen is dat we bij de vaststelling van Harvard een paradigma zeer zoals wij deden hier afgelopen jaar en nu dit jaar, zodat op dezelfde manier, we nog steeds de meeste film lezingen van de cursus in Cambridge maar maken ze eerder beschikbaar dan we in het verleden zodat degenen onder je-- als je wil bijvoorbeeld, krijgen een voorsprong op materialen op de het eerste weekend vrij dan het tweede weekend, moet je toegang tot deze soorten materialen, doorzoekbaar, integreerbare, hyperlinkable naar gerelateerde middelen alle eerder. In termen van de onderwerpen, om u te geven een gevoel van trajectory-- de cursus en sommige hiervan zou kunnen zijn voor jargon nu, maar niet voor lang, wees gerust. We beginnen vandaag, uiteindelijk, met kijken naar een programma taal genaamd Scratch. We zullen daarna de overgang volgende week iets genaamd C en vervolgens kijken naar andere gebouwen blokken voor het oplossen van problemen, dingen genoemd arrays en algoritmen, hoe we het geheugen in ons voordeel en nadelen, en dingen zoals data structuren, en vervolgens in de richting van de staart van de de klas kijken machine learning en op zoek naar een ander taal genaamd Python, hoe het internet werkt, hoe het internet meer over het algemeen werkt, protocollen zoals HTTP, talen voor databases zoals SQL, JavaScript voor het web, en uiteindelijk koppelverkoop al deze verzoeken tegelijk. En zo ja, in de het einde van de dag, u zal niet leren in deze klasse Scratch of C of Python of SQL of JavaScript. Je zal in plaats daarvan meer in het algemeen te leren informatica en de fundamenten daarvan, en u zult leren hoe te programmeren in een aantal van deze talen langs de weg. Dus inderdaad een van de doelen van de cursus in het einde is om alle van de cursus af te nemen zijwieltjes door die laatste weken zodat na dit, kunt u terug naar je eigen fields-- of dat nu wel of niet met een computer science of engineering, in de natuurlijke wetenschappen, kunst, geesteswetenschappen of beyond-- en brengen sommige van deze ideeën cursus en dit veld ideeën en praktische vaardigheden om uw eigen domein om problemen daarin op te lossen. Wat we hier zullen doen ondertussen in de meeste donderdag na vandaag is met de hoofden van de cursus leidende wat wij walkthroughs zullen noemen van de cursus probleem sets. Dus elke week toen we hebben een probleem te stellen, zullen we te lopen door op een locatie als deze uitdagingen van de cursus, biedt u een aantal tips en trucs en ontwerptechnieken. Maar als je niet in staat bent die persoonlijk maken, realiseren diezelfde middelen zullen worden ingebed door een van de cursus onderwijsassistenten het probleem stelt zich, ook. Het probleem stelt dit jaar, in tegenstelling tot Vorig jaar, op basis van feedback, zal nog steeds worden vrijgegeven op vrijdag. Maar in plaats van te wijten de daaropvolgende vrijdag, geeft u daarmee het geven van slechts zeven dagen, zal effectief te wijten 10 dagen later. En inderdaad, dit betekent dat ze zullen overlappen een weekend. Maar we hopen dit jaar vooral deze zal studenten in staat om beter tegemoet te komen eb en vloed in hun schema, of het nu academici of extracurriculars of atletiek of midterm seizoen. U kunt ofwel front-load of back-load uw week gericht op CS50 gebaseerde op de werkelijke studielast van uw eigen week. Het probleem stelt zich zal een aantal talen te dekken, hoewel we zullen richten voornamelijk vroeg op C voordat we daarna richten op hoger niveau, meer web-centric talen. En dan een paar veelgestelde vragen hier-- moet je een klasse als CS50 nemen als een eerste-jaar? Dus absoluut. En inderdaad, het is niet noodzakelijkerwijs iets je moet uitstellen totdat je knippen je tanden op andere soorten klassen. Maar in plaats van, overwegen dat voor veel studenten, waaronder ikzelf terug in de dag, Dit is een zeer onbekend veld, vooral als je nooit duurde een AP CSA of iets dergelijks op de middelbare school. Maar beseffen dat vroeg op, of het nu deze cursus of een andere inleidende cursus, Nu is inderdaad de beste tijd, Ik denk dat, om een ​​aantal nieuwe weg te vinden of een aantal nieuwe academisch belang, als goed. En vervolgens het nemen met andere courses-- dus een van de belangrijkste verschillen hier versus Harvard is dat we alleen neem vier cursussen per semester aan de Harvard om wat voor reden. En jullie eigenlijk te trekken off ongeveer 36 cursussen in totaal in de loop van vier jaar, Dit betekent meestal vier of vijf klassen. En ik denk dat het heel eerlijk om te zeggen en wijzen CS50, door het ontwerp, is waarschijnlijk niet het type van de klasse dat moet je meestal nemen met vier andere cursussen voor een totaal van vijf omdat psets zijn door ontwerpen vrij intensief. Sterker nog, ook ik geleerd dit terug in de dag. Ik zou het niet beschrijven CS50 en informatica, programmering zoals zo veel hard als het slechts tijdrovend. Het is niet het soort ding waarbij na het diner, u kan teruggaan naar uw dorm room, ga zitten, en start gericht op de PSET denken, oke, Ik ga bang this out vanavond en dan bewegen Op naar mijn volgende onderwerp de volgende dag. Soms heb je gewoon op een muur. Je hebt bugs in uw code. Je hoeft niet per se weten hoe je een probleem op te lossen. En een van de belangrijkste kenmerken van programmeren voor mezelf tot op de dag is dat je gewoon een soort moet nemen een stap terug soms een nachtje over slapen of denken op het over de cursus van een joggen of een andere activiteit, en kom dan terug om het vers. En je hoeft alleen maar deze vensters van de tijd. En inderdaad, dat is waarom we hebben verlengde de hoeveelheid tijd vindt het probleem sets dit jaar en ook per die URL Ik opgemaakt eerder als te wat er nieuw is dit semester, getrimd het probleem stelt, zodat ze zijn in wezen niet minder streng, en afhaalrestaurants niet minder, maar er is veel minder voorwerk, een stuk minder benenwerk dat je nodig hebt om doen aan de voorzijde van elk probleem set, zoals u zult zien, voordat je kunt eigenlijk duik in het vlees ervan. Realiseer dat deze en andere veranderingen zijn aan de horizon om beter studenten, maar uiteindelijk om ervoor te zorgen dat de afhaalrestaurants zijn inderdaad zo hoog mogelijk. Dus terwijl meer werk dan het misschien in een typische klasse, Wij hopen dat de rendementen voor u en de afhaalrestaurants voor u en de vaardigheden en ideeën waarmee je afsluit zijn des te meer dwingende als gevolg. En om u en dit er-- is een van de belangrijkste afhaalrestaurants, als Patrick gezinspeeld earlier-- is de loop van de draagstructuur. Dus niet alleen CS50 hebben één van de grootste cursus personeel op de campus. Het heeft ook een van de de meeste undergraduate. Inderdaad, CS50 vorig jaar was de eerste klasse een undergraduate onderwijs personeel. En het bewijs van dat succes nu doen vele andere cursussen binnen Yale CS hebben dat, als goed. En studenten specifiek zullen deze TA en natuurlijk assistenten steunt geheel netwerk van ondersteunende middelen, waaronder secties of recitaties, wekelijks kansen meer intieme discussies en reviews van materiaal gerichte voor verschillende tracks, voor studenten minder comfortabel, comfortabeler, of ergens tussenin. Deze zullen de beschikbare volgen de lezingen van meerdere dagen per week op maandag en dinsdag. En dan office hours-- één-op-één mogelijkheden om hulp van de cursus CA's en TA zal zijn op woensdag en donderdag en zondag om meerdere tijden, die zal worden geplaatst op de website van de cursus, nog meer dan vorig jaar, als goed. Maar wat is de sleutel tot CS50, indien niet weliswaar een beetje ongewoon, is de cultuur van de cursus die we hebben geprobeerd om te cultiveren, zowel in Cambridge jarenlang en nu het meest recent in New Haven. En in feite, komen deze Zaterdag, als u nog niet gehoord, is CS50 Puzzle Day, die moet niets te maken met de computer science maar is volledig bedoeld voor het verzenden een bericht dat de informatica is over het oplossen van problemen. En inderdaad, als je wilt naar partner met één of twee of drie vrienden en vormen een team voor CS50 Puzzel Day, neem een ​​kijkje op de advertenties die op de weg naar buiten. En drie uur van de pizza en puzzels en prijzen af ​​te wachten. Inderdaad, de eerste keer dit jaar, het zal niet samen worden gehouden met Harvard. Het zal hier onafhankelijk van elkaar op Yale. Dus hou een oogje op die als u niet. De meeste elke vrijdag in het semester moeten we proberen om een ​​grote klasse te maken voelen klein en breng ongeveer 50 studenten lunchen met het personeel van de cursus, met alumni, vrienden van de industrie om te praten over wat het leven is als na een klasse zoals CS50 en over de zomers en na het afstuderen. Dus hou een oogje op uitnodigingen voor dat. Voor de eerste keer ooit Dit jaar zullen we Houd de allereerste CS50 codering wedstrijd, een optionele opt-in mogelijkheid mid-semester, na alles van ons hebben gehad ongeveer zes of zeven weken van de programmering in C onder hun gordels om te concurreren, als u zo weer zou choose-- op teams-- proberen lossen als vele uitdagingen als je kunt in de programmering met vrienden van je tegen anderen. En in de richting van de staart van het semester zullen we charter een aantal bussen, eigenlijk wat tijd doorbrengen in Cambridge, als je wilt graag met ons mee, voor de zogenaamde CS50 hackathon. Bij 19:00 gaan we beginnen. Rond 21:00, zullen we pizza hebben. Rond 01:00, zullen we burrito's hebben. En iedereen die nog wakker op de busrit naar huis rond 05:00, we zullen stoppen voor pannenkoeken bij IHOP op de weg thuis-- een 12-uur per dag de kans om onder te dompelen jezelf met klasgenoten en medewerkers in afstudeerproject van de cursus, die een kans goed te gaan dan de cursus probleem sets en het ontwerpen en implementeren van de meeste iets voor u van belang, die uiteindelijk ook hier in het Lagerhuis. De allereerste CS50 fair is voor het laatst jaar, een end-of-semester tentoonstelling of de viering van wat iedereen in de klas had volbracht, vooral die, wederom, die ging van niets iets, van nul tot 60, zonder voorafgaande achtergrond en tentoonstellen, uiteindelijk, iets voor de hele campus en, als online, de wereld om te zien, als goed. Nu, dit hier zijn slechts een paar van de TA en CA's die CS50 mogelijk maakt. Sta mij toe om elke uit te nodigen van de medewerkers die hier zijn om te komen op het podium, evenals de hoofden van de cursus, om sommige woorden van bieden inspiratie, ook. ANDI: Hoi, jongens. Kunnen jullie me horen? Bedankt voor het samenvoegen van ons op deze heerlijk, regenachtige donderdagmiddag. Mijn naam is Andi. Ik ben een junior in Berkeley. En samen met Stelios en de zomer, wij zullen uw drie hoofd onderwijs zijn assistenten voor dit komende jaar. Dus, denk ik, show van hands-- hoeveel van jullie hebben niet de intentie van het zijn een CS belangrijke noch echt duiken diep in informatica als hier een belangrijk? Geweldig. Dat is briljant. Dus ik ben eigenlijk een globale zaken en cognitieve wetenschap major. Ik kwam letterlijk Yale met de bedoeling van nooit te hebben om te kijken naar een nummer ooit weer in mijn leven. Toen ik naar Yale kwam, was dit iets dat nooit was op mijn radar. Ik wilde leren over poëzie. Ik wilde om te leren over internationale zaken. Ik wilde om te leren over aquarel tekeningen. Ja, wij bieden een klasse op aquarel tekeningen. Maar ik was nooit echt geïnteresseerd in om het even wat STEM gerelateerde. Maar hoe ouder ik kreeg, hoe meer ik besefte dat elk gebied echt in sommige sense telt computer science, of, indien niet de informatica, berekening. In feite, voor mijn globale zaken sluitstuk project, we zijn met behulp van data analytics om terreur aanslagen te analyseren voor Boko Haram in Nigeria. En dus zoals je kunt zien, ongeacht wat belangrijke je uiteindelijk het nastreven of wat je interesses hier bij Yale zijn, de programmering en de fundamenten van welke vaardigheden zijn super handig. En CS50 echt is goed uitgerust om soort lenen veel van haar middelen aan u, ongeacht hoe comfortabel je bent of hoe geïnteresseerd je bent in het nastreven van de klas. Summer's gaat een beetje te praten bit over wat jullie zijn gaat om te leren over dit jaar. ZOMER: Hallo, iedereen. Ik ben van de zomer Wu. Ik ben een junior in Morse. En ik eigenlijk begonnen als CS50 student mezelf. Dus drie jaar geleden was ik op een jaar tussenuit. Ik had nog nooit genomen een CS klasse op de middelbare school, maar ik dacht dat ik in mijn vrije tijd, het cool zou zijn om te leren hoe te coderen. Dus deed ik een snelle zoekfunctie van Google, keek naar wat online beschikbaar was, en zag deze video met muppets en dj's en coole websites. Ik was als, ik wil leren hoe dat te doen. Dus nam ik de cursus, en ik gewoon verliefd op het. Maar ik herinner me zo jaloers op de kinderen die de hackathon konden bijwonen, wonen Puzzle Day, wonen kantoor uur, krijgen hulp van TA in persoon. En dus ik had nooit gedacht dat ik de kans zou krijgen hier worden betrokken de cursus die eerst kreeg me geïnteresseerd zijn in de computer wetenschap en is de reden waarom Ik ben vandaag een computer science major. Dus ik u waarschuwen, deze klasse zal je rekken. Het zal je uitdagen. Maar het is ook naar je leren hoe je dingen te doen dat je nooit gedacht je kon. STELIOS: Hallo, iedereen. Mijn naam is Stelios. Ik ben een junior in Branford College en een CS-majoor. Ik ben ook van Athene, Griekenland. ik kijk er echt naar uit om te voldoen aan u allen, chatten met u ten deel, bij kantooruren, op vrijdag lunches. Ik ben echt enthousiast, want we hebben zo veel energie gestoken in het creëren van een unieke ondersteuning structuur voor jullie allemaal om uw ervaring met maken tijdens de best mogelijke. En ik hoop dat hoewel de meeste van heb je waarschijnlijk geen standpunt ingenomen CS Natuurlijk voor, ik hoop dat het CS50 voor u is wat interesse vonken verder na te streven computer wetenschap in de toekomst, zoals is gedaan met zo veel mensen in het verleden. Dus dank u voor hier, opgewonden om je te zien. Jason Hirschhorn. JASON HIRSCHHORN: Hallo, iedereen. Mijn naam is Jason Hirschhorn. Ik woon in Silliman. En ik ging naar Harvard als een undergrad en studeerde in maatschappijleer en bijvak in de informatica. En een van mijn belangrijkste rollen hier is dit prachtig personeel te ondersteunen als ze ondersteunen jullie allemaal. In feite is dit niet allemaal. Er zijn 55 studenten en afgestudeerden hier om u allen te ondersteunen. En ik durf te zeggen dat een van de beste delen van de cursus voor u Alles krijgt om mee te werken hen, om ze te leren kennen, krijgen om ze te zien, zowel in de CS50 en buiten CS50 dit semester en vele semesters te komen. Dus hopelijk zult u nemen Natuurlijk omdat hopelijk krijgen om met de prachtig personeel hebben we op het podium. SPEAKER: Nou, laat me afmaken door te zeggen dat zal leuk zijn. DAVID MALAN: Nou, dankzij ons hele team. Sta mij toe om de lichten dimmen en toelaten dat sommige meer van ons team, zowel vanuit Cambridge en New Haven, om hallo te zeggen als deze jongens bestand af. En daarna zullen we de overgang naar de eerste van onze programmering engagementen met deze taal genaamd Scratch. Dus dank aan het team. Laten we dim de lichten en horen van een paar anderen. [APPLAUS] [VIDEO AFSPELEN] -De Missie van de CS50 is om u te maken meer comfortabel met een totaal nieuwe manier van denken, deze computationele mentaliteit. -Het Gemaakt computer science interessant, die is iets wat ik niet echt te realiseren mogelijk was totdat ik nam de klas. -Ik Was als, whoa. Ik ben echt het vertalen van mijn gedachten in een computer op dit moment. -Zelfs Als je geen achtergrond hebben in de informatica of geen ervaring, dit is eigenlijk de klasse voor jou. -dus Ik wil zeker mijn leerlingen om gewoon enthousiast over informatica. Niet alleen de programmering, maar denken als een computer wetenschapper is echt wat ik wil probeer mijn eerstejaars onderwijzen. -CS50 Is hard en te belonen. -Een ervaring. -Extravaganza. -Het Is ons brengen naar het volgende niveau. [Muziek] -De TF's zijn, denk ik, de levensader van de cursus. -Ik Ben verheugd om mijn studenten Ik help hebben dat aha moment om te beseffen wat ze eigenlijk probeert te doen, om erachter te komen hoe je een pset doen. -CS50 Is zeker een harde koers. Maar in tegenstelling tot alle andere cursus echt aan de Yale, het heeft zo'n grote, ondersteunende gemeenschap. -Je Absoluut niet nodig om iets te weten ongeveer coderen kunnen om de cursus te nemen. -Het Is verbazingwekkend om te zien hoe ver mensen komen in een semester. -Je Waren niet alleen zitten in uw kamer leren code, maar het was meer dan alleen een klasse. Het was een ervaring. -De Beste manier om concepten te leren en te verwerken hen is door het onderwijs van anderen. -Wat Is de telefoon split? [Muziek] -En Dit is CS50. [Muziek] -Dit Is CS50. -Heb een probleem? Scheuren in de helft. [Muziek] Gooi het weg. DAVID MALAN: Oké. Dus laten we tackle-- in een klein bit overigens, het al deze traditie voor reden voor 10 jaar om taart te dienen bij de start en het einde van de CS50. Dus op u te wachten aan het eind van vandaag, naast syllabi zal een stuk taart zo goed, en het personeel van de cursus om hallo te zeggen. overgang Maar nu, laten we aan de eerste van onze talen, waarbij we zullen gewoon een week en één besteden echt probleem die op dit domein, Scratch. En je zult zien als je hebt geprogrammeerd voor vele van de ideeën en de mogelijkheden zijn u bekend. Maar je zult zien dat vinden het is leuk langs de weg om erachter te komen hoe om te vertalen een aantal van de ideeën die je al kent deze bijzondere omgeving om echt indruk op uw familie en vrienden met je werk, dat kan online gaan, als je daarvoor kiest, daarna. En als je geen voorafgaande ervaring en zijn onder de meeste studenten minder comfortabel, beseffen dat veel van de ideeën die we gewoon verkend met reality-- dingen zoals telefoon boeken en aanwezigheidsregistratie en zo forth-- vertalen vrij mooi op een computer, maar niet als je gebruik maakt, in eerste instantie, een taal als dit. Dit is dus een programma geschreven in een taal genaamd C. En we zullen wel een beetje door te brengen van de tijd in C, uiteindelijk. Maar kansen zijn, zal dit een beetje kijken cryptisch om u op het eerste gezicht. In feite is er een hoop rare syntax, haakjes, punthaken, accolades, citaten, en puntkomma's. En inderdaad, als je een duik nemen in programmering voor het eerst kijken en proberen om dingen te creëren als dit, eerlijk gezegd, je krijgt zo wegzakken zo vaak in gewoon dom minutia die niets heeft intellectueel interessant over. Maar stel je voor als je zou kunnen maken dezelfde program-- die, zoals je misschien soort afleiden, waarschijnlijk prints "Hello, world" een of andere manier. We kunnen dat hetzelfde idee destilleren in slechts twee puzzelstukjes, als je wil. Inderdaad, Scratch is interessant want het is deze grafische taal. U kunt slepen en neerzetten van deze puzzelstukken die alleen interlock als het maakt logische zin te doen. En dus in Scratch, we zullen snel zien, dit is hoe je datzelfde zou uitvoeren programma, met slechts twee puzzelstukjes dat vrij veel doen wat ze zeggen. Maar we zullen zien in slechts een moment dat sommige van de bouwstenen die we gezinspeeld eerder en een paar zijn dat alles uiteindelijk gaat opleveren sommige van onze vroegste programma's. We gaan dingen zoals functions-- gewoon acties die iets te doen, zoals gedag zeggen, wereld. We gaan loops hebben, dingen die cycli veroorzaken opnieuw en opnieuw, net als wij heb daarnet met het zoeken voor Mike Smith. Variabelen, zoals in de algebra, als je hebben x of y, dat een aantal kan opslaan. Nou, in een programma, kun je eigenlijk slaan meer dan alleen cijfers. U kunt de woorden en zinnen op te slaan en afbeeldingen en andere dingen nog. Booleaanse uitdrukkingen, net questions-- ja of nee, waar of onwaar. Voorwaarden, beslissingen nemen gebaseerd op de ja / nee antwoord. En dan liefhebber dingen zoals array en draden en evenementen en een aantal andere functies, maar allemaal kaart zeer mooi tot zeer vriendelijke blokkeert als deze. Dit gaat om een ​​functie, een te zijn paarse puzzelstukje dat alleen maar zegt wat de naam is-- in dit geval zeggen. En dan vaak, is er een witte doos die je kunt typen of sleep een bepaalde waarde in. En dat is wat er over het algemeen riep een argument of een parameter. Het is een manier van het veranderen van de standaard gedrag van een puzzel piece of een functie, zodat het doet iets op maat voor u als het zeggen, hello, hello wereld of, Andy of hello, Jason of een andere straf in plaats daarvan. Als je wilt zeggen dat een lot-- letterlijk forever-- kunt u een andere nemen puzzelstukje genoemd forever en gewoon ingeklemd de twee samen als dit. En dat lus, als het beeld al doet vermoeden, betekent gewoon gedag zeggen, wereld voor altijd, opnieuw en opnieuw en opnieuw. Of, als je alleen wilt doen het een eindig aantal keren, zoals 50 maal, er zal een andere puzzel stuk voor dat-- herhaal 50 keer. Ondertussen, als je wilt een variabele hebben in deze taal zijn we over om mee te spelen, kunt u een oranje blok, zoals dit te gebruiken. En deze variabele I willekeurig opgeroepen i integer. En ik stel het gelijk is aan 0. En dus misschien heb ik, in dit case-- deze variable-- vertegenwoordigt iemands score in een spel. Je begint op nul, en elke keer dat je maak een doel of iets dergelijks, je krijgt een extra punt. U kunt vragen in Scratch stellen. Als we slepen en neerzetten puzzel stukken in een moment als dit, u kunt vragen als, goed, is dat ik minder dan 50? Misschien moet je 50 punten te winnen. En dus dit zou zijn de vraag die u zou vragen. Of, meer in het algemeen, u kan zeggen is x kleiner dan y, waar er twee variabelen bij betrokken? Nu, dit is een stuk groter op het eerste gezicht, maar echt niet dat alles complexer. Dit is gewoon een combinatie Condities en variabelen en Booleaanse uitdrukkingen te vragen drie questions-- is x kleiner dan y? Als dat zo is, zeg dat dan. Zeg, x is kleiner dan y. Anders, indien x groter is dan y moet anders x y gelijk zijn. En dat met Mike Smith, waren er vier scenario's, hier in de wereld van getallen, x ofwel kleiner dan, groter dan of gelijk aan. Alles wat we hebben, zijn drie vorken in de weg. En dan is er nog liefhebber puzzelstukjes als deze voor dingen zoals arrays, waar we zijn zal in staat zijn om informatie op te slaan. We gaan blokken die het mogelijk maken te zien ons uit te voeren meerdere threads, een andere functie die we zullen gebruiken, en dan ook iets genaamd evenementen. Maar voordat we dat point en maak zelfs, uiteindelijk onze eigen aangepaste puzzelstukjes, laten we eigenlijk het programma zelf te openen. Dus dit is Kras. Het is verkrijgbaar bij scratch.mit.edu. En bent u welkom om te spelen nu of later, als goed. Dit gebeurt aan de offline versie. Voor mensen die niet per se grote internet, kunt u het downloaden dezelfde software en. En er is eigenlijk maar drie onderdelen van deze software. Op de linker bovenhoek van het scherm is het soort podium dat Scratch, die standaard ziet eruit als een kat, leeft binnen. Hij kan omhoog, omlaag, naar links en rechts en doe een aantal andere dingen, en kan op een aantal manieren op basis van kijken op de kostuums die u toewijst aan hem. Maar dit is wat we noemen een sprite, een soort karakter. En je kunt meerdere hebt karakters, zoals we zullen snel te zien. In het midden zijn nu al deze puzzel stukken en deze categorieën of pallets daarvan. Dus nu, ik klikte op Motion. En dus ik ben het zien van alle -Motion gerelateerde puzzelstukjes of blokken, zodat functies die moeten te maken met een naar boven, omlaag, naar links of naar rechts of een andere bewerking. Maar als ik klikte op Looks, je kon dingen te zien zoals het woord block dat we zagen slechts een moment geleden. En als ik op controle klikt, zie je dingen zoals de herhaling en de eeuwigheid en de als blok dat we zagen een moment geleden. En dus je zult vinden dat we zullen gewoon krabben het oppervlak van sommige puzzelstukjes, maar het is allemaal vrij intuïtief en point and click. Inderdaad, werd ontworpen Scratch voor jongere leerlingen om te helpen geef ze een uitlaatklep voor creatief denken. En toch heerlijk, het is een prachtige opstap precies de ideeën die we gaan verkennen in C en Python en JavaScript, ook. Aan de rechterzijde, eindelijk, Dit is de zogenaamde scripts gebied. En dit is slechts de schone lei met waar je beginnen om een ​​programma te schrijven. En ik zal precies dat. Nu, ik weet toevallig waar dingen want ik heb dit een paar keer gedaan. Maar ik weet dat in het kader De gebeurtenissen categorie, er is dit blok hier-- wanneer groene vlag geklikt. En merken als ik uitzoomen en opnieuw in hier op het podium, Scratch leven binnen deze kleine rechthoekige wereld, boven die een groen vlag en een rood stopteken. Dus ga en stop, respectievelijk. En dus wat doe ik wil doen wanneer die groene vlag wordt geklikt? Nou, laat me naar die categorie Looks. En laat me ga je gang en slepen en neerzetten dit. En merk zodra het wordt in de buurt, ze zijn een soort magnetische. Dus als ik nu laten gaan, het klikt samen mooi en netjes. En ik ga om verder te gaan en iets zeggen als: hello, wereld twee seconden. Laat me uitzoomen en klik op nu de groene vlag, en zeg, hello, wereld. Okee. Dus dat is allemaal prima en goed. Niet zo spannend. Laten we het een beetje leuker. En ik weet dat er in voorschot, Scratch gebeurt om te komen met een aantal leuke dingen als dit. Dus speel geluid meow gaar. Dus laten we dit doen. [MAUW] Ach, dat is schattig. En als ik klik erop again-- [MAUW] En opnieuw. [MAUW] Maar ik blijf het moeten Scratch reanimeren. Maar ik kan beter dan dit te doen. Waarom heb ik niet slepen slechts drie van deze. En nu is het drie keer zo schattig. [MIAUWEN] OK, eigenlijk, het is een beetje griezelig. Dus we iets er tussenin nodig hebt daar. Als ik naar Control, het lijkt erop dat er is eigenlijk een wachttijd blok. En dus zien als ik de muisaanwijzer over er-- en laat me dit een beetje groter te maken. Als ik zweven, het gaat om vastklikken. Dus wacht een seconde, wacht een seconde. Laten we hit groene vlag weer. [MIAUWEN] OK, een beetje meer natuurlijke, maar niet erg efficiënt. Dus dit is correct als mijn programma's doel werd drie keer miauwen. Maar het is niet erg goed ontworpen. Ik soort snijden sommige bochten. Ik heb een beetje lui. Wat voelt like-- wat moet ik lijken slecht te hebben gedaan, zou je zeggen? Ja? Ja, in het midden. PUBLIEK: Tweedehands meer geheugen dan je nodig hebt om omdat je met behulp van zo veel verschillende lijn. DAVID MALAN: Ja, dus meer lijnen. En het zou niet noodzakelijkerwijs geheugen, hoewel het kan worden gezien als op die manier. Maar het is definitely-- er is redundantie. En ik letterlijk soort gesleept en liet de dezelfde dingen. En als je soort extrapolate-- als het is niet duidelijk hier-- goed, hoe zou Ik meow 30 keer? Ik zou slepen en neerzetten, net als, 30 meer paren puzzelstukjes. En zeker, er is een betere manier. En we hebben een betere manier gezien. Wat zou intuïtief zijn de betere manier? Ja, gewoon gebruik maken van een lus. Geen kopiëren en plakken. En inderdaad, wanneer deze semester als je begint het vinden van jezelf te slepen, of eigenlijk kopiëren en plakken, gevaarlijke gewoonte om in omdat dit is gewoon niet erg onderhoudbaar. Bijvoorbeeld, als ik wil veranderen het geluid naar iets anders, Ik moet het nu veranderen in drie locaties in plaats van slechts één. Want inderdaad, als ik breek deze away-- Ik ben gewoon gaan om het te ontkoppelen als dat. Laat me pak een herhaling blok, en klik drie, typt u drie, gooi een aantal van deze weg door gewoon loslaten. En dan merken ziet er niet uit als het past, maar magnetisch, het gaat niet alleen vastklikken maar groeien om de vorm te passen. Dus dat is goed. En nu, als ik klik op het spel. [MIAUWEN] Erg fijn. Okee. En nu is het heel gemakkelijk om veranderen ook, want ik kan gewoon veranderen één nummer op één plek. Maar ook dit is niet zo interessant. Laten we eigenlijk Scratch niet miauw, maar bewegen. Laat me gaan naar Motion en bewegen 10 stappen binnen van-- whoops, laat me dit op te lossen. Laat me het te verplaatsen 10 steps-- eigenlijk, laten we niet te herhalen. Laat me pak een controle blok, en doe het volgende voor altijd. Altijd, bewegen 10 stappen. En klik op Play. OK. Dus gelukkig, stopt hij. Anders kinderen zou krijgen erg overstuur als ze een soort van verliezen hun kat. Maar in ieder geval ik kan slepen hem terug in het scherm. Maar dit is niet alles grote van een spel of animatie. Het zou zo misschien wel leuk zijn Hij belandt in de rand. Dus wat doen we? Wat construct hebben we nodig hebben Scratch besluiten te stuiteren, denk je, zelfs als je nog nooit hebt gezien Scratch voordat? Ja, in de rug. PUBLIEK: Je hebt een als blok of als-dan. DAVID MALAN: Ja, dus sommige soort als blok of als-dan. Dus eigenlijk hebben we een van deze hier. Dus if-- dus laat me ontdoen van de beweging. Laat me te vergroten, zodat het is groter. Dus hoe zit dit. Voor altijd, als Sensing-- we hebben niet eerder gezien. Ik moet een Booleaanse uitdrukking. En het blijkt dat als het aanraken van wat? Als het aanraken van de rand, wat wil ik doen? Nou, als ik ga terug naar Motion, blijkt, oh, ik kan omdraaien. Laat me dit te slepen in hier. Waarom weet ik niet ga je gang en draaien 180 graden? En nu, laat me gewoon bewegen op het einde. Ik kon de beweging op te zetten het begin of het einde. Maar logisch, elke keer als ik beweeg, ik wilt controleren, ik ben het aanraken van de rand? Ben ik het aanraken van de rand? Ben ik het aanraken van de rand? Zodat logischerwijs ik me omdraai, zo ja. Dus laten we hit te spelen. OK. Dus het is een beetje buggy, om zo te zeggen. En een bug is gewoon een vergissing in een computerprogramma. Maar in ieder geval dat het werkt. En in feite, kan ik hier naar binnen. En laat me niet 10 stappen bij een tijd, maar dit is wel animatie. Dit is allemaal een cartoon of zelfs een film is. Laat me bewegen 20 treden tegelijk. Dus 20 keer zo veel dingen gebeuren eenmaal of tweemaal zoveel in dit geval. En hij beweegt sneller. Laat me veranderen naar 30. 100. 1000. En het gaat echt snel. En dit is-- ja, OK. Dus nu zijn we gewoon knoeien met het. OK, dus buggy. Maar we kunnen slepen hem uit de weg hier. Maar we kunnen nog leuker te maken met dit, ook. Hoe zit het dit-- hij ondersteboven. Maar het blijkt Scratch-- en er is eigenlijk, Ik moet wijzen, geen academische waarde toe aan wat ik over te doen. Maar als ik het openstellen van de microfoon, laten we stop hem en zoiets als dit te doen. Ouch! [LACH] Dat was schattig. Dank je. Nu, dit is wat mijn stem ziet eruit als toen ik schreeuwen ouch. Ik denk niet dat we gevangen je lach. Dat is geen probleem. Laat me dit op te slaan als "ouch." Laten we deze opslaan als "ouch". En nu gaan we terug naar Scripts. En nu heb ik need-- laten we eens kijken, Sound. Oh, spelen geluid ouch. Dus als ik de rand te raken, laat me eerste toneelstuk ouch, en dan omdraaien. En nu laten we hem in het midden. [Zeggen "OUCH"] Twee keer zo snel. OK. Maar het is letterlijk doen wat ik zeg. Zodat deze in feite juist, het gewoon een beetje vervelend snel. Dus laten we iets toevoegen interessanter deze. Laat me eigenlijk open een die ik van tevoren, treffend noemde het huisdier van de Kat, die dit doet. Hier is het script hier. Wat gaat dit doen in het Engels termen? Wat is dit ontworpen om te doen? Ja, laten we gaan some-- ja? PUBLIEK: Wanneer u huisdier de kat, hij miauwt. DAVID MALAN: Ja, dus als je huisdier de kat, het gaat om te miauwen. Dus met andere woorden, er is nu een voor altijd lus nog steeds, in combinatie met een aandoening, gecombineerd met een Boole-expressie, gecombineerd met een partner functies, het effect die, zodra ik speel dit programma is niets gebeurt totdat ik de cursor te verplaatsen dichter en dichter en dichter en-- [MAUW] Dan is het net als aaien van de kat. [MAUW] Slechts eenmaal je eigenlijk Beweeg de cursor over hem. Nu, ik ook opgezweept niet huisdier de kat, dat deze plaats doet. [MIAUWEN] Dus hij is gewoon constant miauwen. [MIAUWEN] Maar als ik te close-- [MIAUWEN] [BRULLEN] Dus hoe werkt dit? Nu heb ik gewoon een twee-weg vork in de weg. Als het aanraken muisaanwijzer, dan spelen de leeuw geluid. Else gewoon spelen de miauw geluid, en wacht drie seconden, zodat dat het soort doen het erg rustig. Okee. Dus dat is een combinatie van wat meer ideeën nog steeds. Laten we eens een kijkje nemen op dit voorbeeld Ik slagroom opgeroepen draden. En dit is fundamenteel verschillende doordat deze hefbomen een kenmerk van veel programmeertaal draden, het vermogen van een programma ter letterlijk doen twee dingen tegelijk. Sterker nog, deze dagen als je met behulp Google Docs of Microsoft Word, en uw document is zich constant spelling gecontroleerd, zelfs als u Motortype- of u Ctrl-P of Ctrl-P en afdrukken iets, het is het printen terwijl u verder met typen. Programma's van vandaag kan inderdaad meerdere doen dingen tegelijk, net als in Scratch hier. Dus hier, ik heb twee sprites nu een vogel en een kat. En als ik klik op elk van die tekens een voor een, Ik zie op dit moment van de vogel scripts bovenaan rechts. Nu zie ik de kat. Vogel, kat. Dus elk van hen hebben hun eigen script. Maar let op, wat puzzelstukje ze allebei beginnen? Als groene vlag aangeklikt. En vogel, als groene vlag geklikt. Dus als ik klik op de groene vlag, allebei van die scripts of programma's zullen parallel lopen. En je zult merken dat de vogel is net gedachteloos stuiteren de rand. De kat duidelijk is geprogrammeerd met een strategisch voordeel. En-- [BRULLEN] Okee. Dus de kat ving de vogel in dit geval. Waarom is dat? Nou, bericht eerst hebben we gewoon de vogel gewoon gedachteloos gaan om deze eerste locatie, en dan voor altijd, zo niet de kat te raken, gewoon bewegen. En als je op de rand, stuiteren. En net te verplaatsen. En als je op de rand, stuiteren. Maar de kat, ondertussen, heeft enkele extra logica dat zegt dit-- eerste, net zo dat dit niet volledig bevooroordeeld tegen de vogel, merk dat ik heb gebruik gemaakt van een groene puzzelstuk er die daadwerkelijk kiest een willekeurig getal. Een kenmerk van vele talen is te geven u willekeurige of pseudo-willekeurige getallen. Dus in dit geval, de kat aanvankelijk kiest een willekeurig getal tussen, zoals, 90 graden en 180 graden, in wezen, dus dat er een klein beetje van de variantie. En dan voor altijd, als ontroerend de vogel, spelen de leeuw geluid. Anders gewoon wijzen in de richting van de vogel. Wijzen in de richting van de vogel. Punt naar de vogel, die een puzzelstukje op zichzelf in dit geval. Nou, we kunnen een ander ding hier te doen. Laat ik het openstellen van de gebeurtenissen programma hier. En hier hebben we weer twee sprites, die eruit zien als deze twee marionetten hier. En wat interessant is hier dit. De oranje man heeft dit set van puzzelstukjes hier. Altijd doen de following-- indien de spatiebalk ingedrukt, dan zeggen, Marco, en vervolgens uitgezonden een gebeurtenis. En ondertussen, de blauwe man heeft hier dit-- wanneer u de gebeurtenis ontvangt, zeggen Polo. Dus het blijkt in Scratch en in andere talen, er zijn manieren voor twee programma's of twee scripts, in casu aan elkaar verbonden zodat wanneer ik druk op de spatiebalk, zegt Marco. En de ander die hoort bij wijze van spreken en zegt Polo in reactie. Dus je kunt programma's schrijven dat zich gedragen op deze manier. En als ik dit één plaats, Ik kan zelfs variabelen toe te voegen, alleen met behulp van een sprite in dit geval. Deze is vooral vervelend. [SEAL BARKING] Nu, let op de juiste we hebben wat extra logica hier. Hoe voorkom ik dat dit zegel met blaffen? [SEAL BARKING] Het lijkt erop dat op de rechter side is wat is het spelen van het geluid. Maar het is alleen het spelen van een klinkt als wat waar is? Als een variable-- oranje block-- gedempt is nul. Hoe kan ik gedempt veranderen te zijn 1, wat betekent dat waar is, maken dit gedempt? Blijkbaar is de andere script, kan ik druk op de spatiebalk, en nu stopt hij. Dus we kunnen deze onderling contact hebben over scripts, maar ook, door gewoon het delen van een variabele over de twee als deze. Nu, dit is niet zo interessant. Laten we gaan en dit te doen en te combineren veel van deze ideeën met dit programma hier. Voordat we dat doen, hoewel, wat dacht je van een vrijwilliger? Laat me de druk opstijgen van me omdat ik niet echt speel dit spel. Laten we iemand die we nog niet eerder gezien. Je moet comfortabel komst op het podium hier, op de camera. OK, kom op. Erg dapper. Wat is je naam? IDRIS: Idris. DAVID MALAN: Sorry? IDRIS: Idris. DAVID MALAN: Idris, leuk je te ontmoeten. Kom maar naar boven. En nu, op uw eigen mobiele telefoon, heb je Pokemon GO spelen? IDRIS: No. DAVID MALAN: Echt waar? IDRIS: Ja. DAVID MALAN: OK. Okee. Leuk om je te ontmoeten. Kom op dan. Ik ook niet. Dus zullen we samen uitzoeken hoe spelen dit, dat iemand daadwerkelijk ging en in Scratch geïmplementeerd door het veranderen van de kat in wezen verschillende personages allemaal samen. En als ik fullscreen dit hier, gaan we naar het volgende spel samen te zien. Nog aan het laden, nog steeds geladen. Kom op. Laat mij dit te doen. Kom op. Dit spel is zo groot dat het crashte. Stand-by. Probeer dit eens te meer. Kom op. Okee. Daar gaan we. OK. Groene vlag. Dus hier gaan we. [Muziek] Kies hier het middelste niveau. Klik op de blauwe jongen daar. Okee. En u kunt gebruik maken van de pijl keys-- omhoog, omlaag, links, rechts. Nu, laten we eens kijken als we dit-- doen en dan gaan na het teken daar. Yep. En nu op hem met de muis. O ja. Move. Waar is de pijl? Alsjeblieft. Klik dus op daar. Ja. Okee. Dus nu ben ik verteld heb je een Poke bal, dat als klikt, zal het dat doen. Erg goed. In het oefenen voor vandaag, ik vond deze versie van het spel eigenlijk niet erg hard. Dus als je hier weer willen gaan, naar beneden lopen naar deze Poke bal. En ga dan rechtsaf. Klik op het. Oh, eigenlijk, dat is de opslag, blijkbaar. OK zo dichtbij dat. Nog nooit gedaan dat vóór. Misschien tot dit ding hier. Oh, daar ga je. Wacht, er is één daar. Oh, er is een andere. OK. Down. Ja, klikt u op. OK, dat is heel schattig. OK, zeer goed gedaan. Dit spel is niet erg hard. OK. Gefeliciteerd. Hier hebben we een CS50 stressbal voor jou. Maar overwegen voor slechts een moment wat sommige van de afhaalrestaurants zijn er. Makkelijker dan het echte spel, blijkbaar. Maar alles wat we hebben te gaan hier is een teken dat heeft waarschijnlijk een soort van de lus die ermee verbonden zijn. Het is niet een kat. Het is dit karakter in plaats daarvan. En dat lus is gewoon constant zeggende als pijl omhoog gedrukt, Als de pijl naar beneden gedrukt, indien pijl naar links of rechts gedrukt pijl ingedrukt, omhoog of naar beneden of naar links of rechts. Of als er een ander puzzelstukje er die zegt dat bij het aanraken van een andere sprite, bij het aanraken van een van de personages de Poke bal, zo ontroerend, dan is dit te doen. Dus al van de ideeën die we hebben gebruikt tot nu toe heel kunnen alleen worden toegepast in het onderhavige context om dit spel te spelen, als goed. Laat me ga je gang en trek één andere hier in feite. Laat me ga je gang en trek up, laten we zeggen, dit. Dit is iets wat we remixed. Gemaakt door een van onze studenten in Cambridge, en toen ging ik door en veranderde vrijwel elke instantie van Harvard Yale ditmaal. Zou iemand willen concurreren tegen de Ivies hier een accumulatie al deze ideeën? Kom naar beneden, ja. Wat is je naam? DINA: Dina. DAVID MALAN: Adina? DINA: Dina. DAVID MALAN: Dina, kom naar beneden. Oké, Dina. Dus dit spel wordt harder en harder, want in dit spel, er variabelen worden ook gebruikt dat voortdurend bijhouden van welk niveau je bent in het spel. Zo leuk om je te ontmoeten. Kom hier rond. En dus het doel hier is om te sorteren maken van je weg door een doolhof dat deze student geïmplementeerd. En alleen maar om het podium, elke van deze foto's op het scherm is zijn eigen sprite, een eigen karakter. Dus deze waren standaard katten, maar de student veranderde hen de verschillende Ivies logos hier. En dan zul je dat gewoon zien door het gebruik van voorwaarden en loops en functies en meer, krijg je dit. [Muziek] [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Ja oke. Ja, ga door. Eerste niveau is heel eenvoudig. Je hebt net om daar te gaan. Maar nogmaals, overwegen, dit is gewoon een lus te luisteren naar de pijl keys-- omhoog omlaag links rechts. En nu een sensing blok. Erg fijn. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Erg fijn. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Erg fijn. Lekker makkelijk, Crimson. Okee. Levels-- uh-oh. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] En nogmaals, in deze drie Harvard kammen, hoef je alleen maar de logica zeggen als op de rand, bounce. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] OK, wat je doet is interessanter dan waarom. Erg fijn. Erg fijn. Oh Oh. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Ik denk dat je moet jezelf opofferen. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Snel! [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Nice. Dat is geen probleem. Je zult krijgen. Ja, ja! Erg fijn. [TOEJUICHENDE] [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Nice! [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Begrepen. Kom op! Voorlaatste niveau. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Okee. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Ja. Goed gebruik van variabelen hier. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Ja. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Nice. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Het is ok. We kwamen aan het einde te komen. Er. Oh! [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Misschien laat vandaag lopen, maar het zal de moeite waard zijn. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Je kan het! Ja! [TOEJUICHENDE] [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Deze is echt moeilijk. [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] We zullen jullie meer leven te geven. Kun je het doen? [MUZIEK - MC Hammer, "U KAN NIET AAN  DEZE"] Okee. Wat dacht je van een grote ronde applaus toch. Je moet de voorlaatste niveau. Dank je. [APPLAUS] Dus dit is alleen maar om te zeggen hoeveel u kan doen met dit soort dingen. En beseffen ook dat wanneer puzzelstukjes niet exist-- en inderdaad, dit gaat om één te zijn van de bevoegdheden met het eerste probleem sets en beyond-- is eigenlijk maak uw eigen. En dit is slechts een fragment één van de voorbeelden zult u in staat om te spelen met online, waarbij als je het niet hebt ingebouwd in Scratch zoiets als een hoest puzzelstukje, je kunt eigenlijk maken het zelf. En dus dit alles en meer wacht. En alleen maar om te schilderen een uiteindelijke beeld van wat er werkelijk vooruit in petto voor de klasse voor u, gebaseerd op enkele foto's van klasgenoten verleden, wil ik de lichten dimmen een laatste keer en je laten zien CS50. [Muziek] Okee. Dat is het voor CS50. Cake wordt nu bediend. [Muziek]