[Powered by Google Translate] [Rock Musiek] [MUSIC - "gelukkig saam" The Turtles] David Malan: Vandag, ons begin ons verkenning van die grondslae van rekenaarwetenskap en ons mark, nou, die kuns van programmering, wat dit is maar net een voorbeeld. Maar in dieselfde trant van probleemoplossing, weet dat CS50 se tradisionele Puzzle Dag is môre. As jy nog nie RSVPed vir hierdie gebeurtenis, kan jy gaan na cs50.net/rsvp. Jy kan bring spanne van twee of drie of vier. Sal jy uitgedaag word met probleme soos die een wat jy sien daar in die begin. Alle nuwe probleme vanjaar as jy verlede jaar deelgeneem het, en jy sal 'n kans hê om dan 'n paar fantastiese pryse te wen. Onder hulle is, 'n Wii en 'n paar gawe sertifikate en soos, alle terwyl hangend uit met CS50 studente en klasmaats en pizza en Facebook. So meer op daardie môre as jy wil. Dit is dan CS50, vir diegene van julle saam met ons vir die die eerste keer. En weet dat hierdie kursus is veral bepaal te kry jy deur middel van hierdie kursus tot die finale einde, op watter punt jy het nie net 'n begrip van hierdie grondslae van rekenaarwetenskap, maar jy sal moet hierdie baie praktiese vaardigheid stel wat jy kan dan terug te neem na jou eie departement, of dit is die ingenieurswetenskappe, toegepaste wiskunde, fisiese wetenskappe, natuurlike wetenskap, of die wil. Inderdaad, wat is so opwindend oor rekenaarwetenskap hierdie dae is dat dit net so van toepassing op alle vorme van velde. En selfs al vandag, ons sal slegs krap die oppervlak van 'n baie tradisionele programmeertaal bekend as C, sal ons plaas kyk na iets genaamd Scratch, iets met waarvan daardie koekie liefdesverhaal is geïmplementeer deur een van jou voorgangers in die afgelope jare, stories te vertel, speletjies te skep, interaktiewe kuns te skep, en om werklik te begin ons toe te draai gedagtes rondom 'n paar van die fundamentele konstrukte wat onderliggend programmering, maar in 'n konteks, soos u sal sien, dit is veel minder scary, dit is veel minder arcane, as wat jy sal sien kort voor lank. En besef, ook vir dié van julle net saam met ons hierdie semester, die frases wat ons geëindig Woensdag se lesing, dit is nie so belangrik waar jy opeindig nie relatief tot jou klasmaats in hierdie klas nie, maar waar jy deur die einde van semester se in week 11, eindig met betrekking tot jouself hierdie selfde dag toe. Dus, sonder verdere uitstel het, is dit ook die moeite werd om daarop te let dat diegene wat minder gemaklike, wat iewers tussen, ook deur die ontwerp van hierdie kursus, nie op enige nadeel vis-a-vis diegene wat meer gemaklik kom in hierdie klas. Soos u sal sien oor die weke om te kom, het ons verskillende liedjies vir uiteenlopende terug agtergrond, artikels vir diegene minder gemaklik, meer gemaklik, wat iewers in tussen. Soos u sal sien hierdie naweek en volgende week, twee weergawes van die meeste probleem stelle in beide standaard en hacker uitgawe so dat julle almal kan self kies die pad waarmee jy is die meeste gemaklik. So vandag, ons duik in hierdie programmering taal, die sogenaamde Scratch. Dit is 'n grafiese programmeertaal, en tog het die dieselfde kenmerke van sommige van die hoër vlak van tale wat ons sal verken later in die semester, onder hulle C en JavaScript en PHP. Maar dit gaan toelaat dat ons 'n paar van die afleiding te vermy vroeg van sintaksis, dinge soos kommapunte, hakies, en ander arcane besonderhede wat met die eerste oogopslag, is nie net op alle intellektueel interessant en is geneig om te kry die weg van 'n paar fundamentele begrip. In terme van nou die ondersteuning struktuur voor, besef dat dit instrument, CS50 Bespreek, wat gekoppel word op die kursus se webwerf later vandag, is die aanlyn bespreking forum in wat jy sal in staat wees om vrae van mekaar te vra en personeel, en dit is ook 'n instrument, soos ons sal volgende week sien, dat ons sal baie geïntegreerd te gebruik in kantoorure sowel. Inderdaad, kantoorure begin op Maandag, en eerlik, die eerste week van die kantoor ure is redelik lae-sleutel. Ek dink nie jy Scratch alles wat ontoeganklik. Dit is nogal selfverduidelikend, soos ons sal sien, en so wat ons sal dit gebruik vir vandag is om te onttrek sommige van die fundamentele idees wat sal dan, bly dwarsdeur die die res van die semester. Maar vanaf Maandag, 20:00 deur middel van 23:00 sal wees kantoorure in Annenberg oor die brein breek. Seksie twee sal hierdie aand begin, so iewers hierdie naweek, gaan tot cs50.net/section, en jy sal gevra word om 'n aantal van vrae. Onder hulle is, hoe sou jy jou comfort vlak as van vandag? Daar is geen harde, vinnige reël wat is in watter emmer. Dit is net die soort van ding wat jy waarskynlik weet as jy is onder diegene wat die minder gemaklike of andersins. En nou, ipv. Die gestelde probleem spesifikasie vir hierdie week, beide standaard en hacker uitgawe gelyk, is aanlyn by cs50.net as nou. En jy sal sien dat die eerste van hierdie uitgawes, die standaard uitgawe elke week, is vergesel deur iets wat ons roep 'n kode walkthrough, 'n sessie gelei deur een van die kursus se onderrig genote jou te lei deur, verskaf wenke oor, en kry jy 'n bepaalde pad af wanneer dit kom aan die begin van hierdie probleem stelle. So met elk van hierdie probleem sit, as jy ooit wil vir jouself waar begin ek, jy begin met hierdie ipv. En in die feit, laat my in te voer Zamyla Chan, hierdie jaar se onderrig man wat sal lei elke een van hierdie ipv. Zamyla? [Applous] ZAMYLA CHAN: Ag, hi, almal. My naam is Zamyla. Ek is 'n junior studeer ingenieurswese in Winthrop House. Maar ek probeer en pas in soveel rekenaarwetenskap kursusse soos ek kan, wat is die rede waarom Ek is regtig opgewonde om die hoof van dié jaar se ipv. Ipv, vir my, is 'n noodsaaklike deel van my CS50 ervaring. Tydens die instruksies vir elke p-set, sal ons gaan deur die probleem saam te stel, kyk uit oor die probleme, soort van hulle verdeel in hanteerbare byt. Ek sal jou raad gee, tegnieke, vir die kry en om aan die gang. Ek hoop om julle almal te sien by die ipv. As jy kan dit in persoon nie, dan doen asseblief tune in aanlyn. David Malan: Uitstekende. Dankie, Zamyla. So besef dat ipv is, inderdaad, op 'n Vrydag middag, maar dit is doelbewus deur die ontwerp sodat selfs as jy liewer nie klas bywoon op 'n Vrydag middag, sal die video's word al hoe meer vinnig oor die naweek. So besef dat cs50.net sal wees om al van Zamyla ipv. En dat daar vandag se datum en tyd, 03:00, Harberd Hall, 104. En sommige van die onderrig-genote is ook bereid 'n paar opmerkings in absentia vir jou te gee jou 'n bietjie perspektief as wat hul ervaring kom in en gaan uit van die CS50 was soos. So as ons kon dim die ligte vir net 'n oomblik, ek gee jou sommige van CS50 se personeel. JACKSON STEINKAMP: Ek het CS50 verlede jaar as 'n groentjie in die val, en dit absoluut blaas my gedagtes. Ek het nog nooit enige programmering klasse voor, en nooit kom met enige rekenaar wetenskap Ervaring op alle. En net, hoor ek die buzz oor die klas en besluit om dit te neem. JULIA MITELMAN: Dit was regtig fun, werklik betrokke te raak. Ek nog steeds, op hierdie dag - Ek het net onlangs gesien het ek het die diskette wat Dawid het ons op ons eerste dag van die lesing. Ek het hang dit op my muur. Dit is waarskynlik 'n bietjie nerdy, maar ek hang op my muur in die klas as 'n herinnering van hoe koel dit was. TRAVIS DOWNS: Dis so verleentheid. JACKSON STEINKAMP: Rekenaarwetenskap is iets wat jy moet probeer, selfs as jy nie een vir die tradisionele wetenskappe. Dit is sy eie ervaring, en CS50 sal seker maak dat jy ondersteun deur dit met sy ware leër van TFS. ALI NAHM: Ek het dit as 'n groentjie, en so het ek het 'n baie van nuwe vriende. Ek het ook hierdie hele konsentrasie en hele skool van ingenieurswese, en so ek raai dit en nooi u om ons CS50 familie. Yaniv YACOBY: CS50 leer net hoe om gereedskap te gebruik wat is algemeen toeganklik. Jy hoef net 'n laptop, wat jy nodig het 'n webblaaier, en jy nodig het om te leer sommige kode te skryf, en jy kan regtig bou netjiese dinge. KAREN Xiao: Dit is net so cool nie in staat wees om iets te maak en het mense dit gebruik en mense sien dit, en dit is wat ek regtig is mal daaroor. TIM MCLAUGHLIN: - 'n gevoel van gemeenskap, dink ek, in hierdie natuurlik meer as enige ander kursus wat ek tot dusver geneem. Jy net nie met 'n ander - vul jy nie nog 'n vereiste. Jy net nie gaan lesings en gaan na die artikel. Maar jy doen ton van die dinge wat is alles oor programmering en al oor die tegnologie, maar dit is nie voel soos 'n klas die meeste van die tyd. TRAVIS DOWNS: En op die eerste dag, het hulle uitgedeel koek, en Ek was dadelik verkoop. JACOB Pritt: Gratis lekkergoed en pizza. ZAMYLA CHAN: - ongeag van jou belangstelling vlak, ek dink dat CS50, sal jy om pret te hê, en jy intellektueel gestimuleer word. MARK GROZEN-SMITH: Dit is altyd 'n party in die klas, en dit is 'n partytjie elke aand op jou p-set werk. JACKSON STEINKAMP: Elke keer as jy klaar is 'n probleem stel, jy sal voel soos jy 'n projek klaar is. MELISSA NIU: Dit was eerstejaars jaar, en ek is gedoen shopping. Ek het my vier klasse gereed, en ek was in Annenberg. En ek stamp in 'n vriend, en hy sê, hey, ek inkopies doen hierdie klas met die naam CS50, en jy moet kom saam met my. Geëindig het om dit wat val, en na daardie klas, het ek het gedink ek gaan aan minderjarige in CS. Maar hier is ek drie jaar later, nog studeer rekenaar wetenskap en eintlik doen dit as 'n hoofvak, en ek lief elke oomblik van dit. ROB Bowden: Ek het geen idee nie. ALI NAHM: Kom ons kyk. MELISSA NIU: gekte. Spreker 1: Ek voel soos ek wil baie cliche wees. Ek wil net sê, wil, awesome. Yaniv YACOBY: Toeganklikheid. JACOB Pritt: Gratis lekkergoed en pizza. TRAVIS DOWNS: Kan nie 'n klas wat hande koek. TIM MCLAUGHLIN: Energetic. Vipul Shekhawat: Essential. ROB Bowden: Laat my dink aan 'n antwoord. Ek dink ek het iets. O, God. Ja, my Naam Rob Bowden, en dit is CS50. [Applous] David Malan: Alle reg, so laat ons begin om 'n prentjie te verf van die rigting waarin ons kan gaan, en laat ons stel hierdie konsep hier bekend as pseudokode. So pseudokode is nie 'n programmeertaal taal op sigself. Dit is niks tegniese per se nie, maar dit is net 'n soort van 'n algemene manier om jouself redelik presies, redelik algoritmies, redelik prosedureel, maar sonder hoef te bekommer oor watter taal jy die uitdrukking van jouself. Dit is 'n paar model van Engels en programmeertale wat jy gebeur om vertroud te wees, sodat ons kan begin die skryf van hierdie soort van ding as ons gaan. En in die feit, Josef, kan ek leen jy op die verhoog te wees skrywer hier? Ek het vooruit gegaan hier in advance en vergeet om te sit vandag op 'n paar sokkies, en dit sal onder ons meer belaglik voorbeelde. Nou, ek het jou nodig hier. Ek sal doen sokkies deel. So hier is ons het 'n bietjie kras pad. Dit is letterlik net Text Editor-in 'n Mac. Ons is eintlik nie van plan om 'n uitvoerbare program te skryf nie, maar ons net gaan om te begin skets uit pseudokode gebaseerde op 'n paar van die raad wat jy vir my hier. So hier is my hoop sokkies by die huis. Ek het geen sokkies op wanneer ek wakker word in die oggend, en ons het nou nodig het om 'n program te skryf, 'n algoritme van spesies, met hierdie sokkies te kry op my voete. En langs die pad, laat ons kyk of ons reis oor, of ondervind, sommige van die idees wat jy gaan te hê om te begin dink oor veel meer ernstig wanneer programmering sodat jou programme te tree nie so bedoel nie. So ek sit hier. Ek het my hoop van sokkies. Wat is die eerste ding wat 'n redelike mens sou doen wanneer die doel is om te sit op 'n paar sokkies? Iemand gee my 'n stap, en net een stap. Ja? Gehoor: buk. David Malan: buk, okay. Stap twee. Stap twee. Gehoor: Pick up jou sokkie. David Malan: Pick up jou sokkie. Okay, so effense dubbelsinnigheid hier, en dit is een van die eerste struikelblokke wat ons veronderstel is om doelbewus ontmoeting hier. Dit is 'n bietjie dubbelsinnig, so haal jou sokkie. Fine, ek sal hierdie een nie, maar 'n rekenaar, in net 'n besef bietjie, gaan nie daardie soort van die menslike instink om net te hê kies die naaste een. Ons gaan te hê om te begin, kort voor lank, die uitdrukking van onsself meer presies. Alle reg, sodat Stap twee is haal jou sokkie. Ons sal dit vat. Stap drie. In die rug. Gehoor: Vind 'n bypassende paar. David Malan: vind wat ooreenstem met paar. Okay, so dit is goed. Ek het hierdie sokkie te kies. So die doel is om 'n matching sokkie te vind, nou, maar wat beteken dit? 'N Redelike mens, net soos op Woensdag toe ek net het geweet hoe Mike Smith in 'n telefoon boek te vind, net soort van het met hul instink. Maar hier, dit is natuurlik hierdie sokkie hier nie, maar 'n rekenaar nie van plan om so instinktiewe. 'N rekenaar is 'n versameling van stukkies te hê, as ons bespreek op Woensdag, en dit is georganiseer op een of ander manier in die geheue. Maar die punt is dat 'n rekenaar het net die vermoë om om te kyk na dinge een op 'n tyd, en in werklikheid, selfs ons mense - selfs al is dit voel soos ek afgekyk en 'n gesplete sekonde later het ek weet waar die sokkie is, my brein en my oë vermoedelik het 'n vinnige vlugtig van daardie sokkies, en dan knip op die een wat in die vraag. So as ons nou al hoe meer doelbewuste as 'n rekenaar, hoe kry ek hierdie bypassende paar? Wel, ons het om te itereer. Ons moet dalk lus oor hierdie gemors sokkies op die woord waardeur ek sê iets soos VIR ELKE sokkie, pluk dit up, en as die dieselfde vorm en grootte as die ander een, dan dot, dot, dot, sal ons voortgaan om die storie. So vir elke sokkie, so ek haal hierdie een. Ek is so is dit gelyk is aan hierdie een. Dit is nie, so ek ter syde gestel kant. Toe het ek weer itereer. Is hierdie een gelyk? Nee, dit is nie, so ek sit dit eenkant. Is hierdie een? Nee Hierdie een? Nee, en so meer. En dan uiteindelik, hopelik, sal ek hierdie sokkie hier teëkom. So as dit is dieselfde vorm, grootte, neem dit. En nou, wat sal ons volgende stap hier wees? Ja? Gehoor: Identifiseer regs van links. David Malan: Okay, identifiseer links en regs, so gelukkig, daardie soort van werke. 'N bietjie simmetries is, of ek het net gedra hulle op die manier. Alle reg, sodat ek die reg geïdentifiseer het. En nou, voordat ons, laat my daarop wys wat Josef se doen hier as 'n soort van 'n vaardige programmeerder. So weer, daar is nie net een manier om dit te doen, maar as net nommeringstelsel die lyne, Joseph het reeds begin om dit te doen soort van inkeping. Trouens, dit is 'n baie algemene konvensie in programmering, waardeur wanneer jy iteratiewe iets doen, herhaling styl, soos ons impliseer met die Engelse frase "vir elke sokkie, "het die konvensie in pseudokode en, soos ons sal sien, normale programmeertale, is om net streepje. Klik op die space bar 'n paar keer, druk die Tab-sleutel of die wil, sodat geneste onder "VIR ELKE sokkie" is die stuk van dinge wat jy hoef te doen as 'n gevolg van daardie lus. So dit is al wat semanties oordra. Intussen, nou die "As dit is dieselfde vorm en grootte," het die feit dat "Neem dit is ingekeep verder beteken net dit is die enigste ding wat jy moet doen as daardie toestand, indien daardie tak, dat die vurk in die pad, is in werklikheid ware. So nou hier, ons is op stap vier, identifiseer links en regs. Ek het reg geïdentifiseer. Gee my stap vyf. En tegnies, kan ons regtig noem VIR ELKE ding - moet jy waarskynlik Nommer al die lyne as ons gaan om dit te doen. JOSEPH: [onhoorbaar] David Malan: [onhoorbaar]? Okay, fyn, alles reg, dan doen ons dit op jou manier. Alle reg, sodat stap vyf, hoe doen ons die regte sokkie? Hoe doen ons nou volgende gaan hier? Ja? Gehoor: Hef regterbeen. David Malan: Hef regterbeen, okay. Stap Ses? Vinnig. Ja. Gehoor: Vind 'n oop einde van die sokkie. David MALAN: Goed, die oop kant van die sokkie. So goed. So hier is, eerlik, 'n baie algemene instink sal wees net op die regte sokkie, maar ook dit is redelik dubbelsinnig. Tensy die rekenaar of mens presies weet wat dit beteken, dit nie gaan wees om dit uit te voer, so hier is, het ek gevind dat die opening van die voorraad. Stap Sewe? Gehoor: Raak aan jou tone. David Malan: Touch tone. Okay, so nou ons gaan - Alles reg, ek gaan n paar vryhede te neem. Dankie. Stap Agt? Plaas op sokkie. Okay, so nou is ek dink ons ​​is naby genoeg om te sorteer neem hierdie een by die huis. Alle reg, sodat dit gaan. Ek sal 'n paar vryhede wat dit beteken, eintlik. Plaas die sokkie. Alle reg, nou Stap Nege? Gehoor: Sit voet neer. David Malan: Dankie. Stap Nege, sit voet neer, en nou, ons kan herhaal. So vermoedelik, kan ons nou gaan in stap 10 en sê identifiseer links sokkie, maar dit is vermoedelik reeds gedoen. En so dan kan ek soort van Herhaal hierdie stappe. Maar hierdie soort van bedel die vraag. Voor, die laaste keer wat ons wou iets te herhaal, ons het dit iteratief, weer en weer, 'n OM Elke lus om so te praat. Sou dit sin maak om 'n lus te gebruik ten einde beide te hanteer die linker-en regter sokkie? Want dit voel soos hierdie bedrywighede is pretty much identies, behalwe vir die feit dat 'n mens begin hier en een begin hier? Het ons loop, of wil ons net aanhou skryf stappe 10 en 11 en 12? Gehoor: Loop. David Malan: Okay, so lus. Ek het eintlik sou gesê het hou net gaan. So hoekom is dit die geval? Wel, dit is eintlik die eerste van ons nie-voor-die-handliggende ontwerp besluite te neem, en in die waarheid te sê, een van die statistieke waarmee ons sal begin om te evalueer, vir onsself en vir jou, die die kwaliteit van 'n program is net hoe goed dit ontwerp is. Het jy gedoen die minimale bedrag van die werk wat nodig is om kry die werk gedoen die mees vinnig, hetsy in terme van jou tyd of in terme van die rekenaar se looptyd? Hoeveel operasies doen wat dit neem om uit te voer? So waarskynlik, dit is 'n geleentheid vir 'n lus omdat so gou as ek begin kopieer en plak, soos Josef effektief sou begin doen in 'n oomblik, jy soort van mors jou tyd, en jy dubbel ekspressiewe. Maar op dieselfde tyd, dit is regtig net twee spesiale gevalle, links en regs. En dat voor, kan ek 10 of 20 of meer sokkies in 'n paal, dit maak beslis sin nie 50 lyne te hê kode sê kyk hierdie sokkie, dan is die volgende een, dan die volgende een. Hier, dit is 'n bietjie minder voor die hand liggend, en ek sou voorgestel dat ons kan gaan óf manier. Ons kan óf die lus, hoewel dit slegs loops twee keer, of ons kan eenvoudig kopieer en plak net 'n bietjie hier in orde te kry die werk gedoen. Maar hierdie program is buggy, om so te praat. Dit mag dalk 'n paar foute, foute, of hoek gevalle, om so te praat, dat ons regtig het nie verwag. Niks verkeerd geloop het hierdie tyd, maar wat kon verkeerd gegaan het terwyl die uitvoering van hierdie program? Gehoor: Jy hoef nie enige sokkies. David Malan: So daar kan wees geen sokkies daar hoegenaamd nie. So laat ons van mening dat hoek geval. So as ons kon terug blaai om een ​​te stap, so stap een was buk, sodat tjeks uit. Stap twee, haal jou sokkie, maar dan vind wat ooreenstem met sokkie, identifiseer reg. Ons soort van 'n hele klomp van die aannames gemaak, en dit is, eerlik, waarom program soms crash. As jy, die programmeerder, sekere aannames gemaak het, soos Waarlik, daar is gaan te wees sokkies of seker daar gaan geheue in die rekenaar te wees, voorwaar, daar gaan skyf spasie op die hardeskyf - Wel, as jy hierdie aannames maak, en dit is nie, in werklikheid, die werklikheid, wie weet soms wat die rekenaar se gaan doen? En soms, wanneer jy die spin strandbal of die bevrore Windows of iets dergeliks, dit is juis omdat sommige programmeerder het nie verwag dat dié sogenaamde hoek gevalle. Wat anders kon verkeerd gegaan het in hierdie program? Ja? Gehoor: Jy hoef nie 'n regte been en 'n linker been. David Malan: Okay, kan nie beide 'n regte been en 'n linkerbeen, en so hierdie program kan nie universeel wees van toepassing is. Ander? Gehoor: Jy kan opgetel het 'n weeskind sokkie. David Malan: Ek kan opgetel het 'n weeskind sokkie, so 'n non-matching sokkie wat net geen broers en susters het, want ek het het dit verloor, dit verskeur is, dit is in die was nog steeds, of die wil. Sodat ook het regtig nie hanteer. Ja? Gehoor: Miskien het jy al sokkies. David Malan: Ek kan reeds sokkies. Ek het eintlik nie kontroleer. As jy nie sokkies op, gaan dan voort om te doen lyn een en twee. En dit kan gebeur. Jy val aan die slaap met jou sokkies en dies meer, so wat ook 'n baie redelike hoek geval. En miskien 'n ander? Gehoor: Die sokkie is binne en buite. David Malan: So die sokkie is binne en buite, so ons het geen fout keur, in kort. Ons het nie kyk of die toestand van die wêreld is as wat ons verwag. Ons het nie kyk of ons eintlik gevind wat ons soek. En selfs al is dit soort van 'n belaglike voorbeeld waarby sokkies, aan die einde van die dag, dit is presies die soort ingesteldheid wat jy nodig het om te hê, terwyl die skryf van programme, selfs in Scratch sowel as in C, JavaScript, PHP, want anders sal jou programme vertoon die ekwivalent van daardie spin strandbal of net lewer onakkurate resultate. So baie dankie aan ons skrifgeleerde Josef. [Applous] David Malan: Alle reg, so wat is, in Trouens, 'n program op die rekenaar? Wel, laat ons neem 'n vinnige blik op 'n verteenwoordiger een hier. So, dit is 'n program wat geskryf is in 'n taal genaamd C. C is redelik oud hierdie dae, maar baie nuwe tale gebou op die top van dit. Inderdaad, PHP, een van die web-sentriese tale wat ons sal gebruik na kwartaal se einde, self het wat genoem word 'n tolk, 'n program wat in C geskryf is nie, maar meer op daardie in baie weke van nou af. Maar hierdie program, en dit is wat dit beteken om te skryf 'n program, al is dit 'n baie eenvoudige een. Ons het 'n paar redelik kriptiese sintaksis hier, maar jy kan waarskynlik dink, selfs as jy nog nooit geprogrammeer voor, wat hierdie program nie. Inderdaad, ek weet nie wat printf is, maar druk beslis roep die idee van die druk iets uit. En so ja, hierdie program is uiteindelik gaan uit te druk die woorde "Hello, world." Nou, of jy 'n Mac of 'n rekenaar of 'n Linux-rekenaar, is die kans is, ten minste as wat jy afgelaai het 'n paar vrylik beskikbare sagteware, kan jy gewees het die skryf van programme op jou eie laptop vir 'n geruime tyd nou. Op Mac OS, byvoorbeeld, daar is hierdie program genaamd Terminal wat kom met 'n Mac, wat gewoonlik in jou Gids 'Tools', en dit maak gewoonlik 'n swart-en- wit of 'n wit en swart venster wat jy het 'n gevra wat jy kan tik opdragte. So dit is eintlik herinner van wat rekenaars wat gebruik word om te wees voordat 'n grafiese gebruiker interfaces, GUIs, langs gekom het. Nou in Windows, jy het 'n soortgelyke meganisme in die vorm van die command prompt. Maar wat ek gaan doen is om oop te maak, kom ons sê, Text Editor weer, so dieselfde program is gebruik vir pseudokode 'n oomblik gelede, en ek gaan om voort te gaan en skryf my eerste program. Sluit stdio.h, wat dit ook al beteken, int main nietig, wat dit beteken, en dan in die middel hier, printf ("Hello, world."). En sluit kwotasie, Sluit hakie, kommapunt. Nou gaan ek voort en gaan net getref Command-S. Ek gaan om voort te gaan en stoor dit as hello.c, sodat die konvensie in die wêreld van die C-programmeertaal is die naam van die lêer dot c. Ek gaan net sit in John Harvard se Home directory, hier, kliek op Stoor en nou gaan ek om oor te gaan tot hierdie terminale venster, wat weer is dit swart-en-wit prompt waar ek kan voer opdragte. Ek kan hardloop programme deur te tik hul naam, nie deur dubbel-klik ikone in die gewone sin van die woord. Maar die ding is oor C is dat 'n taal soos C eerste kom in hierdie vorm, iets bronkode genoem. Iets wat lyk 'n bietjie soos Engels, maar is beslis minder soos Engels as Josef se pseudokode 'n oomblik gelede. Dit is 'n bietjie meer arcane. Dit lyk asof sommige patrone of reëls te volg. Die feit dat ek 'n kode tussen krulhakies, kommapunte, aanhalings, hoek draadjies, voel soos 'n rekenaar het met hierdie soort van taal. Maar as Ek weggaan, nou, op hierdie terminale venster, kan ek 'n opdrag wat gaan dat die bron-kode te omskep iets genoem object code. Wat gaan Engels-agtige sintaksis te nulle omskep en kinders, die dieselfde soort van nulle en ene wat ons gepraat oor Woensdag. Nou, ek gaan 'n opdrag uit te voer wat genoem kletteren. Meer hieroor in die volgende paar weke te kom, maar dit is 'n program met wat ek kan omskep in 'n hele klomp hello.c van nulle en ene. Nou, ek het die uitvoering van hierdie opdrag. Ek hardloop klang, en toe sê ek hardloop jouself op hierdie lêer genoem hello.c, wat ek geskep het 'n oomblik gelede, en blyk dit dat niks gebeur nie. Maar inderdaad, as ek rondom my home directory poked, sou ek sien dat hierdie dom genoem program a.out bestaan ​​nou. Dit is net die standaard naam vir 'n program toe skriftelik en in C. Ons kan ignoreer dit uiteindelik, maar a.out is die Ek het net die naam van die program omskep in nulle en ene. En nou dat dit se nulle en ene, my Mac, in hierdie geval, of jou Windows PC, kan daardie stukkies, wat verstaan nulle en ene. En so wanneer ek druk Enter, ek sien "Hello, world!" Maar dit is 'n bietjie buggy. Ek het nogal nie sê "hello, wêreld: lug: - jharvard." Lug is die naam van my rekenaar. Jharvard is die naam van die rekening, so wat het ek duidelik uitlaat van die program? 'N soort van die lyn breek. Ek het nie die ekwivalent van die Enter of die return getref, en dit is, weer, getuig van die feit dat rekenaars kan net doen wat jy hulle vertel om te doen. En die feit dat ek nie vir die rekenaar beweeg die wyser na die volgende lyn - Wel, dit is beslis nie gaan doen dit net vermetel vir my. So as ek gaan terug na my program, en ek sê \ n - So \ n, as ons binnekort sal sien, is die manier van weird dinge soos nuwe lyn karakters, dinge wat anders sou die gevolg wees van slaan die Enter-sleutel. Maar vir nou, weet net dat slaan die Enter-sleutel net maak ons ​​kode kyk vreemd, sodat die wêreld besluit, jy weet wat, om dinge te hou mooier, dit op een lyn te hou, laat net sê \ n 'n nuwe reël. Laat my my lêer te slaan, gaan terug na die terminale venster, en re-run a.out, Enter. Nog buggy, maar hoekom? Gehoor: [onhoorbaar] David MALAN: Ja, so ek nodig het om dit te hercompileren. So 'n program saam te stel, beteken net skakel dit uit bron kode te object code, bronkode te nulle en ene. Nou, die blote feit dat ek getref Stoor in hierdie Text Editor het geen betrekking het op die nulle en ene, want ek moet eers vertel kletteren hey, ek het daardie reëls van die kode verander, die bronkode. Jy moet te regenereer a.out. Niks blyk te gebeur het nie, maar in 'n rekenaar, by 'n command line, om so te praat, wanneer niks gebeur nie, wat beteken gewoonlik alles goed gaan. Wanneer iets gebeur, beteken dit jy deurmekaar, in die algemeen. So laat ons nou gaan te a.out, en inderdaad tog, ek het "hallo, wêreld. " En nou, wat oor hierdie nulle en ene? Waar, in werklikheid, is dié? Wel, ek kan nie regtig net 'n soort van poke om baie effektief. Laat my oopmaak Text Editor. Hier is a.out. Laat my gaan voort en maak dit, en dit is blykbaar wat my program lyk. So ek het oopgemaak, nie hello.c, maar a.out. Maar dit is eintlik nie wat my program werklik is. Duidelik, dit is 'n soort van alfabetiese karakters. Ek sien geen nulle en ene, maar dit is want a.out is 'n program. Nulle en ene - maar Text Editor, soos die naam aandui, is dit net soos Notepad op Windows, net 'n teks editor, so dit is verwarrend al die nulle en ene as al was hulle, wat? ASCII karakters wees. So onthou op Woensdag, het ons net vorendag gekom met hierdie arbitrêre kartering van getalle, of stukkies, briewe van die alfabet en punktuasie simbole en dies meer. So Text Editor, dat dit 'n teks editor is onjuiste interpretasie van daardie patrone van nulle en ene wat veronderstel is om te wees druk woorde, soos "Hello, world." Dit is die vertoon van hulle soos ASCII, en dit is hoekom dit lyk 'n bietjie slordig. Nou, daar is 'n paar wenke van korrektheid hier. Agterkom as ek beklemtoon, daar is 'n wenk van die werklikheid "hello, wêreld, "so iewers in daardie program die sin wat ek geskryf het. Maar laat ons gaan voort en kyk nou met 'n ander program. Dit is nie een wat ons sal gebruik wat dikwels, maar dit kom ook met 'n Mac en binnekant van die CS50 toestel sal wees. Laat my voort te gaan en maak met 'n program genaamd XXD. Terug in die dag, was die meeste programme genoem redelik kripties, en so die tendens voortduur. Maar-b beteken spoeg hierdie program as binêre. Moenie hardloop nie. Vertoon dit vir my as nulle en ene, en dit is die C program het ons net geskryf. Nou prys ek, as 'n mens hier, ek eerlik het geen idee wat hierdie verskillende patrone van nulle en ene verteenwoordig. Terug in die dag, het ek, met my punch kaarte of iets dergeliks, sou eintlik het om te kyk wat die verskillende patrone van 01111000, eintlik verteenwoordig. Of nog erger, ek sou die pons of die skepping te doen van hierdie patrone van nulle en ene. Maar vir nou, op die geloof dat 'n CPU, Intel Inside, so binnekant van al ons rekenaars om te praat, hierdie dae, weet hoe hierdie nulle en ene te interpreteer. En 'n paar nulle en ene beteken print. Sommige nulle en ene beteken speel 'n klank. Sommige nulle en ene beteken toevoer van die gebruiker van 'n sleutelbord. Daar is alle vorme van verskillende patrone, maar ons gelukkig, as mense, meestal net hoef te bekommer oor die programmering by dit redelik hoër vlak. En in ander CS-klasse kan jy delf af dieper en kyk by dinge soos die nulle en ene, of nog nog ander dinge. So laat ons nou sit hierdie. Kom ons baie vinnig moet beweeg weg van C en beweeg na iets wat 'n bietjie meer vertroostend, 'n bietjie meer opwindend in die sin dat ons animasies en geluide en die soos wat ons kan terug te kry duidelik ontvlug het ons in hierdie redelik primitiewe koppelvlak. So hierdie selfde program in C kan nou verteenwoordig word in hierdie programmeertaal genoem Scratch soos volg. Dit is die ekwivalent van hierdie hello world program wat geskryf is in hierdie legkaart stuk styl taal genoem Scratch. So laat ek gaan voort en hierdie selfde program oop te maak. Dit is weer genoem Scratch. Dit is vrylik beskikbaar, en dit is dieselfde ding wat ons vandag begin. So dit is hier krap, en dit is opgebreek in 'n paar verskillende stukke. Op die heel regs bo, het ons die sogenaamde stadium, en inderdaad, dit is waar die koekies uitgevoer word net 'n bietjie gelede. En op daardie stadium is dinge genoem sprites, karakters, of voorwerpe, of entiteite. Dit maak nie regtig saak hoe jy dink van hulle, maar hulle programmeerbare, roerende goed is, en in hierdie geval, is hierdie program wat ons student geskryf het 'n paar van peperkoek koekies, 'n paar van omsendbrief koekies, 'n hele klomp van harte, 'n hele klomp van die bril. Gevolg van hierdie, hy of sy in staat is om elkeen van daardie te programmeer individuele karakters afsonderlik. Nou, wat beteken dit hierdie karakters te programmeer? Wel, laat ek gaan voort en kliek op hierdie linkerhand koekie en blaai na die boonste linkerkantste hier. In die boonste linkerhoek van my skerm nou is die sogenaamde skrifte area. Dit is 'n soort van 'n skoon lei, aanvanklik, op wat ek kan sleep en stukke van die legkaart wat, eerlik, doen presies wat hulle sê nie. Op die top van hierdie stapel stukke van die legkaart is die woord Wanneer Green Flag gebruik het, en as jy nie voor sien, die manier waarop ek die koekie lied begin kliek, letterlik, 'n groen vlag. Sodat legkaart stuk links bo is daar beteken dat wanneer die menslike druk die groen vlag, voortgegaan om te doen die volgende dinge. Nou, wat het hulle koekie voortgaan om dit te doen? Ek het nie regtig weet hoe om dit nog te interpreteer nie, maar die koekie blykbaar sy groef aan nul, dan is dit wag drie sekondes, dan is dit sy groep verander na een, dan is dit wag 'n tweede, dan is dit verander sy groef terug na een. En dan is dit lyk eintlik soos 'n bietjie van 'n fout, moet nie sy groef te weer en weer verander, tensy dit verander elders, maar hierdie reeks stappe wat dicteert die gedrag van hierdie spesifieke koekie. So laat ons eintlik terug blaai en nie kyk na iets so ingewikkeld nie. Laat my gaan voort en gaan na File, New, en kry 'n skoon lei. So nou, ek het inderdaad 'n leë script area, 'n leë verhoog, met ons standaard sprite Scratch, en by die boonste linkerkantste op my skerm het ek die pallet van al hul beskikbare stukke van die legkaart. En ons sal nie deur byna dat baie van hierdie dinge vandag, want, weer, die meeste is selfverduidelikend, maar ons sal probeer om hulle te kategoriseer en te wys op die ooreenkomste met hierdie toekomstige tale wat ons duik. En bo links is hier die eerste Wanneer Green Flag gekliek, so laat my sleep dit hier, uitzoomen 'n bietjie. En as ek kliek op die groen vlag, niks gebeur regtig omdat Ek het nie enige logika geheg, enige verklaring wat so te praat, te dat die groen vlag, so laat my gaan na die kategorieë hier. Ek is tans in die Control kategorie. Ek plaas gaan om af te gaan na die Uiterlike kategorie, en daar is 'n hele klomp van die dinge hier wat sê: Sê, Dink, van kleur verander, Switch kostuum. Sodat jy kan doen dom dinge met kostuums en klanke en dies meer. Laat my voort te gaan en net sê: Sê, en nou sien as ek sleep en gooi hierdie legkaart stuk, dit gaan om te wil om te grendel in die ooreenstemmende vorm. So wanneer ek gaan voort en laat gaan van my muis, hulle sluit saam, en as ek nou gaan oor hier en kliek op die groen vlag, die kat het in werklikheid hallo sê want dit is wat is binne van hierdie wit blokkie. Ons sal binnekort sien dat hierdie wit boks is wat genoem word 'n argument, of 'n parameter. Dit is 'n manier van die verandering van die gedrag van, in hierdie geval, 'n legkaart stuk, maar as ek wil om te sê presies wat ek gesê het voor, sê hallo, wêreld, ek kan nou gaan terug hier, kliek op speel, en "Hello, world" Wat is gesê. So ons is letterlik programmering nou. Dit is nie almal wat dwingende van 'n program, maar ten minste dit is 'n bietjie meer dwingende as iets wat lyk op die eerste oogopslag, soos hierdie. En ons kan baie vinnig al hoe meer ekspressiewe want in Scratch, soos in ander tale, daar is alles vorme van state, nie net sê of druk iets, maar wat jy kan doen dinge soos die wag, as ons nou net gesien het met die koekie, sommige aantal sekondes. Jy kan speel geluide in die omgewing van Scratch net soos jy kan in 'n gewone rekenaar program speel klank. Jy kan kyk wat Boolse uitdrukkings genoem word. So nou, laat ons begin toe te voeg tot ons toolkit terminologie wat verband hou eintlik na die voorbeeld dat Josef en ek het hier met die sokkies. So state is net verklarings van die feit. Doen dit. 'N richtlijn vir die sprite, of vir my die mens, om iets te doen. 'N Boole-uitdrukking is iets wat 'n waarde het, 'n sogenaamde waarheid waarde, wat is 'n nul of een, vals of waar is, af of op, nee of ja. Nie regtig saak hoe jy dink van hierdie, maar dit is 'n binêre toestand. As Nate bespreek in Woensdag se video, twee verskillende dinge. So in Scratch Boolse uitdrukkings gebeur om te kyk soos hierdie blou voorwerpe hier, en in hierdie geval, is die vraag punt impliseer dat jy 'n vraag vra. Is die kat, of die sprite, om die muis te raak? So dit is net een voorbeeld van 'n Scratch blok wat gaan ons in staat te stel om ja of nee te kyk, is die muis raak die sprite op die skerm? En dit kan nuttig wees as jy eintlik wil dinge om te doen met jou muis. In bykomend tot Boolse uitdrukkings, ons het dinge soos die muis af, sodat jy kan ontdek dat soort van bevraagteken as well. Ons kan wiskunde doen as jy eintlik wil hê, en daar is eintlik meer dwingende gebruike vir hierdie as net suiwer rekenkunde, soos ons sal sien. Pseudo ewekansigheid en die maak van jou program verskyn om te dink of anders gedra wat gebaseer is op sommige oënskynlik ewekansige waardes, en dan het ons dinge soos Boolse uitdrukkings soos EN. So as jy eintlik wil twee waardes om te kyk, sal ons sien in Krap dat ons eintlik kan toets of dit is waar en dit is waar. Byvoorbeeld, in die geval van my sokkies, kan ek het by die einde die vraag gevra het indien links sokkie en regs sokkie op, bedank. Jy al gedoen vir die dag, so dit sou wees 'n geleentheid vir. So laat ons gaan voort en probeer om sommige van hierdie saam te stukkie en gaan na 'n paar voorbeelde dwingende as hierdie een. So laat ek gaan voort hier en maak 'n paar van die voorbeelde wat sal altyd wees op die kursus se webblad sowel, en oopmaak hello2. So in hello2 hier, ons het 'n program wat doen 'n paar dinge, maar dit is nie om dit te doen so effektief as wat ons kan. So hier is dit sê: "Hello, world" vir een sekonde en wag dan vir 'n tweede. En doen dan is dit weer, en dan doen dit weer. So as ek kliek op die groen vlag, sê Scratch "Hello, world. Hello, world. Hello, world. "En dit is natuurlik kandidaat nou verbetering. Wat is die marginale verbetering, hopelik kan ons nou maak as Scratch ondersteun die konsep? 'N soort van loop. 'N soort van herhaling, sal lekker wees, so laat my eintlik probeer. Laat my eintlik gaan en beweeg dit. So kennisgewing kan losmaak blokke so maklik as wat jy kan byvoeg by heg. Laat my gaan onder beheer, scroll down hier, en inderdaad, daar is hierdie legkaart stuk hier herhaal en Forever en Forever As. So daar is 'n aantal van maniere van die uitdrukking van herhaling konstrukte in Scratch. Die een wat ek waarskynlik wil hier is omdat ek net nie vir ewig wil dit drie keer gebeur, maar waarskynlik Herhaal. So laat my sleep Herhaal hier, sleep dit, en nou plaas van sê: "Hello, world" drie afsonderlike tye, laat my sleep hierdie legkaart stuk hier. En hoewel dit lyk nie te pas, die program is slim genoeg om te besef dit sal groei te vul, so dit is die vorms wat saak maak en nie die absolute grootte. Laat my die herhaling verander tot drie, en nou laat my gaan voort en sleep een sekonde wag daar ook. Dit gaan te snap in sowel, en so nou gaan ek te sleep hierdie ouens hier en gooi dit weg, want ek het dit nie nodig nie. Laat my zoom uit en klik op die groen vlag nou, en ons het dieselfde program, maar soos ek voorspel voor, beter want jy kan dink hoe sleg hierdie program sou kry, seker esteties, as jy moes begin kopieer en plak, kopieer en plak, of te sleep dieselfde darn dinge weer en weer. Nou, net sê dinge op die skerm, druk aan die skerm, regtig nie almal dat opwindende, so laat ons oop 'n 3 variansie hier. En nou, soos u sal sien, dit sal vinnig irriterende - [Miauw] David Malan: - maar dit is ook soort van cute. [Miauw] David Malan: Okay, so beter, en ons kan seker gebruik wat dieselfde oorgang van die gerammel van hierdie in 'n herhaling struktuur, maar kom ons maak dit meer interessant steeds. Laat my gaan voort en 1/4 variansie hier oop te maak, waar ek neem dinge 'n stap verder. So volgens hierdie dom al is dit op die eerste oogopslag, is wat hierdie program gaan om dit te doen? Dit gaan om een ​​keer te miauw. Hoekom? Wel, een is, sover ek weet, altyd minder as twee. Daar is geen begrip van ewekansigheid hier. Ek het letterlik harde-gekodeerde een en twee, maar dit is 'n byvoorbeeld nou eintlik die gebruik van 'n Boole-uitdrukking. Graag as Josef het in sy pseudokode, die inkeping as jy vind wat ooreenstem met sokkies doen dan die volgende, ons het hier 'n uitdrukking As 'n mens minder as twee DAN - en in die feit dat ons het selfs 'n bietjie van inkeping, waar die pers is effens ingekeep aan die regterkant - Dan is jy gaan om te speel die klank miauw. Nou, in hierdie geval, dat 'n mens altyd minder as twee, sodat hierdie is 'n soort van 'n vermorsing van 'n voorwaarde. Maar ons sal in staat wees om, soos ons sal sien, ander dinge aan te sluit in hierdie plekhouers waar een en twee nou is. So laat ons nou bevorder tot voorbeeld vyf van hierdie verskeie hallo en kyk wat hierdie program gaan doen. So nou, in 'n Engelse sin, hoe dit program tree? Gehoor: Meows die helfte van die tyd. David Malan: Meow se helfte van die tyd, so dit is 'n manier van die oordra van 'n baie eenvoudige idee. Selfs al is ons gebeur word deur gebruik te maak van sommige ongelykhede hier in sommige getalle, dit is regtig net 'n programmatical manier, 'n akkurate manier, sê indien die muntstuk kom up koppe, voort en miauw. Of omgekeerd, indien die muntstuk kom sterte, miauw nie. En in hierdie geval, hoe ons spreek? Ons sal 'n ewekansige getal kies 1-10, en indien daardie nommer is minder as 6 is, voort te gaan en miauw. En hoe het dit hier? Weer goed, let net te sleep en dinge "latches" in plek. So nou, laat ons kyk of hierdie ewekansigheid werk. Laat my voort te gaan en kliek op die groen vlag. [Miauw] David Malan: Goed. [Miauw] David Malan: Goed. Goed, goed, so ons het koppe, koppe, sterte effektief. Sterte. [Miauw] David Malan: Heads. [Miauw] David Malan: Uitstekende. Dit is altyd ongemaklik wanneer net statisties jy 'n slegte hardloop, en dit is al die vorste, en die program eintlik nie werk as jy hoop. Maar hierdie keer het dit gewerk het, en lyk ons ​​te hê, as wat ons gedoen het dit 'n oneindige aantal van die tye, 50% kans. Nou ook weer nie alles wat interessant is, net om katte miauw, so laat ons kyk of ons kan nie dit 'n bietjie verder te bevorder hier in weergawe ses. En nou, ons het regtig irriterende weergawe - [MEOWS elke paar sekondes] David Malan - en dit is wat bekend staan, algemene, as 'n oneindige lus. So oneindige lus in hierdie geval voel sleg. Dit is beslis gaan om te begin klink sleg, en tog oneindige loops is nie altyd sleg nie. Kan jy dink van die konteks in rekenaarprogramme waar jy wil eintlik wil 'n oneindige lus? Ja? Gehoor: As jy wil om 'n toestand te monitor. David MALAN: Goed, as jy wil om te hou die beheer van 'n voorwaarde? Soos wat? Gehoor: [onhoorbaar] David Malan: Goed, goed, so as jy 'n program het, 'n paar soort van tuis automatisering ding, waar jy wil voortdurend monitor is iets van die geval. Is die ligte? Is die ligte op, want miskien het jy het 'n timer, en jy wil hê hulle om af te gaan, moet jy dalk om iets te doen weer en weer. En in die feit, praat van timers, wat enige van julle horlosies op jou rekenaar of digitale horlosies, dit is 'n oneindige lus. Dit gaan voort om die tyd om te werk, want dit is voortdurend kontroleer en te kontroleer en te keur, het die tyd verander, en indien wel, oh, my god. Die klok is uiteindelik verander. Dit moet toon dat waarde vir jou. So, terwyl die meeste van die tyd oneindige lusse is 'n fout, of ten minste 'n swak ontwerp besluit, soms wat hulle doen het hul waarde. Wel, laat ons verder hier te bevorder hello7. Dus nou die program sal 'n bietjie meer interaktiewe. Laat my zoom hier, en weer, dit is wat is lekker oor Scratch. En ons sal gebruik om dit te helder, Kras, net vandag en in volgende week se probleem stel. Maar op Maandag, ons duik in C. In hierdie program hier, is dit nie, vir ewig, die volgende. INDIEN om die muis te raak - nou, wat is die konteks hier? Wel, kennis dat wie gekies is hier aan die onderkant regs is die kat, sprite een, sodat hierdie skrifte, program, op hom van toepassing spesifiek. So as dat die kat die muis raak, dan is dit gaan om dit te speel en wag twee sekondes, en dan herhaal ad nauseum. So laat ons gaan voort en druk speel. Niks gebeur nie, maar as ek wil troeteldier die kat nou, ek kan net nie. [Miauw] David Malan: Adorable. [Miauw] DAVID MALAN: Goed, minder irriterende, maar kry ook dof, so laat ons beweeg op en kyk of ons kan nie spuit 'n bietjie meer logika. Dit was byvoorbeeld 7. Hier in voorbeeld agt, gaan ons stel 'n else toestand. So baie soos 'n letterlike vurk in die pad, waar jy kan gaan links of jy kan regs gaan, 'n toestand in 'n programmeertaal taal soos Scratch, of soos ons C sal sien, kan jou toelaat om gaan in een of ander rigting via 'n IF NOG bou. So redelik letterlik, as raak muis, sal 'n klank speel, anders is dit gaan om die ander te speel klank, miauw. Nou, as jy kan aflei uit die naam van hierdie klanke, kan jy waarskynlik raai wat hierdie program is bedoel om te besweer die idee van. Hierdie kat meowing gelukkig. [Miauw] David Malan: gelukkig, maar nie hou van aangeraak te word. [Brul] David Malan: So nou het ons 'n kat wat skreeu op jou. Alle reg, goed, een laaste voorbeeld met katte hier, en laat se oop weergawe nege van hierdie hier. So nou, het ons die volgende mees irriterende geluid wat ek kon vind, so ons het 'n walrus of see leeu hier wat gaan doen die volgende. [SEAL BAS] David Malan: Okay, so dit gaan totdat jy uitvind hoe Hierdie program werk. So hierdie tyd, het hierdie dier twee skrifte, en wat is interessant hier is dat hierdie skrifte gaan om uit te voer in parallel. Omdat hulle albei begin met 'n groen vlag gekliek, dit is soos gaan soos hierdie, en beide programme begin loop dit een keer selfs as hulle vir ewig is herhaling. So in die top-script, ek het 'n paar logika. Watter funksies bied wat voorsiening maak daar? [SEAL BAS] Gehoor: [onhoorbaar] David Malan: As dit is wat? [SEAL BAS] Gehoor: As gedempte aan nul, dit gaan te hou speel die klink. [SEAL BAS] David MALAN: Goed. So as gedemp, wat ook al dit is, hierdie oranje ding is nul, Dan speel die see leeu klank en dink "Ag, hi, "vir twee sekondes. Nou, ek weet nie wat gedemp is, maar nul roep die idee van vals of af. So as gedempte vals is, so indien nie gedemp, hou die speel van die klank. Alle reg, goed, hoe skakel ons hierdie ding gedoen? Wel, laat ons kyk na die tweede script af daar. Die tweede script sê gedempte aan nul. Let op dit is ook oranje, so wat Scratch nie is dit kleure blokke in dieselfde skakering as dit soort van logies verband hou. So net soos gedempte up top was oranje, is so gedemp hier onder genoem in oranje blok. Maar dit is 'n veranderlike opdragte, sodat net soos in algebra, jy het x en y en z in programmering jy veranderlikes, maar hulle is oor die algemeen - laat se breek vir 'n oomblik en figuur hoe hierdie geblaf te stop. Hoe doen ek dit? [SEAL BAS] David Malan: Goed. Dit gestop. Okay. So net soos jy in algebra veranderlikes x, y, en z, maar in programmering, met veranderlikes soos x, y en z is oor die algemeen frowned upon, want hulle is nie op alle ekspressiewe. Hulle het geen semantiese betekenis hoegenaamd, so in die meeste programmeertale, kan die veranderlikes die volle volwaardige name of woorde of frases, soos gedempte, om te sê wat hulle doen. So hierdie tweede script was ook vir ewig luister, en dit het gesê as die sleutel, die sleutelbord sleutel Ruimte, gedruk, vraagteken. So daar is 'n toestand met 'n Boole-uitdrukking wat is gaan om 'n vraag te eerlik of onwaar beantwoord, dan het ek binnekant van dit INDIEN die ruimte-sleutel gedruk word en INDIEN gedempte nul is, aan die een stel gedempte, anders stel gedempte aan nul. So hierdie ander vurk in die pad, en kyk hoe ek geneste die twee Indien toestande, is 'n manier van kontrole is die Space bar gedruk, want as dit so is, wil ek óf om te gaan hierheen of daarheen. En hoe omkeer ek die waarde van gedempte? Ek het om seker te maak is dit nul? As dit so is, maak dit een, anders maak dit nul dus wissel sy twee state. Alle reg, sodat ons het dan 'n paar van hierdie fundamentele konstrukte. Ons het Boolse uitdrukkings, en besef ook, dit is nie alles wat onbekende. Trouens, hier is 'n vinnige kiekie van Harvard kursus se CS50 shopping gereedskap, en 'n webwerf daar buite wat blok en drop-downs regtig, al hierdie tyd, is met behulp van Boolse uitdrukkings. Hier in hierdie geval, as jy kliek op die boks langs natuurlik groter as of gelyk aan 4,5, of dieselfde langs fakulteit, jy spesifiseer 'n Boole-uitdrukking. Wys my kursusse waarvoor daardie uitdrukking is waar. Of aan die regterkant, is nie in stryd met die kursusse wat ek is neem, as dit is nagegaan, dan ja, jy wil om seker te maak daardie toestand, anders wat jy wil om dit te ignoreer. So Boolse uitdrukkings is soort van almal rondom, maar wanneer ons het hulle in omstandighede, of indien toestande, INDIEN Elses, of kan ons selfs dieper simuleer vlakke, indien anders as anders - so dit is 'n soort van 'n drieledige staat. Jy kan gaan op hierdie manier of op hierdie manier of hierdie manier. Ons kan nes dinge hou om te gaan in verskillende rigtings. So Scratch het hierdie loops, soos Forever. Dit het hierdie eienskappe soos Herhaal 10, 'n paar eindige aantal kere. Ons het nou die vermoë om veranderlikes te stel, so in hierdie geval Ek het verklaar, byvoorbeeld, 'n veranderlike genaamd sokkies. Ek het geïnisialiseer tot 0, en dit is nog 'n ander rigting ons kon geneem het hier met Josef, waardeur miskien is ek net hou van hoeveel sokkies Ek het op en beëindig die program wanneer daardie veranderlike se waarde is 2. Dit sou 'n ander manier van die soort van veralgemening wees dat probleem en weer en weer om iets te doen. Wel, laat ons gaan voort en stel nou 'n paar nuwe dinge. So dié van julle met vooraf programing ervaring sal weet dat 'n baie tale skikkings, of vektore of lyste, en inderdaad, Kras het iets soos hierdie, ook. So laat ons sien as ons kan nie dinge neem na die volgende vlak. As ek die vermoë, nou, met hierdie stukke van die legkaart te voeg iets, soos 'n woord of die getal, 'n veranderlike, ek kan begin om dinge te versamel. En dit is eintlik mooi a propos vir dinge soos speletjies, rol-speletjies te speel waar jy soort van loop rond sommige fantasie wêreld versamel dinge, dinge oprapen, verdien punte, of die wil. Jy mag dalk wil om tred te hou van 'n soort van voorraad, en inderdaad, dit is wat 'n mens van ons oudstudente hier het met iets genoem Fruitcraft RPG. So laat my voort te gaan en hierdie ding hier oop te maak, en in Die Fruitcraft, ons het hierdie wêreld op die top. So laat ek gaan voort en kliek op die groen vlag. Kennisgewing aan links bo is 'n soort van voorraad. Dit is geïmplementeer in Scratch as wat ons sal noem 'n skikking of 'n lys, en nou het ons hierdie klein animasie. So net soos ons vroeër begin met hierdie koekie liefdesverhaal, en dan het ons gevorder tot katte en seeleeus, nou kan ons ' dinge wat selfs meer interaktiewe. En hierdie klein blou man, kan ek begin om rond te beweeg sy bietjie huis hier. Sodat dit lyk soos hy het 'n uitgang hier onder, so ek gebruik die pyle sleutels, af, links regs. En nou is ek buite, so laat is wat ek hier het. Lyk soos 'n lemoen, en inderdaad, so gou as ek raak die oranje, kry dit plof in my voorraad. As ek gaan hier aan die kersies, nou ek het iets anders in my voorraad. En dit is mooi en cute, maar dink oor hoe, nou, hierdie geïmplementeer word. Wel, ons het hierdie idee van 'n lys, en dit is blykbaar 'n legkaart stuk wat jy net sê wat jy wil toe te voeg, voeg oranje, voeg kersies. Nou, is wat hierdie klein blou man doen? Wel, hy is 'n sprite. En vermoedelik, die Oranje-en die kersies - hulle self was aparte sprites. En die gebruik van toestande in Boolse uitdrukkings, die student was waarskynlik in staat om uit te druk as blou man is raak kersies en voeg dan die woord kersies aan sy voorraad, en dan ook verberg die kersie sprite. So onder die kap, daar is waarskynlik nog 'n kers sprite. Ons het nou net gesê dat dit doeltreffend te raak onsigbaar. Nou, as ek loop hier, ons kan dit ook doen hierdie proksimale ding, waar ek kan gaan en lees die teken. So as blou man raak teken, kan ons dit sê blok net soos die kat het met ons gepraat in woorde, hello, vroeër, "Het sommige vrugte? Bring dit na die vrug plek "Alle reg, sodat nou, blykbaar. Ek het my aanwysings. Ek kan gaan hier om die vrug plek, lyn myself met die deur. Nou, ek is hier. Ek kan gaan na die man by die toonbank. Hy ontdek dat ek naby aan hom, sodat dit nie te wees nie heeltemal identies raak, en ek het die wedstryd gewen. So daar het ons Fruitcraft RPG. Sodat ons kan dinge doen selfs meer gevorderd as dit. Ons kan byvoeg klanke. Ons kan voeg pseudo willekeur. Ons kan byvoeg kompleksiteit. Laat my gaan voort, en doen eerder as om dit self, laat ek jou wys een van die meer gesofistikeerde voorleggings ons het verlede jaar van 'n sekere iemand met die naam van Blake. Kan ons 'n vrywilliger wat gemaklik is wat op kamera en is vir die speel van 'n spel? Hoe gaan dit reg daar? Kom op. Alle reg, sodat die spel wat jy het net onwetend vrywillig om te speel - [Applous] David Malan: - is iets van die verlede genoem "Frogger." Wat is jou naam? Renda: Renda. David Malan: Redna? Renda: Dit is soos Brenda met 'n b. David MALAN: Goed, Renda. Dawid. Nice om jou te ontmoet. So hier in "Frogger," en as ons kan die volume te verhoog net 'n bietjie, jy is hierdie klein groen padda op die bodem. Jy kan gebruik links, regs, op en af, en jou doel is om die straat oorsteek, steek die rivier oor en raak die lelie pads aan die bokant. Aw. Nog een t - oordoen, alles reg? Laat se treffer stop. Niemand het gesien dat. [Applous] [Applous] David MALAN: Ja. Baie goed gedoen. Uitstekend, dankie. Sodat daar Frogger. Nou dat jy weet wat jy het julle gekry in, nog 'n vrywilliger vir 'n ander speletjie wat deur 'n ander student. Jy wil om te kom tot? Wat is jou naam? RICHARD: Richard. David Malan: Richard. Alle reg, Richard, kom op die up. [Applous] David Malan: Jy het iets wat sal klink vertroud gou, so hier is jou instruksies. Dus, in 'n oomblik, is 'n paar stukke van die legkaart gaan om te blaai van die skerm wat lyk óf links of regs styg of daal. Jy gaan die pyltjie sleutels om te tref in so 'n manier dat dit ooreenstem met dié stukke van die legkaart voering met die plekhouers bo. So wanneer jy 'n pyltjie na links, en dit in lyn is met die linker arrow, druk op die pyltjie na links. Jy kan begin. [MUSIC - "sterker" KAYNE WEST] David Malan: Alle reg, groot applous vir Richard. [Applous] David Malan: Baie goed gedoen. Dankie. [Applous] David Malan: So pret en, skynbaar, soort van intimiderend as dit moontlik sou wees om iets te implementeer as skynbaar gesofistikeerde soos hierdie, besef dat die student nie en net skryf dit alles op een slag. Inteendeel, kan jy breek 'n probleem as oënskynlik komplekse aangesien dit in baie kleiner stukkies, en dit is ook ' gaan om 'n tema te wees. Die ergste ding wat jy kan doen in die skryf van 'n program in die meeste enige taal om te sit, kry regtig opgewonde, die skryf hele damn ding, en dan hoop net dat dit werk deur die tyd wat jy klaar geskryf het. Inteendeel, die proses van programmering moet oor die algemeen baie doelbewuste, baie iteratiewe, waardeur jy net stel baie klein stappe vir julle, byt-grootte stukke doen wat jy wil af te byt, en sodat jy het hierdie gesonde verstand tjeks, klein mylpale wat jy kan ontmoet. En dan kan jy bou op die top van daardie meer te skep gesofistikeerde dinge nog. So byvoorbeeld, hoe kan ons gaan oor die implementering van 'n wedstryd soos hierdie? Wel, eerlik, ek sou seker begin deur net ondersteuning van een sleutel op 'n tyd. Kom se net ondersteuning vir die pyltjie na links te implementeer. So moes die student om die een of ander manier te skep in Photoshop, of in Krap self met behulp van die klein grafiese redakteur, 'n arrow sleutel wat lyk soos die een op die top links daar, net die grys plekhouer. Toe moes die student om uit te vind wat x, y koördineer dit gestel het, waar om dit te sit in die venster. 0, 0 is hier, sodat jy het om uit te vind die aantal pixels, of kolletjies, dat die pyl te neutraliseer die bokant van die skerm. En dan weer dit is in plek, jou program nie eintlik iets te doen nie, so jy moet dan 'n tweede sprite, byvoorbeeld 'n groen pyltjie wat ook wys links, en jy dan moet jy n paar skrifte vir dit om te begin skryf. En jy sien, miskien, dat hierdie dinge begin kom verskillende snelhede, en die kleure is in verskillende plekke, en dit is omdat die student 'n bietjie van die gebruik pseudo willekeur. En deur pseudo willekeur, Ek het net beteken kies 'n nommer tussen iets en iets, want jy kan begin na die kaart dinge, soos as die nommer tussen een en vyf, goed, laat ons die saak groen. As dit is tussen 6 en 10, kom ons maak die legkaart stuk rooi plaas. So lank as wat jy het 'n manier vir die opwekking van 'n soort van ewekansigheid, jy kan dan besluite neem gebaseer op die onreëlmatigheid. En ek hou aan sê pseudo random, want daar is 'n n bietjie vuil geheime. Rekenaars kan nie kom met ewekansige getalle. Hulle kan dit net doen wat hulle vertel het omdat hulle is 'n mensgemaakte toestelle. Hulle kan net nie raai 'n getal soos ons mense nie voel soos ons kan. 'N rekenaar het iets wiskunde te doen, te besweer illusie van wiskundige nommer, soms met behulp van die huidige dag van die tyd as 'n inset aan die uitzoeken wat nommer om terug te keer, maar meer op dat 'n ander tyd. Vir nou, weet net dat ons pseudo willekeur kan genereer. So wanneer Ek het die vermoë om die linker pyl om te begin wat op verskillende tye en op verskillende snelhede, dan Ek kan gaan terug en voeg 'n paar van hierdie IF voorwaardes. As dit sprite raak die ander een, en die pyltjie na links sleutel is gedruk - so drie voorwaardes in daardie geval. Ek kan gebruik en sluit dalk in daardie geval - Toe het ek wil om voort te gaan en die telling inkrementeer. En op die top, het ons 'n telling, ons het 'n Awesome, Cool, goed en Boo. So daar is blykbaar vyf veranderlikes dat die student wat gebruik word om tred te hou van die verskillende statistieke. Dus, in kort, die eindresultaat is amazing. Dit is pret, dit is pret om te speel, dit innemende, maar dit is nie waar die student begin het. Hy of sy begin op 'n veel kleiner stel van die stappe. So, wat is 'n paar ander boustene wat ons kan weef in hierdie programme? Wel, daar is hierdie ander konsep in die meeste tale, Krap onder hulle, bekend as threads. So 'n rekenaar kan eintlik nie regtig doen verskeie dinge op 'n tyd, ten minste gewoonlik nie. Inteendeel, 'n rekenaar het oor die algemeen net een CPU, en selfs al die rekenaars is super vinnig en kan dus skep die illusie van verskeie dinge op een slag te doen - kontrolering van jou e-pos, om 'n direkte boodskap, druk van 'n dokument - regtig, 'n rekenaar is net spring van druk te IMing te e-pos, heen en terug en terug en weer so vinnig dat ons stadig gaar mense net nie besef dat dit eintlik uitvoer van hierdie programme 'n bietjie op 'n tyd. Nou, dit 'n bietjie van 'n wit lê hierdie dae, want deesdae, baie van ons rekenaars is die sogenaamde multi-core, sodat jy een CPU, maar verskeie cores, wat is 'n soort van soos met verskeie CPUs. En soms, rekenaars werklik kan verskeie dinge doen op 'n tyd, maar oor die algemeen binne 'n program, programme staatmaak op hierdie dinge threads 'genoem. So 'n draad is 'n soort van soos 'n miniatuur program wat kan naas ander miniatuur program en kan hardloop in parallel, of ten minste kan hardloop onder die illusie dat hulle gelyktydig loop. So Scratch ondersteun hierdie dinge threads 'genoem. Jy kan verskeie scripts uitvoer in 'n keer, net soos ons gedoen het met die see-leeu, en dit stel ons in staat om werklik te dan interaksies tussen hierdie sprites. Laat my gaan voort hier en trek, laat ons sê, drade, en speel dit soos volg. Ons het twee sprites, wat elkeen van ons sal sien het net een script. En jy sien dit lyk asof daar 'n intelligensie in die kat in hierdie een, want hy kom al hoe nader - [Brul] David Malan - en nader aan die klein voël. So hoe is die voël bedryfstelsel? Wel, laat ons neem 'n blik op die voël. Die voël script het gesê dat wanneer die groen vlag word gebruik, gaan na x gelyk is aan negatiewe 115 en y is gelyk aan 150. So het ek net uitgepluis het 'n random plek waar ek wou die voël om te begin, en ek het net plak hom daar by verstek. Dan Forever Indien nie kat raak, so dit is 'n ander soort van herhaling konstruk, maar dieselfde idee, doen dit weer en weer en weer. So lank as wat jy nie om die kat te raak, beweeg drie stappe, en as jy op die rand, weiering, waar dit is soort van 'n refleksie in die biljart sin. So dit is hoe die voël beweeg rondom soort van oënskynlik lukraak, maar dit is net omdat dit weerkaats die mure in hierdie geval. Nou is die kat, intussen, is 'n soort van bedrog. Die kat, wanneer die groen vlag word gebruik, ja, begin in sommige plek, 'n random plek - ten minste gedeeltelik soos per die pick random groen blok daar - en dan vir ewig asof raak van die voël, die leeu speel klank, en dan stop script. So toe ek gesê het beëindig, of afrit voor, daar is 'n legkaart stuk in Scratch wat sal net die dood van die program aan daardie wys, want dit is soort van logies gedoen. Maar andersins, hier, sien wat gaan gebeur. Wys na die voël en beweeg 'n stap. So hierdie punt in die rigting van die voël is 'n soort van 'n voordeel van die kat in die sin dat dit is Homing op die bewegende voël, en ons kan hierdie program nou al die meer interessant. In plaas van die beweging van een stap op 'n tyd per CPU siklus, per tol van die klok slaan, om so te praat, laat my gaan voort en beweeg, laat ons sê, vyf stappe op 'n tyd as die kat. Kliek op hardloop, en nou is hy bevind hom regtig vinnig. As ons dit verder verdubbel tot 10 stappe, gaan dit soort van reg vir hom. Nou kan ons die voël, miskien 'n bietjie van 'n voordeel. Kom ons gaan na die voël en sê in plaas van drie stappe beweeg, Kom ons gaan hom 30 stappe. Maar hy het steeds vasgevang in die einde. So hier het ons twee drade. Dit is opgesluit in Scratch met twee en twee skrifte sprites, maar die idee in ander tale is wat jy kan skryf, in wese, te veel programme soos hierdie en hulle hardloop werklik, of imaginarily, in parallel. Nou, daar is ook hierdie konsep in programmering bekend as gebeure, en dit is iets wat ons sal dit nie sien in C, die taal bekend as C. Ons sal dit teen die einde van semester se in web programmering, wanneer ons stel JavaScript en die die idee van die bou van webblaaie wat dinamiese en interaksie met die gebruikers. Dus, in hierdie geval het ons 'n baie eenvoudige voorbeeld van twee sprites, seun en 'n meisie, wat elk van hul onderskeie drade, maar op een of ander manier hierdie twee inter-by wyse te kommunikeer van iets genoem gebeure. So laat ek gaan voort hier en zoom in op die seun se skrif, wat lyk soos hierdie. Wanneer groen vlag gekliek, vir ewig doen die volgende. As die sleutel Ruimte, of die spasiebalk gedruk word, sê Marco vir twee sekondes, wat is op die suiwer estetiese skerm, 'n bietjie spraakborrel, maar dan saai. So uitsending is 'n ander Scratch stuk wat verteenwoordiger van 'n klas van funksionaliteit in programmering wat toelaat dat verskillende programme verskillende drade, inter-kommunikeer, om een ​​of ander manier te stuur boodskappe, die een aan die ander. Die slaag van 'n stuk papier in die klas is 'n soort van die lae-tegnologie ekwivalent. So saai gebeurtenis. Ek kan hierdie boodskap stuur, en die woord gebeurtenis is heeltemal arbitrêre. Scratch het soms hierdie drop-downs, so ek het net met 'n ewekansige woord nie so, soos die geval, want nou, wat die seun wanneer ek druk die sleutel is hy uitsendings hierdie gebeurtenis. En as ek kyk nou op die meisie se script, haar script super eenvoudige, want al wat sy nodig het om te doen is nie op te tree wanneer die groen vlag gebruik. Sy is ontwerp om tot aksie toe sy quote, unquote ontvang, "Gebeurtenis" nie, en op daardie punt, sy luister dus vir die sogenaamde gebeurtenis weer en weer. So gou as wat sy kry so 'n geval, sy gaan om te skree Polo vir twee sekondes. En so kan jy dalk aflei uit hierdie presies wat die volgende resultaat gaan wees. Laat my kliek op die groen vlag. Niks gebeur nie omdat ek nodig het wat om te doen nie? Gehoor: space bar. David Malan: space bar. Boy sê Marco, meisie sê Polo. Maar dit is moeilik om nie per se gekodeer. Dit is 'n inter-kommunikasie tussen skrifte, so nou is ons het die vermoë om selfs meer komplekse programme waar te maak hierdie twee die een of ander manier inter-kommunikasie. Dus, in watter rigtings kan ons dit? Wel, in probleem stel 0, regtig, die doel is om te om pret te hê met Scratch. Vir die hacker uitgawe, sal jy in plaas om pret te hê met 'n meer gesofistikeerde weergawe van Scratch genoem BYOB, Bou Jou eie blokke, maar die idee is dieselfde. Jy sal in staat wees om - Ja, dit was doelbewuste. Dit het gekom van Berkeley. BYOB is die hacker uitgawe weergawe van hierdie, maar beide demografie, Standard Edition en hacker uitgawe gelyk is, die doel by die hand vir die komende week is regtig net om 'n duik in diep, jou hande vuil kry met programmering, en maak iets interessant, maak iets interaktiewe, maak iets artistieke, maak iets wat pret is om werklik demonstreer, deur week se einde, sodat jy 'n projek, nie net vir jou eerste CS50 pset, maar jy sal 'n min iets wat jy kan wys in Annenberg vriende of familie deur die oplaai om dit te MIT se webwerf. En so het ek gesê op Woensdag, verwag ons dat 90% van die klas, die algemeen, te doen om die standaard uitgawes. Besef dat daar is ook uitlaat vir diegene van julle wat anders kan vind jouself 'n bietjie verveeld met die basiese beginsels en regtig wil om te duik in en handwerk 'n visie wat jy reeds met vorige agtergrond in hierdie meer vriendelike omgewing. So laat my trek een ander voorbeeld dat een van ons vorige studente hier gedoen het en vertel 'n bietjie iets deur middel van sang. Wat, as dit speel, dink oor hoe jy te werk gaan die implementering van hierdie program met behulp van presies hierdie selfde boublokke, 'n bietjie van die pseudo willekeur, en 'n bietjie van die bekende liedjie. As ons kon die volume te verhoog net 'n bietjie? [MUSIC - "Dit reën MEN" Die Weer Girls] David Malan: Dit is dit vir CS50. Ons sal sien dat jy op Maandag. [Applous]