[Powered by Google Translate] [ROCK MUSIC] [MUZIEK - "HAPPY TOGETHER" de schildpadden] DAVID MALAN: Vandaag beginnen we onze verkenning van de fundamenten van de informatica en onze introductie, nu de kunst van programmering, waarvan die slechts een voorbeeld. Maar in dezelfde geest van het oplossen van problemen, weten dat Traditionele Puzzle CS50's Day is morgen. Als je nog niet RSVPed voor dit evenement, kunt u naar cs50.net/rsvp. U kunt brengen teams van twee of drie of vier. U wordt uitgedaagd met problemen zoals je zag daar in het begin. Alle nieuwe problemen die dit jaar als u deelnam vorig jaar, en u hebben een kans dan naar een aantal fantastische prijzen te winnen. Onder hen, een Wii en een aantal cadeaubonnen en dergelijke, allemaal terwijl opknoping uit met CS50 studenten en klasgenoten en pizza en Facebook. Dus meer op die morgen als je zou willen. Dit is dan CS50, voor degenen onder u bij ons voor de eerste keer. En weet dat deze cursus in het bijzonder is vastbesloten om u door deze cursus zijn definitieve einde, op welk punt je zal niet alleen een begrip van deze fundamenten van de informatica, maar je moet deze zeer praktische vaardigheden die u vervolgens kunt terug naar uw eigen afdeling, of het nu technische wetenschappen, toegepaste wiskunde, de natuurwetenschappen, de natuurlijke wetenschap, of iets dergelijks. Inderdaad, wat is er zo boeiend is aan de informatica deze dagen is dat het is enkel voor allerlei gebieden. En ook al vandaag, zullen we alleen krassen op het oppervlak van een zeer traditionele programmeertaal bekend als C, zullen we in plaats daarvan kijken naar iets genaamd Scratch, iets met die dat cookie liefdesverhaal werd uitgevoerd door een van uw voorgangers in de afgelopen jaren, om verhalen te vertellen, om games te maken, om interactieve kunst te maken, en om daadwerkelijk beginnen met onze wikkelen geesten rond enkele van de fundamentele constructies die ten grondslag liggen aan het programmeren, maar in een context, zoals u zult zien, dat is veel minder eng, dat is veel minder geheimzinnig, dan u zult zien het duurde niet lang. En te realiseren,, voor degenen onder u gewoon bij ons deze semester, de zinnen, waarop we uiteindelijk woensdag lezing, is het niet zo belangrijk waar je terecht komt ten opzichte van uw klasgenoten in deze klasse, maar waar je, tegen het einde semester in week 11, uiteindelijk ten opzichte van jezelf rechts de dag van vandaag. Dus zonder verder oponthoud, dit is ook vermeldenswaard dat deze minder comfortabel, die ergens tussen zijn ook, door het ontwerp van deze cursus, op geen enkel nadeel ten opzichte van die comfortabeler komen in deze klasse. Zoals u zult zien in de komende weken, hebben we verschillende tracks voor uiteenlopende achtergrond, secties voor die minder comfortabel, comfortabeler, die ergens ertussen. Zoals u zult zien dit weekend en volgende week, twee versies van de meeste problemen sets in zowel standaard als hacker editie zo dat u alle kunt zelf kiezen op het pad waarmee u zijn het meest comfortabel. Dus vandaag hebben we een duik in deze programmering taal genaamd Scratch. Het is een grafische programmeertaal, en toch is het dezelfde kenmerken van een aantal van de hoger niveau talen zullen we verkennen later in het semester, waaronder C en JavaScript en PHP. Maar het zal ons toelaten om een ​​aantal van de afleidingen te voorkomen vroeg van de syntaxis, dingen zoals puntkomma's, haakjes, en andere geheimzinnige details die op het eerste gezicht, zijn gewoon niet op alle intellectueel interessant en hebben de neiging om binnen te komen de weg van een aantal fundamentele begrip. In termen van nu de draagstructuur vooruit, realiseerde deze tool, CS50 te bespreken, die zal worden gekoppeld aan de cursus website later vandaag, is het online discussieforum in die je in staat om vragen van elkaar te vragen en personeel, en het is ook een hulpmiddel, zoals we zullen zien volgende week, dat we heel integratedly gebruiken in kantooruren ook. Inderdaad, kantooruren beginnen op maandag, en eerlijk gezegd, het eerste week van kantooruren is vrij rustig. Ik denk niet dat je een Scratch alles wat ontoegankelijk te vinden. Het is nogal vanzelfsprekend, zoals we zullen zien, en dus wat wij zullen het gebruiken voor vandaag te halen een deel van de fundamentele ideeën die zal dan blijven de hele rest van het semester. Maar vanaf maandag om 8:00 uur dmv 23:00 zal zijn kantooruren in Annenberg dan hersenen breken. Snijden twee zal deze avond beginnen, dus ergens deze weekend, ga naar cs50.net/section, en je zult worden gevraagd een aantal vragen. Onder hen, hoe zou u uw comfort niveau met ingang van vandaag? Er is geen harde, snelle regel ten aanzien van wie er in die emmer. Het is precies het soort ding dat u waarschijnlijk wel weet als je zijn onder andere het minder comfortabel of anderszins. En nu, walkthroughs. Het probleem set specificatie voor deze week, zowel standaard en hacker editie gelijk, is online op cs50.net vanaf nu. En je zult zien dat de eerste van deze edities, de standard edition elke week, gaat gepaard met iets wat we bel een code walkthrough, een sessie onder leiding van een van de cursus leer kerels om u door, om te voorzien tips over, en krijg je naar beneden een bepaald pad als het gaat het starten deze problemen sets. Dus met elk van deze problemen stelt, als je ooit te willen voor jezelf waar moet ik beginnen, je begint met deze walkthroughs. En in feite, staat u mij toe Zamyla Chan, deze introduceren jaar onderwijs kerel, die zal leiden elke een van deze walkthroughs. Zamyla? [Applaus] ZAMYLA CHAN: Oh, hallo, iedereen. Mijn naam is Zamyla. Ik ben een junior studeren engineering in Winthrop House. Maar ik probeer en passen in zo veel informatica cursussen zoals ik kan, dat is waarom ik ben echt opgewonden om te leiden deze jaar walkthroughs. Walkthroughs, voor mij, was een essentieel onderdeel van mijn CS50 bieden. Tijdens de walkthrough, voor elke p-set, we gaan door het probleem samen te stellen, kijken uit over de problemen, een soort van verdeel ze in hanteerbare beten. Ik geef je tips, technieken, voor het krijgen van door en aan de slag. Ik hoop jullie allemaal te zien op de walkthroughs. Als je niet kunt maken in persoon, dan doe tune in online. DAVID MALAN: Excellent. Dank je wel, Zamyla. Dus beseffen dat walkthroughs zijn, inderdaad, op een vrijdag middag, maar dit is met opzet door het ontwerp, zodat zelfs als u liever niet naar les op een vrijdag 's Middags zullen de video's zijn al de sneller dan het weekend. Realiseer dat cs50.net komen al de Zamyla walkthroughs. En dat er vandaag de dag de datum en tijd, 3:00 uur, Harberd Hall, 104. En sommige van de leer fellows zijn ook bereid enkele opmerkingen voor u in verstek om u een beetje perspectief wat hun ervaring die in en uit te gaan van de CS50 was. Dus als we dim de lichten voor slechts een moment, geef ik u een deel van het personeel CS50's. JACKSON Steinkamp: Ik nam CS50 vorig jaar als eerstejaars in de vallen, en het absoluut in mijn gedachten. Ik had nog nooit heeft gebruikt programmering klassen voor, en nooit kwam binnen met elke computer science ervaring. En net hoorde ik de buzz over de klasse en besloten om het te nemen. JULIA MITELMAN: Het was echt leuk, echt aantrekkelijk. Ik heb nog steeds, tot op de dag - Ik zag onlangs heb ik de diskette die David gaf ons op onze eerste dag van de lezing. Ik had hing het op mijn muur. Dit is waarschijnlijk een beetje nerdy, maar ik hing in mijn muur tijdens de les als een herinnering aan hoe cool het was. TRAVIS DOWNS: Het is zo gênant. JACKSON Steinkamp: Informatica is iets wat je moet proberen zelfs als je niet een voor de traditionele wetenschappen. Het is haar eigen ervaring, en CS50 zullen ervoor zorgen dat je goed ondersteund door het met haar waar leger van TFS. ALI Nahm: Ik nam het als een eerstejaars, en ik heb veel van nieuwe vrienden. Ik kreeg ook kennis met deze hele concentratie en hele school van engineering, en dus heb ik het ten zeerste aan en heten u welkom in onze CS50 familie. Yaniv YACOBY: CS50 leert je gewoon hoe te gebruiken hulpmiddelen die op grote schaal toegankelijk zijn. Je hoeft alleen een laptop nodig hebt, moet je een web browser, en u moeten leren om wat code te schrijven, en je kunt echt bouwen leuke dingen. KAREN XIAO: Het is gewoon zo cool om te kunnen om iets te maken en hebben mensen gebruiken het en hebben mensen het zien, en dat is wat ik echt leuk vind aan het. TIM MCLAUGHLIN: - een gevoel van gemeenschap, denk ik, in dit natuurlijk meer dan een andere cursus die ik heb tot nu toe genomen. Je bent niet alleen het nemen van een andere - je bent niet het vullen van een andere vereiste. U bent niet alleen maar naar lezingen en naar sectie. Maar je doet vele dingen die zijn allemaal over programmering en alles over techniek, maar het is niet echt het gevoel dat een klasse meeste van de tijd. TRAVIS DOWNS: En op de eerste dag, ze uitgedeeld cake, en Ik was meteen verkocht. JACOB PRITT: Gratis snoep en pizza. ZAMYLA CHAN: - ongeacht uw interesse niveau, denk ik dat CS50, heb je plezier, en je zult intellectueel te zijn gestimuleerd. MARK GROZEN-SMITH: Het is altijd een feest in de klas, en het is een feest elke nacht werken aan uw p-set. JACKSON Steinkamp: Elke keer dat u klaar bent met een probleem set, kunt u zal voelen als je klaar bent met een project. MELISSA NIU: Het was eerste jaar, en ik was klaar met winkelen. Ik had mijn vier klassen klaar, en ik was in Annenberg. En ik tegen het lijf een vriend, en hij zegt, hey, ik ben winkelen deze klasse met de naam CS50, en je moet met me meekomen. Eindigde met het die vallen, en na die klasse, ik dacht dat ik misschien ga minderjarige in CS. Maar hier ben ik, drie jaar later, nog steeds het bestuderen van de computer wetenschap en het werkelijk doen als een belangrijke, en ik hield van elke moment. ROB BOWDEN: Ik heb geen idee. ALI Nahm: Eens kijken. MELISSA NIU: Craziness. Spreker 1: Ik heb het gevoel alsof ik heel cliche zijn. Ik zou gewoon zeggen, als, geweldig. Yaniv YACOBY: Toegankelijkheid. JACOB PRITT: Gratis snoep en pizza. TRAVIS DOWNS: kan niet worden ingeschakeld in een klasse die handen uit cake. TIM MCLAUGHLIN: Energetische. Vipul Shekhawat: Essential. ROB BOWDEN: Laat me denken aan een antwoord. Ik denk dat ik iets heb. Oh, god. Ja, mijn naam is Rob Bowden, en dit is CS50. [Applaus] DAVID MALAN: Oke, dus laten we beginnen met een beeld te schetsen van de richting waarin we kunnen gaan, en laten we introduceren dit concept hier bekend als pseudocode. Dus pseudocode is geen programmeertaal taal op zich. Het is niets technisch per se, maar het is gewoon een soort van algemene manier van jezelf uitdrukken vrij nauwkeurig, vrij algoritmisch, tamelijk procedureel, maar zonder zich zorgen te maken over welke taal je uitdrukken jezelf inch Het is sommige modellen van het Engels en programmeertalen met die je toevallig bekend, zodat we kunnen beginnen het schrijven van dit soort dingen als we gaan. En in feite, Joseph, kon ik lenen je op het podium te zijn schrijver hier? Ik ben vooruit gegaan hier op voorhand en vergeten te zetten op een paar sokken vandaag, en dit zal een van onze meer belachelijk voorbeelden. Nu, ik heb je hier. Ik doe de sokken deel. Hier hebben we dus een beetje kladblok. Dit is letterlijk TextEdit in een Mac. We zijn niet echt gaat om een ​​uitvoerbare programma te schrijven, maar we gaan gewoon om te beginnen met het schetsen van pseudocode gebaseerde op een aantal van de raad die u verstrekt aan mij hier. Dus hier is mijn stapel sokken thuis. Ik heb geen sokken aan als ik wakker word in de ochtend, en we hebben nu moet een programma te schrijven, een algoritme soort, waarmee om deze sokken te krijgen op mijn voeten. En langs de weg, laten we eens kijken of we struikelen, of tegenkomen, een aantal van de ideeën die je gaat moeten beginnen na te denken over veel meer serieus bij het programmeren van opdat uw programma's gedragen zich niet helemaal zoals bedoeld. Dus ik zit hier beneden. Ik heb mijn stapel sokken. Wat is het eerste wat een redelijk mens zou doen als het doel is om op een paar sokken? Iemand geef me een stap, en slechts een stap. Ja? PUBLIEK: Buig naar beneden. DAVID MALAN: Buig naar beneden, oke. Stap twee. Stap twee. PUBLIEK: Neem uw sok. DAVID MALAN: Neem uw sok. Oke, lichte dubbelzinnigheid hier, en dit is een van de eerste struikelblokken die we verondersteld om bewust tegenkomen hier. Het is een beetje dubbelzinnig, dus pak je sok. Fijn, ik neem deze, maar een computer, te realiseren in slechts een bit, is niet van plan om dat soort menselijke instinct om er gewoon nog pak de dichtstbijzijnde. We gaan moeten beginnen, het duurde niet lang, uiten onszelf meer precies. Oke, dus stap twee is de overhandiging van uw sok. We nemen het. Stap drie. In de rug. PUBLIEK: Zoek een passend paar. DAVID MALAN: Zoek matching pair. Oke, dus dit is goed. Ik moest deze sok te kiezen. Dus het doel is het vinden van een passende sok, nu, maar wil dat zeggen? Een redelijke mens, net als op woensdag toen ik net wist Mike Smith te vinden in een telefoonboek, gewoon een soort van ging met hun instinct. Maar hier, het is natuurlijk deze sok hier, maar van een computer niet van plan om zo instinctief. Een computer wordt een verzameling bits, zoals we besproken op woensdag, en dat zijn andere manier georganiseerd geheugen. Maar het punt is dat een computer alleen de mogelijkheid heeft om te kijken naar dingen een voor een, en in feite, zelfs wij mensen - ook al voelt het alsof ik keek naar beneden en een split seconde later Ik weet waar de sok is, mijn hersenen en mijn ogen vermoedelijk heeft een snelle romen van die sokken, en vervolgens vergrendeld op de in kwestie. Als we des te opzettelijke nu een computer, hoe vind ik deze matching pair? Nou, we moeten herhalen. We moeten misschien lus over deze rotzooi van losse sokken op de vloer waardoor ik iets zeggen VOOR ELKE sok, pak het up, en als dezelfde vorm en grootte als de andere, DAN puntje, puntje, puntje, blijven we het verhaal. Dus voor elke sok, dus pak ik deze. Ik check is dit gelijk aan deze. Het is niet, dus ik opzij gezet kant. Dan ga ik weer herhalen. Is dit een gelijk? Nee, het is niet, dus ik zet het opzij. Is deze? Nee. Deze? No, enzovoort. En dan tot slot, hopelijk zal ik hier tegenkomen deze sok. Dus als het dezelfde vorm, grootte, neem het. En nu, wat zou hier de volgende stap? Ja? PUBLIEK: Identificeer rechts van links. DAVID MALAN: Oke, identificeren rechts en links, zodat gelukkig, dat soort werk. Een beetje symmetrisch, of ik heb gewoon gedragen ze op die manier. Oke, dus ik heb de juiste geïdentificeerd. En nu, voordat we overgaan, wil ik wijzen op wat Joseph's is hier aan het doen als een soort van ervaren programmeur. Dus nogmaals, er is niet een manier om dit te doen, maar dan alleen nummering van de lijnen, heeft Joseph al begonnen om dit te doen soort van inkeping. Inderdaad, dit is een veel voorkomende conventie in de programmering, waarbij als je iets iteratieve, looping stijl, zoals we impliceren met het Engels zinsnede "voor elk sok, "de conventie in pseudocode en, zoals we zullen zien, normale programmeertalen, is om gewoon inspringen. Raak de spatiebalk een paar keer, druk op de Tab-toets of iets dergelijks, zodat geneste onder "VOOR ELKE sok" is het deel van dingen die je moet doen als gevolg van die lus. Dus dat is alles wat semantisch is transport. Nu ondertussen de "Als het dezelfde vorm en grootte," de feit dat "het nemen" wordt ingesprongen verder gewoon betekent dat is het enige wat je moet doen als die voorwaarde, als die tak, die splitsing in de weg, is in feite waar. Dus nu hier, zijn we op stap vier, te identificeren rechts en links. Ik heb gelijk geïdentificeerd. Geef me stap vijf. En technisch gezien, konden we echt noemen de VOOR ELK ding - moet je waarschijnlijk nummeren alle lijnen als we gaan om dit te doen. JOSEPH: [onverstaanbaar] DAVID MALAN: [onverstaanbaar]? Oke, goed, goed, we doen het op jouw manier. Oke, dus stap vijf, hoe doen we de juiste sok? Hoe gaan we te werk volgende, hier? Ja? PUBLIEK: Til het rechterbeen. DAVID MALAN: Til het rechterbeen, Oke. Stap zes? Snel. Ja. PUBLIEK: Zoek een open uiteinde van de sok. DAVID MALAN: Oke, het vinden van het open uiteinde van de sok. Zo goed. Dus hier, eerlijk gezegd, zou een veel voorkomende instinct gewoon op rechter sok, maar ook dat is vrij dubbelzinnig. Tenzij de computer of menselijke weet precies wat dat betekent, het is niet van plan te zijn om dat uit te voeren, dus even, ik heb vond de opening van de voorraad. Stap zeven? PUBLIEK: Raak je tenen aan. DAVID MALAN: Touch tenen. Oke, dus nu gaan we - Oke, ik ga hier even vrijheden. Bedankt. Stap acht? Doe sok. Oke, dus nu heb ik, denk dat we dicht genoeg om te sorteren van te nemen dit thuis. Oke, dus dit gaat omhoog. Ik neem enkele vrijheden met wat het betekent, eigenlijk. Zet de sok op. Oke, nu stap negen? PUBLIEK: Zet voet neer. DAVID MALAN: Dank je wel. Stap negen, zet voet neer, en nu kunnen we herhalen. Dus vermoedelijk, kunnen we nu gaan in stap 10 en zeggen te identificeren links sok, maar dat is vermoedelijk al gedaan. En dus dan kan ik sorteren van deze stappen herhalen. Maar dit soort roept de vraag. Voor, de laatste keer dat we wilden om iets te herhalen, we deed het iteratief, opnieuw en opnieuw, een FOR Elke lus om zo te zeggen. Zou het zinvol zijn om een ​​lus te gebruiken om zowel te behandelen links en rechts sok? Omdat het voelt alsof deze handelingen zijn vrij veel identiek, behalve het feit dat een begint hier en een begint hier? Hebben we lus, of gaan we gewoon blijven schrijven stappen 10 en 11 en 12? PUBLIEK: Loop. DAVID MALAN: Oke, dus loop. Ik heb eigenlijk kunnen zeggen ga gewoon door. Dus waarom is dit het geval? Nou, dit is eigenlijk de eerste van onze niet-voor de hand liggende ontwerpbeslissingen en in feite een van de metrics waarmee we beginnen te evalueren, voor onszelf en voor u, de kwaliteit van een opleiding is gewoon hoe goed ontworpen is. Heb je gedaan de minimale hoeveelheid werk die nodig zijn om de klus het meest snel gedaan, hetzij in termen van uw tijd of in termen van het uitvoeren van de computer tijd? Hoeveel operaties duurt het uit te voeren om? Dus misschien is dit een kans voor een lus, omdat zodra ik beginnen met het kopiëren en plakken, als Joseph effectief zou gaan doen in een moment, je bent soort van het verspillen van uw tijd, en je wordt dubbel expressief. Maar tegelijkertijd, deze zijn in feite slechts twee speciale gevallen, links en rechts. En terwijl voorheen, zou ik 10 of 20 of meer sokken in een stapel, het maakt zeker zin niet te hebben 50 regels van code zegt check deze sok, dan de volgende, dan de volgende. Hier, het is een beetje minder voor de hand, en ik zou voorgesteld dat we konden gaan in beide richtingen. We kunnen ofwel de loop, hoewel het slechts lussen twee keer, of we kunnen gewoon kopiëren en plakken een beetje hier om de klus te klaren. Maar dit programma is buggy, zo te zeggen. Het kan een aantal fouten, vergissingen of hoek gevallen, om zo te spreken, dat we niet echt verwacht. Niets mis ging deze keer, maar wat kon fout gegaan tijdens het uitvoeren van dit programma? PUBLIEK: Je hebt geen sokken. DAVID MALAN: Dus er was er geen sokken dan ook. Dus laten we eens kijken die hoek geval. Dus als we terug te scrollen naar stap een, dus stap was bukken, zodat klopt. Stap twee, pak je sok, maar dan bekijk de overeenkomende resultaten sok, identificeren rechts. We soort van een heleboel aannames, en dat is, eerlijk gezegd, waarom het programma soms crashen. Als u, de programmeur, de zekerheid hebben verkregen veronderstellingen, zoals dus er komt wel sokken of zeker er zal om het geheugen in de computer gelaten te zijn, dus er gaat op de harde schijf ruimte op de harde schijf zijn - Nou, als je deze aannames, en dat is niet, in feite, de werkelijkheid, wie weet soms wat van de computer gaan doen? En soms, als je de draaiende strandbal of de bevroren Windows of iets dergelijks, dat is precies omdat sommige programmeur niet anticiperen op die zogenaamde randgevallen. Wat kan mis zijn gegaan in dit programma? Ja? PUBLIEK: Je hebt geen recht been en een linkerbeen. DAVID MALAN: Oke, misschien niet hebben zowel een recht been en een linkerbeen, en dus dit programma misschien niet universeel zijn toepassing. Anderen? PUBLIEK: Je zou kunnen hebben opgepikt een wees sok. DAVID MALAN: Ik zou kunnen hebben opgepikt een wees sok, dus een niet-overeenkomende sok die net heeft geen broers en zussen, want ik heb verloren, het is gescheurd, is het in de wash still, of iets dergelijks. Zodat ook niet echt is behandeld. Ja? PUBLIEK: Je zou al sokken op. DAVID MALAN: Ik zou al sokken op. Ik heb niet echt te controleren. ALS u niet sokken hebben op, ga dan naar doen lijn een en twee. En dat kon gebeuren. Je valt in slaap met je sokken aan en dergelijke, zodat dat ook,, een zeer redelijke hoek geval. En misschien een ander? PUBLIEK: De sok is binnen en van buiten. DAVID MALAN: Dus de sok is binnen en van buiten, dus we hebben er geen fout controle, kortom. We hebben niet controleren of de toestand van de wereld is zoals we verwachten. We hebben niet controleren of we echt gevonden wat we zoeken. En ook al is dit soort van een belachelijke voorbeeld waarbij sokken, aan het eind van de dag, is dit precies soort van mentaliteit je nodig hebt tijdens het schrijven van programma's, zelfs in Scratch als in C, in JavaScript in PHP, want anders, zal uw programma's vertonen de equivalent van die spinnen strandbal of gewoon opleveren onnauwkeurige resultaten. Dus veel dank hier om onze schrijver Joseph. [Applaus] DAVID MALAN: Oke, dus wat is, in Sterker nog, een computerprogramma? Nou, laten we eens een snelle blik op een vertegenwoordiger hier. Dus dit is een programma geschreven in een taal genaamd C. C is vrij oud deze dagen, maar veel nieuwere talen worden gebouwd bovenop. Inderdaad, PHP, een van de web-centric talen zullen we gebruik maken van de richting van het einde looptijd's, zelf heeft wat heet een tolk, een programma dat is geschreven in C, maar meer op dat in vele weken vanaf nu. Maar dit programma, en dit is wat het betekent om te schrijven een programma, zij het een heel eenvoudig. We hebben een aantal tamelijk cryptisch syntax hier, maar u kunt waarschijnlijk raden, zelfs als je nog nooit hebt geprogrammeerd, wat Dit programma doet. Inderdaad, ik weet niet wat printf is, maar af te drukken zeker roept het idee van het drukken iets uit. En zo ja, is dit programma uiteindelijk gaat afdrukken de woorden "Hello, World". Nu, of heb je een Mac of een PC of een Linux-computer, is de kans zijn, tenminste als je een aantal gratis gedownload beschikbare software, kon je zijn schrijven van programma's op uw eigen laptop al geruime tijd nu. Op Mac OS, bijvoorbeeld, er is dit programma met de naam Terminal die wordt geleverd met een Mac, dat is meestal in uw Map Hulpprogramma's, en het opent over het algemeen een zwart- wit of een witte en zwarte venster waarin u een vragen waar u kunt typen commando's. Dus dit is eigenlijk denken aan wat computers vroeger voor grafische interfaces, GUI's, langs kwam. Nu, in Windows, heb je een soortgelijk mechanisme in de vorm van de opdrachtprompt. Maar wat ik ga hier moet doen is open te stellen, laten we zeggen, TextEdit weer, zodat dezelfde programma we gebruikten voor pseudocode een moment geleden, en ik ga om verder te gaan en schrijf mijn eerste programma. Inclusief stdio.h, wat dat betekent, int main leegte, wat dat betekent, en dan in het midden hier, printf ("hallo, wereld."). En sluit citaat, sluit haakje, puntkomma. Nu ga ik vooruit en gewoon op Command-S te gaan. Ik ga om verder te gaan en sla dit als hello.c, zodat de conventie in de wereld van programmeren in C is de naam van het bestand dot c. Ik ga gewoon in Huis John Harvard's directory, hier, klik op Opslaan en nu ga ik om over te gaan naar deze terminal venster, die weer is deze zwart-wit prompt waar kan ik commando's uitvoeren. Ik kan programma's uitvoeren door het intikken van hun naam, niet door dubbelklikken op iconen in de gebruikelijke zin. Maar het ding is ongeveer C is dat een taal als eerst C komt in deze vorm, zoiets als broncode. Iets dat een beetje lijkt op Engels, maar is zeker minder als het Engels dan pseudocode een Jozefs even geleden. Het is een beetje meer geheimzinnig. Het lijkt te volgen bepaalde patronen of regels. Het feit dat ik accolades, puntkomma's, citaten, hebben hoek bretels, voelt als een computer kwam met deze soort taal. Maar als ik ga, nu, om deze terminal venster, kan ik uitvoeren van een commando dat gaat naar die bron code om te zetten is iets genaamd object code. Dat zal Engels-achtige syntaxis nullen om te zetten en degenen, dezelfde soort van nullen en enen we sprak over woensdag. Nu, ik ga om een ​​commando genaamd Clang te voeren. Meer hierover in de komende weken, maar het is een programma met die ik kan hello.c om te zetten in een hele hoop van nullen en enen. Nu, ik heb deze opdracht uitvoert. Ik heb lopen Clang, en toen zei ik run jezelf op dit bestand genaamd hello.c, dat ik een ogenblik geleden, en niets lijkt te gebeuren. Maar inderdaad, als ik stak rond mijn home directory, zou ik zien dat dit dom genoemd programma a.out bestaat nu. Dit is gewoon de standaard naam voor een programma bij het schrijven in C. We kunnen eventueel overschrijven dit, maar a.out is de naam van het programma dat ik gewoon omgezet in nullen en enen. En nu dat het nullen en enen, mijn Mac, in dit geval, of uw Windows-pc, kunt begrijpen die bits, die nullen en enen. En dus toen ik op Enter raakte, zie ik "Hello, World!" Maar het is een beetje buggy. Ik wist niet goed zeggen "hello, world: lucht: - jharvard." Lucht is de naam van mijn computer. Jharvard is de naam van de account, dus wat heb ik duidelijk weglaten uit het programma? Een soort regeleinde. Ik heb niet geraakt het equivalent van Enter of de carriage return, en dit is, nogmaals, bewijs van het feit dat computers kunnen alleen doen wat je ze vertelt te doen. En het feit dat ik niet de computer te vertellen verplaatst u de cursor naar de volgende regel - goed, het is zeker niet van plan om gewoon doen aanmatigend voor mij. Dus als ik terug naar mijn programma, en ik zeg \ n - Dus \ n, zoals we zullen snel zien, is de manier van die rare dingen zoals nieuwe lijn personages, dingen die anders het gevolg zijn van het raken van de Enter-toets. Maar voor nu, weet alleen dat het raken van de Enter-toets zou gewoon onze code vreemd uitzien, zodat de wereld besloten, weet je wat, om dingen mooier, om het te houden op een regel, laten we gewoon zeggen \ n staat voor een nieuwe regel. Laat me resave mijn dossier, ga terug naar de terminal venster, en re-run a.out, Enter. Toch buggy, maar waarom? PUBLIEK: [onverstaanbaar] DAVID MALAN: Ja, dus ik moet het opnieuw compileren. Dus om een ​​programma compileren betekent gewoon omzetten van de bron code naar object code, broncode om nullen en enen. Nu, het enkele feit dat ik opslaan hit in deze TextEdit heeft geen van invloed zijn op die nullen en enen, want ik moet eerst tell Clang hey, ik ben veranderd die regels code, de broncode. Je moet a.out regenereren. Niets lijkt te zijn gebeurd, maar in een computer, op een opdrachtregel, om zo te zeggen, wanneer er niets gebeurt, dat betekent meestal alles goed is. Als er iets gebeurt, dan betekent je messed up, over het algemeen. Dus laten we nu naar a.out, en inderdaad nu heb ik 'hallo, wereld. " En nu, hoe zit het met deze nullen en enen? Wanneer in feite zijn dat? Nou, ik kan niet echt gewoon een soort van snuffel rond in zeer effectief. Laat me open TextEdit. Hier is a.out. Laat me ga je gang en open deze, en dit is blijkbaar wat mijn programma eruit ziet. Dus ik heb geopend, niet hello.c, maar a.out. Maar dit is eigenlijk niet wat mijn programma werkelijk is. Het is duidelijk, dit is een soort van alfabetische tekens. Ik zie geen nullen en enen, maar dit is omdat a.out is een programma. Nullen en enen - maar TextEdit, zoals de naam al doet vermoeden, is het net zoals Notepad op Windows, maar is een tekst editor, dus het is verwarrend al die nullen en enen als al waren ze, wat? ASCII-tekens. Dus roepen op woensdag, we kwamen met deze willekeurige kaart brengen van de nummers, of bits, met letters van de alfabet en leestekens en dergelijke. Dus TextEdit, dat het een teksteditor wordt verkeerd die patronen van nullen en enen die worden geacht te zijn afdrukken woorden, zoals "Hallo, wereld." Het is ze te tonen als ASCII, en dat is waarom het ziet er een beetje rommelig. Nu zijn er een aantal hints van de juistheid hier. Let op als ik benadrukken, is er een vleugje eigenlijk "hello, wereld ", zo ergens in dat programma is de zin die ik schreef. Maar laten we verder gaan en nu met een ander programma. Dit is niet degene die we zullen gebruiken, dat vaak, maar het komt ook met een Mac en bevinden zich in de CS50 apparaat. Laat me gaan en openen met een programma genaamd XXD. Terug in de dag, werden de meeste programma's vrij cryptisch genoemd, en dus de trend zet zich voort. Maar-b betekent spuugde dit programma uit als binary. Niet draaien. Geef het aan mij als nullen en enen, en dit is de C programmeren we net schreef. Nu, ik, als mens hier, ik eerlijk gezegd geen idee wat deze verschillende patronen van nullen en enen vertegenwoordigen. Terug in de dag, ik, met mijn ponskaarten of iets dergelijks, zou eigenlijk moeten opzoeken wat deze verschillende patronen van 01111000, eigenlijk vertegenwoordigen. Of erger nog, zou ik de ponsen of het ontstaan ​​te doen van deze patronen van nullen en enen. Maar voor nu, neem op het geloof, dat een CPU, Intel Inside, dus te zeggen, de binnenkant van al onze computers deze dagen, weet hoe deze nullen en enen te interpreteren. En sommige nullen en enen betekenen print. Sommige nullen en enen betekenen geluid afgespeeld. Sommige nullen en enen betekenen neem gebruiker invoer van een toetsenbord. Er is allerlei verschillende patronen, maar we gelukkig, als mensen, alleen maar over het algemeen moet over programmeren maken op deze vrij hoger niveau. En in andere CS klassen kunnen je verdiepen dieper en kijken naar zaken als die nullen en enen, of nog andere dingen nog. Dus laten we nu omzetten. Laten we verder gaan heel snel uit de buurt van C en ga naar iets een iets meer troost, een beetje meer spannend, in die kunnen we terug onze animaties en geluiden en dergelijke die duidelijk zijn ontsnapt ons in deze tamelijk primitief interface. Dus hetzelfde programma in C kan nu worden vertegenwoordigd programmeertaal Scratch als volgt. Dit is het equivalent van deze hello world programma geschreven in deze puzzel stuk stijl taal genaamd Scratch. Dus laat me gaan en open te stellen dit zeer programma. Het is weer heet Scratch. Het is vrij verkrijgbaar, en dit is hetzelfde als wat wij vandaag begonnen op. Dus dit is hier Scratch, en het is opgedeeld in een aantal verschillende stukken. Op het rechtsboven we de zogenaamde fase en inderdaad, dat is waar de koekjes gewoon een beetje geleden uitgevoerd. En op dat podium worden dingen genoemd sprites, tekens of objecten of entiteiten. Het maakt eigenlijk niet uit hoe je denkt van hen, maar ze programmeerbaar zijn, beweegbaar dingen en in dit geval programma dat onze student schreef een paar peperkoek koekjes, een paar ronde koekjes, een hele hoop harten, een hele hoop van brillen. Hierdoor hij kan elk van deze programmeren afzonderlijke tekens afzonderlijk. Nu, wat betekent het om deze tekens te programmeren? Nou, laat me ga je gang en klik op deze links cookie- en hier gaat u naar de linkerbovenhoek. In de linker bovenhoek van mijn scherm is nu het zogenaamde scripts gebied. Dit is een soort van een schone lei, in eerste instantie, waarop ik kan slepen en neerzetten puzzelstukken die eerlijk gezegd, doe precies wat ze zeggen. Op de top van deze stapel puzzelstukjes is het woord Wanneer Groene Vlag erop wordt geklikt, en als je niet eerder gemerkt, de manier waarop ik begon dat cookie lied werd te klikken, letterlijk, een groene vlag. Dus dat puzzelstukje in de linkerbovenhoek er betekent dat wanneer de menselijke klikt op de groene vlag, ging te doen de volgende dingen. Nu, hebben ze de cookie wat verder te doen? Ik weet niet echt hoe ik dit nog te interpreteren, maar de cookie-blijkbaar de groef op nul gezet, dan is het wachten drie seconden veranderde de groep een, dan wachtte een tweede, dan veranderde zij haar groove terug naar een. En dan ziet het eigenlijk als een beetje een bug, mag niet moet de groef te veranderen keer op keer, tenzij het is elders veranderd, maar deze serie van stappen is wat er dicteert het gedrag van deze specifieke cookie. Dus laten we in feite terug te scrollen en niet kijken naar iets helemaal zo complex nog niet. Laat me ga je gang en ga naar Bestand, Nieuw, en krijg een schone lei. Dus nu heb ik inderdaad een leeg script gebied, een leeg toneel, met onze standaard sprite Scratch, en in de linkerbovenhoek op mijn scherm heb ik het palet van al hun beschikbaar puzzelstukjes. En we zullen niet gaan door bijna dat veel van deze dingen vandaag, want, nogmaals, de meeste spreken voor zich, maar we zullen probeer ze te categoriseren en te wijzen op de overeenkomsten met deze toekomstige talen die we zullen duiken. En in de linkerbovenhoek hier is het eerste bij Green Flag erop wordt geklikt, dus laat me dit te slepen hier, uit te zoomen een beetje. En als ik klik op de groene vlag, gebeurt er niets echt, omdat Ik heb geen logica verbonden, een verklaring om zo te zeggen aan dat groene vlag, dus laat me gaan naar de categorieën dan hier. Ik ben momenteel in de Control categorie. Ik plaats daarvan gaat naar beneden te gaan naar de Looks categorie, en er is een hele hoop dingen hier die zeggen zeggen, Denk, veranderen van kleur, Switch Kostuum. Dus u kunt doen gekke dingen met kostuums en geluiden en dergelijke. Laat me ga je gang en zeg Zeg, en nu merk als ik sleep en zet deze puzzel stuk, het gaat te willen vergrendelen in de overeenkomstige vorm. Dus toen ik ga je gang en liet mijn muis, ze vergrendelen samen, en nu als ik hier gaan over en klik op de groene vlag, de kat zegt wel in feite gedag, want dat is wat er in zit van deze witte doos. We zullen snel zien dat deze witte doos is wat heet een argument, of een parameter. Het is een manier om het gedrag van in dit geval een puzzel stuk, maar als ik wil zeggen precies wat ik zei voor, zeggen hello, world, kan ik nu terug te gaan hier, klik spelen, en "hello, world" is wat er wordt gezegd. Dus we zijn letterlijk programmeren nu. Het is niet zo dwingend van een programma, maar in ieder geval is het een beetje aantrekkelijker dan iets dat, kijkt naar het eerste gezicht, zoals dit. En we kunnen heel snel des te meer expressieve want in Scratch, net als in andere talen, is er alle soorten verklaringen, niet alleen Zeg of afdrukken iets, maar je kunt dingen doen als wachten, zoals we zojuist zagen met de cookie, een aantal seconden. U kunt geluiden in de omgeving van Scratch net zoals je kunt in een normale computer geprogrammeerd afspelen geluid. U kunt nagaan wat zijn Booleaanse uitdrukkingen genoemd. Dus nu, laten we beginnen om toe te voegen aan onze toolkit sommige terminologie die daadwerkelijk betrekking heeft op het voorbeeld dat Joseph en ik deed hier met de sokken. Dus verklaringen zijn slechts uitspraken van de feiten. Doe dit. Een richtlijn voor de sprite, of mij de mens, om iets te doen. Een Booleaanse expressie is iets dat een waarde heeft, een zogenaamde waarheidswaarde, dat ofwel een nul of een onjuiste of waar, uit of aan, Nee of Ja. Maakt eigenlijk niet uit hoe je van dit, maar het is een binaire toestand. Zoals Nate besproken in de video van woensdag, twee verschillende dingen. Dus in Scratch, Booleaanse uitdrukkingen toevallig te kijken Dergelijke blauwe voorwerpen hier en in dit geval de vraag markering houdt in dat je een vraag stelt. Is de kat, of de sprite, het aanraken van de muisaanwijzer? Dus dit is slechts een voorbeeld van een Scratch blok dat gaat zodat we ja of nee te controleren, is de muis aanraken van de sprite op het scherm? En dit kan handig zijn als u daadwerkelijk wilt om dingen te doen met je muis. Naast Boolean uitdrukkingen we dingen zoals is de muis, zodat u kunt ontdekken dat soort vraag ook. We kunnen doen wiskunde als je echt wilt, en er is eigenlijk meer dwingende toepassingen voor deze dan alleen zuiver van rekenkunde, zoals we zullen zien. Pseudo willekeur en het maken van uw programma lijken te denken of zich anders gedragen op basis van een aantal schijnbaar willekeurige waarden, en dan hebben we dingen als Booleaanse uitdrukkingen als EN. Dus als je echt wilt om twee waarden te controleren, we zullen zien in Kras dat we eigenlijk kunnen testen of dit waar en dat is waar. Bijvoorbeeld, in het geval van mijn sokken, kon ik heb bij de einde stelde de vraag of linker sok is ingeschakeld en rechter sok is op, af te sluiten. Je bent helemaal klaar voor de dag, dus dat zou wel een gelegenheid voor. Dus laten we verder gaan en proberen om een ​​aantal van deze aan elkaar puzzelen en ga in een paar voorbeelden meer aantrekkelijker dan deze. Dus laat me hier ga je gang en open te stellen enkele van de voorbeelden dat zal altijd op de website van de cursus zo goed, en open hello2. Dus in hello2 hier, hebben we een programma dat doet wat dingen, maar het doet het niet zo goed als we kunnen. Dus hier het zegt "hello, world" voor een seconde en dan wacht voor een tweede. En dan doet het weer, en dan doet het weer. Dus als ik klik op de groene vlag, Scratch zegt: "Hallo, wereld. Hallo, wereld. Hallo, wereld. "En dit is natuurlijk kandidaat nu voor verbetering. Wat is de marginale verbetering, hopelijk kunnen we Nu maken als Scratch ondersteunt het concept? Een soort lus. Een soort van herhaling, nu, zou mooi zijn, dus laat me eigenlijk proberen. Laat me daadwerkelijk te gaan en te bewegen dit. Dus aankondiging kan losmaken blokken net zo gemakkelijk als u kunt toevoegen aan bevestig ze. Laat me gaan onder controle, hier naar beneden scrollen, en inderdaad, er is hier deze puzzel stuk, Repeat en altijd en Voor altijd Als. Dus er is een aantal manieren uit te drukken lusconstructies in Scratch. Degene die ik waarschijnlijk willen hier niet blijvend, omdat ik alleen maar wil dat dit drie keer gebeuren, maar waarschijnlijk herhalen. Dus laat me slepen Herhaal hier, slepen en neerzetten, en nu in plaats van te zeggen "hello, world" drie afzonderlijke keer, Laat me dit stukje van de puzzel te slepen hier. En hoewel het niet lijkt te passen, het programma is slim genoeg om te beseffen dat het zal groeien in te vullen, dus het is de vormen die materie en niet de absolute omvang. Laat ik de herhaling te veranderen tot drie, en nu laat me gaan vooruit en sleep Wacht een seconde in daar ook. Het zal breken in als goed, en dus nu ga ik om te slepen deze jongens hier en gooi ze weg omdat ik niet meer nodig hebt. Laat me uit te zoomen en klik nu de groene vlag, en we hebben hetzelfde programma, maar, zoals ik al voorspeld voor, betere ontworpen, want je kunt je voorstellen hoe slecht dit programma zou krijgen, zeker esthetisch, als je moest beginnen met kopiëren en plakken, kopiëren en plakken, of slepen en neerzetten van dezelfde darn dingen opnieuw en opnieuw. Nu, gewoon zeggen dingen op het scherm, afdrukken op de scherm, echt allemaal niet zo spannend, dus laten we het openen van een derde variantie hier. En nu, zoals u zult zien, zal dit snel vervelend - [MEOW] DAVID MALAN: - maar het is ook wel leuk. [MEOW] DAVID MALAN: Oke, dus beter, en we kunnen zeker gebruik dat dezelfde overgang van chunking deze op in een looping structuur, maar laten we toch het interessanter maken. Laat me gaan en open te stellen kwart variantie hier, waar ik een stapje verder. Dus volgens deze, domme al is dit op het eerste blik, is wat dit programma gaat doen? Het gaat miauwen keer. Waarom? Nou ja, een is, voor zover ik weet, altijd minder dan twee. Er is geen notie van willekeur hier. Ik heb letterlijk hard-coded een en twee, maar dit is een Zo nu daadwerkelijk gebruik van een Booleaanse expressie. Graag net als Joseph in zijn pseudocode, de inspringing IF vind je bijpassende sokken DAN het volgende te doen, hier hebben we een uitdrukking indien iemand minder dan twee DAN - en in feite hebben we zelfs een beetje inspringen, waar de paarse wordt iets ingesprongen naar rechts - Dan zul je het geluid miauwen af ​​te spelen. Nu in dit geval, dat altijd kleiner is dan twee, dus is een soort van een verspilling van een aandoening. Maar we zullen in staat zijn, zoals we zullen zien, om andere dingen te sluiten op deze plaatsaanduidingen waar een en twee nu zijn. Dus laten we nu verder te gaan naar bijvoorbeeld vijf van deze verschillende hallo en kijken naar wat dit programma gaat doen. Dus nu, in een Engels zin, hoe werkt dit programma gedragen? PUBLIEK: gemiauw helft van de tijd. DAVID MALAN: Meow's de helft van de tijd, dus dit is een manier van Er heerst een heel eenvoudig idee. Ook al hebben we nu eenmaal met behulp van enkele ongelijkheden hier in sommige nummers, dit is eigenlijk gewoon een programmatische manier, een precieze manier, om te zeggen, indien de munt komt hoofden, ga vooruit en miauwen. Of omgekeerd, als de munt komt staarten, niet meow. En in dit geval, we hoe uitdrukken dat? We halen een willekeurig nummer van 1 tot 10, en als dat aantal is minder dan 6, ga je gang en miauwen. En hoe is dit binnen gekomen? Weer goed, let op alleen de slepen en neerzetten en dingen vastklikt. Dus nu laten we kijken of deze willekeurigheid werkt. Laat me ga je gang en klik op de groene vlag. [MEOW] DAVID MALAN: Oke. [MEOW] DAVID MALAN: Oke. Oke, goed, dus we hebben hoofden, koppen, staarten effectief. Tails. [MEOW] DAVID MALAN: Heads. [MEOW] DAVID MALAN: Excellent. Het is altijd lastig wanneer slechts statistisch je een slechte lopen, en het is allemaal hoofden, en het programma in feite niet werken zoals je zou hopen. Maar deze keer, het werkte, en we lijken te hebben, als we dat deze een oneindig aantal keren, 50% kans. Nu weer, niet zo interessant, alleen het maken van katten miauw, dus laten we eens kijken of we kunnen niet verder dit een beetje verder hier versie zes. Dus nu hebben we echt vervelend versie - [Gemiauw Elke paar seconden] DAVID MALAN: - en dit is wat er bekend is, het algemeen, als een oneindige lus. Dus oneindige lus in dit geval voelt zich slecht. Het is zeker gaan om het geluid slecht, en toch oneindig lussen zijn niet altijd slecht. Kunt u denken aan context in computerprogramma's waar je zou eigenlijk willen een oneindige lus? Ja? PUBLIEK: Als u een voorwaarde wilt controleren. DAVID MALAN: Oke, als je wilt blijven controleren een voorwaarde? Zoals wat? PUBLIEK: [onverstaanbaar] DAVID MALAN: Oke, goed, dus als je een programma had, wat soort domotica ding, waar u constant monitor is iets het geval is. Zijn de lichten aan? Zijn de lampjes op, want misschien heb je een timer, en je wilt dat ze gaan uit, zou je nodig hebt om iets te doen weer. En in feite, het spreken van timers, die iemand van u klokken op uw computer of digitale horloges, dat is een oneindige lus. Het blijft het actualiseren van de tijd, want het is constant controle en controle en de controle heeft de tijd veranderd en zo ja, oh, mijn god. De klok is eindelijk veranderd. Het moet weer te geven die waarde voor je. Dus terwijl de meeste van de tijd oneindige loops zijn een vergissing, of op zijn minst een slecht ontwerp besluit, soms doen ze hebben hun waarde. Nou, laten we hier verder gaan naar hello7. Dus nu zal het programma een beetje meer interactief. Laat me in te zoomen hier, weer en dit is wat is leuk over Scratch. En we zullen het gebruiken om duidelijk, Scratch, alleen vandaag en in zijn volgende week het probleem in te stellen. Maar op maandag, we in C. hier duiken In dit programma, dat zo is, voor altijd, het volgende. ALS het aanraken van de muisaanwijzer - nu, wie is de context hier? Nou ja, en merken dat die is geselecteerd hier beneden aan de onderkant Rechts is de kat, sprite een, dus deze scripts, deze programma op hem specifiek. Dus als die kat is de muisaanwijzer aan te raken, dan zal het om dit te spelen naar beneden en wacht twee seconden en herhaal tot vervelens toe. Dus laten we verder gaan en op Play. Er gebeurt niets, maar als ik wil aaien kat nu, ik kan het gewoon. [MEOW] DAVID MALAN: Adorable. [MEOW] DAVID MALAN: Oke, minder vervelend, maar krijgt ook saai, dus laten we verder gaan en kijken of we niet kunnen injecteren iets meer logica. Dat was bijvoorbeeld zeven. Hier in bijvoorbeeld acht, we gaan introduceren een voorwaarde else. Dus net als een letterlijke splitsing in de weg, waar je kunt gaan links of u kunt rechtdoor te gaan, een aandoening in een programmeertaal taal als Scratch, of zoals we zullen zien C, kan u toestaan ​​om gaan in een of andere richting via een IF ELSE te bouwen. Dus letterlijk, INDIEN raken muisaanwijzer, dit zullen sommige geluid af te spelen, anders gaat deze andere spelen geluid, miauw. Nu, als je kan afleiden uit de naam van deze geluiden, kunt u waarschijnlijk wel raden wat dit programma is bedoeld om te roepen het idee. Deze kat is gelukkig miauwen. [MEOW] DAVID MALAN: Gelukkig, maar niet heel graag om aangeraakt te worden. [Brult] DAVID MALAN: Dus nu hebben we een kat die schreeuwen tegen je. Oke, nou, nog een laatste voorbeeld met katten hier, en laten we open versie negen van deze hier. Dus nu hebben we de volgende meest irritante geluid dat ik kon vinden, dus hebben we een walrus of zeeleeuw hier die gaat doet u het volgende. [SEAL SCHORS] DAVID MALAN: Oke, dus dit zal doorgaan totdat je erachter te komen hoe dit programma werkt. Dus deze keer, dit dier heeft twee scripts, en wat is interessante hier is dat deze scripts gaan voeren in parallel. Dus omdat ze beide beginnen met een groene vlag geklikt, het is alsof je als dit, en beide programma's beginnen het runnen van het een keer zelfs als ze voor eeuwig zijn looping. Dus in de top script, ik heb een aantal logica. Welke functies heeft dat er te bieden op? [SEAL SCHORS] PUBLIEK: [onverstaanbaar] DAVID MALAN: Als het is wat? [SEAL SCHORS] PUBLIEK: Als gedempt op nul, het gaat om het spelen van de klinken. [SEAL SCHORS] DAVID MALAN: Oke, goed. Dus als gedempt, wat het ook is, deze oranje ding nul is, Dan spelen de zeeleeuw geluid en denken: "O, hi, "gedurende twee seconden. Nu, ik weet niet wat gedempt is, maar nul roept de idee van valse of uit te schakelen. Dus als gedempt vals is, dus als niet gedempt, blijven spelen het geluid. Oke, nou, we hoe uit te schakelen dit ding? Nou, laten we eens kijken naar de tweede script daar beneden. Het tweede script zegt ingesteld gedempt op nul. Let het is ook oranje, dus wat Scratch doet is het kleuren blokken in dezelfde kleur als het soort van logisch verband. Dus net zoals gedempt tot boven oranje was, zo is gedempt hier beneden genoemde oranje blok. Maar dit is een variabele toekenningen, dus net als in algebra, u x en y en z in programmeren u variabelen, maar ze zijn over het algemeen - laten we pauzeren voor een moment en figuur hoe deze blaffen te stoppen. Hoe kan ik dit doen? [SEAL SCHORS] DAVID MALAN: Oke. Het stopte. Oke. Dus net zoals in algebra u variabelen x, y en z, maar in programmeren, met variabelen zoals x, y, en z is over het algemeen afgekeurd omdat ze helemaal niet expressief. Ze hebben geen enkele betekenis semantische, zodat in de meeste programmeertalen, kunnen variabelen hebben volledige volwaardige namen of woorden of zinnen, zoals gedempt, om te zeggen wat ze doen. Dus dit tweede script was ook altijd luisteren, en hij zei als de sleutel, de klaviertoets Space, is ingedrukt, vraagteken. Dus er is een aandoening met een Booleaanse expressie die is gaat om een ​​vraag te beantwoorden, hetzij naar waarheid of onwaar zijn, dan heb ik de binnenkant van het IF de ruimte toets wordt ingedrukt en IF gedempt is nul, stelt gedempt tot een, ELSE ingesteld gedempt op nul. Dus die andere vork in de weg, en merk op hoe ik heb genest de twee IF voorwaarden, is een manier om te controleren is de Spatiebalk ingedrukt, want als dat zo is, ik of wil dit gaan zus of zo. En hoe kan ik inverteren de waarde van gedempt? Ik moet om te controleren is het nul? Als dat zo is, maken het tot een, anders maakt het nul tot dus schakelen de twee staten. Oke, dus we hebben toen een aantal van deze fundamentele constructen. We hebben Booleaanse uitdrukkingen, en te realiseren, zijn dit niet zo onbekend. In feite, hier is een snelle screenshot van de Harvard cursus CS50 winkelen tool, en een website die er zijn dat selectievakjes heeft en drop downs hebben echt, al die tijd, zijn met behulp van Booleaanse uitdrukkingen. In dit geval hier, als u klikt op het selectievakje naast uiteraard groter dan of gelijk aan 4,5, of dezelfde naast faculteit, je het opgeven van een Booleaanse expressie. Laat me cursussen waarvoor die expressie waar is. Of naar rechts, niet in strijd met cursussen die ik ben nemen, als dat is aangevinkt, dan ja, u wilt controleren die voorwaarde, wil je nog meer om het te negeren. Dus Booleaanse uitdrukkingen zijn een soort van rondom, maar toen we zetten ze in omstandigheden, of als de omstandigheden, IF Elses, of we kunnen zelfs simuleren diepere niveaus, IF ELSE IF ELSE - dus dat is een soort van een ternair staat. U kunt gaan op deze manier of deze manier of op deze manier. We kunnen blijven nesten dingen om te gaan in verschillende richtingen. Dus Scratch heeft deze lussen, zoals altijd. Het heeft deze functies, zoals Repeat 10, sommige eindig aantal malen. We hebben de mogelijkheid nu om variabelen in te stellen, zodat in dit geval Ik heb verklaard, bijvoorbeeld een variabele met de naam sokken. Ik heb geïnitialiseerd op 0, en dat is nog een andere richting konden we hebben hier met Jozef, waarbij ik misschien gewoon bijhouden hoeveel sokken die ik heb op en beëindigen het programma wanneer die variabele de waarde is 2. Dat zou een andere manier van soort generaliseren zijn dat probleem en het doen van iets opnieuw en opnieuw. Nou, laten we verder gaan en nu introduceren een paar nieuwe dingen. Dus degenen onder u met voorafgaande programmeren ervaring zal dat veel talen arrays of vectoren of lijsten, en inderdaad, Scratch heeft iets als dit, ook. Dus laten we kijken of we dingen niet hier te nemen naar het volgende niveau. Als ik de mogelijkheid, nu, met deze puzzelstukjes aan iets toevoegen, zoals een woord of nummer, aan een variabele, kan ik beginnen om dingen te verzamelen. En dit is eigenlijk best apropos voor dingen zoals spelletjes, role-playing games waar je bent soort van rond te lopen wat fantasie wereld verzamelen van dingen, dingen oprapen, verdienen punten of dergelijke. Je zou willen houden van een soort van inventaris, en inderdaad, dat is wat een van onze oud-studenten hier deed met iets genaamd Fruitcraft RPG. Dus laat me gaan en open te stellen dit ding hier, en in Fruitcraft, hebben we deze wereld omhoog naar boven. Dus laat me ga je gang en klik op de groene vlag. Kennisgeving aan de bovenkant links is een soort van inventaris. Dat is geïmplementeerd in Scratch als wat we een array te bellen of een lijst, en nu hebben we deze kleine animatie. Dus net zoals we eerder begonnen met deze cookie liefdesverhaal, en dan gaan we vooruit naar katten en zeeleeuwen, nu kunnen we dingen die nog interactiever. En deze kleine blauwe jongen, kan ik beginnen te bewegen zijn weinig thuis. Dus het lijkt erop dat hij heeft een uitgang hier beneden, dus ik ben met behulp van de pijltjes toetsen, omhoog, omlaag, links, rechts. En nu ben ik buiten, dus laat is wat ik hier heb. Ziet eruit als een sinaasappel, en inderdaad, zodra ik het aanraken oranje, het wordt plofte in mijn inventaris. Als ik hier naar de kersen, nu heb ik iets anders in mijn inventaris. En dit is allemaal leuk en schattig, maar na te denken over hoe, nu, op dit wordt uitgevoerd. Nou, we hebben dit idee van een lijst, en dat is blijkbaar een puzzelstukje dat je gewoon zeggen wat je wilt aan toe te voegen, voeg oranje, voeg kersen. Nu, wat is dit kleine blauwe jongen aan het doen? Nou, hij is een sprite. En vermoedelijk, de oranje en de kersen - zij zelf afzonderlijke sprites. En met behulp van omstandigheden in Booleaanse uitdrukkingen, de student was waarschijnlijk in staat om uit te drukken IF blauwe man is het aanraken van kersen en voeg dan het woord kersen aan zijn inventaris, en dan ook verbergen de kers sprite. Dus onder de kap, is er waarschijnlijk nog een kers sprite daar. We hebben net verteld dat het te worden effectief onzichtbaar. Nu, als ik blijf lopen hier, kunnen we dit ook doen proximale ding, waar ik kan gaan en lees het bordje. Dus als blauwe man aanraken teken, kunnen we dit zeggen blok net als de kat sprak tot ons in woorden, hallo, eerder, "Got wat fruit? Breng het naar de vrucht plaats. "Oke, dus nu, blijkbaar, Ik heb mijn richtingen. Ik kan hier gaan over naar de vruchten plaats, in lijn mezelf met de deur. Nu, ik ben hier. Ik kan oplopen tot de man aan de balie. Hij ontdekt dat ik dicht bij hem, dus het hoeft niet te zijn vrij identiek aan te raken, en ik heb het spel gewonnen. Dus daar hebben we Fruitcraft RPG. Dus we kunnen dingen doen nog meer geavanceerde dan dit. We kunt geluid toevoegen. We kunnen voegen pseudo willekeur. We kunnen voegen complexiteit. Laat me hier ga je gang, en in plaats van dat zelf, laat ik je een van de meer geavanceerde inzendingen kregen we vorig jaar vanuit een bepaald iemand met de naam Blake. Kunnen we nog een vrijwilliger die is prettig om op camera en is voor het spelen van een spel? Hoe zit het daar? Kom op. Oke, dus het spel dat u zojuist hebt zonder het te weten vrijwillig te spelen - [Applaus] DAVID MALAN: - is iets uit het verleden genoemd "Frogger". Wat is je naam? RENDA: Renda. DAVID MALAN: Redna? RENDA: Het is net als Brenda met een b. DAVID MALAN: Oke, Renda. David. Leuk u te ontmoeten. Dus hier in "Frogger", en als we verhogen het volume net een beetje, je bent dit kleine groene kikker op de bodem. U kunt gebruik maken van links, rechts, omhoog en omlaag, en je doel is om steek de straat over, de rivier oversteken, en raak de waterlelies boven. Aw. Nog een t - redo, oke? Laten we hit stop. Niemand zag dat. [Applaus] [Applaus] DAVID MALAN: Ja. Heel goed gedaan. Uitstekend, dank je wel. Zodat er Frogger. Nu dat je weet wat je hebt gekregen jezelf in, nog een vrijwilliger voor een andere spel door een andere student. U wilt op de proppen komen aan de hand? Wat is je naam? RICHARD: Richard. DAVID MALAN: Richard. Oke, Richard, kom naar boven. [Applaus] DAVID MALAN: Je hebt iets dat zal klinken vertrouwde snel, dus hier zijn uw instructies. Dus in een ogenblik, zijn sommige puzzelstukjes gaat omhoog van het scherm dat ofwel kijk naar links of naar rechts omhoog of omlaag. Je gaat te hebben om de pijl toetsen te raken op een zodanige wijze dat deze overeenkomt met die puzzelstukjes rij met de tijdelijke aanduidingen boven. Dus als je een pijl naar links, en het lijnen met de linker pijl, raak de pijl naar links. Je mag beginnen. [MUZIEK - "sterker" Kayne West] DAVID MALAN: Oke, grote ronde van applaus voor Richard. [Applaus] DAVID MALAN: Zeer goed gedaan. Dank u. [Applaus] DAVID MALAN: So fun en, schijnbaar, een soort van intimiderend als het zou kunnen zijn om iets te implementeren als schijnbaar geavanceerd als deze, zich realiseren dat de student niet uiteengezet en gewoon schrijven dit in een keer. In plaats daarvan kunt u breken een probleem als schijnbaar complexe omdat in veel kleinere stukken, en dit is ook gaat om een ​​thema. Het ergste wat je kunt doen in een programma te schrijven in vrijwel elke taal is om te gaan zitten, echt opgewonden te krijgen, het schrijven hele verdomde ding, en dan maar hopen dat het werkt door de tijd dat je klaar bent met schrijven. Veeleer het programmeringsproces dient algemeen heel bewust, heel iteratief, waarbij je gewoon vastgestelde zeer kleine stappen voor jezelf, hapklare stukken wil je af te bijten, en zodat u deze geestelijke gezondheid hebben controles, kleine mijlpalen kunt u kennismaken. En dan bouw je op de top van die om meer te creëren verfijnde dingen nog steeds. Dus bijvoorbeeld, konden we hoe te gaan over het implementeren van een spel als dit? Nou, eerlijk gezegd, zou ik zeker beginnen met gewoon ondersteuning een toets tegelijk. Laten we gewoon implementeren steun voor de pijl naar links. Dus de student moest een of andere manier te maken in Photoshop, of in Kras zelf met behulp van de kleine grafische editor, een pijl van het toetsenbord dat lijkt op de een op linksboven daar, net de grijze tijdelijke aanduiding. Dan is de student moest erachter te komen wat x, y-coördinaat op zet het, waar deze te plaatsen in het venster. 0, 0 is hier op, dus je moet om erachter te komen van het aantal pixels of punten in die pijl verschoven ten opzichte van de bovenkant van het scherm. En dan een keer dat is op zijn plaats, je programma doet eigenlijk niet nog iets te doen, dus dan heb je een tweede sprite nodig, want bijvoorbeeld een groene pijl dat is ook naar links, en u Vervolgens moet u beginnen met het schrijven een aantal scripts voor. En je merkt, misschien, dat deze dingen begon te komen op verschillende snelheden, en de kleuren waren in verschillende locaties, en dat komt omdat de student gebruikt een beetje pseudo willekeur. En door pseudo willekeur, ik bedoel kies een nummer tussen iets en iets want je kunt beginnen kaart dingen, zoals als het aantal tussen een en vijf, goed, laten we het ding groen. Als het tussen de 6 en 10, laten we het puzzelstukje red plaats. Zolang je een manier van het genereren een soort van willekeur, kunt u vervolgens beslissingen nemen op basis van die willekeur. En ik blijf zeggen pseudo random want er is een beetje vies geheim. Computers kunnen niet komen met willekeurige getallen. Ze kunnen alleen doen wat ze verteld, omdat ze zijn door de mens veroorzaakte apparaten. Ze kunnen niet zomaar denk dat een nummer zoals wij mensen het gevoel dat we dat kunnen. Een computer heeft om iets te doen wiskundige op te roepen de illusie van wiskundige getal, soms met behulp van de huidige dag van de tijd als input voor het uitzoeken wat nummer om terug te keren, maar daarover een andere keer. Voor nu, weet alleen dat we kunnen pseudo willekeur te genereren. Dus zodra ik de mogelijkheid voor de pijl naar links om te beginnen verschijnen op verschillende tijdstippen en met verschillende snelheid, dan Ik kan terug en voeg een aantal van deze IF voorwaarden. IF deze sprite raakt de ander, en de pijl naar links toets is ingedrukt - dus drie voorwaarden in dat geval. Ik kan dat en blokkeren wellicht, in dat geval - Dan wil ik verder gaan en de score te verhogen. En aan de bovenkant hebben we een score, we hebben Awesome, Cool, Goed, en Boo. Dus er is blijkbaar vijf variabelen deze student gebruikt voor het bijhouden van deze verschillende statistieken. Dus in het kort, het eindresultaat is verbluffend. Het is leuk, het is leuk om te spelen, het is boeiende, maar dit is niet waar de student begon. Hij begon op een veel kleiner aantal stappen. Dus wat zijn enkele andere bouwstenen die we kunnen weven in deze programma's? Nou, er is een ander concept in de meeste talen, Krassen waaronder, bekend als threads. Dus een computer kan eigenlijk niet echt meerdere dingen op een tijd, althans meestal niet. Eerder een computer over het algemeen slechts een CPU en zelfs hoewel computers zijn super snel en kunnen zij derhalve, creëren de illusie van het doen van meerdere dingen tegelijk - het controleren van uw e-mail, het krijgen van een instant boodschap, afdrukken van een document - echt, is een computer gewoon springen: van afdrukken tot IMing te e-mailen, terug en terug en heen en weer zo snel dat we langzame witted mensen gewoon niet beseffen dat het eigenlijk draaien deze programma's een beetje op een moment. Nu, dit een beetje een witte liggen deze dagen, want, vandaag de dag, veel onze computers zijn zogenaamde multi-core, zodat u hebben een CPU, maar meerdere cores, wat voor soort is als het hebben van meerdere CPU's. En dus soms kunnen computers echt doen meerdere dingen tegelijk, maar in het algemeen in een programma,'s vertrouwen op deze dingen genoemd draden. Dus een draad is als een soort miniatuur-programma dat kan bestaan ​​naast een ander miniatuur programma en kan draaien parallel, althans kan lopen onder de illusie dat ze tegelijk draaien. Dus Scratch ondersteunt deze dingen genoemd draden. U kunt meerdere scripts uitvoeren in een keer, net zoals wij deed met de zeeleeuw, en dit stelt ons in staat om daadwerkelijk dan hebben onderlinge beïnvloeding van deze sprites. Laat me hier ga je gang en trek je, laten we zeggen, draden, en spelen dit als volgt. We hebben twee sprites, die elk we zullen zien heeft maar een script. En je merkt er lijkt enige intelligentie in de kat in dit ene, omdat hij komt dichterbij - [Brult] DAVID MALAN: - en dichter bij de kleine vogel. Dus hoe is de vogel in bedrijf? Nou, laten we eerst een kijkje nemen op de vogel. De vogel script zei toen de groene vlag wordt geklikt, gaat u naar x is gelijk aan negatieve 115 en y is gelijk aan 150. Dus ik bedacht een willekeurige locatie waar ik wilde de vogel om te beginnen, en ik plofte hem daar standaard. Dan blijvend IF niet raken kat, dus dit is een andere soort van looping construct, maar hetzelfde idee, doe dit opnieuw en weer. Zolang je niet de kat aanraken, bewegen drie stappen, en als je op de rand, bounce, waar het is een soort van reflectie in de biljartzaal zin. Dus dat is hoe de vogel bewegen soort schijnbaar willekeurig, maar het is gewoon omdat het stuiteren de wanden in dit geval. Nu de kat, ondertussen, is een soort van vals spelen. De kat, wanneer de groene vlag wordt geklikt, ja, begint in een locatie, een willekeurige locatie - ten minste gedeeltelijk volgens de pick willekeurige groene blok er - en dan blijvend IF aanraken van de vogel, spelen de leeuw geluid, en dan stoppen script. Dus toen ik zei beëindigen of af te sluiten voordat, er is een puzzel stuk in Scratch dat alleen zal doden het programma op dat wijzen, omdat het is een soort van logisch gedaan. Maar voor de rest, hier, op wat er gaat gebeuren. Wijzen in de richting van de vogel en zet een stap. Dus dit punt in de richting van vogel is een soort van een voordeel van de kat heeft dat het homing in op de bewegende vogel, en we kunnen Nu maken van dit programma des te interessanter. In plaats van het verplaatsen van een stap op een moment per CPU cyclus, per staking tol van de bel, om zo te zeggen, laat me ga je gang en verplaatsen, laten we zeggen, vijf stappen in een tijd als de kat. Klik op Uitvoeren, en nu is hij echt vindt hem snel. Als we dit verder te verdubbelen tot 10 stappen, het soort gaat goed voor hem. Nu kunnen we de vogel, misschien een beetje een voordeel. Laten we naar de vogel en zeggen in plaats van het verplaatsen van drie stappen, vooruit hem 30 treden. Maar hij had nog steeds gevangen in het einde. Dus hier hebben we twee draden. Het is opgesloten in Scratch met twee scripts en twee sprites, maar het idee in andere talen is dat je kunt wezen schrijven,, te veel programma's zoals dit en hebben ze uit te voeren echt, of denkbeeldig, in parallel. Nu is er ook dit concept in de programmering bekend als gebeurtenissen, en dit is iets wat we niet zien in C, de taal bekend als C. We zullen het zien tegen het einde semester in web programmeren, als we introduceren JavaScript en de begrip gebouw webpagina's die zijn dynamisch en interactief met de gebruikers. Dus in dit geval hebben we een zeer eenvoudig voorbeeld van twee sprites, jongen en meisje, die elk hun respectieve draden, maar een of andere manier deze twee zijn met elkaar communiceren door middel van genoemd iets evenementen. Dus laat me hier verder te gaan en in te zoomen op script van de jongen, die ziet er zo uit. Bij groene vlag geklikt, voor altijd het volgende doen. Als de toets Space, of de spatiebalk, wordt ingedrukt, zeg Marco gedurende twee seconden, dat is puur esthetische op de scherm, een kleine toespraak bubble, maar dan uit te zenden. Dus uitzending is een ander Scratch stuk dat is vertegenwoordiger van een klasse van functionaliteit programmeren die het mogelijk maakt verschillende programma's, verschillende draden, naar inter-communiceren, om een ​​of andere manier te sturen berichten elkander. Het passeren van een stuk papier in de klas is een soort van de low tech equivalent. Dus uitgezonden gebeurtenis. Ik kunt dit bericht versturen, en het woord evenement is volkomen willekeurig. Scratch heeft soms zijn deze drop-downs, dus ik kwam met een willekeurige woord als gebeurtenis, omdat nu, wat de jongen doet wanneer ik op de sleutel is hij uitgezonden dit evenement. En als ik kijk nu naar script van het meisje, haar script is super eenvoudig, omdat alles wat ze moet doen is niet te handelen wanneer de groene vlag wordt geklikt. Ze is ontworpen om actie wanneer ze krijgt citaat, unquote, "Gebeurtenis", en op dat punt, ze luisteren dan ook voor de zogenaamde event weer. Zodra ze die gebeurtenis ontvangt, ze gaat te schreeuwen Polo twee seconden ingedrukt. En dus kun je misschien afleiden uit dit precies wat de volgende resultaat gaat worden. Laat me klikt u op de groene vlag. Er gebeurt niets want ik moet wat te doen? PUBLIEK: Space Bar. DAVID MALAN: Space Bar. Boy zegt Marco, meisje zegt Polo. Maar dat is niet hard gecodeerd per se. Dat is onderlinge communicatie tussen de scripts, dus nu hebben we hebben de mogelijkheid om nog meer complexe programma's waar te maken deze twee zijn een of andere manier onderling communiceren. Dus in welke richting kunnen we dit? Nou, in probleem set 0, echt, het doel is om veel plezier met Scratch. Voor de hacker editie, zul je in plaats daarvan hebben plezier met een meer verfijnde versie van Scratch genoemd BYOB, Build Uw eigen Blocks, maar het idee is hetzelfde. Je zult in staat zijn - Ja, dat was weloverwogen. Het kwam van Berkeley. BYOB is de hacker editie versie van dit, maar beide demografie, standaard editie en hacker editie gelijk, de doel bij de hand voor de komende week is eigenlijk gewoon om te duiken in diep, je handen vuil met de programmering, en maak iets interessants, iets maken interactief maken iets artistieke, maak er iets leuk om daadwerkelijk aan te tonen, zodat tegen het einde week, zul je een project, niet alleen voor uw eerste CS50 PSET, maar heb je een iets dat je kunt pronken Annenberg om vrienden of zelfs familie door deze te uploaden naar de website van het MIT. En dus zoals ik al zei op woensdag, verwachten we dat 90% van de klas, het algemeen, de standaard edities te doen. Realiseer je dat er ook dit uitlaatklep voor degenen onder u die anders zou merken dat je een beetje vervelen met de basis en echt willen duiken in en ambachtelijke een visie die je al hebben met eerdere achtergrond in deze vriendelijker milieu. Dus laat me omhoog te trekken een ander voorbeeld dat een van onze oud- studenten hier deed en vertellen een beetje iets in een song. Die op dezelfde wijze, als dit speelt, na te denken over hoe je over uitvoering van dit programma met behulp van precies dezelfde bouwstenen, een beetje pseudo willekeur, en een beetje bekend liedje. Als we konden het volume te verhogen een beetje? [MUZIEK - "It's Raining Men 'The Weather Girls] DAVID MALAN: Dat is het voor CS50. We zullen zien je maandag. [Applaus]