[Speel van musiek] Dit is CS50-- Harvard Universiteit se bekendstelling om die intellektuele ondernemings van rekenaarwetenskap en die kuns van programmering. En my naam is David Malan, en Ek was net te dink vanoggend, dit wonder bo wonder was 20 jaar vandag sedert ek laas sit waar julle nou doen. Dit was 1996. Ek was 'n stage, en ek is die neem van CS50 vir die heel eerste keer. En ek het nie eens gekry het die senuwee om dit te neem myself eerste jaar, deels as gevolg van die tyd. Rekenaarwetenskap vir my is soort van soos, meh. Ek was 'n bietjie van 'n geek groeiende up, maar ek het nie regtig enige intellektuele belangstelling in wat verskyn om net 'n hele klomp van wees mense programmering al die tyd. En ek is bang om eerlik te wees. Die kursus en rekenaarwetenskap meer oor die algemeen het en tot 'n mate, nog hierdie reputasie van 'n stuk grond te pasop, al is dit net omdat so baie van ons is nie vertroud met dit en onseker oor dit. En dit was regtig nie totdat ek inkopies hierdie klas wat stage fall-- en selfs dan, ek het net ingeskryf omdat die professor-- een van my eerste mentors, Brian Kernighan nou by Princeton-- het my toegelaat om te neem die klas slaag misluk. En inderdaad, dit is hoekom vandag ons toelaat dat en aan te moedig studente om hierdie klas neem gesit / unsat. En eers dan, deur die einde van die semester het ek besef soos, wow, hierdie was nie so 'n onbekende gebied. Inderdaad, dit was 'n baie bemagtig veld, en meer spannende, veral later, soos Ek kursusse in Dramatiese Kunste 101 en Latyns-A en dan uiteindelik grad skool argeologie, het ek regtig begin om die sien kruisings van hierdie gebied, rekenaar wetenskap, met die geesteswetenskappe, natuurwetenskap, die kunste, medisyne, en dies meer. En so dit is wat net so netjiese oor rekenaarwetenskap uiteindelik, as ons hoop jy sal see-- is sy toepaslikheid hierdie ander velde, en hoe jy kan neem 'n paar van vandag se en die semester se idees en praktiese vaardighede terug na jou eie domein, en eintlik verken hierdie kruising van die liberale kunste en die wetenskappe. So 73% van jou, as laaste jaar is enige aanduiding is, het 'n CS natuurlik nog nooit tevore geneem. So as jy, soos ek, jy is voel 'n bietjie bang, of eerlik jy is nie regtig seker hoekom jy nog hier is. Miskien het jy net gevolg sommige vriende oor te Sanders nou. Dit is heeltemal fyn. Die doel hier is om te haak jy en jou gerusstel dat as jy kyk na links en regs, jy gaan klasmaats sien met so min of soveel ervaring dat jy jouself kan hê. En inderdaad, sal ons deel sommige statistieke later vandag oor wat die demografie van die klas tipies lyk. En as bygevoeg reassurance-- en dit ons moenie dat sedert ek oorgeneem het die kursus 'n paar jaar ago-- in leerplan die kursus se is this-- dat wat uiteindelik aangeleenthede in hierdie kursus is nie soseer waar jy eindig up in vergelyking met jou klasmaats, maar waar jy in week 11, die einde van die semester, beland in vergelyking met jouself in week 0, wat waar ons is vandag hier. En dit is wat ek besef al daardie jare gelede. En ek weet baie van klasse sê dit, maar dit is veral waar in rekenaarwetenskap. Aan die einde van die dag, die veld onbekend soos dit was vir my en dalk vir jou, is regtig net oor probleemoplossing. En as sodanig, is dit hierdie het toepaslikheid om ander velde te kry. En in werklikheid, as ons probeer om distilleer wat dit beteken, dit is probleemoplossing in sy wese, ek daresay. Daar is input-- so wat dit ookal is dat jy probeer om op te los. Daar is uitset, wat hopelik die oplossing vir die probleem. En dan, as ons sou sê in rekenaarwetenskap, daar is hierdie swart boks in die middel wat jy nie noodwendig moet omgee hoe dit werk. Jy jouself kan uiteindelik implementeer wat binne daardie boks. Maar vir doeleindes vandag en meer oor die algemeen in die lewe, alles wat jy omgee is dat hierdie probleme ontslae opgelos. En wat hierdie kursus is uiteindelik oor is ondersoek die kruising van hierdie insette en uitsette, en hierdie sogenaamde algoritmes, soos ons binnekort sal sien, wat implementeer wat onder daar, die enjinkap. Maar hierdie insette en hierdie outputs-- wat beteken dat eintlik beteken? Wel, aan die einde van die dag, moet ons een of ander manier te verteenwoordig inligting. Dit is veral waar in 'n rekenaar, wat as fancy en kompleks as dit mag lyk, is 'n mooi dom toestel. Dit neem electricity-- of uit 'n kabel of 'n battery as input-- en dan produseer dit 'n paar preprogramed antwoorde op die skerm. Maar hoe kry ons uit begin om daar te voltooi? Wel, wat 'n probleem wat opgelos moet word? Wel, miskien het ons dalk op die begin van 'n semester, probeer om bywoning te neem in 'n kamer soos hierdie. So ek kan doen soos een, twee, drie. Of miskien, as ek dit gedoen het uit te sorteer van hou van myself-- om tred te hou van things-- hou Ek kon vinnig hardloop uit vingers. So kan ek net maak hash marks-- een persoon, twee, drie, vier, vyf, ses, sewe, agt. En almal van ons het waarskynlik gedoen het, of dit nou op jou hande of op 'n stuk papier. En dit is eintlik net iets genoem unêre notation-- waar as jy net 'n brief in jou alfabet, een of hash merk in hierdie geval, vir elke insette wat jy wil om te tel, wat jy nodig het om af te een van hierdie plaas letters-- een van hierdie punte. Alles reg. Dit is alles goed en wel en nie alles wat ingewikkeld. Maar rekenaars is nie almal wat baie meer ingewikkeld. Trouens, die meeste van julle seker weet selfs as jy het nie regtig beskou wat dit beteken, dat rekenaars verstaan ​​net nulle en ones-- die sogenaamde binêre stelsel. Ons mense, daarenteen, is so veel meer gesofistikeerd sover soos ons dit verstaan ​​nulle deur pragtig. Maar selfs as binêre is, op die eerste oogopslag, nie alles wat bekend is, dit blyk dit is net soos die stelsels en die idees wat ons weet reeds. So byvoorbeeld, kyk na hierdie. Dit is net 'n reeks van simbole. En almal van julle, wanneer skrams na dit wat moontlik deur ' dink 123-- niks baie interessant is daar. Maar hoekom is dit hierdie getal, 123? Dit is slegs karakters op die screen-- net patrone dat iemand dalk getrek of getik. Maar as jy soos ek, jy waarskynlik onthou van graad skool dat daar soort kolomme of plekke hier. Daar is die mens se plek en die tien se plek en die honderd se plek. En die rede dat dit 123 en nie net 'n patroon van drie simbole Die rede is, natuurlik, as ons 'n mens in die honderde plek, jy doen die wiskunde van 100 keer een, en dan twee in die tien se plek. So dit is 10 keer 2, en dan drie in die mens se plek en dit is 1 keer 3. En as jy al daardie optel, van Natuurlik, jy kry 100 plus 20 plus 3. So het ons begin met net 'n patroon van symbols-- n alphabet-- maar dan gekarteer ons betekenis op dit by wyse van hierdie kolomme. Wel, dit blyk dat rekenaars is regtig nie alles wat anders as ek en jy. Maar in plaas van magte van 10 gebruik van, so te speak-- 1, 10, 100, 1000, 10,000 plek en so forth-- hulle eintlik net magte van gebruik 2-- sodat een, 2, 4, en dan as ons meer syfers, 8, 16, 32, 64, 128, en so meer. En so dit is hoe 'n rekenaar sou die getal 0 verteenwoordig, net soos ons mense. 0, 0, 0-- en jy kan seker raai Watter patroon van nulle en ene, As 'n rekenaar kan slegs spreek 0 of 1-- wat patroon gaan verteenwoordig die getal wat ons mense ken as 1? Yeah-- 0, 0, 1. Alles reg. So 0, 0, 1 is hoe ons verteenwoordig 1, sodat jy kan dan geneig om die nommer 2 verteenwoordig, as jy ' die vier se plek en die twee se plek as die een plek, kan jy sê, goed, As ons 'n 1 in die mens se plek, en nou wil ons tel tot 2, kan jy doen dit en laat dit vir 'n nul wees. Maar natuurlik is dit nie hoe die desimale stelsel werk nie. As jy 'n syfer in beide van die kolomme, jy het die somme maak. So hoeveel het ek per ongeluk net voor? Dit is dus 3, want 2 keer 1 plus 1 Kom 1, natuurlik, gee ons drie. So sal dit twee wees. Die bietjie soort flips, so te sê, as 0 word 'n mens, net soos 'n 9 rolle oor en word 'n 0 as jy die 1 dra. Dit sou drie natuurlik wees. Four-- nog 'n interessante ding gebeur, waar die kinders omrol en jy dra die 1, om so te praat. So hierdie, natuurlik, is 4. Maar as jy vinnig vorentoe nou, Wat is die grootste getal gaan te wees dat 'n rekenaar kan verteenwoordig? So dit is net sewe in hierdie geval, reg? Omdat jy 'n mens in die vier, 'n mens in die twee, 'n mens in die een. So dit is 4 plus 2 plus 1. So wat gee jou sewe. En inderdaad, dit sou lyk op die eerste oogopslag dat rekenaars kan reken nie hoër as dit. Maar dit is natuurlik nie waar nie. Wat doen ons mense doen wanneer ons wil hoër as soos 999 tel? dra net die een en net voeg 'n vierde syfer aan die linkerkant. En so wel ons kon. Ons kan 'n agt se plaas en plaas 'n 16's, en 'n 32 se plek, 64, 128-- en jy kan net voort te gaan op tot oneindigheid. So het hierdie nulle en ones-- die sogenaamde binêre system-- is wat 'n rekenaar wetenskaplike sou oor die algemeen noem 'n bietjie, of binêre syfer. Maar nou, hoe kry ons uit die konsep of die grafiese van hierdie dinge om 'n werklike rekenaar? Ons blyk te wees draai 'n stap hier. Wel, die enigste insette aan die einde van die dag, om my laptop hier is hierdie vloei van elektrisiteit. Selfs al is dit 'n lang was keer sedert jy al gedink oor of nooit gedink oor hoe elektrisiteit werk, daar is elektrone vloei in of uit, en dit is my soort insette. So as dit is al wat ons kry as insette hier, Wat kan ons doen met hierdie inligting? Wel, ons kan dink aan 'n nul as net 'n gebrek aan elektrisiteit. Niks is flowinw, niks is beweeg, is daar niks gebeur nie. Dit is net die standaard state-- nul. Maar as daar elektrisiteit vloei, waarom doen ons nie net na willekeur, maar wêreldwyd konsekwent, noem dat 'n mens. So eenvoudig deur sonder krag, Ons het 'n nul, ja krag, Ons het 'n one-- geen mag nie, ja krag. En op dié manier, met behulp van iets meer fisiese of elektroniese ons begin om hierdie idee van implementeer iets óf die feit dat een of 'n zero. Inderdaad, kan ons doen dit net hier. So hier, ek het nie drie, maar agt gloeilampe, wat elk het sy eie skakelaar. En so as ek wou verteenwoordig die nommer sewe hier, Ek kan draai op hierdie drie gloeilampe. En inderdaad, binnekant van my rekenaar is miljoene, biljoene dinge wat net kleiner as dié genoem transistors, skakelaars, dat jy net draai op en af. So dit is relatief big-- big-- skakelaars in my laptop-- is baie, baie, baie, nog vele meer skakelaars. Maar al wat hulle doen, is presies that-- draai iets op, draai iets af. En as sodanig, kan 'n rekenaar voor te stel, met die miljoene of biljoene transistors, baie, baie nulle en ene. En daar is ander hardeware steeds dat kan jy slaan inligting langtermyn, sodat wanneer jy trek die prop, jy hoef dit nie te verloor. Maar dis 'n storie vir 'n ander dag. So, wat kan ons doen met hierdie stukkies? Kan ons net om te neem die druk af van me-- kan iemand wil kom hier en bied 'n demo? Ek het dit gesien hand eerste. Wat is jou naam? MADAY: Maday. David Malan: Maday, kom op tot. Aangename kennis. MADAY: Nice om jou te ontmoet. David Malan: Kom hierdie manier. Ek sal nie vir jou lip up. Alles reg. So hier het ons, notice-- een, two-- ons sal wysig dat out-- een, twee, vier, agt, 16, 32, 64, 128. Dit is doelbewuste. Daar is agt stukkies here-- binêre digits-- nulle en ene. En 'n bietjie 'n nuttige eenheid van measure-- nie so nuttig 'n eenheid van meet op sigself. Gewoonlik jy wil ten minste agt van hierdie dinge, ook bekend as 'n greep. So het ons 'n greep van stukkies hier. So as ons wil jou uitdaag met, byvoorbeeld, uitspel, in binêre, hierdie waarde here-- 42. Wil jy 'n steek op daardie te neem? MADAY: [onhoorbaar]. David Malan: Ja, net stoot die klein wit skakelaars voor. En jy wil om te spel uit 42, en op die spel is hierdie CS50 stres bal as jy dit. Alles reg. So jy het 32. Ons gaan benodig 42. So dit is 'n agt, so dit is 40. En excellent-- baie mooi gedoen. Dankie. [Applous] Alles reg. So ons het 'n meer stres bal. Kom ons hierdie keer meer te doen as wat ons kan. Een ander vrywilliger? Gratis stres bal, gratis stres bal. OK. Hier in die middel, doen wat jy wil om af te kom? Alles reg. Ek weet. Daar gaan ons. So het die getalle here-- kom neer. Wat is jou naam? DAVEY: Davey. David Malan: Davey. OK. Kom op, Davey. Aangename kennis. En wat ons gaan jy spell-- as jy daar kan vertoef vir net een moment-- is die getal 50. Maar, maar, maar maar, maar dit is graad skool magnete vir 'n rede. Net 'n bietjie harder, alles reg? Daar is nog agt. Alles reg. So wat het ons op daar? Ons het 32. Lekker. 32 plus 16 gee vir ons 48-- so naby. En wonderlik. Baie geluk aan Davey sowel. [Applous] Alles reg. So kan ons dit doen die hele dag lank, en dit nie alles wat veel meer kry interessante en meer uitdagend. Maar dit is regtig die point-- is hoe relatief eenvoudige Dit is aan die einde van die dag, wat 'n rekenaar doen om inligting te stoor, om insette te slaan en uiteindelik stoor of verteenwoordig diegene uitgange. Maar getalle alleen nie alles wat interessant. So mense, 'n paar jaar gelede, besluit, jy weet wat? Dit sal lekker wees indien rekenaars was nie net sakrekenaars vir rekenkundige bedrywighede, maar eintlik kon doen dinge soos woordverwerking, of e-pos, of meer moderne inkarnasies van hierdie soort van tegnologie. En so het die wêreld besluit arbitrêr, maar universeel, As jy wil die hoofstad op te slaan letter A in 'n rekenaar, jy weet wat? Kom ons almal eens op te slaan 'n patroon van nulle en ones-- bits-- wat uiteindelik verteenwoordig die desimale getal 65. Ons sal net almal eens is oor wat. 66 sou verteenwoordig B, 67 sou C verteenwoordig, en daar is trosse van ander patrone van nulle en ene, of onderliggende getalle, wat sou verteenwoordig ander briewe steeds. So as jy n soort van verstandelik absorbeer dit vir 'n oomblik, Ek doelbewus sit 'n deur Ek, waar H 'n 72 en ek is 73. As 'n rekenaar dan, in die konteks van 'n woordverwerkingsprogram of 'n e-pos, aan die lig gebring onder die enjinkap te hê hierdie patrone van bits-- patroon bisse verteenwoordig 72, dan 73, dan 33-- Wat beteken hierdie spel in die program? So hi, en dan is daar iets. Ons hoef nie noodwendig weet nie, maar wel 33-- nie op die grafiek earlier-- was net 'n uitroepteken. So 72 was H, 73 is ek, 33 gebeur 'n uitroepteken steeds. Maar dit is alles goed en wel, en in die feit deesdae, eerder as om net gebruik sewe of agt stukkies, te danke aan iets genoem Unicode in teenstelling om terug te ASCII in die dag, Ons kan eintlik nog meer verteenwoordig interessante karakters as net Hierdie oorspronklike Engelse bevooroordeeld briewe. Maar ons kan ook selfs verteenwoordig netjieser dinge soos kleure. As jy al ooit die afkorting gehoor RGB, rooi, groen, blou, wat net beteken dat 'n rekenaar gebruik tipies drie stelle bits-- sommige aantal bisse wat verteenwoordig 'n nommer vir hoeveel rooi wat jy wil, 'n ander stel van stukkies vir hoeveel groen wat jy wil, en 'n ander stel nommer vir hoeveel blou jy wil. So 'n groot aantal beteken baie rooi, klein aantal beteken nie rooi. En so dit is soort van middel waardes hier. So gee my 'n paar rooi, gee my 'n paar groen, en gee my 'n bietjie blou. En as jy meng die drie skakerings van kleur saam, in hierdie geval, jy hierdie donker skaduwee geel of bruin. Maar dit patroon van agt plus agt plus eight-- so 24 bits-- links na regs, is hoe 'n rekenaar sou daardie spesifieke kleur verteenwoordig. En dit is net 'n punt op 'n skerm. As jy kyk regtig naby aan jou TV jou rekenaar, sal jy sien kolle of pixels. En as jy 'n hele netwerk van pixels, horisontaal en vertikaal, jy beelde. En dan as jy neem 'n beeld en dan was wys jouself 'n ander beeld, 'n ander beeld, 'n ander beeld, 'n ander beeld, baie vinnig, jy natuurlik het films. En so sien waar ons begin het. Ons het begin met hierdie nulle en ene. Ons het van daar af na desimaal getalle, hoe ons verteenwoordig het. Nou het ons letters van die alfabet. Maar in ander kontekste wag, kan ons gebruik nog 'n paar stukkies en verteenwoordig kleure. Sodra jy die vermoë om kleure verteenwoordig, jy het die vermoë om te verteenwoordig foto's en animated gifs en ander sulke karakters op die skerm. En wanneer jy 'n hele klomp van die beelde wat deur die menslike gelyktydig, dit lyk soos rolprente, en so kry jy video's sowel. So die gebruik van hierdie baie eenvoudige primitiewes doen ons het die weg van wat uiteindelik al hierdie vorme van media. En ons het weer onttrek en weer en weer, totdat ons kry van die laagste vlak om hierdie hoogste vlak. So dit gee ons hierdie algemene idee van onttrekking. Maar ons hier begin. nou hier, kan ons verteenwoordig in 'n rekenaar ons insette met nulle en ene, ons uitsette in nulle en ene, Maar wat gaan binne-in die boks? Dit is waar die rekenaar wetenskap kry interessant. Dit is waar jy eintlik bring jou eie gedagtes uit te oefen om probleme op te los. Ons kan nou bepaal, vir die res van die semester, ja. Ek weet hoe binêre werke. Ek onthou hoe Ascii of Unicode-- die kartering werke letters--. En dit is beslis staan om dat ons redeneer kon rooi en groen verteenwoordig en pers en verteenwoordig multimedia sowel. Maar dit is die interessante dinge. Dit is wat iemand maak in staat is om probleme op te los. En een so 'n probleem ons wil doen, wel, neem bywoning, of om dit te doen algoritmies. En weer, kan ek dit doen. Ek kan een, twee, drie, vier doen vyf, ses, sewe, agt nege. En ek kon dit skryf af te spoor daarvan hou. Maar dit is net hoe ek sou verteenwoordig die inligting. Of ek kan dit doen faster-- twee, vier, ses, agt, tien, 12, 14, 16, 18, 20, 22-- dit voel soos twee keer so vinnig, maar dit is nog steeds gaan 'n hele klomp van die tyd te neem. Maar dit blyk dat as ons nog hefboom 'n ander resource-- en inderdaad rekenaars deesdae verskeie CPUs of brein. Dit blyk rekenaars doen baie dinge op een slag, en inderdaad ons, in hierdie kamer, dalk presies hierdie verteenwoordig. Dit is dus 'n bietjie sosiaal ongemaklike, maar as jy sou humor my vir net 'n drie-stap proses, laat my vra almal in plek is daar net om op te staan ​​vir 'n oomblik. Staan op. So dink aan jouself, aantal one-- sodat almal in hierdie kamer, behalwe die mense wat nie dwing, dink nommer een. So dit is jou nommer nou. Dit is die eerste stap, of as 'n rekenaarwetenskaplike of 'n programmeerder sou tipies doen, ons gaan om te begin tel op nul. As die kleinste getal wat ons kan verteenwoordig met dié gloeilampe nul, deur net hulle verlaat al af, ek kan net sowel begin tel uit nul is in plaas van een. En so dit is wat rekenaar wetenskaplikes doen. So stap nul, opstaan ​​en Dink maar aan die nommer een. Die volgende stap is this-- paar af met iemand staan en voeg jou getalle bymekaar. Wonderlik. So op hierdie oomblik in tyd, letterlik almal wat deelneem dink van die nommer 2, behalwe vir 'n vreemde persoon as ons 'n onewe aantal mense in die kamer. En nou die derde stap hier gaan word this-- een van julle moet gaan sit. Een van julle moet gaan sit, en as jy nog steeds staan, gaan terug na een stap. Alles reg. Alles reg. Sodat meer en meer mense moet word sit. Let daarop dat hierdie is veroorsaak 'n loop-- 'n soort van siklus. Sommige van julle moet ongemaklik vas wees, heen en weer gaan tussen stap een en twee, een en twee, een en twee. Dit is OK. Ons eerste fout. Ons sal gaan met dit. Alles reg. Laat ek probeer om dinge te spoor langs. In teorie, is net een persoon wat as almal gaan voort om af te paar. Maar laat my dinge bespoedig met die mense nog steeds staan. Watter getal dink jy van? 46. OK. Gaan voort en gaan sit. Julle staan ​​nog steeds. Wie bly staan? Watter getal dink jy van? OK. So sal ons na julle terugkom. In die agterkant? Wat is dit? 22. OK iemand anders op top-- ja? 34. OK. Hier op my right-- hier? 132, baie mooi. 22? OK. En wie is nog steeds staan? Hier? 46, baie mooi. 72. Ek kan nie veel langer stalletjie. Ja? 30, mooi. Hier? 23? 23. En ek dink dit is almal behalwe julle, geen druk. O, wag. 28? Net agt. OK. Net agt. Down hier? 30. 23. 24. 18. Dit is die ergste implementering van hierdie algoritme ooit. OK. So iemand anders? Enige iemand anders? OK. Nog een. 16? OK. 16. Alles reg. So as ek nie gemis iemand in die glans hier, toe ek druk Enter, ons sal sien, algoritmies, die totale aantal mense in Sanders. Omdat weer, dis asof almal as jy gaan sit, geslaag jou nommer af om iemand anders, aan iemand anders, om iemand anders, sodat in teorie, Op die ou end net een ongemaklike persoon moet staande gelaat. Maar dit is goed. Ons jaag dinge met die hand. Dit is veral moeilik om te sien in hierdie spesifieke ruimte. En die totale aantal mense Ons dink daar is hier is 546. Die totale getal Ek oorhandig deur die onderrig genote, wat die ou gedoen het skool stadige manier, was 820. [ROOIBORSDUIFIE] [Applous] Dit is OK. So ja, dan is daar hierdie foute. En dit is goed. En so terugdink aan hierdie die eerste keer iets jy skryf nie noodwendig werk. Dit het met my gebeur het hier so goed. Maar laat ons nou kyk hoe ons kan toepas dieselfde idee om iets jy dalk gesien het nie, wat is hierdie ou skool tegnologie here-- 'n baie groot telefoon boek. En veronderstel dat hierdie telefoon boek het 1000 bladsye en 1000 name en getalle alfabeties binnekant van dit. Wel, ons kon soort pas 'n soortgelyke idee om hierdie baie fisieke probleem, net die gebruik van my. Ek het net soort van verkul deur gebruik te maak van al jou met baie en baie van die verskillende CPUs of brein uitvoering paar algoritme. Maar al is dit net bietjie ou my, kan ek nog steeds hefboom dieselfde essensie van 'n idee verdeel en 'n oorwinnaar dat die probleem weer en weer, waardeur die helfte van julle, helfte van julle, die helfte van u, die helfte van u, teoreties gehou sit totdat ons oorgebly het, teoreties, met net een persoon. So in hierdie ou skool technology-- ons doen nie moet hierdie map-- hierdie ou skool tegnologie, Ons kan begin soek na iemand wil Mike Smith, een bladsy op 'n slag. En ek sien dat daar geen, Mike is nie hier nie. Ek is nog steeds in die A-afdeling. Uiteindelik vind ek myself in die afdeling B. En dit is 'n algorithm-- stap-vir-stap-instruksies. Begin by die begin en een bladsy op 'n tyd, kyk vir Mike Smith. Is dit correct-- hierdie algoritme of benadering? Ja, dit is korrek. As Mike's hier, uiteindelik Ek kry hom. Maar dit is nie doeltreffend. Dit is natuurlik 'n baie stadig. So ek kan die invloed van die Dieselfde twosies benader. Ek kan soort van twee doen, vier, ses, agt, 10, 12. Dit is twee keer so vinnig. Ek gaan Mike te kry vinniger as hy daar. Is dit korrek? Ja, maar ek het 'n little-- no. Nou hoor ek 'n no. Ja. Daar is 'n fout potensieel. Miskien Mike net per ongeluk raak landgebonde tussen twee bladsye, want ek vlieg deur hierdie twee op 'n slag. So ten minste wat ons nodig het 'n paar soort voorwaardelike fix. Ek moet sê, hey, As ek getref iemand wie se naam begin met 'n T in plaas van 'n S, Ek beter verdubbel ten minste een bladsy terug. So karretjie op die eerste, maar fixable. Maar niemand van ons gaan om te kyk vir Mike Smith deur 'n 1000 bladsy selfoon Bespreek een bladsy op 'n slag. Wat is 'n normale persoon gaan doen? Jy gaan om te gaan na die S se As jy geweet het waar die S se. Jy kan rofweg gaan na die middel of effens skeef teen die einde. En ek sien hier af en Ek is in die M-afdeling. Maar wat weet jy oor hierdie probleem nou, dat ons nie noodwendig weet voordat met almal van ons net tel onsself anders gestel? Wel, Mike is duidelik gaan te wees in hierdie deel van die boek As hy hier glad, want dit is gesorteer. En so kan jy baie dramatically-- [Snak] Ek weet. [Applous] Dit is eintlik baie maklik as jy doen dit in die rug is daar. Maar jy kan dan gooi helfte van die probleem weg. Nou, ek sit met dieselfde problem-- vind Mike Smith in 'n telefoon book-- maar nou is die telefoon boek begin by M en gaan na Z, maar dit is die helfte so groot. Maar dit is wat is indrukwekkend. Net soos in teorie, julle ouens, wanneer julle almal gaan sit net die helfte van 'n tyd, die probleem het die helfte so groot, helfte so groot, weer en weer. So het hierdie probleem geword het van die dieselfde probleem, maar die helfte so groot. Nou is dit 'n 250 bladsy probleem. Sodra ek besef, o, ek is in die T artikel ongeluk. Ek het te ver gegaan. Ek kan die helfte gooi van die telefoon boek weg. Nou, ek is af na 'n kwart van die probleem. En jy kan herhaal, herhaal, herhaal totdat, in teorie, is jy gelaat met net een bladsy. En as Mike is op die bladsy, Ek kan nou hierdie probleem op te los. Maar hoe vinnig het ek los dit? In die eerste geval, dit het my soos ' Miskien 1000 stappe om Mike Smith vind. Dit sou geneem me-- Ek opgetel het die telefoon boek en ek begin soek een bladsy op 'n tyd, en Mike dalk 1000 bladsye later word. Tweede benadering miskien neem my 500 stappe, want ek vlieg deur twee op 'n slag. En die derde benadering egter dis veral kragtig. Maar laat ons kyk wat ons eintlik het met hierdie derde benadering. Ek sal wat ek sal noem net hierdie stellings hier, een op 'n slag. Pick 'n telefoon boek. Oop vir die middel van die telefoon boek. Kyk na name. En dan dinge 'n bietjie meer intellektueel interessante, As nog eenvoudig. As Smith is een van die name op dat die huidige bladsy, dan iets te doen voorwaardelik. Dis soos 'n vurk in die pad. Bel Mike. As Mike is een van die name op daardie bladsy, genoem Mike. Maar net lyn vier as lyn boom, as jy wil, waar is. Die antwoord op daardie vraag is ja. Anders as Smith is vroeër in die book-- Met ander woorde, as ek in die M artikel en ek is op soek na iemand om te links, dan wat ek moet doen is iets baie soortgelyk. Dan moet ek maak om die middel van die linkerhelfte van die boek. So gaan verlaat, en dan gaan terug na stap twee. Kyk na die name daar. So met ander woorde, doen dieselfde ding, maar op 'n probleem wat al gehalveer. Jy weet wat anders? As Smith is later in die boek gebaseer op die bladsy wat ek is op soek na, oop vir die middel van die regter helfte van die boek en weer terug gaan dan te stap twee, else-- daar is 'n vierde moontlikheid hier. Mike se hetsy hier of links of na regs of daar nie. En hier is ons beter beskou dit. En in werklikheid, as jy al ooit gehad het jou rekenaar net crash op jou, dit is soms, maar nie altyd nie, die gevolg van net 'n menslike programmeerder nie besef, o skiet, daar is eintlik hierdie vierde scenario. En as jy nie kode te skryf om daardie scenario te hanteer, Soms moet jy weet nie wat die rekenaar kan doen. En inderdaad 'n program kan crash. Maar in hierdie geval, het ek gedink daaroor, en ek het gesê, anders hou, want dit is die vierde logiese moontlike scenario. Nou, laat ons net by te voeg sommige woordeskat sodat ons kan begin om te gooi om terme wat is anders mooi intuïtief. Al die dinge wat ek net uitgelig in geel hier, Ek gaan net om die funksies of prosedures. Hulle is net soort optrede. So haal, oop vir, kyk op, bel, oop, oop, quit-- dit is net stappe, of ons sal noem dit meer formeel, funksies. Intussen het nou in geel, Ek het dinge uitgelig that-- laat ons net begin roep hulle omstandighede of takke. Dit is besluit punte waar jy dalk op hierdie manier gaan, op hierdie manier, of 'n ander rigting steeds. So diegene sal wees voorwaardes. En nou hierdie een is 'n bietjie liefhebber. Kom ons noem hierdie vrae Boolse uitdrukkings, na iemand met 'n naam Bool. En 'n Boole-uitdrukking is net iets dit is waar of vals, ja of nee. Dit is dus die vraag wie antwoord wat jy omgee, ten einde in 'n toestand 'n decision-- terug te kry 'n antwoord, en dan gaan jy links of regs, of iets heeltemal anders. En dan laastens, hierdie lyne here-- terug te gaan te stap twee, gaan terug om two-- stap ons kon uitvoering van hierdie idee in verskillende maniere. En dan dié van julle met programming ervaring kan gedoen of kan dink dit anders te doen. Maar vir doeleindes vandag, dis net die idee wat tel. Dit is induserende wat Ons sal oor die algemeen noem 'n loop-- 'n soort van siklus, want dit maak my weer iets te doen. So nou, laat ons net oorweeg hoe goed hierdie algoritme is. Dit is korrek. As Mike se belang in die boek, dit is een van hierdie vier scenarios-- weer en weer en weer, sal ons hom nou juis aantref. Maar hoe goed is dit? Wel, ons het nie om hier te formeel wees. Maar laat ons net stip iets, x en y, uit te kom 'n gevoel van die vorm van hierdie probleem. Op die x-as hier is die grootte van my probleem. En hulle het 'n y-as hier sal die tyd om op te los. So miskien is hierdie aantal bladsye. Miskien is dit sekondes of bladsy turns-- wat ook al. Maar jy wil om te tel is wat hierdie foto sal verteenwoordig. Hierdie eerste algoritme, ek gaan beskryf as net 'n reguit lyn. As daar 'n bladsye in die telefoon boek, dan is dit dalk my te vang soveel as N stappe om Mike vind. As Verizon of die telefoon maatskappy voeg nog 'n Volgende jaar, dit kan my neem nog een step-- nog 'n eenheid van tyd tot Mike vind. Daar is dus net hierdie 12:59 verhouding. Dit is 'n reguit lyn helling. Intussen het die tweede algorithm-- as ek gaan twee op 'n time-- twee, vier, ses, agt, of double-- gaan deur die bladsye twee keer op 'n tyd, twee op 'n tyd, dit is nog steeds reguit lyn. Daar is nou 'n 1-2 verhouding, maar net 'n bietjie laer. So as daar is soveel bladsye op die grafiek hier in geel, wat my kon neem hierdie baie stappe of sekondes, anders dit gaan om my te vang twee keer soveel op die rooi lyn. Maar die groen lyn is die ware afhaal. Dit is wat ons in die algemeen roep 'n logorithm-- log van N, waar N die aantal bladsye. Maar dit is die vorm wat saak maak vandag, want ons het nie ' om selfs te dink oor die plot punte. Dink aan 'n uiterste scenario. Veronderstel Verizon môre verdubbel die aantal bladsye in daardie telefoon boek, vanaf 1000 tot 2000. In die eerste algoritme, ek kan mors 'n ekstra 1000 stappe op soek na Mike, net omdat Verizon verdubbel die grootte van die boek. Die tweede algorithm-- dit dalk neem my 'n ekstra 500 stappe. 1000 meer bladsye, ek gaan twee op 'n time-- 500 meer stappe te Mike vind. Maar daardie derde algoritme is 'n soort van magiese. Verizon verdubbel die aantal bladsye van 1000 tot 2000, maar hoeveel meer stappe doen Dit neem my om te kyk vir Mike? Dis net een, want ek kan net skeur die telefoon boek nog een keer van 'n probleem 2000 bladsy na 'n probleem 1000 bladsy, en voila. Ek het 'n massiewe hap daaruit. En as jy gaan regtig uiterste, veronderstel dat die telefoon boek maatskappy het iets gek soos 'n 4 miljard page telefoon boek. Wel hoeveel stappe kan neem dit Mike Smith in 'n 4 miljard bladsy telefoon boek? Dis 'n groot aantal, maar net 4 miljard tot 2000000000-1000000000 om 500 miljoen 250 million-- steeds klink soos 'n groot aantal, maar ek is baie vinnig om na kleiner waardes. En in werklikheid, as ek dit doen die wiskunde reg, ek kan net verdeel 4000000000 deur ongeveer 32 keer voor Ek kry net een. So as wat telefoon boek was 4 miljard bladsye lank, geen big deal. Binne 'n paar sekondes, miskien 32 sekondes, ek kon dit verdeel in die helfte en uiteindelik vind Mike of aflei dat hy nie daar nie. En dit is die essensie van 'n algorithm-- n goeie algoritme. En dit is een van die doelwitte van 'n klas soos hierdie, probeer om uit te vind hoe doen ek die probleem op te los nie net korrek, soos ek het altyd geweet hoe om dit te doen 'n bladsy op 'n time-- maar korrek en goed. Hoe kan ek ontwerp goeie oplossings vir probleme? So laat ons neem 'n oomblik hier en gee jou 'n gevoel nou van CS50 die loop itself-- stel personeellede 'n paar natuurlik nie. Net voor 02:00, sal ons neem 'n kort pouse sodat dié van julle wat inkopies kan eend uit en neem 'n kyk na 'n ander klas en kyk na die res van hierdie aanlyn. Maar vir nou, laat ek CS50, die klas self, en veral wat nuut is. So het die afgelope jaar, het ons spandeer nogal 'n bietjie van time-- personeel die kursus en I-- dink oor wat dit is wat ons wil CS50 te wees, en terug te gaan na die eerste beginsels, om so te praat, om te oorweeg wat dit is wat ons wil hierdie kursus lyk en wees soos vir die studente. En so sien jy in probleem stel nul sowel, 'n uitnodiging 'n blik op wat neem URL wat 'n opsomming van sommige van die motiverings agter die volgende eienskappe van val 2016. So as jy dalk opgetel van die TL: DR opdragstuk, die leerplan vandag sowel as uit die kursus katalogus, vanjaar in CS50, jy net verwag om by te woon today-- so werk goed done-- en die laaste lesing oor 21 November. En jy is welkom, maar nie na verwagting is woon die lesings in die middel, want wat ons doen vanjaar, skiet in real-time materiaal deur die loop se. So alles sal bly huidige en opgeneem as beste can-- ons huidige gebeure en gesprekke wat mense mag word met in die industrie in die wêreld nie, maar maak dat materiaal beskikbaar, as gevolg daarvan, selfs earlier-- kompleet met volledige teks transkripsies en soekbare en skakels na ander bronne. En inderdaad, het ons beweer 'n geruime tyd en ons het nou glo dat hierdie, dat ons kan skep, digitaal, 'n meer meeslepende, 'n meer oortuigende opvoedkundige ervaring, in teenstelling om te versamel hier 'n paar 23 keer persoonlik, hoor iemand soos ek eenvoudig praat oor rekenaarwetenskap, in teenstelling met die beoefening meer aktief. So jy sal sien in leerplan die kursus se 'n skets van die semester hier, saam met wanneer lesings verfilm, waaraan jy welkom, maar nie verwag word, en wanneer hulle sal vrygestel op die webwerf die kursus se. En wat sal ons hier te doen op Woensdae begin volgende week, is 'n baie meer intiem, met slegs dié mense wat wil deelneem, is 'n sogenaamde loop deur, waar ek en koppe die kursus se sal eintlik dinge 'n bietjie meer intieme af hier in die orkes artikel, het nog 'n paar tegnologie en loop deur die huidige week se probleem stel, en bied jou particularly-- as onder diegene wat minder comfortable-- al hoe meer leiding wat jy dalk wil of nodig vir uitdaging die week se. En so, vir diegene wat nie kan woon diegene persoonlik, geen big deal. Daar sal op soortgelyke wyse gelei word deur een van senior personeel die kursus se Zamalya, dieselfde geleentheid ingesluit in die probleem stel hulself. Probleem stel vanjaar vrygestel sal word op Vrydae en nie meer sewe dae later doen, maar 10 dae later-- doelbewus oorvleuel met elke probleem stel, ten einde beter te akkommodeer, ons hoop, eb en vloei in studentegetalle skedules, veral wanneer midterms of atletiek of akademici of extracurriculars geneig om te kom en gaan veral die middel-semester. Dit moet gee jou 'n bietjie meer diskresie om te besluit of jy voor laai jou week met CS50 of terug vrag dit op die volgende naweek in plaas. So kyk na leerplan die kursus se hier vir die skedule daarvan. En jy sal ook onder sien die veranderinge vanjaar, vir diegene wat meer vertroud is met ontwikkeling in die verlede, ons sal die semester as begin Ons sal vandag in Scratch, fokus veral op die taal genoem C, en dan die oorgang nie PHP, maar om 'n taal, die sogenaamde Python teen die einde van die semester in die konteks van die web ontwikkeling, saam met SQL en JavaScript, HTML, CSS, en nog baie meer. En in antwoord op 'n FAQ, dis inderdaad die geval dat CS is nie so skrikwekkend soos ek een keer het gedink dit was, maar dit is net soveel werk soos ek gehoor het dit sou wees. Maar dit is die sê dat hier is 'n paar statistieke van val 2015 studentekorps, waardeur die horisontale blou lyne verteenwoordig die gemiddelde aantal ure berig. En jy sal 'n gemiddeld van sien ses tot 10 om miskien 16 12-- of so en so meer, maar met hoë variansie om duidelik te wees. En so besef dat daar nie net studente meer gemaklik en minder gemaklik in die loop, maar 'n ooreenstemmende ondersteuning struktuur aan dié studente te kry deur die semester suksesvol. Inderdaad, in antwoord op 'n FAQ, moet jy CS50 neem as 'n eerstejaar? Absoluut. En in werklikheid, ek is jammer nie my pad gevind het of het 'n nuwe veld daardie eerste jaar as well. En behoort jou CS50 met ander kursusse, beslis well-- as en die algemene raad mag ons gee studente, wat CS50 is waarskynlik nie die soort klas of intro klas wat jy moet neem met drie ander of vier ander p stel klasse. Maar as jy neem twee ander p-stel klasse, iets anders, en CS50, absoluut hanteerbaar. Ek het baie studente in die gehad verlede gedoen het baie suksesvol. En om jou te kry in die rigting wat eindstreep suksesvol, beteken die kursus het sections-- verskillende spore vir studente minder gemaklik, meer gemaklik, en iewers tussenin, waardeur in die loop se eerste probleem stel, jy sal gevra word om jouself te beskryf. En as jy een van diegene wat minder gemaklik, dit is die soort ding dat jy net eerder weet. En inderdaad, wat al die groeiende demografiese in CS50 vir 'n hele paar jaar. Vanaf laaste val vir Byvoorbeeld, 58% van die klas beskryf hulself as onder diegene wat minder gemaklik, met 9% onder diegene meer gemaklik, en dan die ander studente daar in rooi hulself beskryf as iewers tussen in. En jy sal sien hier die onderwerpe algehele en skedule van artikels, wat almal word in persoon, in real-time, met die verloop van ongelooflike personeel van onderrig genote en natuurlik assistente, van wie sommige jy ontmoet in net 'n oomblik. Artikels gehandel soos jy sal sien, sal wees Maandae en Dinsdae en Woensdae, ten einde jou toelaat om te duik agter innemende, as jy so kies, in die loop se lesings vroeër die week. En dan kantoorure, wat beslis, met elke jaar wat verbygaan, het nie minder van 'n reeds uitdaging vir die kursus. En hierdie jaar het ons van plan is nie net amp hours-- een op een geleenthede om hulp vir studente op Woensdae Donderdae en Sondae, die laaste van daardie om in die middag deur ontwerp om 'n paar van die stres te verminder wat altyd ontstaan ​​met laatnag p-die stel van 'n sperdatum looming-- maar kantoorure sal ook aangebied word op Maandae en Dinsdae en Woensdae en Vrydae en Saterdae, te danke aan ons vriende by HSA. CS50 het nou sy eie ruimte vir studente en CS50 personeel, bo 67 Mount Auburn Street, net daar in Harvard Square. Die visie waarvoor is dat CS50 se TFS en GR'e die hele week, pretty much deur die grootste deel dae, sal daar wees vir ondersteuning. So as jy het 'n paar vraag op 'n p-stel of jy voel 'n bietjie geblokkeer of 'n bietjie verward, en klink, het jy 'n uur het of 'n halfuur tussen klasse, veral in die square-- kan jy pop in en het daardie vraag beantwoord van daardie verwarring clarified-- baie in die gees, jy vertroud, van die wiskunde eie wiskunde vrae sentrum departement se maar pretty much rondom die klok per [? Gcal?] Dat ons aanlyn sal lewer. Tutoring is ook beskikbaar vir diegene studente, vrylik uit die kursus se eie personeel as jy wil meer intieme een op een, of twee of drie klasmaats net werk met een van personeellede die kursus se. En inderdaad, hierdie hier is net sommige van personeellede die kursus se 'n paar van wie jy ontmoet in net 'n oomblik. Trouens, CS50 se eie hoof onderrig mede, en kop loop assistent, en leermeester, kon kom op, laat hulle kom groet het. [Applous] SPREKER 1: [onhoorbaar]. [Applous] Spreker 2: [onhoorbaar]. [Applous] SPREKER 3: [onhoorbaar]. [Applous] David Malan: En ons toelaat om bring aan boord twee van CS50 se mees senior personeel, Rob en Zamayla sowel. [Applous] Inderdaad, beide Rob en Zamayla het al met ons vir so lank, dat ek in staat was om te gaan in die argiewe CS50 se en vind dit baie SD beeldmateriaal van hulle deelname op die verhoog self 'n paar jaar gelede. ROB: [onhoorbaar]. [Applous] ZAMAYLA: [onhoorbaar] [Applous] David Malan: Dankie. So bo en behalwe dié spanlede hier, CS50 het 'n span van byna 100 personeellede, wat almal sal beskikbaar wees vir artikels wees en kantoorure en soveel meer. En as Rob sê ook dit is die belangrikste opknapping van CS50 in die 10 jaar wat Ek het in [onhoorbaar] was. [Onhoorbaar] veral gefokus in die verskaffing van 'n ondersteuning struktuur, snoei weg baie die grootste deel wat was opgehoopte in 10 jaar van iteratiewe ontwikkelings op die baan se probleem stelle. So hierdie jaar, nie net in die klas, maar ook in die vorm van die probleem deur die loop se stelle, moet jy dinge om uit te vind meer vaartbelyn, trimmer, veel meer hanteerbaar as in die afgelope jare, soos ons werp 'n paar van die bagasie wat ontwikkel deur die natuur van ontwikkelende jaar na jaar en iterating. So het die nuwe en verbeterde begin vandag. Jy sal 'n paar meer van die ontmoet personeel in die [onhoorbaar] Natuurlik se by 02:30, waar ons dien, as 'n tradisie, koek. Daar is 'n bietjie meer koek as dit, maar jy sal Ontmoet Erin en Tobias en ander steeds. En laat ek jou gee 'n toer voordat ons hoor van 'n paar van die ander personeellede in die klas, wat wag as well. Trouens, ons begin altyd CS50 se semester eerskomende Saterdag, met wat genoem CS50 legkaart Dag. Dit het niks te doen met Rekenaarwetenskap per se nie, maar met sowat probleem die oplossing van meer algemeen. En as jy so verkies om deel te neem, per paar van die uitnodigings, jy dalk deur gesien gedaal of op die stadium hier, dit is 'n geleentheid in spanne van twee of drie of vier, om deel te neem vir raaisels en pizza en pryse en more-- hierdie Saterdag Bly ingeskakel vir meer. Jy sal ook vind dat elke Vrydag, op Vuur en ys, beteken CS50 bring 'n hele klomp van studente middagete, om 'n groot te maak klas voel meer intieme, en oor die algemeen saam te bring alumni en vriende van die industrie om te praat oor wat hulle het was tot aangesien sy studies. Net so, hierdie jaar sal ons huldig die eerste keer ooit CS50 50 kodering contest-- n mid-semester geleentheid om almal te laat op 'n opt in basis, 'n moet uitdaging van Wits teen klasmaats, weer in spanne van twee of drie of vier, met behulp van slegs daardie programmering vaardig dat jy dan onder jou gordel ná net ses of sewe weke van die klas, en deelnemende in hierdie soort kompetisie online-- as jy wil om jou eie slyp vaardighede al hoe meer in daardie uitdaging. Aan die einde van die semester is die sogenaamde CS50 Hackathon-- 'n geleentheid wat begin om 7:00 PM eindig by 07:00, en langs die pad 12 aand ure waarin duik in finale project-- die kursus se 'n geleentheid om te ontwerp en implementeer die meeste enigiets van belang om jou met jou onderrig leiding mede se. Rondom 09:00 het ons gewoonlik dien pizza, 01:00, Philippe se en die paar van ons wat nog wakker 05:00, is pendeltuig aangery af die pad na IHOP vir ontbyt. En dan 'n paar dae later is die sogenaamde CS50 fare-- 'n einde van semester uitstalling in viering van net hoe ver so baie van CS50 studente kom uit week nul al die pad na week, en hou in gedagte dat 73% van diegene klasmaats en joune vanjaar het 'n CS klas nooit tevore geneem. Trouens, om soveel reemphasize, hier is nog 'n paar gesigte van personeel CS50 se. SPREKER 4: [onhoorbaar]. SPREKER 5: [onhoorbaar]. SPREKER 6: [onhoorbaar]. SPREKER 7: [onhoorbaar]. SPREKER 8: [onhoorbaar] SPREKER 9: [onhoorbaar]. SPREKER 4: [onhoorbaar]. SPREKER 10: [onhoorbaar]. SPREKER 11: [onhoorbaar]. SPREKER 12: [onhoorbaar]. SPREKER 13: [onhoorbaar] SPREKER 14: [onhoorbaar]. SPREKER 13: [onhoorbaar]. SPREKER 15: [onhoorbaar] SPREKER 16: [onhoorbaar]. SPREKER 11: [onhoorbaar] SPREKER 5: [onhoorbaar]. David Malan: Sommige van die span hulself inkopies klasse. Maar as daardie lede van CS50 personeel is hier, kon kom vir net 'n oomblik. CS50 se TFS en GR'e en [? personeel?] lede here-- dit is net 'n paar van die faces-- een van wie jy net sien, en 'n paar other-- en 'n paar ander steeds. Hoekom het ons nie voort te gaan en toelaat julle 'n vyf minute breek. As jy nodig het om eend uit te shop klasse, is dit goed. En binne vyf minute, sal ons weer, neem 'n blik op Scratch-- die eerste van ons programmeertaal, ontmoet personeel die kursus se hier 'n paar meer, en fokus uiteindelik op probleem gestel nul. So sal ons terug in vyf minute wees. [Applous] Alles reg. So moet ons te kort. En in ons oorblywende tyd vandag, die doel is om die speelveld gelyk te maak in terme van 'n paar terme, in terme van 'n paar idees. Omdat inderdaad, soos per sommige van die kaarte vroeër, Daar gaan 'n verskeidenheid van wees vlakke van ondervinding in die klas, sommige van wie se studente het geneem 'n paar programme voor, sommige van hulle het nie. En so met die eerste probleem stel en met hierdie eerste taal het ons 'n geleentheid om te begin om as vanselfsprekend aanvaar ná vandag 'n paar algemene woordeskat en idee. En ons sal dit doen deur middel van eerste languages-- die kursus se bykomend tot C en Python en JavaScript en SQL en HTML en CSS, Ons sal aanvanklik fokus en net vir probleem gestel nul op hierdie grafiese taal, genoem Kras, wat ontwikkel is deur MIT se Media Lab in die pad af, om te help studente en kinders veral uit te druk algorithmically-- in 'n manier om meer in ooreenstemming met wat Ons kan Rekenaardenke noem. En dit is 'n nuttige taal omdat baie vinnig aanstaande week in week een, ons oorgang na 'n meer tradisionele en arcane taal genoem C, wat suiwer tekstuele. Jy gebruik net jou sleutelbord in Om instruksies te skryf Sulke op die skerm. Maar selfs as jy nog nooit gesien 'n programmeertaal voor, in net skrams teen hierdie, al word dit kriptiese, jy kan seker raai wat waarskynlik druk Hello World. Maar daar is 'n baie sintaktiese oorhoofse daar. Daar is die vreemde hash simbool of hash tag op die top. Daar is die hoek tussen hakies, 'n paar hakies, krullerige draadjies, semi-colon-- Daar is net soveel visuele sintaksis wat in die pad. Ons begin die kursus met Kras so te kry verlede al daardie intellektueel oninteressant afleiding, en fokus plaas op die idees. Trouens, sou dit voor wees. Dit, vir hierdie, week word na. Dit, in hierdie grafiese taal nuuts af, is hoe jy daardie selfde sal implementeer program-- 'n program wat toe hardloop, eenvoudig sê hello world. En wat is lekker oor Scratch is dis hierdie grafiese programmering omgewing wat stukke van die legkaart of gebruik blokke, wat net saam verstrengel As dit maak logies sin om dit te doen. En met Scratch kan jy die ontwikkeling van animasie en interaktiewe speletjies en kuns, en 'n aantal van die dinge wat jy dalk dink in jou eie gemoed, en implementeer hulle eenvoudig deur sleep stukke van die legkaart. En inderdaad, sal ons die vermoë het om 'n paar van dieselfde idees uit te druk dat ek nou net genoem 'n oomblik gelede in die konteks van Mike Smith en soek 'n selfoon book-- dinge soos funksies, net aksies, dinge soos sirkelroetes doen dinge weer en weer, veranderlikes wat iets wat ons sal stel, maar dit is bekend miskien uit algebra-- net 'n soort van tydelike 'n paar waarde wat jy dalk te stoor moet later-- Boolse uitdrukkings, waar diegene ja nee of ware valse vrae voor. Toestande is dié vurk in die road-- diegene takke om so te praat. En dan is daar is 'n paar liefhebber funksies wat ons sal vandag nog te sien, genoem skikkings en drade en gebeure, wat ons sal dan weer oor tyd in verskillende tale. Maar Scratch stel ons in staat om al hierdie te verken. So hier in Scratch, hierdie pers blok is wat 'n funksie is tipies gaan lyk. Dit pers legkaart stuk dat sommige het woord soos byvoorbeeld wat die aksie, en dan is dit dalk 'n moet argument of 'n parameter-- een of ander manier van soort opstel wat dit blok doen sodat dit nie vooraf bepaal deur MIT wat hierdie pers blok sê. Trouens, sal jy sien in 'n oomblik dat ek kan tik die woorde soos Hello World, of hallo Dawid, of hallo Zamayla, of wat ek wil, in die argument om dit legkaart piece-- die wit blokkie daar. Intussen, as ek wil 'n lus, sal ons sien dat daar stukke van die legkaart wat kyk 'n bietjie oranje soos hierdie. En hul vorm soort dui daarop dat iets gebeur weer en weer in 'n siklus. So as ek draai 'n sê hello world blok met 'n ewig te sluit in Scratch, dit is net gaan om te hou en sê hallo wêreld vir ewig, letterlik. Intussen is daar 'n ander tipe lus in Scratch dat ons 'n herhaling sal see-- block-- waar, as jy vooraf weet hoeveel keer jy wil die lus om uit te voer 'n beperkte aantal kere in fact-- jy kan spesifiseer dat deur te tik in 'n aantal of selfs te steek in 'n veranderlike, soos x of y soos ons sal sien. Trouens, veranderlikes soos Ek in hierdie geval, wat is 'n algemene naam vir 'n heelgetal veranderlike wat net winkels 'n number-- 'n heelgetal kan wees, hierdie oranje blok hier gebruik om stel 'n veranderlike soos ek aan nul. Hier is 'n voorbeeld in die groen van 'n Boole-uitdrukking in Scratch. Selfs al is dit lyk soos 'n wiskunde formule, wiskunde ongelykhede soos hierdie werklik is Boolse uitdrukkings. Dit is waar of vals is. Ek is minder as 50. Dit is óf 'n ja of nee antwoord of waar of onwaar antwoord. En ons sal oor die algemeen noem diegene Boolse uitdrukkings. En dit hoef nie te wees 50. Dit kan wees x minder as y, groter as y, gelyk aan y-- enige aantal ander vrae kan gevra word. Nou, met die eerste oogopslag, dit kan lyk skielik baie vet hier, en dit is. Maar konsep wys, is dit mooi vertroud voor. As x minder as y, is as sê soveel. Anders as x groter as y, dan sê soveel. Anders sê x is gelyk aan y. Ons het dus 'n voorbeeld daar van 'n derde scenario-- die enigste derde possibility-- x is óf groter as, minder as, of gelyk aan. So het ons 'n drie manier vurk in die pad. Kyk wat is cool here-- nuuts af, Dit wil voorkom, het net een legkaart stuk, in hierdie geval, in indien anders blok. En tog sou dit lyk jy impliseer kan net 'n tweerigting vurk in die pad. Jy kan links of regs, maar Wat van daardie derde scenario? Wat gebeur as x gelyk aan y? Geen groot deal. Neem een ​​legkaart stuk, sit 'n ander een binnekant van dit om die semantiese ekwivalent te skep van As, anders as, else-- en nou is jy het jou drie wyse vurk in die pad. En as ons sal sien, die Kras stukke van die legkaart gerek kan word en groei, so as om meer dinge gedrang in hulle nie. Jy hoef nie aan te pas alles in sy verstek grootte. Dit is iets wat ons sal gou sien staan ​​bekend as 'n skikking. Dis soos 'n list-- een of ander manier van stoor verskeie stukke van inligting in 'n veranderlike, nie net 'n nommer. Hierdie ons 'n verteenwoordiger van sien iets genaamd multi-threading. Trouens, al jou Mac en PC deesdae ondersteun multi-threading, wat beteken dat jy kan letterlik doen verskeie dinge op 'n slag. Jy kan Microsoft Word het in die voorgrond, besig met 'n paar opstel. Jy kan 'n leser het in die agtergrond opening G-pos of Facebook of dies meer. Jou rekenaar kan verskeie dinge doen vandag, want dit is 'n multi-threaded, en programme wat hulle is in in veral ook multi-threaded. Daar is dinge genoem gebeure soos goed in die wêreld van nuuts af, en dan is daar 'n manier ook te maak ons eie persoonlike legkaart stukke as dinge nie werklik bestaan ​​in advance. So laat ons motiveer dit soos volg. 'N Paar jaar gelede, toe ek die eerste keer ontdek nuuts af, toe ek was eintlik 'n grad student by MIT, ons onsself is getaak om huiswerk te maak. En ek implemented-- wat, in retrospek, was 'n baie swak besluit, want dit is die mees woedend lied in die wêreld om vir agt ure te luister terwyl jy werk op jou homework-- maar iets wat ek het Oscar Tyd genoem, wat dalk 'n bekende liedjie. CS50s besit Jordaan Hayashi, een van ons meer senior personeellede, het dit opgegradeer vir 2015 en nou 2016, aangesien terug in die dag, Ek het alles net gaan in Oscar se asblik. Nou ondersteun ons herwinning en kompos. Maar om die prentjie te verf van wat ons kan doen hier en 'n paar van motiveer die laer vlak voorbeelde, kon ons een ander vrywilliger om net te kom op tot en speel my eerste huiswerkopdrag ooit? Kom op. Wat is jou naam? HENRY: Henry. David Malan: Henry, kom op tot. Kom op. Kop In ieder geval, en jy sal sien in 'n oomblik, Ek gaan om voort te gaan en druk die groen vlag in die boonste regterkantste hoek, wat beteken gaan. Die teken ikoon bietjie stop gaan stop sê, en dit is wanneer jy begin en stop die program. Aangename kennis. Alles reg. So ons gaan die instruksies te sien op die skerm in net 'n oomblik. En net deur die speel van die spel vir 'n paar seconds-- glo my, Ons gaan nie wil speel al die pad na die end-- jy wil kry 'n gevoel van wat die program doen. En meer as net fokus op Henry goed of sleg die spel, fokus en hoe is dit geïmplementeer deur my oorspronklik en dan deur die Jordaan. Met ander woorde, waar is die veranderlikes? Waar is die lusse? Waar is die funksies? En ons sal sien of ons nie sien nie diegene onder die enjinkap. Net kliek en sleep asblik om die toepaslike bin. [Speel van musiek] Alles reg. Dit is baie goed. Hoekom het ons nie keer nie daar. Dankie. Baie geluk aan Henry. Dankie. [Applous] Dink net ontfouting die program. As daar 'n probleem twee minute in die song-- maar so wat gaan aan hier werklik? So ingewikkeld soos dit mag begin lyk met verloop van tyd te kry, inderdaad al hoe meer dinge begin val, Wat is interessant oor hierdie soort voorbeeld-- en ons sal sien 'n paar others-- is dat as jy kyk verby die kompleksiteit of die gesofistikeerdheid van die spel, daar is 'n baie eenvoudige gebou blokke wat almal play--, As jy dit distilleer aan diegene boublokke, is baie toeganklik en implementeerbare vir hulleself. Byvoorbeeld, dit is was 'n geruime tyd, maar ek is mooi seker wat ek aanvanklik gedoen het toe die maak van hierdie spel vir die eerste keer Ek was heeltemal soos procrastinated. Ek het glad nie fokus op die logika of die stukke van die legkaart, Ek het gefokus op die grafika en bevinding die straat post en die asblik en al wat. Maar dit was vereiste bestanddele by die eerste. En sodra ek klaar uitstel en uitlê van die oorkoepelende raamwerk, Ek het besluit, laat my net te maak een stuk asblik val uit die lug. En ons sal sien Scratch ondersteun dinge genoem sprites-- karakters wat kan verskillende kostuums op sodat hulle anders lyk. En so het ek 'n asblik kostuum op een so 'n sprite. En ek het net nodig gehad het om te val uit die lug. En so is dit blyk dat nuuts af, soos die meeste programmeertale, ondersteun ewekansige getalle of tegnies pseudokode ewekansige getalle, sodat deur te sleep en val sekere stukke van die legkaart, Ek was in staat om die asblik het kom van links by die eerste. En dan die volgende keer dit omval van die reg en dan vanaf die middel. En al die spel het net was het asblik wat uit die lug. Jy kan nie wys na dit of kliek op dit. Jy kan nie maak die asblik. Jy kan niks doen nie. Maar dit was 'n baba stap teenoor my uiteindelike visie. En daarna het ek eintlik geïmplementeer 'n soort van sensing sodat as jy nie op en sleep op die stuk van die asblik oor die asblik, Oscar se deksel sou oop en toe. Niks sal gebeur na die asblik, maar ten minste die deksel sou oop en toe. So dan kyk, stap twee van twee. En dit is wat gaan wees sleutel in beide probleem gestel nul en in programmering meer algemeen, is om neem hierdie baie doelbewuste baba stappe. Omdat dit beteken nie net toelaat dat jy voel eerlik bereik baie meer quickly-- dis die ergste ding in die wêreld om te probeer om al Oscar Tyd implementeer, dan ure later tref die groen vlag, en niks werk soos verwag want waar het jy al begin om debug of om los die program? Dis net oorweldigend. En so werklik omhels hierdie idee van die neem van steps-- baba stappe weer en again-- opbou iets wat op die ou end, werklik indrukwekkend en kompleks, maar Op die eerste, is nie naastenby so 'n mate. Trouens, laat ons dit doen. Laat my gaan voort and-- Krap self bestaan ​​op die web by Scratch.MIT.edu, en jy sal ingelig word as veel weer in probleem stel nul, die spesifikasie vir wat reeds op die webwerf CS50 se. Maar dit is wat Krap self is. En daar is regtig net drie primêre gebiede. Aan die bokant is daar gelaat is die sogenaamde stadium. Dit is te krap. Die verstek kostuum is 'n kat. En dit is die vierkantige wêreld in wat jy kan move-- op, af, links, reg en 'n paar ander dinge. In die middel hier is ons kategorieë of ons palette van die legkaart stukke, en verskillende kleure beteken verskillende dinge. En as jy rondom steek, sal jy sien dinge soos lusse en voorwaardes en veranderlikes en ander bestanddele. En dan hier is die skrifte gebied. Dit is hier waar ek kan sleep en diegene stukke van die legkaart om dinge te doen. So laat ons doen een so 'n ding. Laat my gaan voort and-- en ek weet waar dit is. So ek gaan onmiddellik klik op waar ek weet dinge is om gereed te wees, maar wys en kliek en skeer rond is onvermydelik. So wanneer groen vlag gekliek, wat doen wat ek wil doen? Ek gaan om dit te doen. Ek gaan hierdie pers legkaart sleep stuk, sê hallo vir twee sekondes, en laat my in te zoem. En ek gaan om dit te verander te wees wat ek wil hê dit moet be-- Hello World vir twee sekondes is fyn. Nou, ek gaan die klik groen vlag, of as ek regtig wil, Ek kan die volle screen dit en kom dan terug. Dit sal net aanhou alles in 'n venster. Groen flag-- hello world. Alles reg. Nie alles wat interessant. So laat ek gaan voort en doen dit. Laat ek probeer 'n ander een. Wanneer groen vlag se clicked-- laat iets soos 'n geluid te doen. En sien dat uit die boks gratis jy 'n kat klank, soos die standaard sprite. So nou laat ek gaan voort en druk op die groen vlag nou. [Miaau] AW. Dit is adorable. Ek programmering. So, wat het ek gedoen? Dit is die ekwivalent van 'n program. Dit is natuurlik super eenvoudig. Dit het nie regtig al neem dat daar nog baie moeite en MIT het die meeste van die werk, maar ek het 'n funksie genoem. Ek het 'n funksie gebruik. Ek het 'n paar aksie gemaak, met net dat 'n mens pers legkaart stuk. Wel, as ek wil doen drie meows in 'n ry? Laat my gaan voort en doen twee en drie. En agterkom dat as jy Beweeg nabygeleë n legkaart stuk, 'n bietjie wit streep verskyn soort magneties, en dit sal snap saam wanneer jy laat gaan. Kom ons kyk wat hier gebeur. [Miaau] Daar is 'n fout. Ek hoor net een miauw. Hoekom kan dit wees? Ja? Ja. Ons het nie regtig hoor, maar dit is 'n goeie intuïsie. Hulle is almal speel op dieselfde tyd. Hoekom? Wel, die rekenaar is net gaan om te doen wat jy dit vertel om te doen. So as jy sê, speel klank, speel klank, speel klank, maar jy hoef dit nie te kenne gee om te speel totdat jy gedoen het, speel totdat jy klaar is, dit gaan deur blaas die program baie vinnig en doen slegs wat jy dit vertel om te doen. So ek moet eintlik op te los dit in 'n paar maniere. Ek kan dit net doen, ontslae te raak van hierdie. Laat ek probeer hierdie ander legkaart piece-- speel klank miauw tot gaar, en dan sleep drie hierdie en klik speel. [Miaau] Dit is nie regtig very-- dankie you-- baie natuurlike. So hoekom nie I-- laat my gaan hier te beheer. Lekker. Wag 'n sekonde, en nou wil ek teruggaan om klanke en speel klank tot gaar, en dan laat my sommer wag 'n sekonde. En dan laat my gaan en kry 'n meer klank, en hier gaan ons. [Miaau] 'N bietjie meer natuurlike, maar dit is nie baie doeltreffend nie. Soos ek verveeld, almal dit kortliks, kliek heen en weer en regtig duplisering my work-- pretty much kopieer en plak. Inderdaad, as ek Beheer kliek regs gekliek word, Ek kon net gekopieer en geplak. Wat sou 'n beter bou om te gebruik? Wat idee voor? Ja, so 'n lus. En in werklikheid, as ons poked rondom, Ons kan presies dit te vind. Laat my gaan na gebeure of eerder beheer. So repeat-- ek doen nie wil dit tot 10 keer wees. Dit gaan vinnig irriterende kry. Maar ek sal drie keer herhaal. Laat my terug te gaan om te blaas en speel die klank totdat dit gedoen. Laat my terug te gaan na die Beheer en net wag 'n sekonde. En kennis, kan jy dink dit pas nie, maar weer as magneties jy laat dit snap in plek is, sal dit groei te vul. Wat is dit nou speel? [Miaau] OK. Lekker. En dit is wat sal genoem word 'n program wat ook korrek. Dit meowed drie keer redelik natuurlik, maar dit is beter ontwerp. Ek gebruik minder ontslag. Ek het nie kopieer en plak enigiets. Ek het nou net gebruik om 'n beter idee. Nou, is dit nog steeds nie alles wat interessante met Scratch nie doen enigiets. So laat ons iets doen anders plaas. Kom ons altyd iets te doen. En weet jy wat? Beweging lyk interessant. Kom ons hom 10 beweeg stappe en druk nou speel. OK. Wel ons kan soort drag hom terug, en hy is nog steeds loop, omdat hy dit vir ewig doen. So het die lus is om te doen wat dit sê om te doen, maar dit is nie alles wat interessant. Kom ons doen dit. Laat my 'n kontrole blok voeg, en gebruik 'n van daardie voorwaardes vir die eerste keer. So dit gaan 10 steps-- beweeg 10 punte, 10 pixels op die screen-- dan is dit gaan om die vraag te vra. As daar iets is waar, dan doen iets in hierdie blok. So dit blyk sensing het 'n hele n klomp van die Boolese expressions-- vrae van die ja nee of ware valse form-- laat my dit doen. As touching-- en dan is daar hierdie klein drop down menu. Ek kan dit parameteriseren. As die aanraking van die edge-- laat so iets te doen. So as raak edge-- Laat my terug te gaan na beweging. En hoekom doen ons nie net omdraai 180 grade? Alles reg. So vir ewig, beweeg 10 stappe. As jy raak die rand, draai 180 grade. En dit is nie die einde van die program omdat jy in 'n ewig te sluit, so dit gaan om terug te gaan en weer en weer en weer. So kom ons kyk wat gebeur. OK. 'N bietjie karretjie, maar gaaf. En ons kan byvoeg by hierdie paar dom dinge wat nie alles wat intellektueel interessant. Maar as ons getref hierdie klein mikrofoon button-- eina. Laat my skoon hierdie up. Laat my dit te verbeter as hulle sou sê op TV. Skoon dat up, Save, en Maar gaan nou tot skrifte. En nou, laat my gaan om te blaas. Kom ek gee dit 'n naam. Ek sal hierdie eina noem. En nou speel klank eina. Let daarop dat dit verskyn in die bietjie drop down menu. Kom ons sien. [Eina] [ROOIBORSDUIFIE] Maar ons kan verander t sy op die vlieg. Ons kan twee keer so irriterend. [Eina] Of as ons dit soos 1000 stappe teen 'n time-- OK. So ons gaan dat 'n mens uit te los. So weer, die bou van blocks-- ek begin met iets super eenvoudige, en dan bygevoeg ek 'n funksie, bygevoeg 'n funksie, bygevoeg 'n funksie. En ek hoef nie meer te bekommer oor hoe die eerste van dié funksies geïmplementeer as ek voortgaan om dinge laag bo. So in werklikheid, laat my een ander doen hier. Laat my gaan voort en 'n lêer oop te maak dat Ek het vooraf, genoem skape. Dit het so 'n bietjie anders karakter wat so lyk. En laat ek sien of ek kan nie doen iets met behulp van 'n toonbank in hierdie case-- n sogenaamde veranderlike. Ek gaan voort en onder Events-- gaan laat my sommer 'n groen vlag gebruik. laat my dan na Data, wat ek weet van net rondspeel voor, is waar veranderlikes is. En ek gaan om voort te gaan en sleep dit. So 'n veranderlike genoem toonbank, en Ek gaan dit inisialiseer aan nul. Ek kan dit noem anything-- x of y of z-- maar in programmering, roep iets in 'n semanties nuttige manier, soos toonbank, wat beskryf wat dit is, dit is 'n baie makliker om jou kode later lees. Laat my gaan voort en kry 'n ewig blok hier. Dat ek kan gaan om die voorkoms bladsy en doen 'n sê blok. Maar wat is koel oor veranderlikes is ek hoef nie te tik in iets soos Hello World, wat ons reeds gedoen het, kan ek in plaas gaan na Data en sleep my veranderlike, en selfs alhoewel die vorm nie heeltemal lyk dit moet inpas, dit sal groei in te vul. En ek sal net sê die toonbank vir een second-- spoiler-- hy gaan tel. Ons sal dit sê vir 'n sekonde. Toe ek gaan om te gaan en het hom wag 'n sekonde, so dit tel nie op te vinnig. En dan laastens, verander toonbank deur one-- met ander woorde, inkrementeer die toonbank deur een bykomende waarde en doen dit vir ewig. So het die skape ook, soos 'n programmeerder, tel van 0. En as ons lank genoeg wag, Hy sal dit vir ewig doen. Maar dit is nie presies waar nie, omdat Trouens, soos ons sal ontdek in week een, heelgetalle en rekenaars meer algemeen, tegnies net 'n finite-- goed, eerder rekenaars, wanneer hulle verteenwoordig heelgetalle, net 'n beperkte aantal bisse. Diegene gloeilampe daar kan net tel so hoog voordat jy uit gloeilampe. En 'n rekenaar ook net het soveel geheue, het net so baie transistors, sodat dit kan net tel so hoog. So dit blyk dat die skape, Ek dink, kan reken op 2000000000 of iets mooi groot. So ons gaan nie wag vir dit om te gebeur. Maar uiteindelik 'n paar fout sal gebeur wat kan 'n paar baie werklike wêreld gevolge. Maar buite die skape, wat net stel 'n veranderlike. Kom ons gaan voort en oop te stel iets wat ek gemaak by voorbaat hier genoem Pet die Cat-- Troeteldier die kat hier. En sien hier is dit min blokke, maar wanneer groen vlag gekliek, vir ewig tot die volgende. As jy raak die muis pointer-- so die wyser op die skerm, die arrow-- speel klank miauw en dan wag twee sekondes. En dit net doen vir ewig. Net voortdurend wag om te sien of die pointer-- As die kat raak die wyser. So ek getref speel. Niks gebeur. Maar as ek beweeg die muis oor die kat, [Miaau] En as ek beweeg dit weg, nie troetel die kat nie. So 'n paar voorwaardelike logika geneste binnekant van 'n lus. Hoe gaan dit met hierdie voorbeeld met opset genoem Moenie Troeteldier die kat? Wat is dit gaan doen? [Miaau] Hoekom moet jy nie die kat troeteldier? [Miaau] OK. So dit is 'n voorbeeld van 'n as anders. Dit is 'n besluit punt en want dit is die vergadering in die lus, hulle is albei kry nagegaan. Is dit waar? Is dit waar? Is dit waar? Is dit waar? En uiteindelik, een van diegene gaan om aansoek te doen en sodat jy óf die miaau of hoor die brul van die leeu in daardie geval. Wel, laat ons doen 'n bietjie meer fancy een wat ek gemaak het vooruit too-- drade. So 'n draad is net een Al wat 'n rekenaar kan doen. So 'n multi-threaded program is 'n program wat kan verskeie dinge gelyktydig. En al hierdie voorbeelde tot dusver gehad het net een script, om so te speak-- een program soos hierdie hier. Maar let op die program het twee sprites, twee karakters. Een daarvan is 'n voël. Een daarvan is 'n kat. En sien toe ek op hierdie af klik links, hulle het elk hul eie skrifte of programme wat verband hou met hulle. En beide van diegene programme, kennisgewing, begin met wanneer groen vlag clicked-- Kom ons kyk na die cat-- wanneer groen vlag gebruik. En so ja, wanneer ek getref speel nou, twee dinge gaan gebeur in 'n keer. Die kat en die voël is albei gaan gelyktydig funksioneer om hierdie effek te skep. En jy kan dink wat gebeur. Daar is 'n lus en die voëls en die kat is in 'n lus. Die voël is net weerkaats soos Ek was voor toe ek gesê eina. Maar die kat het duidelik 'n voordeel. Daar is nog 'n sensing blok wat verwys die kat doelbewus om die voëls in hierdie geval hier. So ons kon terg uitmekaar, deur te kyk deur die blokke, wat gebeur. Maar die belangrikste bestanddeel hier is een. Die voël, sodat die spel is nie heeltemal boring-- of hierdie animation-- begin om 'n ewekansige rigting. En die rekenaar is pluk 'n getal tussen 90 en 180 wese, sodat dit 'n effens verskillende animasie elke keer. En dan sien hier, indien die kat raak die voëls, dan speel die leeu vier sound-- die brul. Maar intussen in die voël se palet, ons het hierdie. Forever, as die kat nie raak, net bly beweeg drie stappe. En dan is hier is 'n ander legkaart stuk. As jy op die rand, hop. So het die voël is net soort van minding sy eie besigheid, net vlieg rond en weerkaats, en dit is regtig die kat wat die voorwaardelike logika het om te bepaal of dit die voël gevang. Alles reg. So laat ons doen een ander hier, hierdie een word Hi genoem Hi Hi. En hierdie een hier net doen dit in 'n ewig lus. Maar notice-- hoe kan ons stop hierdie baie irriterende program? Klik op die space bar. Want as ek dit doen, die linkerhand program-- sien dis voortdurend listening-- is die sleutel ruimte pers. As die spasie balk gedruk, en indien wel, wat doen dit? Dit maak 'n baie algemene tegniek. Dit stel 'n veranderlike gelyk aan 'n bietjie waarde. Maar dit toggled wat waarde. [? So lyk?] gebaseer op die shape-- ek 'n veranderlike wat ek geskryf vooraf genoem Gedemp, wat net sê ja of nee. Is die klank gedemp of nie? Waar of vals? En kennis, ek sê this-- as gedempte nul, dan verander na een, anders gestel stom dit aan nul. Dus net flip die waarde van nul tot een. Ek kon done-- dit verander van twee na drie en 01:57 of 04:56 of 05:56. Maar dit maak nie saak Watter getalle wat ek gebruik, so lank as wat ek hou om dit te verander die teenoorgestelde. En die meeste enige programmeerder wil net kies nul en one-- valse en ware, af en is-- hierdie verteenwoordig. En dit is steeds aan die gang. As ek druk die space bar weer [SEAL SOUNDS] Die program is steeds aan die gang. Want daar is hierdie ander script wat sê, vir ewig die volgende te doen. As die gedempte veranderlike gelyk aan zero-- so as jy nie gedemp is die logic-- as dit vals of nee, dan speel die klank, omdat jy nie gedemp. Jy moet die klank speel en dan dink hi hi hi vir twee sekondes en dan wag, en doen dit weer en weer en weer. En so op hierdie manier het ons 'n manier vir mense aan- vir programme om te gebruik. En hulle hoef nie te word as gedateer as ander. Trouens, skeer around-- geen woordspeling intended-- iemand het 'n groot hoeveelheid van die tyd op die internet te implementeer PokemonGo in Scratch. Dit geolocates jy selfs in Cambridge of Allston hier. So as jy wil om te sien wat mense kan doen, is this-- baie fancy spyskaart. Klik hier op. Dit is my met my pyl-knoppies nou. Ek gaan om te gaan na hierdie. Klik. En nou is jy op die Pokeball. Ek bedoel, ek dink jy veronderstel is om te klik op die Pokeball. Alles reg. So ek het dit gedoen. Ek kan hier gaan. En hierdie persoon geïmplementeer 'n paar meer PokeBalls oor here-- drie PokeBalls. Ons sal 'n skakel na hierdie post aanlyn, sodat jy kan speel. Maar kennisgewing daar is net 'n paar basiese boustene. Dit lyk baie liefhebber, en dit is. Dit is indrukwekkend en meer as wat ons sou tipies verwag, beslis vir probleem gestel nul. Ek het geen idee hoe lank hierdie persoon spandeer aanlyn. Maar dit is alles net 'n lus. Daar is 'n klank speel. Daar is 'n soort van lus luister vir of ek slaan die pyltjie of die af arrow of links en regs, en dan as dit so is, is dit beweeg dit 'n aantal pixels. En dan as ek klik op 'n ander sprite, daar is 'n soort van as voorwaarde daar. Ja, dit is om te intens. Ons gaan om te stop. Dit is al die basiese boustene. Daar is geen ander ander bestanddele as die wat ons het gekyk na al. En tog hier, laat my doen 'n laaste stel voorbeelde wat verf 'n prentjie te van wat jy hier kan doen. Hier is 'n baie eenvoudige program wat net doen this-- hoes, hoes, hoes. En wat slegs gebaseer is op wat Ons het gekyk na wat tot dusver, waar is die voor die hand liggend geleentheid vir verbetering. Hierdie program is korrek. Dit hoes drie keer, en dit is wat ek bedoel. Maar dit is swak geïmplementeer. Dit is swak ontwerp. Hoekom? Ja. Dit is nie 'n lus. En dit is nie soseer dat dit nie 'n lus, dis dat daar is 'n baie ontslag. Daar is gekopieer en geplak kode, om so te praat. En die oplossing waarskynlik is inderdaad 'n lus. So laat ek gaan voort en te verbeter op dit. En ek gaan hierdie sleep oor hier. Laat my gaan voort en kry 'n herhaling blok, verander hierdie drie. Ek gaan weggooi sommige van die blokke. En jy sal sien dit is redelik intuïtief. Jy sleep en drop en dinge verskyn en verdwyn uiteindelik. En ek kan net hierdie sleep in hier, en nou het ek 'n skoner weergawe nog. Maar jy weet wat? Daar is hierdie geleentheid nou vir abstraction-- om te begin om nuwe woordeskat te definieer dat MIT het nie verwag. Daar is wag en herhaling en vir ewig en as, Maar wat as ek wil voer die woord hoes as 'n blok? Wat gebeur as ek wil 'n legkaart stuk wie se doel in die lewe is om te hoes? Wel, laat ons kyk na hierdie weergawe hier, wat ek gemaak soos volg. Nou het ek geskep hierdie legkaart stuk hier, wat Scratch kan jy doen. En inderdaad C en Python en JavaScript is gaan toelaat om dit te doen as goed. Jy kan jou eie persoonlike skep stukke wat jy noem wat jy wil. In hierdie geval, hoes voel soos 'n redelike definisie. En dan met hierdie stukke af hier kan jy definieer wat dit beteken. Ek gesleep en laat val van hierdie palet here-- meer blocks-- hierdie groot pers blok, waar ek getik in hoes as die naam van my nuwe legkaart stuk. En dan is ek te sê enige tyd 'n gebruiker noem hierdie nuwe hoes legkaart stuk, doen 'n sê en 'n wag. En so hier in my herhaling blok, Ek kan net hoes drie keer. En ek sou argumenteer, veral As jy nou weg te steek hierdie detail. Wie gee om hoe hoes geïmplementeer? Al wat ek omgee as 'n programmeerder wat ek kan hoes. Ek gee nie om hoe sê, is geïmplementeer. Ek sorg net dat die kat kan iets sê. Ek kan abstrakte weg met besonderhede en net fokus op wat op die skerm hier. Maar ek kan dit 'n stap verder te neem. Let daarop dat hier, ek het geïmplementeer om die lus drie keer. Maar wat as plaas ek hierdie weergawe gryp? En wat as plaas in hierdie weergawe hier, Ek verander net my legkaart stuk te neem 'n argument en insette vir homself? En dat insette kan wees 'n aantal soos drie. So nou, as ek skryf 'n program en ek wil die kat te hoes, Ek kan eintlik vertel die legkaart stuk hoeveel keer hoes, want aan die onderkant hier, 'n liefhebber weergawe van hierdie persoonlike stukke van die legkaart laat my spesifiseer wat hoes neem eintlik 'n input-- neem 'n argument soos hierdie. En weet jy wat? Miskien het ek besef, wag 'n minuut. Hoes is die same-- dis fundamenteel dieselfde idee as nies. Dis net 'n ander woord op die skerm. Ek kan abstrakte weg verder en te implementeer Hierdie finale weergawe van 'n hoes, wat met die eerste oogopslag is manier om meer komplekse soek. Maar let op wat ek gedoen het. Ek het nou generalized-- genericized really-- hierdie legkaart stuk genoem te word sê woord N tye. En nou het ek twee nuwe stukke van die legkaart af hier definieer hoes N tye. En wat beteken die hoes funksie doen? Wat beteken my persoonlike legkaart stuk te doen? Dit is dan net die seggenskap blok, verby in die woord wat ek wil sê, verby in die aantal kere wat ek wil sê. Want nou kan ek implementeer nies deur eenvoudig te sê achoo, in hierdie geval, 'n aantal kere. En so ek gelaagdheid en gelaagdheid. En weer, die sleutel hier is nie hoe ek dit geïmplementeer word, maar die feit dat as ek net letterlik beweeg die die skerm af, kyk hoe eenvoudig as dit nie mooi my program lyk nou. Omdat dit doen wat dit sê, ek het onttrek weg wat binne daardie black box. Dit gebeur met hier 'n pers box wees, maar ek het weg versper wat binne want ek gee nie om hoe dit werk. Ek gee nou net dat dit werk. En inderdaad, in probleem stel nul, dit is presies die aard van die lae van idees wat jy het die geleentheid om te verken. Dit is presies die geleentheid om probleemoplossingstegnieke toe te pas, na wat waarskynlik 'n onbekende omgewing. En of jy het nie geprogrammeer voor of voor geprogrammeer, sal jy vind dat daar ' 'n ietsie in hierdie omgewing vir almal. En met die probleem sit een uit elke keer 'n week se ons sal transitioned te fokus op 'n hoër vlak taal genoem C-- of eerder 'n laer vlak taal genoem C-- dis nog meer kragtige, selfs al is dit 'n bietjie meer kripties met die eerste oogopslag. En jy sal besef per vandag TL: DR, dat hierdie probleem gestel het 'n korter venster van die tyd as toekomstige kinders, bloot omdat jy dit redelik moet vind toeganklik. En moenie bekommerd wees as jy voeg die klas laat. Ons sal aanspreek wat kort voor lank. En voordat ons verdaag vir koek, laat ons klaar met net 'n twee-minuut blik na wat jy wag hier in CS50. [Speel van musiek] Alles reg. Dit is dit vir CS50. Ons sal jou gou te sien. Koek is nou bedien. [Speel van musiek] SPREKER 17: Het jy al gehoor van 'n sabbatsjaar, Hoof? SPREKER 18: Dalk is daar ' meer onder die enjinkap.