[Muziek] Dit is CS50-- Harvard University's introductie het intellectuele ondernemingen van de informatica en de kunst van het programmeren. En mijn naam is David Malan, en Ik zat net te denken vanmorgen, het is verbazingwekkend al 20 jaar vandaag sinds ik voor het laatst zat, waar jullie nu doen. Het was 1996. Ik was een tweedejaars, en ik nam CS50 voor de allereerste keer. En ik had niet eens opgestaan ​​de zenuw om het te nemen mezelf eerste jaar, mede vanwege de tijd. Informatica voor mij was een beetje leuk, meh. Ik was een beetje een geek groeiende up, maar ik heb niet echt enig intellectueel interesse in wat leek gewoon een hele hoop te zijn mensen programmeren van alle tijd. En ik was bang om eerlijk te zijn. De cursus en informatica meer algemeen had en in zekere mate, heeft nog steeds deze reputatie van een veld aan pas op, al was het maar omdat er zo velen van ons niet vertrouwd zijn met het en onzeker van. En het was echt niet totdat ik gewinkeld deze klasse die tweedejaars fall-- en zelfs dan, ik heb alleen ingeschreven omdat de professor-- een van mijn eerste mentor, Brian Kernighan nu bij Princeton-- kon ik neem de klas Pass mislukken. En inderdaad, dat is de reden waarom vandaag hebben we laten en aan te moedigen studenten tot deze klasse nemen sat / unsat. En alleen dan, door de einde van het semester besefte ik als, wow, dit was niet zo'n een onbekend gebied. Inderdaad, dit was een zeer empowerment veld, en nog veel meer spannende, vooral later zoals ik volgde cursussen in Dramatic Arts 101 en Latijns-A en dan uiteindelijk graduate school archeologie, heb ik echt beginnen met het zien snijpunten van dit gebied, computer wetenschap, met de geesteswetenschappen, natuurwetenschappen, de kunsten, geneeskunde, en dergelijke. En dus dat is wat is gewoon zo keurige over informatica uiteindelijk, zoals we hopen dat u zult see-- is de toepasbaarheid op deze andere terreinen, en hoe u kunt neemt een deel van de huidige en het semester ideeën en praktische vaardigheden terug naar je eigen domein, en eigenlijk verken dit kruispunt van de vrije kunsten en de wetenschappen. Dus 73% van u, als laatste jaar een indicatie is, hebben een CS natuurlijk nooit eerder genomen. Dus als je, zoals ik, je bent gevoel een beetje bang, of eerlijk gezegd ben je niet echt zeker waarom u nog hier bent. Misschien heb je gewoon volgen enkele vrienden uit om Sanders nu. Dat is helemaal prima. Het doel is hier om te haken u en u geruststellen dat als je kijkt naar Links en rechts, je gaat om klasgenoten te zien met zo veel of zo weinig ervaring dat je zelf zou kunnen hebben. En inderdaad, we delen wat statistieken later vandaag wat de demografie van de klas meestal uitzien. En als toegevoegde reassurance-- en dat we bedoel omdat ik nam in de loop enkele jaren ago-- in syllabus van de cursus is dit-- dat wat uiteindelijk kwesties in deze cursus is niet zozeer waar je terecht up ten opzichte van je klasgenoten, maar waar in week 11, het einde van de semester, uiteindelijk ten opzichte van jezelf in week 0, wat waar we zijn hier vandaag. En dit is wat ik besefte al die jaren geleden. En ik weet dat veel classes zeg dit, maar het is met name het geval in de informatica. Aan het eind van de dag, dit gebied onbekend is zoals het was voor mij en zou kunnen zijn voor u, is echt alleen over het oplossen van problemen. En als zodanig, is het dit hebben toepasbaarheid op andere gebieden te krijgen. En inderdaad, als we probeerden te destilleren wat dit betekent, dit is het oplossen van problemen in zijn essentie, ik durf te zeggen. Er is input-- zo wat het is dat je probeert op te lossen. Er is output, dat is hopelijk de oplossing voor dit probleem. En dan, als we zouden zeggen in de informatica, er is deze zwarte doos in de midden dat je niet per se zorgen te maken over hoe het werkt. Je jezelf uiteindelijk misschien implementeren wat er in die doos. Maar met het oog op de huidige en nog veel meer over het algemeen in het leven, alles wat je zorg over is dat deze problemen worden opgelost. En wat is deze cursus uiteindelijk over is het verkennen het kruispunt van deze ingangen en uitgangen, en deze zogenaamde algoritmes, zoals we binnenkort zullen zien, dat implementeren wat onder daar, de motorkap. Maar deze ingangen en deze outputs-- Wat betekent dat eigenlijk? Goed aan het eind van de dag moeten we een manier die informatie. Dit geldt met name in een computer, die zo luxe en complex als het lijkt, is een vrij domme apparaat. Het duurt electricity-- of uit een kabel of batterij input-- en dan maakt het wat programmeerde reacties op het scherm. Maar hoe komen we uit gaan er af? Nou, wat is een probleem dat moet worden opgelost? Nou ja, misschien kunnen we op het begin van elk semester, proberen om opkomst te nemen in een kamer als dit. Dus ik zou kunnen doen als een, twee, drie. Of misschien, als ik het deed naar soort bijhouden van myself-- om spoor van things-- houden Ik kon al snel opraken van de vingers. Dus zou ik gewoon hash marks-- één persoon, twee, drie, vier, vijf, zes, zeven acht. En ieder van ons hebben waarschijnlijk dit gedaan, of op je handen of op een stuk papier. En dit is eigenlijk gewoon iets genaamd unary notation-- waar als u slechts één letter in uw alfabet, één of hash merk dat geval wordt voor elk ingang die u wilt tellen, je nodig hebt om van een van deze zetten letters-- één van deze merken. Okee. Dat is allemaal prima en goed en niet zo ingewikkeld. Maar computers zijn niet allemaal dat veel ingewikkelder. Sterker nog, de meeste van jullie waarschijnlijk weet zelfs als je hebt niet echt overwogen wat dit betekent, dat computers alleen begrijpen nullen en ones-- de zogenaamde binaire systeem. Wij mensen daarentegen, zo veel geavanceerder zover als we begrijpen nullen door de negens. Maar zelfs als binair is, aanvankelijk blik, niet zo bekend, Het blijkt dat het is net als de systemen en de ideeën die we al weten. Dus bijvoorbeeld, overweeg dan dit. Dit is slechts een opeenvolging van symbolen. En u allen, wanneer een blik op het, waarschijnlijk denk 123-- niets echt interessant daar. Maar waarom is het dit aantal, 123? Dit zijn slechts glyphs op de Screen-- gewoon patronen dat iemand zou hebben getrokken of getypt. Maar als je net als mij, je waarschijnlijk herinneren van de basisschool dat er soort kolommen of plaatsen hier. Er is de ene's plaats en de tienen plaats en honderd's place. De reden dat dit 123 en niet alleen een patroon van drie symbolen is omdat, natuurlijk, als we hebben een een in de honderden plaats, je doet de wiskunde van 100 keer één, en dan twee op de tien de plaats. Dus dat is 10 keer 2, en vervolgens drie in de een de plaats en dat is 1 keer 3. En als je al die optellen, van Natuurlijk krijg je 100 plus 20 plus 3. Dus begonnen we met slechts een patroon van symbols-- een alphabet-- maar dan in kaart gebracht we betekenis op door middel van deze kolommen. Nou, het blijkt dat computers zijn echt niet alles wat anders dan jij en ik. Maar in plaats van de bevoegdheden van de 10 gebruikt, zo te speak-- 1, 10, 100, 1000, 10.000 plek en zo forth-- ze eigenlijk gewoon gebruik maken van bevoegdheden van 2-- zodat een, 2, 4, en als we meer cijfers, 8, 16, 32, 64, 128, enzovoort. En dus dit is hoe een computer zou het getal 0 te vertegenwoordigen, net als wij mensen. 0, 0, 0-- en je kunt waarschijnlijk wel raden welk patroon van nullen en enen, als een computer kan alleen spreken 0 of 1-- wat patroon gaat vertegenwoordigen het aantal mensen die we kennen als 1? Yeah-- 0, 0, 1. Okee. Dus 0, 0, 1 is de manier waarop wij vertegenwoordigen 1, dus je zou zijn dan geneigd om het nummer 2 vertegenwoordigen, als u de vier de plaats en de twee de plaats als de enige plek, zou je kunnen zeggen, nou ja, als we hadden een 1 op de ene plaats, en nu willen we tellen tot 2, zou je doe dit en laat dit een nul. Maar natuurlijk is dit niet hoe het decimale stelsel werkt ook niet. Als je een cijfer in deze beide kolommen, je moet het rekenkundig doen. Dus welk nummer heb ik per ongeluk gewoon vertegenwoordigen? Dus het is 3, omdat 2 maal 1 plus 1 1 maal natuurlijk geeft ons drie. Dus zou dit twee. De bit soort flips, zogezegd als 0 wordt een een, net als een 9 rollen boven en wordt een 0 als u de 1 te dragen. Dit zou dan drie uiteraard. Four-- ander interessant ding gebeurt, waarbij degenen rollen en je draagt ​​de 1, om zo te zeggen. Dus dit is natuurlijk 4. Maar als je snel vooruit nu, Wat is het grootste aantal te gaan te zijn dat een computer kan in? Dus het is slechts zeven in dit geval, toch? Want je hebt een een op de vier, in één van de twee, één in het. Dus dat is 4 plus 2 plus 1. Dus dat geeft je zeven. Inderdaad, zou lijken op het eerste gezicht dat computers kunnen rekenen niet hoger dan dit. Maar dit is natuurlijk niet waar. Wat doen wij mensen doen als we willen hoger te zijn dan als 999 tellen? dragen alleen de een en net Een vierde cijfer links. En dus inderdaad we konden. We kunnen een acht hebben plaats en de plaats van een 16's, en een 32 de plaats, 64, 128-- en u kan gewoon doorgaan op tot oneindig. Dus deze nullen en ones-- de zogenaamde binaire system-- zijn wat een computer wetenschapper zou doen over het algemeen noemen een beetje, of binair cijfer. Maar nu, hoe kunnen we krijgen van de concept of de grafische vormgeving van deze dingen tot een werkelijke computer? We lijken te zijn het overslaan van een stap hier. Nou, de enige ingang aan het einde van de dag, om mijn laptop hier Hierdoor stroom van elektriciteit. Zelfs als het een lange is geweest keer sinds je nagedacht over of nooit over nagedacht hoe elektriciteit werkt, er elektronen die in of uit, en dat is mijn soort ingang. Dus als dat is alles wat we zijn krijgen als input hier, wat kunnen we doen met die informatie? Nou, we kunnen denken aan een nul gewoon een afwezigheid van elektriciteit. Niets is flowinw, niets is bewegen, gebeurt er niets. Dat is gewoon de standaard state-- nul. Maar als er elektriciteit stroomt, waarom doen we niet gewoon willekeurig, maar wereldwijd consequent, noem dat een one. Dus gewoon door het hebben van geen macht, we hebben een nul, ja macht, we hebben een een-- geen macht, ja macht. En op die manier, met behulp van iets meer fysieke of elektronische beginnen we aan dit begrip uit te voeren iets hetzij als een of nul. Inderdaad, kunnen we doen het gewoon hier. Dus hier heb ik niet drie, maar acht lampen, die elk heeft zijn eigen schakelaar. En dus als ik wilde te vertegenwoordigen het getal zeven hier, Ik zou kunnen blijken in de volgende drie gloeilampen. En inderdaad, binnenin mijn computer is miljoenen, miljarden van de dingen die gewoon zijn kleiner dan die, genoemd transistors, switches, dat je gewoon aan en uit zetten. Dus deze zijn relatief big-- big-- schakelaars in mijn laptop-- zijn vele, vele, vele, veel meer schakelaars. Maar alles wat ze doen is precies dat-- zet iets op, zet iets af. En als zodanig kan een computer vertegenwoordigen, met die miljoenen of miljarden transistors, veel en veel nullen en enen. En er is nog steeds dat andere hardware kunt u op te slaan informatie op lange termijn, zodat wanneer u trek de plug, hoef je niet verliezen. Maar dat is een verhaal voor een andere dag. Dus wat kunnen we doen met deze bits? Kunnen we alleen maar om te nemen de druk af van mij-- zou iemand willen komen hier en bieden een demo? Ik zag deze hand eerste. Wat is je naam? Maday: Maday. DAVID MALAN: Maday, kom op maximaal. Aangenaam kennis te maken. Maday: Leuk je te ontmoeten. DAVID MALAN: Kom op deze manier. Ik wil niet dat je lip omhoog. Okee. Dus hier, we hebben, notice-- één, two-- we bewerken dat out-- één, twee, vier, acht, 16, 32, 64, 128. Dit is een bewuste keuze. Er is acht bits hier-- binaire digits-- nullen en enen. En wat een bruikbare eenheid measure-- niet zo nuttig een maateenheid op zichzelf. Meestal je wilt op zijn minst acht van deze dingen, alias een byte. Dus hebben we een byte bits hier. Dus als we wilden je uitdagen met, bijvoorbeeld, spelling out, in binaire, deze waarde hier-- 42. Wil je een gooi naar dat duren? Maday: [ONVERSTAANBAAR]. DAVID MALAN: Ja, maar duw de kleine witte schakelaars in de voorkant. En u wilt spellen uit 42, en voor het oprapen is dit CS50 spanning bal als je dit. Okee. Dus je hebt 32. We gaan nodig hebben 42. Dus dat is een acht, dus dat is 40. En uitstekend-- zeer mooi gedaan. Dank je. [APPLAUS] Okee. Dus we hebben nog een stressbal. Laten we dit nog een keer doen als we kunnen. Een andere vrijwilliger? Gratis stressbal, gratis stressbal. OK. Hier in het midden, wil je naar beneden te komen? Okee. Ik weet. Daar gaan we. Dus de nummers hier-- kom naar beneden. Wat is jouw naam? DAVEY: Davey. DAVID MALAN: Davey. OK. Kom op, Davey. Aangenaam kennis te maken. En wat we gaan je hebt spell-- als je er kon blijven hangen voor slechts een moment-- is de nummer 50. Maar, maar, maar maar, maar deze zijn lagere school magneten voor een reden. Ik ben net een beetje harder, oké? Er is nog steeds acht. Okee. Dus wat hebben we daar? We hebben 32. Nice. 32 plus 16 geeft ons 48-- zo dichtbij. En prachtig. Proficiat aan Davey ook. [APPLAUS] Okee. Dus we kunnen dit doen de hele dag lang, en het maakt niet zo heel veel meer te halen interessant en meer uitdagend. Maar dat is echt de point-- is hoe relatief eenvoudig Het is aan het eind van de dag, wat een computer doet om informatie, inputs slaan en uiteindelijk op te slaan of te vertegenwoordigen die uitgangen. Maar cijfers alleen zijn niet zo interessant. Dus mensen, enkele jaren geleden, besloten, weet je wat? Het zou mooi zijn als zijn computers waren niet alleen calculators voor rekenkundige operaties, maar eigenlijk kon dingen doen, zoals tekstverwerking, of e-mail, of meer moderne incarnaties van dergelijke technologieën. En dus is de wereld besloten willekeurig, maar universeel, dat als je wilt naar de hoofdstad op te slaan letter A in een computer, weet je wat? Laten we gewoon allemaal over eens op te slaan sommige patroon van nullen en ones-- bits-- die uiteindelijk vertegenwoordigt het decimale getal 65. We zullen het allemaal over eens. 66 zou vertegenwoordigen B, 67 zou C vertegenwoordigen, en er is trossen van andere patronen van nullen en enen, of de onderliggende cijfers, dat zou betekenen andere letters nog steeds. Dus als je soort mentaal absorberen dit voor een moment, Ik heb met opzet zetten A tot en met I, waarbij H een 72 en ik is 73. Als een computer dan, in het kader van een tekstverwerkingsprogramma of een e-mail, bleek onder de motorkap te hebben deze patronen van bits-- patroon bits vertegenwoordigen 72, dan 73, dan 33-- wat zou dit betekenen in dat programma? Dus hi, en dan is er iets. We weten niet per se weten, maar wel 33-- niet op de grafiek earlier-- was gewoon een uitroepteken. Dus 72 was H, 73 is I, 33 gebeurt een uitroepteken nog steeds. Maar dat is allemaal goed en wel, en in feite tegenwoordig, in plaats van gewoon gebruik maken van zeven of acht bits, dankzij iets genoemd Unicode tegenstelling om terug te Ascii in de dag, kunnen we eigenlijk nog meer te vertegenwoordigen interessante personages dan alleen deze originele Engels bevooroordeeld letters. Maar we kunnen ook nog vertegenwoordigen netter dingen zoals kleuren. Als je ooit het acroniem heb gehoord RGB, rood, groen, blauw, dat betekent gewoon dat een computer gebruikt doorgaans drie sets van bits-- sommige aantal bits dat vertegenwoordigen een nummer voor hoeveel red je wilt, een andere set van bits voor hoeveel groen je wilt, en een andere set nummer voor hoeveel blauw je wilt. Dus een groot aantal betekent veel rood, klein aantal betekent dat er geen rood. En dus zijn dit soort van middelbare waarden hier. Dus geef me wat rood, geef me wat groen, en geef me een beetje blauw. En als je mix die drie tinten kleur samen, in casu U krijgt deze duistere schaduw geel of bruin. Maar dat patroon van acht plus acht plus eight-- zo 24 bits-- links naar rechts, is hoe een computer zou die bepaalde kleur te geven. Nu is dit gewoon een stip op een scherm. Als je kijkt echt dicht bij uw TV uw computer, zie je puntjes of pixels. En als je een hele raster van pixels horizontaal en verticaal, je hebt beelden. En dan als je rekening een beeld en daarna wassen toon jezelf een ander beeld, een ander afbeelding, een ander beeld, een ander beeld, echt snel, je uiteraard films. En dus zien waar we begonnen zijn. We zijn begonnen met deze nullen en enen. We werkten vanaf daar naar decimaal getallen, hoe we hen te vertegenwoordigen. Nu hebben we letters van het alfabet. Maar in andere contexten wachten, kunnen we nog een paar stukjes en vertegenwoordigen kleuren. Zodra u de het vermogen om kleuren te vertegenwoordigen, heb je de mogelijkheid om te vertegenwoordigen foto's en animated gifs en andere dergelijke tekens op het scherm. En als je een hele hoop foto's vliegen door de mens in een keer, het ziet eruit als bewegende beelden, en zo krijg je ook video's ook. Dus met deze zeer eenvoudige primitieven doen we hebben de weg vertegenwoordigen uiteindelijk al deze vormen van media. En we hebben weer geabstraheerd en opnieuw en opnieuw, totdat we krijgen van het laagste niveau om dit hoogste niveau. Dus dat geeft ons deze algemeen idee van abstractie. Maar we hier begonnen. Nu hier, zouden we vertegenwoordigen een computer onze ingangen met nullen en enen, onze output in nullen en enen, maar wat er in de doos? Dat is waar de computer wetenschap wordt het interessant. Dat is waar je eigenlijk meenemen eigen geest te dragen om problemen op te lossen. We kunnen nu bepalen, voor de rest van het semester, ja. Ik weet hoe binaire werkt. Ik herinner me hoe ASCII of Unicode-- het in kaart brengen om werken letters--. En het is zeker staat dat we redeneren kon rood en groen geven en blauw, en vertegenwoordigen multimedia ook. Maar dit is de interessante dingen. Dit is wat iemand in staat om problemen op te lossen. En een dergelijk probleem we willen doen, inderdaad, is het nemen van aanwezigheid, of dit te doen algoritmisch. En nogmaals, ik zou dit te doen. Ik kan een, twee, drie, vier do vijf, zes, zeven, acht negen. En ik kon het schrijven naar beneden bij te houden van het te houden. Maar dat is gewoon hoe ik zou geven de informatie. Of ik kon doen dit faster-- twee, vier, zes, acht, tien, 12, 14, 16, 18, 20, 22-- het voelt als twee keer zo snel, maar het is nog steeds gaat een heleboel tijd in beslag nemen. Maar het blijkt, als we nog hefboomeffect andere resource-- en zelfs computers deze dagen hebben meerdere CPU's of hersenen. Het blijkt dat computers kan doen veel dingen tegelijk, en inderdaad we, in deze kamer, zou dit precies vertegenwoordigen. Dus het is een beetje sociaal onhandig, maar als je zou humor me voor slechts een proces in drie stappen, laat het mij vraagt ​​iedereen in de plaats is er gewoon om op te staan ​​voor een moment. Sta op. Dus denk je bij jezelf, nummer een-- zodat iedereen in deze kamer, met uitzondering van de mensen die dat niet deden oblige, denken nummer één. Dus dat is uw nummer op dit moment. Dat is de eerste stap, of computer wetenschapper of een programmeur zouden in het algemeen te doen, gaan we beginnen tellen bij nul. Als het kleinste getal we kunnen vertegenwoordigen met die lampen nul is, door gewoon te verlaten alles uit, ik kan net zo goed beginnen te tellen vanaf nul in plaats van één. En dus dat is wat informatici te doen. Dus stap nul, opstaan ​​en denk aan de nummer één. De volgende stap is dit-- pair off met iemand staande en voeg uw nummers samen. Geweldig. Dus op dit moment in de tijd, letterlijk iedereen deelnemen denkt aan de nummer 2, met uitzondering van voor een vreemde persoon als we een oneven aantal mensen in de kamer. En nu is de derde stap hier gaat worden dit-- een van jullie moet gaan zitten. Een van jullie moet gaan zitten, en als je nog steeds staan, ga terug naar één stap. Okee. Okee. Zodat steeds meer mensen moet worden zitten. Merk op dat dit heeft veroorzaakt een loop-- een soort cyclus. Sommigen van jullie moet onhandig geplakt zijn, heen en weer tussen de eerste stap en twee, één en twee, één en twee. Dat is geen probleem. Onze eerste bug. We zullen omgaan. Okee. Laat me proberen om dingen te stimuleren mee. In principe is slechts één persoon die zoals iedereen blijft om af te koppelen. Maar laat me dingen te versnellen met de mensen die nog steeds overeind. Welk nummer denk je? 46. OK. Ga je gang en gaan zitten. Jullie zijn nog steeds overeind. Wie is er nog staan? Welk nummer denk je? OK. Dus we terug naar je toe komen. Achterin? Wat is dat? 22. OK iemand anders up top-- ja? 34. OK. Meer dan hier op mijn right-- hier? 132, erg leuk. 22? OK. En wie nog overeind? Hier? 46, erg leuk. 72. Ik kan niet veel langer kraam. Ja? 30, nice. Hier? 23? 23. En ik denk dat iedereen behalve jullie, geen druk. Oh wacht. 28? Slechts acht. OK. Slechts acht. Hieronder? 30. 23. 24. 18. Dit is het ergste implementatie van dit algoritme ooit. OK. Dus iemand anders? Iemand anders? OK. Nog een. 16? OK. 16. Okee. Dus als ik het niet gemist hebben iedereen in de schittering hier, toen ik druk op Enter, we zullen zien, algoritmisch, de totale aantal mensen in Sanders. Want nogmaals, het is alsof iedereen als je ging zitten, ging je nummer af aan iemand anders, iemand anders, aan iemand anders, zodat in theorie, Uiteindelijk enige onhandig persoon moet staan ​​worden gelaten. Maar dat is prima. We versneld dingen handmatig. Het is vooral moeilijk om te zien in deze bepaalde ruimte. En het totale aantal mensen We denken dat er hier 546. Het totale aantal I was handed door het onderwijs fellows, die de oude deed het de school langzame manier, was 820. [Lachend] [APPLAUS] Dat is geen probleem. Dus zeker toen, zijn er deze bugs. En dat is prima. En dus denk terug op deze de eerste keer dat er iets schrijf je hoeft niet per se te werken. Dit is gebeurd met mij hier ook. Maar laten we nu nadenken over hoe we misschien passen dit hetzelfde idee om iets je zou eerder hebben gezien, die is deze oude school technologie hier-- een echt grote telefoonboek. En stel dat deze telefoon boek heeft 1000 pagina's en 1000 namen en nummers alfabetisch binnenkant van het. Nou, we konden soort toepassing een soortgelijke idee om dit zeer fysiek probleem, alleen met behulp van me. Ik gewoon een soort van bedrogen door gebruik te maken van jullie allemaal met veel en veel verschillende CPU's of hersenen het uitvoeren van een aantal algoritme. Maar als het is gewoon klein oude me, ik kan het nog steeds hefboomeffect dat zelfde essentie van een idee te verdelen en het veroveren van dat probleem opnieuw en opnieuw, waarbij de helft van jullie, de helft van jullie, de helft van je de helft van je, theoretisch bleef zitten, totdat we vertrokken waren, in theorie, met slechts één persoon. Dus in dit oude school technology-- we niet doen moeten deze map-- deze oude school technologie, we kunnen beginnen met het zoeken naar iemand Like Mike Smith, één pagina per keer. En ik zie dat niet, Mike is niet hier. Ik ben nog steeds in de A-sectie. Uiteindelijk vind ik mezelf in de sectie B. En dit is een algorithm-- stap voor stap instructie. Begin bij het begin en één pagina in een tijd, op zoek naar Mike Smith. Hierdoor correct-- deze algoritme of aanpak? Ja, het klopt. Als Mike hier is, uiteindelijk Ik krijg hem. Maar het is niet efficiënt. Het is natuurlijk erg traag. Dus ik kan gebruik maken van de Hetzelfde twosies benaderen. Ik kan soort van twee te doen, vier, zes, acht, 10, 12. Het is twee keer zo snel. Ik ga Mike te krijgen sneller als hij er is. Klopt het? Ja, maar ik hoorde een little-- nee. Nu hoorde ik een nee. Ja. Er is een bug in potentie. Misschien Mike gewoon per ongeluk ingeklemd tussen twee bladzijden, want ik ben vliegen door Deze twee tegelijk. Dus in ieder geval we need some soort voorwaardelijke fix. Ik moet zeggen, hey, als ik raakte iemand wiens naam begint met een T in plaats van een S, Ik beter verdubbelen ten minste één pagina terug. Dus buggy op het eerste, maar opgelapt worden. Maar niemand van ons zijn gaan op zoek naar Mike Smith via een 1000 pagina telefoon Boek één pagina per keer. Wat is een normaal persoon gaan doen? Je gaat naar de S, als je wist waar de S. Je zou ruwweg naar het midden of enigszins schuin naar het einde. En ik kijk hier naar beneden en Ik ben in de M sectie. Maar wat weet je dit probleem is nu, dat we niet per se weten voordat met ons allemaal gewoon tellen onszelf equivalent? Nou, Mike is duidelijk gaat om in deze helft van het boek als hij hier helemaal, want het is opgelost. En zo kun je heel dramatically-- [Hijgen] Ik weet. [APPLAUS] Het is eigenlijk heel makkelijk als je doet het de ruggengraat daar. Maar je kunt dan gooien de helft van het probleem weg. Nu, ik ben vertrokken met dezelfde probleem-- vinden Mike Smith in een telefoon book-- maar nu is het telefoonboek begint bij M en gaat naar Z, maar het is half zo groot. Maar dit is wat is indrukwekkend. Net als in theorie, jullie, wanneer jullie zitten slechts de helft in een tijd, het probleem kreeg half zo groot, half zo groot, opnieuw en opnieuw. Dus heeft dit probleem uitgegroeid tot de hetzelfde probleem maar half zo groot. Nu is het een 250 pagina probleem. Zodra ik realiseer, oh, ik ben in de T sectie ongeluk. Ik ben te ver gegaan. Ik kan dat de helft gooien van het telefoonboek van het hotel. Nu, ik ben tot een kwart van het probleem. En je kunt herhalen, herhalen, herhaal tot, in theorie, je bent vertrokken met slechts één pagina. En als Mike is op die pagina, Ik kan nu dit probleem oplossen. Maar hoe snel heb ik deze oplossen? In het eerste geval, het kostte me als misschien 1.000 stappen om Mike Smith te vinden. Het zou hebben mij-- Ik pakte het telefoonboek en ik ging op zoek één pagina per keer, en Mike misschien 1.000 pagina's later. Tweede benadering misschien kost me 500 stappen, want ik vlieg met twee tegelijk. En de derde benadering hoewel, het is bijzonder krachtig. Maar laten we eens kijken wat we eigenlijk deed met deze derde benadering. Ik zal hebben wat ik noem alleen deze verklaringen hier, één tegelijk. Pick-up een telefoonboek. Open naar het midden van het telefoonboek. Kijk naar de namen. En dan dingen een beetje meer intellectueel interessant, indien nog steeds eenvoudig. Als Smith is een van de namen op dat de huidige pagina, dan is er iets te doen voorwaardelijk. Het is als een vork in de weg. Bel Mike. Als Mike is onder de namen op die pagina, genaamd Mike. Maar alleen lijn vier als lijn boom, als je wil, is waar. Het antwoord op die vraag is ja. Anders als Smith is eerder in de book-- Met andere woorden, als ik in de M sectie en ik ben op zoek naar iemand om links, dan wat ik moet doen is iets vergelijkbaars. Dan moet ik openen naar het midden van de linkerhelft van het boek. Dus ga naar links, en dan ga terug naar stap twee. Kijk naar de namen daar. Dus met andere woorden, hetzelfde doen, maar een probleem dat is gehalveerd. Weet je wat? Als Smith is later in het boek op basis van de pagina Ik ben op zoek naar, open voor het midden van de rechter helft van het boek en weer terug te gaan dan naar stap twee, else-- er is nog een vierde mogelijkheid hier. Mike's hier of naar links of naar rechts of er niet. En hier zijn we beter dit te overwegen. En in feite, als je ooit heb gehad uw computer gewoon crashen op jou, die soms, maar niet altijd, resultaat van slechts een menselijk programmeur niet realiseren, oh schieten, is er eigenlijk deze vierde scenario. En als je geen code te schrijven om dat scenario te behandelen, Soms weet je niet wat de computer zou kunnen doen. En inderdaad een programma zou kunnen crashen. Maar in dit geval, dacht ik over, en ik zei, anders stoppen, want dat is de vierde logisch mogelijk scenario. Nu, laten we gewoon toe te voegen sommige woordenschat dus we kan beginnen te gooien rond termen die anderszins vrij intuïtief. Al de dingen die ik heb zojuist geel gemarkeerd hier, Ik ga gewoon naar de functies of procedures. Ze zijn gewoon een soort van acties. Dus pick-up, open, kijk bij, bel, geopend, open, quit-- dit zijn slechts acties, of we noemen ze formeler, functies. Ondertussen, nu in geel, Ik heb dingen gemarkeerd dat-- laten we gewoon beginnen bellen deze voorwaarden of takken. Dit zijn beslissing punten waar de je zou op deze manier gaan, op deze manier, of een andere richting nog. Dus die zal zijn voorwaarden. En nu dit is een beetje liefhebber. Laten we noemen deze vragen Booleaanse uitdrukkingen, nadat iemand met een achternaam Bool. En een Booleaanse uitdrukking is gewoon iets dat is waar of onwaar, ja of nee. Dus het is de vraag waarvan het antwoord u geven om, teneinde in staat maak een decision-- terug te krijgen een antwoord, en ga dan naar links of rechts, of zoiets heel anders. En dan tot slot, deze lijnen hier-- teruggaan naar stap twee, ga terug om two-- stappen we konden uitvoering van dit idee op verschillende manieren. En dan degenen onder u met programmeerervaring zou hebben gedaan of kan me voorstellen dat dit anders te doen. Maar voor doeleinden van vandaag, is het gewoon het idee dat telt. Dit induceert wat we over het algemeen noemen een loop-- een soort van cyclus, omdat het maakt me weer iets aan te doen. Dus nu, laten we maar eens kijken hoe goed dit algoritme is. Het is correct. Als Mike's in het boek, het is een van deze vier scenarios-- weer en nogmaals, we zullen hem vinden. Maar hoe goed is het? Nou, we hebben niet om hier te formeel te zijn. Maar laten we gewoon plotten iets, x en y, om een gevoel van de vorm van dit probleem. Op de x-as is hier de omvang van mijn probleem. En zij een y-as hier staan ​​tot lossen. Dus misschien is dit aantal pagina's. Misschien is dit seconden of pagina turns-- wat dan ook. Maar u wilt tellen is wat dit beeld zal vertegenwoordigen. En die eerste algoritme, ik ga om te beschrijven als gewoon een rechte lijn. Als er n pagina's in het telefoonboek, dan is het kan mij zo veel zo n stappen om Mike te vinden. Als Verizon of de telefoonmaatschappij voegt nog een pagina volgend jaar, het zou me nog een step-- nog een eenheid van tijd om Mike te vinden. Dus er is alleen deze 1-1 ratio. Het is een rechte lijn helling. Ondertussen, dat de tweede algorithm-- als ik gaan twee op een tijd-- twee, vier, zes, acht of double-- gaan door de pagina's twee keer per keer, twee tegelijk, het is nog steeds rechte lijn. Er is nu 01:59 ratio, maar net over het doel. Dus als er zoveel pagina's op de kaart hier in geel, dat me zou kunnen nemen deze veel stappen of seconden, anders gaat me te nemen twee keer zoveel op de rode lijn. Maar de groene lijn is de echte afhaalmaaltijd. Dit is wat we in het algemeen bel een logorithm-- log n, waarbij n het aantal bladzijden. Maar het is de vorm die zaken vandaag, want we hebben niet om nog na te denken over het plotten punten. Denk na over een extreem scenario. Stel dat Verizon morgen verdubbelt de aantal pagina's in dat telefoonboek, van 1000 tot 2000. In het eerste algoritme, I zou verspillen een extra 1000 stappen op zoek naar Mike, enkel omdat Verizon verdubbeling van het boek. De tweede algorithm-- het misschien neem me een extra 500 stappen. 1000 meer pagina's, ga ik twee bij een tijd-- 500 meer stappen om Mike te vinden. Maar dat derde algoritme is een soort van magisch. Verizon verdubbelt het aantal pagina's van 1000 tot 2000, maar hoeveel meer stappen doet nemen me om te zoeken naar Mike? Het is slechts een, want ik kan gewoon scheur het telefoonboek nog een keer een probleem 2000 pagina naar een probleem 1000 pagina en voila. Ik heb een enorme hap genomen uit het. En als je echt extreem, veronderstellen dat het telefoonboek onderneming had iets gek als een 4 miljard pagina telefoonboek. Nou hoeveel stappen zou kunnen nemen Mike Smith vinden in een 4 miljard page telefoonboek? Het is een groot aantal, maar slechts 4 miljard 2000000000-1000000000 om te 500 miljoen euro, 250 million-- nog steeds klinkt als grote getallen, maar ik ben zeer snel om naar kleinere waarden. En in feite, als ik de wiskunde Goed, ik kan alleen maar verdelen 4000000000 met ongeveer 32 keer eerder Ik krijg tot slechts één. Dus als dat telefoonboek waren 4 miljard pagina's lang, geen big deal. Binnen een paar seconden, misschien 32 seconden, kon ik het verdelen in de helft en uiteindelijk vindt Mike of concluderen dat hij er niet is. En dat is de essentie van een algorithm-- een goede algoritme. En dat is een van de doelstellingen van een klasse als deze, probeert te achterhalen hoe kan ik het probleem niet alleen correct zoals ik altijd wist hoe het te doen een pagina per tijd-- maar correct en goed. Hoe kan ik het ontwerpen van een goede oplossingen voor problemen? Dus laten we eens even hier en geven u een gevoel nu CS50 van de cursus itself-- introduceren medewerkers een paar cursus. Net voor 02:00, zullen we neem een ​​korte pauze zodat degenen onder u die winkelen kan eend uit en neem een kijken naar een aantal andere klasse en kijken naar de rest van deze online. Maar voor nu, laat me even CS50, de klasse zelf, met name wat nieuw. Dus het verleden voorjaar, we heb heel wat van tijd-- het personeel van de cursus en ik-- denken over wat het is dat we willen CS50 te zijn, en terug te gaan naar de eerste beginselen zogezegd, om te overwegen wat het is dat we willen deze cursus te lijken en zijn als voor haar studenten. En dus zie je in de problemen set nul als goed, een uitnodiging om een ​​kijkje te nemen dat URL die een samenvatting een aantal van de motivaties achter de volgende kenmerken van de herfst 2016. Dus zoals je misschien hebt opgedaan van de TL: DR handout, de syllabus vandaag alsook uit de studiegids, dit jaar in CS50, je alleen verwacht bij te wonen today-- dus werk goed done-- en de laatste lezing op 21 november. En je welkom, maar niet verwacht dat bent bij te wonen die lezingen in het midden, want wat we doen dit jaar, is schieten in real-time materiaal van de cursus. Dus alles blijft huidige en opgenomen zo goed can-- we de actualiteit en gesprekken die mensen zou kunnen te hebben in de industrie in de wereld, maar het maken van dat materiaal verkrijgbaar, daardoor zelfs earlier-- compleet met full-text transcripties en doorzoekbaarheid en links naar andere bronnen. En inderdaad, we zijn geweest claimen voor bepaalde tijd en wij geloven nu dit, dat we kunnen creëren, digitaal, een meeslepende, een meer dwingend leerzame ervaring, in tegenstelling te verzamelen hier ongeveer 23 keer in persoon, het horen van iemand zoals ik gewoon te praten over de informatica, in tegenstelling tot boeiende actiever. Zo zie je in syllabus van de cursus een schets van het semester hier, samen met wanneer lezingen gefilmd worden, waarop u bent welkom, maar niet verwacht, en wanneer zij zullen worden vrijgegeven op de website van de cursus. En wat we hier doen op Woensdagen vanaf volgende week, is veel meer intiem, slechts die mensen die willen deelnemen, een zogenaamde doorkruisen, waar ik en de hoofden van de cursus ook daadwerkelijk dingen te maken een beetje meer intieme hier beneden in het orkest sectie, hebben nog wat technologie en loop door de huidige week probleem set, en bieden u particularly-- als onder degenen die minder comfortable-- des te meer begeleiding die je zou willen of nodig hebt voor de uitdaging van de week. En op dezelfde manier, voor degenen die dat niet kunnen bij te wonen die in persoon, geen big deal. Er zullen op dezelfde manier worden geleid door één van de stafmedewerkers van de cursus, Zamalya, dezelfde kans ingebedde het probleem stelt zelf. Probleem stelt dit jaar zal worden uitgebracht op vrijdag en niet langer zeven dagen later te doen, maar 10 dagen later-- doelbewust overlapt met elk probleem ingesteld, teneinde zo beter, wij hopen, eb en vloed in student schema's, vooral als tentamens of atletiek of academici of extracurriculars de neiging om te komen en gaan vooral mid-semester. Dat moet u een beetje meer discretie over de vraag of u de voorzijde laad je week met CS50 of rugbelasting Op de volgende weekend plaats. Dus kijk naar syllabus van de cursus hier voor het schema daarvan. En je zult ook onder de merken de veranderingen dit jaar, voor degenen die meer vertrouwd zijn met programmering in het verleden, we zullen het semester als start zullen we vandaag in Scratch, richten zich vooral op de taal genaamd C, en vervolgens de overgang niet PHP, maar om een ​​taal genaamd Python tegen het einde van het semester in de context van web programmeren, samen met SQL en JavaScript, HTML, CSS, en nog veel meer. En in antwoord op een FAQ, het is inderdaad het geval dat CS is niet zo eng als ik eens dacht dat het was, maar het is zo veel werk zoals ik had gehoord dat het zou kunnen zijn. Maar dit is het woord dat hier zijn enkele statistieken van herfst 2015 studenten, waarbij de horizontale blauwe lijnen geven het gemiddelde aantal uren gerapporteerd. En u zult een gemiddelde van te zien zes tot 10 tot misschien 16 12-- of zo enzovoort, maar hoge variantie om duidelijk te zijn. En dus beseffen dat er niet alleen studenten comfortabeler en minder comfortabel in de cursus, maar een overeenkomstige drager structuur die studenten krijgen door middel van het semester met succes. Inderdaad, in antwoord op een FAQ, moet je CS50 nemen als een eerste jaar? Absoluut. En in feite, ik betreur niet mijn manier hebben gevonden of hebben een nieuw veld het eerste jaar ook. En mocht u met CS50 andere cursussen, zeker als goed-- en het algemene advies kunnen we geven de studenten, dat is waarschijnlijk CS50 niet het soort van de klasse of intro klasse dat je moet nemen met drie andere of vier andere p klassen. Maar als je het nemen van twee andere p-set klassen, iets anders, en CS50, absoluut beheersbaar. Ik heb veel studenten in het had verleden gedaan behoorlijk succesvol. En om u te krijgen in de richting van dat Finish Line met succes, heeft de cursus sections-- verschillende tracks voor studenten minder comfortabel, comfortabeler, ergens tussenin, waarbij in de loop van eerste probleem set, wordt u gevraagd om jezelf te beschrijven. En als je onder degenen minder comfortabel, het is het soort ding dat je gewoon liever weten. En inderdaad, dat is al de groeiende demografische in CS50 voor een paar jaar. Met ingang van afgelopen najaar voor bijvoorbeeld 58% van de klasse beschreven zichzelf als onder hen minder comfortabel, met 9% onder degenen meer comfortabel, en dan de andere studenten daar in rode zichzelf beschrijven als ergens tussenin. En je zult zien hier de onderwerpen algehele en schema van gedeelten, die worden aangeboden in eigen persoon, in real-time, met de cursus geweldig personeel van het onderwijs fellows en natuurlijk assistenten, van wie sommigen ontmoet je in slechts een moment. Secties zelf, zoals u zult zien, zal zijn maandag en dinsdag en woensdag, zodat u toelaten om te duiken na boeiende, als je zo kiezen, in de loop van lezing eerder die week. En dan kantooruren, die zeker, ieder jaar, zijn niet minder geweest vechten voor de cursus. En dit jaar, we zijn van plan niet alleen te bekleden hours-- één kansen op een hulp voor studenten op woensdag donderdag en zondag, de laatste van die het zijn in de middag door het ontwerp een aantal van de stress te verminderen die steevast ontstaat met late night p-settting met een deadline looming-- maar kantooruren zal ook worden aangeboden op maandag en dinsdag en Woensdag en vrijdag en zaterdag, dank aan onze vrienden bij HSA. CS50 heeft nu zijn eigen ruimte voor studenten en personeel CS50, atop 67 Mount Auburn Street, daar in Harvard Square. De visie waarvoor is dat CS50's TF's en CA's de hele week, vrij veel in het grootste deel dagen, zal er voor ondersteuning. Dus als je hebt een aantal vraag op een p-set of je bent het gevoel een beetje geblokkeerd of een beetje in de war, en ach, je hebt een uur kreeg of een half uur tussen klassen, vooral in de square-- kan pop in en hebben die vraag beantwoord hebben van die verwarring clarified-- heel veel in de geest, je bent vertrouwd, van de wiskunde eigen wiskunde vragen centrum afdeling, maar vrij veel rond de klok per [? Gcal?] Dat we online zal plaatsen. Studiebegeleiding is ook beschikbaar voor diegenen studenten, vrij van de cursus eigen personeel als je zou willen intiemere een op een, of twee of drie klasgenoten uitsluitend werken met één van de medewerkers van de cursus. En inderdaad, dit hier zijn slechts een aantal van de medewerkers van de cursus, een paar van wie je zult ontmoeten elkaar in slechts een moment. In feite, CS50 eigen hoofd onderwijs collega, en het hoofd natuurlijk assistent, en leermeester, zou kunnen kom op, laten hen om hallo te zeggen. [APPLAUS] SPEAKER 1: [ONVERSTAANBAAR]. [APPLAUS] SPEAKER 2: [ONVERSTAANBAAR]. [APPLAUS] SPEAKER 3: [ONVERSTAANBAAR]. [APPLAUS] DAVID MALAN: En ons toelaten om brengen aan boord van twee van de CS50 meest senior staff, Rob en Zamayla ook. [APPLAUS] Inderdaad, zowel Rob en Zamayla zijn bij ons zo lang, dat ik in staat was om te gaan in de archieven CS50's en vind dit erg SD beelden van hen die deelnemen op het podium zelf enkele jaren geleden. ROB: [ONVERSTAANBAAR]. [APPLAUS] ZAMAYLA: [ONVERSTAANBAAR] [APPLAUS] DAVID MALAN: Dank je wel. Dus naast deze teamleden hier, CS50 heeft een team van bijna 100 medewerkers, die allen zal beschikbaar zijn voor secties en kantooruren en nog veel meer. En zoals Rob zegt ook, dit is de meest significante revisie van CS50 in de 10 jaren Ik heb in [onhoorbaar] geweest. [Onhoorbaar] vooral gericht in het verschaffen van een ondersteuningsconstructie, trimmen weg een heleboel het grootste deel dat is geweest opgebouwd in 10 jaar iteratieve ontwikkelingen Op de cursus probleem sets. Dus dit jaar, niet alleen in de klas, maar ook in de vorm van het probleem van de cursus sets, moet je dingen te vinden meer worden gestroomlijnd, trimmer, veel beter beheersbaar dan in de afgelopen jaren, zoals wij werpen van de bagage die is ontwikkeld door de natuur van de evoluerende jaar na jaar en iteratie. Zodat de nieuwe en verbeterde vandaag begint. Je zult wat meer van het voldoen personeel in de [onhoorbaar] cursus om 2:30, waar wij, als een traditie, cake. Er is een beetje meer taart dan dat, maar je zult meet Erin en Tobias en anderen nog. En laat me je geeft een tour voordat we horen van andere personeelsleden in de klas, van wat er te wachten staat als goed. In feite, we beginnen altijd CS50's semester deze komende zaterdag, met wat heet CS50 Puzzle Day. Het heeft niets te maken met informatica per se, maar met zo'n probleem oplossen algemeen. En als je daarvoor kiest om deel te nemen, per enkele van de uitnodigingen, je zou de deur hebben gezien gevallen of op het podium hier het is een kans in teams twee of drie of vier, om deel te nemen voor de puzzels en pizza en prijzen en more-- deze zaterdag, Stay tuned voor meer. Je zult ook merken dat elke Vrijdag, bij Fire and Ice, heeft CS50 breng een heleboel studenten lunch, voor een groot maken class voelen zich meer intiem, en algemeen samenbrengen alumni en vrienden van de industrie om te praten over wat ze hebben tot uit sinds zijn afstuderen. Ook dit jaar zullen we inhuldigen de allereerste CS50 50 codering contest-- een mid-semester gelegenheid om iedereen te laten op een opt-in basis, een hebben uitdaging van verstand tegen klasgenoten, opnieuw in teams van twee of drie of vier, met alleen dat de programmering savvy dat u vervolgens onder je riem na slechts zes of zeven weken van de klas, en de deelnemende in dit soort competitie online-- Indien u graag uw eigen scherpen vaardigheden des te meer in die uitdaging. Aan het einde van het semester is de zogenaamde CS50 Hackathon-- een kans die begint om 7:00 PM eindigt om 07:00, en langs de weg zijn 12 avonduren in te duiken in finale project-- de cursus gelegenheid te ontwerpen en uitvoering van de meeste iets van belang aan u met uw onderwijs begeleiding collega's. Rond 09:00 doen we doorgaans serveren pizza, 01:00, Philippe's, en de weinigen van ons die nog steeds wakker om 05:00, zijn shuttle per bus vervoerd naar beneden de weg naar IHOP voor het ontbijt. En dan een paar dagen later is de zogenaamde CS50 fare-- een einde van semester tentoonstelling in viering van hoe ver zo veel van CS50 studenten vandaan komen week nul helemaal tot week, en in gedachten houden dat 73% van de klasgenoten en de jouwe dit jaar een CS klasse nooit eerder genomen. In feite zoveel reemphasize hier is een paar gezichten van het personeel CS50's. SPEAKER 4: [ONVERSTAANBAAR]. SPEAKER 5: [ONVERSTAANBAAR]. SPEAKER 6: [ONVERSTAANBAAR]. SPEAKER 7: [ONVERSTAANBAAR]. SPEAKER 8: [ONVERSTAANBAAR] SPEAKER 9: [ONVERSTAANBAAR]. SPEAKER 4: [ONVERSTAANBAAR]. SPEAKER 10: [ONVERSTAANBAAR]. SPEAKER 11: [ONVERSTAANBAAR]. SPEAKER 12: [ONVERSTAANBAAR]. SPEAKER 13: [ONVERSTAANBAAR] SPEAKER 14: [ONVERSTAANBAAR]. SPEAKER 13: [ONVERSTAANBAAR]. SPEAKER 15: [ONVERSTAANBAAR] SPEAKER 16: [ONVERSTAANBAAR]. SPEAKER 11: [ONVERSTAANBAAR] SPEAKER 5: [ONVERSTAANBAAR]. DAVID MALAN: Een deel van het team zijn zelf winkelen klassen. Maar als de leden van CS50 medewerkers zijn hier, kon bedenken voor een ogenblik. CS50's TF's en CA's en [? personeel?] leden hier-- dit zijn slechts een paar van de faces-- van wie je gewoon zag, en een paar other-- en een paar anderen nog. Waarom gaan we niet ga je gang en laat jullie een vijf minuten pauze. Als u nodig hebt om eend uit te winkel klassen, dat is prima. En in vijf minuten, we zullen hervatten, het nemen van een blik op de eerste Scratch-- van onze programmeertaal, ontmoeten het personeel van de cursus hier wat meer, en de focus uiteindelijk Op probleem set nul. Dus zullen we weer terug in vijf minuten. [APPLAUS] Okee. Dus zijn we weer. En zijn resterende tijd vandaag, het doel is om het level playing field in termen van enkele terminologie, in termen van een aantal ideeën. Omdat Zoals per een aantal van de hitlijsten eerder, Er zal een lijst van zijn niveaus van ervaring in de klas, waarvan sommige studenten genomen sommige programmering voor, van wie sommigen niet. En dus met deze eerste probleem set en daarmee de eerste taal hebben we een kans om te beginnen om voor lief nemen na vandaag een aantal gemeenschappelijke woordenschat en idee. En we zullen dit doen door middel van eerste languages-- de cursus naast C en Python en JavaScript en SQL en HTML en CSS, we zullen in eerste instantie richten en alleen voor problemen stellen nul deze grafische taal, genaamd Scratch, ontwikkeld door MIT Media Lab op de weg, om te helpen studenten en kinderen vooral uiten algorithmically-- in een veel meer overeenkomt met wat we zouden computational denken noemen. En het is een handig taal omdat zeer snel volgende week in week één, hebben we de overgang naar een meer traditionele en geheimzinnige taal genaamd C, dat is puur tekstueel. U gebruikt uw toetsenbord in Om instructies te schrijven zoals deze op het scherm. Maar zelfs als je nog nooit hebt gezien een programmeertaal voor, in slechts een blik op deze alle in het cryptisch, kunt u waarschijnlijk wel raden dat waarschijnlijk drukt Hello World. Maar er is een heleboel syntactische overhead daar. Er is de vreemde hash symbool of hash tag boven. Er is de hoek tussen haakjes, wat haakjes, accolades, semi-colon-- er is gewoon zo veel visuele syntaxis die in de weg. We beginnen de cursus met Scratch teneinde te komen verleden al die verstandelijk oninteressant afleiding, en in plaats daarvan richten op de ideeën. In feite zou dit voorheen. Deze, voor dit, week wordt na. Dit, in deze grafische taal Scratch, is hoe je dat zou hetzelfde uit te voeren program-- een programma dat wanneer deze wordt uitgevoerd, gewoon zegt hallo wereld. En wat is er leuk is aan Scratch is dat het deze grafische programmering omgeving die puzzelstukjes of gebruikt blokken, die alleen samen interlock als het maakt logische zin te doen. En met Scratch kun je ontwikkelen animaties en interactieve spelletjes en kunst, en een aantal dingen die je zou denken in je eigen geest, en implementeren eenvoudig door slepen en neerzetten van puzzelstukjes. En inderdaad, zullen we de mogelijkheid hebben om een ​​aantal van dezelfde ideeën uit te drukken dat ik zojuist noemde een moment geleden in het kader van Mike Smith en het zoeken naar een telefoon book-- dingen achtige functies, maar daden, dingen zoals loops doen dingen opnieuw en opnieuw, variabelen, die iets wat we zullen introduceren, maar het is bekend misschien van algebra-- gewoon een soort van placeholder tot op zekere waarde die u misschien op te slaan moet later-- Booleaanse uitdrukkingen, waar die ja nee of waar valse vragen van tevoren. Omstandigheden zijn die vorken in de road-- die takken zo te zeggen. En dan zijn er nog een aantal liefhebber functies die we zullen zelfs vandaag de dag zien, riep arrays en draden en events, dat we dan opnieuw op tijd in verschillende talen. Maar Scratch laat ons al deze onderzoeken. Dus hier in Scratch, deze paarse blok is wat een functie is typisch eruit gaat zien. Deze paarse puzzelstukje dat sommige heeft woord als we zeggen, dat is de actie, en dan is het misschien een hebben argument of een parameter-- andere manier van de aard van de customizing wat dat blok doet zodat het niet vooraf heeft vastgesteld MIT wat deze paarse blok zegt. In feite zie je in een moment dat ik ben in staat om te typen de woorden als hello wereld, of hallo David, of hello Zamayla, of wat ik wil, in het argument dat raadsel piece-- de witte doos er. Ondertussen, als ik wil een lus, zullen we zien dat er puzzelstukken die er een beetje oranje als deze. En hun vorm soort suggereert dat er iets gebeurt opnieuw en opnieuw in een cyclus. Dus als ik een wikkel zeg hallo wereld block met een voor altijd te blokkeren in Scratch, het is gewoon te blijven zeggen hallo wereld voor altijd, heel letterlijk. Ondertussen is er een ander soort lus in Scratch dat we een herhaling zullen see-- block--, waar, als je tevoren weten hoeveel keer u wilt dat de lus uit te voeren een eindig aantal keren in fact-- u kunt opgeven dat door te typen in een aantal of aansluiten van een variabele, zoals x of y zoals we zullen zien. In feite, variabelen zoals i in dit geval, die is een algemene naam voor een integer variabele die net slaat een number-- een geheel getal kan zijn, deze oranje blok hier gebruiken om set een variabele zoals ik op nul. Hier is een voorbeeld in het groen van een Booleaanse expressie in Scratch. Hoewel dit ziet eruit als een wiskundige formule, math ongelijkheid als dit echt Booleaanse uitdrukkingen. Dit is waar of onwaar. I kleiner is dan 50. Het is of een ja of nee antwoord of waar of onwaar antwoord. En we zullen over het algemeen noemen deze Booleaanse expressies. En het hoeft niet te worden 50. Het kan x kleiner dan y, y groter dan, gelijk aan y-- een aantal andere vragen kunnen worden gesteld. Nu, op het eerste gezicht, dit ziet er misschien opeens heel vet hier, en het is. Maar begrip verstandig, het is redelijk bekend van voor. Indien x kleiner dan y, is dan zeggen zo veel. Indien echter x groter dan y, zeg dan zo veel. Else zeggen x gelijk is aan y. Dus we hebben een voorbeeld er van een derde scenario-- de enige derde possibility-- x is ofwel groter dan, kleiner dan of gelijk aan. Dus hebben we een drieweg splitsing in de weg. En let op wat is cool hier-- Scratch, lijkt, heeft maar een puzzel piece, in dit geval, als-blok. En toch is dat lijkt te impliceren u kunt hebben slechts een in twee richtingen vork in de weg. U kunt naar links of rechts, maar hoe zit het met die derde scenario? Wat als x gelijk is aan y? Geen probleem. Neem een ​​puzzelstukje, zet ander erin het semantische equivalente creëren of indien, anders als, else-- en nu heb je drie weg vork in de weg. En zoals we zullen zien, de Scratch puzzelstukjes kan worden uitgerekt en groeien, om meer spullen proppen in hen. Je hoeft niet aan te passen alles op zijn standaard grootte. Dit is iets wat we zullen Al snel zien heet een array. Het is als een list-- een manier opslaan van meerdere stukken informatie in een variabele, niet alleen een nummer. Deze we een vertegenwoordiger van zullen zien een zogenaamde multi-threading. In feite, al uw Macs en pc's deze dagen ondersteuning voor multi-threading, wat betekent dat je kunt letterlijk doen meerdere dingen tegelijk. U kunt Microsoft Word hebben in de voorgrond, werken aan een aantal essay. Misschien heb je een browser op de achtergrond opening G-mail of Facebook of iets dergelijks. Uw computer kan meerdere dingen te doen vandaag omdat het multi-threaded, en programma's die ze in in bijzonder zijn ook multi-threaded. Er zijn dingen geroepen evenementen goed in de wereld van de Scratch, en dan is er een manier ook, te maken onze eigen aangepaste puzzelstukjes als dingen niet werkelijk bestaan ​​tevoren. Dus laten we motiveren dit als volgt. Enkele jaren geleden, toen ik eerst ontdekt Scratch, toen ik was eigenlijk een grad student aan het MIT, we onszelf kregen de opdracht om huiswerk te maken. En ik implemented-- die, achteraf gezien, was een zeer slechte beslissing, want het is de meest ergerlijke lied in de wereld tot acht uur te luisteren tijdens het werken op uw homework-- maar iets wat ik had Oscar Time genoemd, die misschien een bekend nummer. CS50s bezit Jordan Hayashi, een van onze meer senior medewerkers, heeft een upgrade voor 2015 en nu 2016, sinds terug in de dag, Ik had alles gewoon in Oscar's prullenbak. Nu ondersteunen we recyclage en compostering. Maar om het beeld te schetsen van wat we kunnen doen hier en om een ​​deel van te motiveren het lagere niveau voorbeelden, konden we krijgen een andere vrijwilliger om gewoon te komen op maximaal en speel mijn eerste huiswerkopdracht ooit? Kom maar naar boven. Wat is je naam? HENRY: Henry. DAVID MALAN: Henry, kom op maximaal. Kom maar naar boven. Ga hoe dan ook, en zie je in een ogenblik, Ik ga om te gaan en druk op de groene vlag in de rechterbovenhoek hoek, dat wil zeggen te gaan. Het teken icoon kleine stop gaat stop zeggen, en dat is wanneer je begint en stoppen met het programma. Aangenaam kennis te maken. Okee. Dus we gaan naar de instructies op het scherm in slechts een moment. En alleen door het spelen van dit spel voor een paar seconds-- geloof me, we gaan niet te willen spelen de hele weg naar de end-- je wil krijg je een gevoel van wat het programma doet. En meer dan alleen maar richten op Henry goed of slecht in dit spel, aandacht en hoe werd uitgevoerd door mij oorspronkelijk en vervolgens door Jordanië. Met andere woorden, waar zijn de variabelen? Waar zijn de lussen? Waar zijn de functies? En we zullen zien of we niet zien die onder de motorkap. Klik gewoon op en sleep trash naar de juiste bak. [Muziek] Okee. Dat is heel goed. Waarom doen we het niet stoppen daar. Dank je. Proficiat aan Henry. Dank je. [APPLAUS] Stel je voor het debuggen van dat programma. Als er een probleem is twee minuut van de lied belden-- maar zo wat is hier aan de hand echt? Zo ingewikkeld als het misschien beginnen te lijken na verloop van tijd te krijgen, inderdaad meer dingen begon te vallen, wat interessant over dit soort example-- en we zullen zien een paar others-- is dat als je kijken langs de complexiteit of de verfijning van het spel, Er is een zeer eenvoudig gebouw blokken die allemaal play--, als je ze te destilleren die bouwstenen zijn zeer toegankelijk en uitvoerbare zich. Zo is het al enige tijd, maar ik ben vrij zeker van dat wat ik in eerste instantie deed toen het maken van dit spel voor de eerste keer was ik helemaal zoals procrastinated. Ik helemaal niet gericht op de logica of de puzzelstukjes, Concentreerde ik me op de graphics en vinden de straat post en de prullenbak en dat alles. Maar dat waren vereiste ingrediënten op het eerste. En zodra ik klaar uitstellen en de aanleg van het overkoepelend kader, Ik besloot, laat me gewoon één stuk van afval uit de lucht vallen. En we zullen zien Scratch ondersteunt dingen geroepen sprites-- tekens die kunnen hebben verschillende kostuums op, zodat ze er anders uitzien. En dus heb ik een prullenbak kostuum op één zo'n sprite. En ik nodig had om uit de lucht vallen. En zo blijkt, Scratch, zoals de meeste programmeertalen, ondersteunt willekeurige getallen of technisch pseudocode willekeurige getallen, zodat door te slepen en het laten vallen van bepaalde puzzelstukjes, Ik was in staat om de prullenbak hebben komen van links op het eerste. En dan de volgende keer dat zij viel, uit rechts en dan van het midden. En al het spel deed was gewoon hebben trash uit de lucht vallen. Je kon niet wijzen op het of klik erop. Je kon niet open de prullenbak. Je kon niets doen. Maar het was een baby stap in de richting van mijn ultieme visie. En daarna, ik eigenlijk geïmplementeerd een soort van sensing zodat als je niet klikt en sleep op het stuk van afval over de prullenbak, Oscar's deksel zou openen en sluiten. Niets zou er gebeuren met de prullenbak, maar althans het deksel zou openen en sluiten. Dus dan controleren, stap twee van de twee. En dit is wat er aan de hand te zijn sleutel in beide probleem nulstellen en programmeren algemeen, is neem deze zeer bewuste kleine stapjes. Omdat het niet alleen toestaan ​​om voel me eerlijk gezegd bereikt veel meer quickly-- het is de ergste in de wereld om te proberen om alle van Oscar Time uit te voeren, dan uren later raakte de groene vlag, en niets werkt zoals verwacht want waar moet je zelfs beginnen te debuggen of te problemen op te lossen dat programma? Het is gewoon overweldigend. En dus echt omarmen dit idee van het nemen van steps-- kleine stapjes weer en again-- opbouwen iets dat, op het einde, echt indrukwekkend en ingewikkelde, maar op het eerste, is lang niet zo veel dus. In feite, laten we dit doen. Laat me ga je gang en-- Scratch zelf Er bestaat op het web op Scratch.MIT.edu, en u zult worden verteld als veel opnieuw in problemen set nul, de specificatie voor die al op de website van CS50's. Maar dit is wat Scratch zelf is. En er is eigenlijk alleen maar drie primaire gebieden. Op de top zijn er links is de zogenaamde fase. Dit is Scratch. De standaard kostuum is een kat. En dit is de rechthoekige wereld in die je kunt move-- omhoog, omlaag, naar links, recht en een aantal andere dingen. In het midden zijn hier onze categorieën of onze pallets van puzzelstukjes, en verschillende kleuren verschillende dingen betekenen. En als je rondneuzen, zie je dingen zoals loops en voorwaarden en variabelen en andere bestanddelen. En dan hier is de scripts omgeving. Dit is waar ik kan slepen en neerzetten die puzzelstukjes om dingen te doen. Dus laten we een dergelijk ding. Laat me ga je gang en-- en ik weet waar het is. Dus ik ga direct op waar ik weet dat dingen zijn klaar te zijn, maar wijzen en klikken en rondneuzen zijn onvermijdelijk. Dus als groene vlag geklikt, wat wil ik doen? Ik ga dit doen. Ik ga dit purper raadsel sleept stuk, zeg hallo twee seconden, en laat me in te zoomen. En ik ga om dit te veranderen te zijn wat ik wil dat het be-- hello wereld gedurende twee seconden is prima. Nu, ik ga naar de klik groene vlag, of als ik echt wil, Ik kan het volledige scherm het en kom dan terug. Het zal gewoon blijven alles in één venster. Green flag-- hello wereld. Okee. Niet zo interessant. Dus laat me ga je gang en dit te doen. Laat me proberen een andere. Toen groene vlag's clicked-- laten zoiets als een geluid te doen. En merk op dat uit de doos gratis je krijgt een kat geluid, net als het standaard sprite. Dus laat me nu ga je gang en druk op de groene vlag nu. [MIAUWEN] Aw. Dat is schattig. Ik ben het programmeren. Dus wat heb ik gedaan? Dit is het equivalent van een programma. Het is natuurlijk super simpel. Het heeft niet echt allemaal te nemen dat er veel inspanning en MIT deed het meeste werk, maar ik heb een functie genaamd. Ik heb een functie gebruikt. Ik heb wat actie gemaakt, met slechts dat een paarse puzzelstukje. Nou, als ik wil doen drie miauwen op een rij? Laat me ga je gang en doen twee en drie. En merken dat wanneer je zweven in de buurt van een stukje van de puzzel, een kleine witte lijn verschijnt soort van magnetisch, en het zal breken bij elkaar als je loslaat. Laten we eens kijken wat er hier gebeurt. [MIAUWEN] Er is een bug. Ik hoor slechts één meow. Waarom zou dat zijn? Ja? Ja. We niet echt horen, maar dat is een goede intuïtie. Ze spelen allemaal op hetzelfde moment. Waarom? Nou, de computer is gewoon te doen wat je te vertellen te doen. Dus als je zegt, spel geluid, spelen geluid, spel geluid, maar je hoeft het niet te vertellen om te spelen totdat je klaar bent, spelen totdat je klaar bent, het gaat om door te blazen het programma echt snel en doen alleen wat je hem vertelt wat te doen. Dus ik moet eigenlijk op te lossen dit in een paar manieren. Ik kan dit gewoon doen, zich te ontdoen van deze. Laat me proberen deze andere puzzel piece-- spelen geluid meow tot ze gaar zijn, en sleept drie deze en klik op Play. [MIAUWEN] Het is niet echt very-- dank je-- heel natuurlijk. Dus waarom niet ik-- laten me gaan om hier te controleren. Nice. Wacht een seconde, en nu laat me terug te gaan om geluiden, en te spelen geluid tot ze gaar zijn, en dan laat me wacht een seconde. En dan laat me gaan en je krijgt een meer geluid, en daar gaan we. [MIAUWEN] Een beetje meer natuurlijk, maar dit is niet erg efficiënt. Zoals ik al te vervelen, allemaal Kortom klikken heen en weer en echt dupliceren mijn work-- vrij veel kopiëren en plakken. Sterker nog, als ik controle geklikt of rechts geklikt, Ik kon net hebt gekopieerd en geplakt. Wat zou een betere te bouwen te gebruiken? Wat idee van voor? Ja, dus een lus. En inderdaad, als we neuzen, we kunnen precies dat te vinden. Laat me gaan naar evenementen of liever controle. Dus repeat-- ik niet wil dat het 10 keer zijn. Dat gaat snel vervelend. Maar ik zal drie keer herhalen. Laat me teruggaan naar geluid en speel het geluid tot het klaar is. Laat me teruggaan naar Control en gewoon wachten een seconde. En merk op, zou je denk het niet past, maar nogmaals, als je het laat magnetisch snap op zijn plaats, zal het groeien in te vullen. Hoe is het nu spelen? [MIAUWEN] OK. Nice. En dit is wat genoemd zou worden een programma dat is ook juist. Het miauwde drie keer vrij natuurlijk, maar het is beter ontworpen. Ik gebruik minder redundantie. Ik heb niet kopiëren en plakken om het even wat. Ik gebruikte een beter idee. Nu is dit nog niet zo interessant met Scratch niet te doen iets. Dus laten we iets anders in plaats. Laten we altijd iets te doen. En weet je wat? Motion lijkt interessant. Laten we hem 10 te verplaatsen stappen en sloeg nu spelen. OK. Wel kunnen we soort drag hem terug, en hij is nog steeds running omdat hij dit altijd doet. Dus de lus doet wat het zegt te doen, maar dit is niet zo interessant. Laten we dit doen. Laat me een controle blok toe te voegen, en het gebruik van een deze voorwaarden voor de eerste keer. Dus het gaat om 10 steps-- bewegen 10 punten, 10 pixels op de Screen-- dan dat het gaat om deze vraag te stellen. Als er iets waar is, dan doen iets in dit blok. Dus het blijkt sensing heeft een hele stelletje Boolean expressions-- vragen van de ja nee of ware valse form-- laat mij dit te doen. Als touching-- en dan is er dit kleine drop down menu. Ik kan het parametriseren. Als het aanraken van de edge-- laten zoiets doen. Dus als het aanraken edge-- laat me terug te gaan naar de beweging. En waarom doen we niet gewoon draaien 180 graden? Okee. Dus altijd, bewegen 10 stappen. Als je het aanraken van de edge, draaien 180 graden. En dat is niet het einde van het programma omdat je in een voor altijd te blokkeren, dus het gaat om weer te gaan en opnieuw en opnieuw en opnieuw. Dus laten we eens kijken wat er gebeurt. OK. Een beetje buggy, maar wel cool. En we kunnen toevoegen aan deze sommige domme dingen die zijn niet al te intellectueel interessant. Maar als we raken dit kleine microfoon button-- ouch. Laat me dit opruimen. Laat me dit te verbeteren als ze zouden zeggen op tv. Schoon dat up, Opslaan en ga nu tot scripts. En nu, laat me gaan klinken. Laat ik geef het een naam. Ik zal dit ouch noemen. En nu spelen geluid ouch. Let op het in de weinig drop down menu. Laten we eens kijken. [OUCH] [Lachend] Maar we kunnen veranderen t zijn on the fly. We kunnen twee keer zo vervelend zijn. [OUCH] Of als we het als 1000 stappen bij een tijd-- OK. Dus we gaan naar die ene met rust te laten. Dus nogmaals, het bouwen van blocks-- I begonnen met iets super eenvoudig, en dan heb ik een functie, voegde een functie, een functie toegevoegd. En ik moet niet langer zorgen te maken over hoe de eerste van deze kenmerken werd uitgevoerd als ik verder om dingen te laag bovenop. Dus in feite, laat me een ander te doen hier. Laat me ga je gang en open een bestand dat Ik heb van tevoren, genaamd Schaap. Dus het heeft een iets andere personage dat ziet er zo uit. En laat me zien als ik kan niet doe iets met behulp van een teller in dit case-- een zogenaamde variabele. Ik ga vooruit en onder Events-- gaan laat me een groene vlag geklikt. Dan laat me gaan naar Data, waarvan ik weet door simpelweg te spelen voor, Daar variabelen. En ik ga om verder te gaan en sleep dit. Dus een variabele genaamd teller, en Ik ga het initialiseren op nul. Ik kan noemen anything-- x of y of z-- maar in de programmering, roept iets in een semantisch handige manier, zoals teller, die beschrijft wat het is, het is een stuk makkelijker om uw code later te lezen. Laat me ga je gang en krijg een voor altijd blokkeren hier. En laat me gaan naar de looks pagina en doe een Say blok. Maar wat heb je aan variabelen I hoeft niet enkel type in iets als hello wereld, die we hebben al gedaan, kan ik in plaats daarvan gaan naar Data en sleep mijn variabele, en zelfs hoewel de vorm niet helemaal lijkt alsof het moet passen, het zal groeien te vullen. En ik zal gewoon zeggen dat de teller voor één second-- spoiler-- hij gaat tellen. We zullen zeggen dat het een seconde. Dan ga ik om te gaan en laat hem wachten op een seconde, dus het telt niet te snel. En dan tot slot, te wijzigen teller door een-- met andere woorden, verhogen de teller met één toegevoegde waarde en doe dit altijd. Zodat de schapen ook, als een programmeur, telt vanaf 0. En als we maar lang genoeg wacht, Hij zal dit altijd doen. Maar dat is niet helemaal waar, want in feite, zoals we zullen ontdekken in één week, integers en computers algemeen, technisch gezien slechts een finite-- goed, veeleer computers, wanneer zij vertegenwoordigen integers, slechts een eindig aantal bits. Die lampen er kunnen slechts zo hoog voordat je uit gloeilampen. En een computer aan alleen heeft zoveel geheugen, slechts zoveel transistors, dus het kan alleen maar rekenen zo hoog. Dus het blijkt dat de schapen, Ik denk, kan rekenen tot 2 miljard of iets heel groots. Dus we gaan niet wachten om dit te laten gebeuren. Maar uiteindelijk enkele bug zal gebeuren dat kan een aantal zeer reële wereld vertakkingen. Maar afgezien van de schapen, die net introduceert een variabele. Laten we gaan en open te stellen iets wat ik van tevoren hier genoemd Pet de Cat-- Huisdier de Cat hier. En merk hier is het paar blokken, maar als groene vlag geklikt, voor altijd het volgende te doen. Als je het aanraken van de muis pointer-- zodat de cursor op het scherm, de arrow-- play geluid meow en dan twee seconden wachten. En dit gewoon doen altijd. Gewoon voortdurend wachten om te zien of de pointer-- als de kat is het aanraken van de pointer. Dus ik hit te spelen. Er gebeurt niets. Maar zoals ik beweeg de cursor over de kat, [MIAUWEN] En als ik beweeg het weg, niet aaien van de kat niet meer. Dus sommige voorwaardelijke logica genest binnen een lus. Hoe zit het met dit voorbeeld, bewust riep niet Huisdier de kat? Wat dit gaat doen? [MIAUWEN] Waarom zou je niet de kat huisdier? [MIAUWEN] OK. Dit is dus een voorbeeld van een if anders. Het is een beslissing punt en want het zit in de lus, ze zijn allebei krijgen gecontroleerd. Is dit waar? Is dit waar? Is dit waar? Is dit waar? En eventueel, één van die gaat gelden en dus moet je ofwel de meow of horen het gebrul van de leeuw in dat geval. Nou, laten we een iets meer luxe één dat ik van tevoren too-- discussies. Dus een thread is slechts één wat een computer kan doen. Dus een multi-threaded programma is een programma die kunnen meerdere dingen tegelijk te doen. En al deze voorbeelden tot nu toe had slechts een script, om zo te speak-- een programma als dit hier. Maar let op dit programma heeft twee sprites, twee karakters. Een daarvan is een vogel. Een daarvan is een kat. En opvalt als ik de volgende neer klik links, ze elk hun eigen scripts of programma's met hen verbonden. En deze beide programma's, bericht, start met als groene vlag clicked-- laten we eens kijken naar de cat-- wanneer groene vlag geklikt. En zo ja, toen ik raakte het spel nu, twee dingen gaan gebeuren in een keer. De kat en de vogel zijn allebei gaan gelijktijdig in bedrijf dit effect. En je zou denken wat er gebeurt. Er is een lus en de vogel en de kat worden opeenvolgend. De vogel is gewoon stuiterend als Ik was vroeger toen ik zei ouch. Maar de kat heeft duidelijk een voordeel. Er is nog een detectieblok die verwijst de kat doelbewust de vogel in dit geval. Dus we konden plagen elkaar, door te kijken door middel van die blokken, wat er gebeurt. Maar het belangrijkste ingrediënt is hier één. De vogel, dus dat dit spel is niet volledig boring-- of dit animation-- vanaf een willekeurige richting. En de computer is het oppakken een getal tussen 90 en 180 wezen, zodat het een enigszins verschillende animatie elke keer. En dan zie hier, als de kat is het aanraken van de vogel, dan spelen de leeuw vier sound-- het gebrul. Maar ondertussen de vogel palet, hebben we dit. Voor altijd, als de kat niet aan te raken, gewoon blijven bewegen drie stappen. En dan is hier een ander stukje van de puzzel. Als je op de rand, stuiteren. Dus de vogel is gewoon een soort van opvang zijn eigen bedrijf, gewoon vliegen in het rond en stuiteren, en het is echt de kat die het conditionele logica had om te bepalen of zij de vogel had gevangen. Okee. Dus laten we een ander hier, dit wordt Hi heet Hi Hi. En deze hier gewoon doet dit in een voor altijd lus. Maar notice-- hoe kunnen we stoppen dit erg vervelend programma? Raak de spatiebalk. Want als ik dat doe, de linkerhand program-- merken dat het steeds listening-- is de sleutel ruimte pers. Als de spatiebalk ingedrukt, en zo ja, wat doet het? Het doet een veel voorkomende techniek. Het stelt een variabele gelijk is aan een bepaalde waarde. Maar schakelt die waarde. [? Dus verschijnen?] gebaseerd op de shape-- I een variabele die ik schreef op voorhand genaamd Gedempt, die net zegt ja of nee. Wordt het geluid gedempt of niet? Waar of niet waar? En let op, ik zeg dit-- als gedempt nul is, dan overstappen op een, anders ingesteld mute deze op nul. Dus gewoon flip de waarde van nul tot één. Ik zou kunnen hebben done-- veranderen van twee naar drie en 1:57 of 4:56 of 5:56. Maar het maakt niet uit welke nummers ik gebruik, zolang ik blijf het veranderen van het tegenovergestelde. En de meeste elke programmeur zou gewoon kies nul en een-- valse en ware, off en on-- om dit te vertegenwoordigen. En dit is nog steeds actief. Als ik raakte de spatiebalk weer [SEAL SOUNDS] Het programma loopt nog. Omdat er dit andere script dat zegt, voor altijd het volgende doen. Als de gedempte variabele gelijk zero-- dus als je niet gedempt is de logic-- als het vals of nee, speel dan het geluid, omdat je niet gedempt. Je moet het geluid af te spelen en dan denk hi hi hi twee seconden en dan wachten, en doe het opnieuw en opnieuw en opnieuw. En dus op deze manier hebben we een manier voor mensen to-- voor programma's om te interageren. En ze hoeven niet te worden zo gedateerd als anderen. In feite, porren around-- no pun intended-- iemand bracht een enorme hoeveelheid tijd op het internet uitvoering PokemonGo in Scratch. Het geolocates je zelfs in Cambridge of Allston hier. Dus als je wilt ook wat mensen zien kunnen doen is dit-- zeer chique menu. Klik hier op. Dit ben ik met mijn pijltjestoetsen nu. Ik ga om te gaan na dit. Klik. En nu u op de pokéball. Ik bedoel, ik denk dat je bent verondersteld om op de pokéball. Okee. Dus deed ik dat. Ik kan hier te gaan. En deze persoon geïmplementeerd wat meer Pokeballs dan hier-- drie Pokeballs. We zullen een link naar deze plaatsen online, zodat je kunt spelen. Maar let er is gewoon een aantal fundamentele bouwstenen. Het ziet er een stuk liefhebber, en het is. Dit is indrukwekkend en nog veel meer dan we zouden in het algemeen verwachten, zeker voor problemen stellen nul. Ik heb geen idee hoe lang deze persoon online doorgebracht. Maar het is allemaal gewoon een lus. Er is een geluid te spelen. Er is een soort van lus luisteren of ik ben het raken van de pijl omhoog of omlaag pijl of links en rechts, en dan als dat zo is, is het bewegen is bepaald aantal pixels. En dan, als ik klik op een andere sprite, er is een soort als de conditie daar. Ja, dit wordt te intens. We gaan om te stoppen. Het is al die bouwstenen. Er zijn geen andere ingrediënten dan degene die we hebben gekeken naar al. En toch, laat mij een laatste reeks voorbeelden dat schetst een beeld te van wat je hier kunt doen. Hier is een zeer eenvoudig programma dat doet gewoon dit-- hoest, hoesten, hoest. En alleen gebaseerd op wat we hebben gekeken naar tot nu toe, waar is de voor de hand liggende mogelijkheden voor verbetering. Dit programma is correct. Het hoesten driemaal, dat is wat ik bedoelde. Maar het is slecht geïmplementeerd. Het is slecht ontworpen. Waarom? Ja. Het is niet een lus. En het is niet zozeer dat het niet een lus, het is dat er een heleboel van redundantie. Er wordt gekopieerd en geplakt code, om zo te zeggen. En de oplossing waarschijnlijk inderdaad een lus. Dus laat me ga je gang en verbeteren dat. En ik ga deze slepen hier. Laat me ga je gang en krijg een herhaling block, verandert dit naar drie. Ik ga weg te gooien sommige van deze blokken. En je zult merken is het vrij intuïtief. U slepen en neerzetten en dingen verschijnen en verdwijnen uiteindelijk. En ik kan alleen deze te slepen in hier, en nu heb ik een schonere versie nog steeds. Maar weet je wat? Er is deze kans nu abstraction-- beginnen nieuwe vocabulaire definiëren dat MIT niet anticiperen. Er is wachten en herhaal en voor eeuwig en zo, maar wat als ik wil introduceren het woord hoest als een blok? Wat als ik wil een stukje van de puzzel waarvan het doel in het leven is te hoesten? Nou, laten we eens kijken naar deze versie hier, die ik gemaakt als volgt. Magisch, heb ik gemaakt Dit puzzelstukje hier, die Scratch kun je doen. En inderdaad C en Python en JavaScript zijn zal toestaan ​​om dit te doen ook. U kunt uw eigen aangepaste maken stukken die je bellen wat je wilt. In dit geval, hoest voelt als een redelijke definitie. En vervolgens met deze stukken naar beneden Hier kunt u bepalen wat het betekent. Ik gesleept uit dit palet hier-- meer blocks-- deze grote paarse blok, waar ik typte in hoest als de naam van mijn nieuwe puzzelstukje. En dan heb ik het zeg elke keer dat een gebruiker noemt deze nieuwe hoest puzzelstukje, do inspraak en een wachttijd. En dus hier in mijn herhalen blok, Ik kan gewoon hoest drie keer. En ik zou zeggen, in het bijzonder Als je nu verbergt dit detail. Who cares hoe hoest wordt uitgevoerd? Alles wat ik zorg over als een programmeur dat ik kan hoesten. Kan me niet schelen hoe zeggen is geïmplementeerd. Ik zorg gewoon dat de kat kan iets zeggen. Ik kan abstract weg dat detail en alleen richten op wat er op het scherm hier. Maar ik kan nog een stap verder te gaan. Merk op dat hier, ik heb geïmplementeerd lus driemaal. Maar wat als in plaats ik deze versie te grijpen? En wat als plaats in deze versie hier Ik verander gewoon mijn puzzelstukje te nemen een argument en input op zichzelf? En dat kan worden ingevoerd een nummer als drie. Dus nu, als ik het schrijven van een programma en ik wil dat de kat te hoesten, Ik kan eigenlijk vertellen de puzzel Stuk hoeveel keer te hoesten, omdat op de bodem hier, een liefhebber versie van deze aangepaste puzzelstukjes laat me aangeven dat hoest duurt eigenlijk een input-- neemt een argument als dit. En weet je wat? Misschien realiseer ik me, wacht eens even. Hoesten is de same-- het is fundamenteel hetzelfde idee als niezen. Het is gewoon een andere woord op het scherm. Ik kan abstract weg verder en implementeren Deze definitieve versie van een hoesten, die op het eerste gezicht is veel complexer kijken. Maar let op wat ik heb gedaan. Ik heb nu generalized-- genericized really-- dit puzzelstukje te noemen zeggen woord n ​​keer. En nu heb ik twee nieuwe puzzelstukjes hier beneden te definiëren hoest n keer. En wat doet de hoest-functie? Wat doet mijn aangepaste puzzelstukje doen? Het roept alleen voor het zeggen blok, passeren in het woord dat ik wil zeggen, passeren van het aantal keren dat ik wil zeggen. Want nu kan ik implementeren niezen door simpelweg te zeggen achoo, in dit geval bepaald aantal keren. En dus ik ben gelaagdheid en gelaagdheid. En nogmaals, de sleutel is hier niet hoe ik geïmplementeerd, maar het feit dat als ik gewoon letterlijk bewegen deze van het scherm af, kijk eens hoe eenvoudig als niet vrij mijn programma ziet er nu. Want het doet wat het zegt, ik heb geabstraheerd weg wat er in die black box. het gebeurt hier een paarse doos, maar ik heb weg geblokkeerd wat erin zit omdat ik niet schelen hoe het werkt. Ik geef nu net dat het werkt. En inderdaad, in probleem nulstellen dit precies de aard van de gelaagdheid van ideeën die je zult hebben de mogelijkheid om te verkennen. Het is precies de kans om probleemoplossende technieken toe te passen, wat is waarschijnlijk een onbekende omgeving. En of je hebt niet geprogrammeerd voor of eerder geprogrammeerde, je zult zien dat er een beetje iets in deze omgeving voor iedereen. En met een probleem te stellen een in een week tijd, we zullen worden overgebracht naar focussen op een hoger niveau taal genaamd C-- of liever een lager level taal genaamd C-- dat is nog meer krachtige, hoewel het een beetje meer cryptisch op het eerste gezicht. En zul je beseffen per vandaag TL: DR, dat dit probleem ligt een kortere venster van de tijd dan de toekomstige, gewoon omdat je het vrij zou moeten vinden beschikbaar. En geen zorgen te maken als voegt u de klas laat. We pakken dat duurde niet lang. En voordat we verdagen voor cake, laten we eindigen met slechts twee minuten blik naar wat je te wachten staat hier in CS50. [Muziek] Okee. Dat is het voor CS50. We zullen je gauw zien. Cake wordt nu bediend. [Muziek] SPEAKER 17: Heb je gehoord van een sabbatical, Chief? SPEAKER 18: Misschien is er meer onder de motorkap.