[Powered by Google Translate] [ROCK MUSIK]
[MUSIK - "lyckliga tillsammans" sköldpaddorna]
DAVID MALAN: Idag börjar vi vår utforskning av
grunderna i datavetenskap och vår introduktion,
nu till konsten att programmering, där det är
bara ett exempel.
Men i samma anda av problemlösning, vet att
CS50 traditionella pussel dag är i morgon.
Om du inte har ännu RSVPed för denna händelse, kan du gå till
cs50.net/rsvp.
Du kan ta grupper om två eller tre eller fyra.
Du kommer att utmanas med problem som den du såg
uppe i början.
Alla nya problem i år om du drack förra året, och du
kommer att ha en chans att sedan vinna några fantastiska priser.
Bland dem, en Wii och några presentkort och liknande,
samtidigt som umgås med CS50 studenter och klasskamrater
och pizza och Facebook.
Så mer om detta i morgon om du vill.
>> Detta är då CS50, för dig med oss ​​för
första gången.
Och vet att denna kurs är särskilt fast besluten att få
dig genom kursen till de slutliga, då du
kommer att ha inte bara en förståelse av dessa
Grundläggande datalogi, men du kommer att ha
detta mycket praktiska färdigheter som du sedan kan ta tillbaka till
egen avdelning, oavsett om det är ingenjörsvetenskap,
tillämpad matematik, naturvetenskap, naturliga
vetenskap, eller liknande.
Ja, vad är så spännande med datavetenskap dessa
dagar är att det är bara så tillämpas
alla typer av områden.
Och även om i dag, kommer vi skrapa bara på ytan av en
mycket traditionella programmeringsspråk som kallas C, vi
istället titta på något som kallas Scratch, något med
vilken kaka kärlekshistoria genomfördes genom en av dina
föregångare i år tidigare, att berätta historier, att skapa spel,
att skapa interaktiv konst och att faktiskt börja att slå våra
sinnen runt några av de grundläggande konstruktioner som
bakom programmering men i ett sammanhang, som du ser, det är
mycket mindre skrämmande, det är mycket mindre svårbegripliga, än vad du ser
snart.
Och inse också, för de av er bara med oss ​​här
termin fraserna som vi slutade onsdagens föreläsning,
det är inte så viktigt när du hamnar i förhållande till din
klasskamrater i denna klass, men där du, genom termins slut
vecka 11, sluta i förhållande till sig själv rätt denna dag.
>> Så utan vidare, det är också värt att notera att
de mindre bekväma, de någonstans mittemellan, är
också, genom utformningen av denna naturligtvis inte på något sätt missgynnas
vis-a-vis de mer bekväm
kommer in denna klass.
Som du ser över de kommande veckorna har vi olika
spår för disparat tillbaka bakgrund, sektioner för de
mindre bekväm, bekvämare, de någonstans
däremellan.
Som du ser i helgen och nästa vecka, två versioner av
flesta problem apparater i både standard-och hackare upplaga så
att ni alla kan själv välja den väg som du
är mest bekväm.
>> Så idag, dyka vi i denna programmering
språk som kallas Scratch.
Det är ett grafiskt programmeringsspråk, och ändå har den
samma funktioner för några av de högre nivå språk kommer vi
utforska senare i terminen, bland dem C
JavaScript och PHP.
Men det kommer att tillåta oss att undvika några av de distraktioner
tidigt av syntax, saker som semikolon, parenteser,
och andra svårbegripliga detaljer som, vid första anblicken, är helt enkelt inte
alls intellektuellt intressant och tenderar att få
vägen från några grundläggande förståelse.
När det gäller nu stödstrukturen framåt, insett detta
verktyg, CS50 diskutera, vilket kommer att kopplas på kursens
hemsida senare idag, är online diskussionsforum i
som du kommer att kunna ställa frågor till varandra och
personal, och det är också ett verktyg som vi får se nästa vecka,
att vi kommer att använda mycket integratedly i
kontorstid också.
Faktum kontorstid börjar på måndag, och ärligt talat, den första
vecka kontorstid är ganska låg nyckeln.
>> Jag tror inte att du hittar Scratch allt otillgängliga.
Det är ganska självförklarande, som vi får se, och så vad
Vi kommer att använda det för i dag är att extrahera en del av
grundläggande idéer som då kvarstår hela
resten av terminen.
Men från och med måndagen vid 8:00 PM till 23:00 kommer
kontorstid i Annenberg över hjärnan paus.
Sektionering två kommer att börja i kväll, så någon gång
helgen, gå till cs50.net/section, och du kommer
tillfrågas ett antal frågor.
Bland dem, hur skulle du beskriva din
komfort nivå i dag?
Det finns ingen hård och snabb regel om vem som hink.
Det är just den typ av sak som du säkert vet om du
är bland dem mindre bekväm eller på annat sätt.
>> Och nu, genomgångar.
Problemet inställda specifikation för denna vecka, både standard
och hackare upplaga både är online på cs50.net och med nu.
Och du kommer att se att den första av dessa utgåvor, den
standardutgåva varje vecka, åtföljs av något vi
ringa en kod genomgång, ledde en session av en av
kursens pedagogiska stipendiater att guida dig genom, ge
tips om, och få dig ner en viss väg när det gäller
att starta dessa problem uppsättningar.
Så med alla dessa problem sätter, om du någonsin vill
själv var jag börjar, börjar du med dessa
genomgångar.
Och faktiskt, låt mig presentera Zamyla Chan, detta
Årets undervisning karl som kommer att leda varje
en av dessa genomgångar.
Zamyla?
>> [Applåder]
ZAMYLA CHAN: Åh, hej, alla.
Mitt namn är Zamyla.
Jag är en junior studera teknik i Winthrop House.
Men jag försöker passa in så många kurser datavetenskap som jag
kan, vilket är anledningen till att jag är verkligen glad över att vara ledande här
Årets genomgångar.
Walkthroughs, för mig, var en viktig del av min CS50
erfarenhet.
Under genomgång, för varje p-set, kommer vi att gå igenom
problemet som tillsammans se över problemen, typ av
dela upp dem i hanterbara biter.
Jag ska ge er tips, tekniker, för att få
igenom och komma igång.
Jag hoppas att ni alla på genomgångar.
Om du inte kan göra det personligen, då
vänligen gör lyssna på nätet.
>> DAVID MALAN: Utmärkt.
Tack, Zamyla.
So inser att genomgångar är verkligen på en fredag
eftermiddag, men detta är avsiktligt av design så att
även om du inte vill delta i klassen på en fredag
eftermiddagen kommer videor upp allt snabbare över
helgen.
So inser att cs50.net blir alla Zamyla s
genomgångar.
Och att det är dagens datum och tid, 3:00 PM,
Harberd Hall, 104.
Och några av de pedagogiska stipendiater har också förberett
några anmärkningar för dig i frånvaro för att ge dig lite
perspektiv vad deras erfarenheter kommer in och
gå ut CS50 var.
Så om vi kunde dämpa belysningen för bara ett ögonblick, jag ger dig
några av CS50 personal.
>> JACKSON Steinkamp: Jag tog CS50 förra året som en nybörjare i
falla, och det absolut blåste mig.
Jag hade aldrig tagit några programmering klasser innan,
och kom aldrig in med någon datavetenskap
erfarenhet alls.
Och bara hörde jag surr om klass och
beslutat att ta den.
>> JULIA Mitelman: Det var riktigt roligt, verkligen engagerande.
Jag fortfarande, i dag -
Jag har nyligen såg jag har disketten som David gav oss
på vår första dag i föreläsningen.
Jag hade hängt den på min vägg.
Detta är förmodligen lite nördig, men jag hängde på min
vägg under klassen som en påminnelse om hur coolt det var.
>> TRAVIS Downs: Det är så pinsamt.
>> JACKSON Steinkamp: Datavetenskap är något du
ska försöka även om du inte är en för
de traditionella vetenskaperna.
Det är sin egen erfarenhet, och CS50 kommer att se att du är
stöd väl igenom det med sin veritabel armé av TF.
>> ALI Nahm: Jag tog det som en nybörjare, så jag gjorde en hel del
av nya vänner.
Jag fick också införts för att hela denna koncentration och
Hela Högskolan, så jag rekommenderar det
och hälsar dig välkommen till vår CS50 familj.
>> Yaniv YACOBY: CS50 lär bara dig hur du använder verktyg
som är allmänt tillgänglig.
Du behöver bara en bärbar dator, behöver du en webbläsare, och du
behöver lära sig att skriva lite kod, och du kan verkligen bygga
fina saker.
>> KAREN XIAO: Det är bara så coolt att kunna göra något
och har människor använder det och har folk se det, och det är
vad jag älskar verkligen det.
>> TIM McLaughlin: - en känsla av gemenskap, tror jag, i denna
Naturligtvis mer än någon annan kurs jag tagit hittills.
Du är inte bara att ta en annan -
du inte fylla ett annat krav.
Du är inte bara att föreläsningar och gå på avsnittet.
Men du gör massor av saker som handlar om
programmering och allt om teknik, men det gör inte
verkligen känna sig som en klass för det mesta.
>> Travis Downs: Och på den första dagen, delade de ut tårta och
Jag blev genast såld.
>> JACOB Pritt: Gratis godis och pizza.
>> ZAMYLA CHAN: - oavsett ditt intresse nivå, tror jag
att CS50 får du kul, och du kommer att vara intellektuellt
stimuleras.
>> MARK GROZEN-Smith: Det är alltid en fest i klassen, och det är en
fest varje kväll arbeta på din p-set.
>> JACKSON Steinkamp: Varje gång du avslutar ett problem som, du
kommer att kännas som att du har avslutat ett projekt.
>> MELISSA NIU: Det var första år, och jag var gjort shopping.
Jag hade mina fyra klasser redo, och jag var i Annenberg.
Och jag stöta på en vän, och han säger hej, jag shoppa
denna klass kallas CS50, och du bör komma med mig.
Slutade med det som faller, och efter den klassen jag
tänkte jag ska ringa i CS.
Men här är jag, tre år senare, fortfarande studerar dator
vetenskap och verkligen göra det som en stor, och jag älskade varje
ögonblick av det.
>> ROB BOWDEN: Jag har ingen aning.
>> ALI Nahm: Låt oss se.
>> MELISSA NIU: galenskap.
>> Högtalare 1: Jag känner att jag skulle vara mycket klyscha.
Jag skulle bara säga, liksom, awesome.
>> Yaniv YACOBY: Tillgänglighet.
>> JACOB Pritt: Gratis godis och pizza.
>> TRAVIS Downs: Det går inte att tacka nej till en klass som delar ut tårta.
>> TIM McLaughlin: Energisk.
>> Vipul SHEKHAWAT: Essential.
>> ROB BOWDEN: Låt mig tänka på ett svar.
Jag tror att jag har något.
Åh, gud.
Ja, mitt namn är Rob Bowden, och detta CS50.
>> [Applåder]
DAVID MALAN: Okej, så låt oss börja att måla en bild
av i vilken riktning vi kan gå, och låt oss införa
detta begrepp här kallas pseudokod.
Så pseudokod är inte ett programmeringsspråk
språket i sig.
Det är inget tekniskt i sig, men det är bara en slags
generellt sätt att uttrycka dig ganska exakt,
ganska algoritmiskt, ganska formellt, men utan
behöva oroa sig för vad språk du uttrycker
dig i.
Det är lite modell av engelska och programmeringsspråk med
som du råkar vara bekant, så att vi kan börja
skriver sådana saker som vi går.
Och faktiskt, Josef, kan jag låna dig på scenen för att vara
skriftlärd här?
Jag har gått framåt här i förväg och glömt att sätta
på vissa strumpor idag, och detta kommer att vara bland våra mer
löjliga exempel.
>> Nu, jag behöver dig här.
Jag gör det strumpor delen.
Så här har vi en liten anteckningsblock.
Detta är bokstavligen bara TextEdit i en Mac.
Vi faktiskt inte kommer att skriva en körbart program, men
Vi kommer bara att börja skissa på pseudokod baserad
på några av de råd du ger till mig här.
Så här är min hög med strumpor hemma.
Jag har inga strumpor på när jag vaknar på morgonen, och vi har nu
behöver skriva ett program, en algoritm av slag, som
att få dessa strumpor på fötterna.
Och längs vägen, låt oss se om vi snubblar över, eller stöter,
några av de idéer som du kommer att behöva börja
tänka mycket mer på allvar vid programmering
så att dina program beter sig inte riktigt som det var tänkt.
>> Så jag sitter här nere.
Jag har min hög med strumpor.
Vad är det första en rimlig människa skulle
göra när målet är att sätta på sig ett par strumpor?
Någon ge mig en steg och endast ett steg.
Ja?
Publiken: Böj ner.
DAVID MALAN: Böj ner, okej.
Steg två.
PUBLIK: Plocka upp din strumpa.
DAVID MALAN: Plocka upp din strumpa.
Okej, är så liten tvetydighet här, och en av de första
stötestenar som vi ska medvetet
stöter här.
Det är lite tvetydigt, så plocka upp din strumpa.
Okej, jag tar den här, men en dator inser på bara en
bit, inte kommer att ha den sortens mänsklig instinkt att bara
välja den närmaste.
Vi kommer att behöva börja, snart, uttrycker
oss mer exakt.
>> Okej, så steg två är att plocka upp strumpan.
Vi tar det.
Steg tre.
I ryggen.
PUBLIK: Hitta ett matchande par.
DAVID MALAN: Hitta matchande par.
Okej, så det är bra.
Jag var tvungen att välja denna strumpa.
Så målet är att hitta en matchande strumpa, nu, men vad
betyder det?
En rimlig människa, ungefär som på onsdagen när jag bara
visste hur man hittar Mike Smith i en telefonbok, bara typ av
gick med sin instinkt.
Men här är det uppenbarligen strumpa här, men en dators
inte kommer att vara så instinktiv.
En dator kommer att ha en samling av bitar, som vi
diskuteras på onsdag, och de är
organiseras på något sätt i minnet.
Men poängen är att en dator har bara förmågan
att titta på saker en i taget, och i själva verket, även vi
människor - även om det känns som om jag tittade ner och en delad
sekund senare jag vet var strumpan är min hjärna och mina ögon
förmodligen gjorde en snabb skumma av dessa strumpor och sedan låst
vidare till en i fråga.
>> Så om vi desto mer medveten nu som en dator,
Hur hittar jag den här matchande par?
Nåväl, vi måste iterera.
Vi måste kanske en slinga över den här röran strumpor på
golv där jag säger något i stil med FÖR VARJE strumpa, plocka
upp, och om samma form och storlek som den andra, SÅ
punkt, punkt, punkt, kommer vi att fortsätta berättelsen.
Så för varje strumpa, så jag plockar upp den här.
Jag kollar detta lika här.
Det är inte så jag gallrat sida.
Då jag iterera igen.
Är detta en lika?
Nej, det är inte så jag satte det åt sidan.
Är den här?
Nej.
Den här?
Nej, och så vidare.
Och slutligen, förhoppningsvis kommer jag stöter på det här strumpan här.
Så om det är samma form, storlek, ta den.
>> Och nu, vad skulle bli vår nästa steg här?
Ja?
PUBLIK: Identifiera rätt från vänster.
DAVID MALAN: Okej, identifiera höger och vänster, så
lyckligtvis den sortens gärningar.
Lite symmetrisk, eller jag har bara slitna dem så.
Okej, så jag har identifierat rätt.
Och nu, innan vi går vidare, låt mig påpeka vad Josephs
gjort här som en slags insatt programmerare.
Så återigen, det finns ingen sätt att göra detta, men längre än bara
numrering linjerna har Josef redan börjat göra detta
slags indrag.
I själva verket är detta en mycket vanlig konvention i programmering,
där när du gör något iterativ, looping stil, som
vi antyder med den engelska frasen "för varje
strumpa, "konventionen i pseudokod och, som vi ser,
normala programmeringsspråk, är att bara strecksatsen.
Hit mellanslagstangenten ett par gånger, tryck på Tab-tangenten eller liknande,
så att kapslade under "För varje strumpa" är bit av
saker som du behöver göra som en följd av den slingan.
Så det är allt som förmedla semantiskt.
Nu under tiden den "Om det är samma form och storlek," den
Att "ta det" är indragen vidare bara innebär
det är det enda du ska göra om detta villkor,
om den gren, som vägskäl, i själva verket är sant.
>> Så nu här, vi är på steg fyra, identifiera höger och vänster.
Jag har identifierat rätt.
Ge mig steg fem.
Och tekniskt, kan vi verkligen kalla
det för varje sak -
Du bör nog numrera alla rader om
vi ska göra detta.
Joseph: [OHÖRBAR]
DAVID MALAN: [OHÖRBAR]?
Okej, okej, vi gör det på ditt sätt.
Okej, så steg fem, hur gör vi rätt strumpa?
Hur går vi nästa, här?
Ja?
PUBLIK: Lyft upp höger ben.
DAVID MALAN: Lyft upp höger ben, okej.
Steg sex?
Snabbt.
Ja.
PUBLIK: Hitta en öppen ände av strumpan.
DAVID MALAN: Okej, hitta den öppna änden av strumpan.
Så bra.
Så här, ärligt talat, skulle en mycket vanlig instinkt bara vara
sätta på höger strumpa, men det är också ganska tvetydig.
Om inte datorn eller mänskliga vet exakt vad det betyder,
det inte kommer att vara att genomföra det, så här, jag har
fann öppnandet av beståndet.
Steg Sju?
PUBLIK: Tryck tårna.
DAVID MALAN: Touch tårna.
Okej, så nu går vi -
Okej, jag ska ta några friheter här.
Tack.
Steg åtta?
Sätt på strumpan.
Okej, så nu har jag, tror vi är tillräckligt nära för att sortera om att ta
detta en hemma.
Okej, så detta går upp.
Jag tar några friheter med vad det innebär, faktiskt.
Sätt strumpan på.
Okej, nu steg nio?
PUBLIK: Sätt ner foten.
DAVID MALAN: Tack.
Steg nio, satte ner foten, och nu kan vi upprepa.
Så förmodligen kan vi gå nu in steg 10 och säga identifiera
vänster strumpa, men det är förmodligen redan gjort.
>> Och så då kan jag sortera av upprepa dessa steg.
Men denna typ av väcker frågan.
Före, sista gången vi ville upprepa något, vi
gjorde det iterativt, om och om igen, en FOR
Varje slinga så att säga.
Skulle det vara meningsfullt att använda en slinga för att hantera både
vänster och höger strumpa?
Eftersom det känns som dessa operationer är ganska mycket
identiska med undantag för det faktum att man börjar här och en
börjar här?
Har vi slinga eller vill vi bara fortsätta skriva steg
10 och 11 och 12?
Publiken: Loop.
>> DAVID MALAN: Okej, så slinga.
Jag faktiskt kunde ha sagt bara fortsätta.
Så varför är det så?
Nåväl, detta är faktiskt den första av våra icke uppenbara
designbeslut, och i själva verket en av de mätetal som
Vi kommer att börja utvärdera för oss själva och för dig som
kvalitet av ett program är bara hur väl utformade det är.
Har ni gjort en minimal mängd arbete som krävs för att
få jobbet gjort mest snabbt, antingen i form av
din tid eller i termer av datorns drifttid?
Hur många verksamheter gör det tar att utföra?
Så utan tvekan är detta en möjlighet för en slinga, eftersom
så fort jag börjar kopiera och klistra, som Joseph effektivt
skulle börja göra i ett ögonblick, du typ av att slösa bort din
tid, och att du är dubbelt uttrycksfulla.
>> Men på samma gång, det är egentligen bara två särskilda
fall, vänster och höger.
Och medan tidigare, kan jag få 10 eller 20 eller fler strumpor i
en hög, gör det definitivt betydelse inte ha 50 rader
kod säger kontrollera detta strumpa, sedan nästa,
då nästa.
Här är det lite mindre uppenbart, och jag skulle föreslås
att vi kunde gå åt båda hållen.
Vi kan antingen ha den slinga, även om det bara loopar
två gånger, eller vi kan helt enkelt kopiera och klistra in bara lite
här för att få jobbet gjort.
Men detta program är buggig, så att säga.
Det kan ha vissa misstag, fel eller fall hörn, så att
tala, att vi verkligen inte förutse.
Ingenting gick fel den här gången, men det kunde ha gått fel
medan verkställande programmet?
Målgrupp: Du behöver inte ha några strumpor.
>> DAVID MALAN: Så det kan finnas några strumpor där alls.
Så låt oss betrakta det hörnet fallet.
Så om vi kunde rulla tillbaka upp till steg ett, så steg en var
böja sig ner, så checkar ut.
Steg två, plocka upp din strumpa, men sedan hitta matchande strumpa,
identifiera höger.
Vi sorts gjort en hel massa antaganden, och det är,
ärligt talat, varför programmet kraschar ibland.
Om du som programmerare har gjort vissa antaganden, som
säkert det kommer att bli strumpor eller säkert det kommer
att vara minne kvar i datorn, säkert det kommer
vara diskutrymme kvar på hårddisken -
Tja, om du gör dessa antaganden, och det är inte,
i själva verket verkligheten vet vem ibland vad datorns
kommer att göra?
Och ibland, när du får den snurrande badboll eller
fryst Windows eller liknande, det är just därför vissa
programmerare inte förutse de så kallade hörn fall.
Vad kunde ha gått fel i det här programmet?
Ja?
>> Målgrupp: Du har inte en höger ben och vänster ben.
DAVID MALAN: Okej, kanske inte ha både en höger ben och en
vänster ben, och så det här programmet kanske inte allmänt
tillämpligt.
Andra?
Målgrupp: Du kanske har plockat upp en föräldralös strumpa.
David MALAN: Jag kanske har plockat upp en föräldralös strumpa, så en
icke-matchande strumpa som bara har några syskon eftersom jag har
förlorade det, det slits, det är i tvätten fortfarande, eller liknande.
Så att även inte riktigt hanterats.
Ja?
Målgrupp: Du kanske redan har strumpor på.
David MALAN: Jag kanske redan har strumpor på.
Jag faktiskt inte kolla.
OM du inte har strumpor på, sedan vidare för att göra
linje ett och två.
Och det kan hända.
Du somnar med dina strumpor på och liknande, så
det också, en mycket rimlig hörn fall.
Och kanske en annan?
PUBLIK: Sockan är ut och in.
DAVID MALAN: Så strumpan är inne, så vi gjorde inget fel
kontroll, i kort.
Vi har inte kontrollera om tillståndet i världen är som vi förväntar oss.
Vi har inte kontrollera om vi faktiskt hittat vad vi letar efter.
>> Och även om detta är en slags löjligt exempel
där strumpor, i slutet av dagen, det är precis den
typ av tankesätt måste du ha när du skriver program,
även i Scratch samt i C, i JavaScript, i PHP,
annars kommer dina program uppvisar
motsvarande det snurrande badboll eller bara ger
felaktiga resultat.
Så många tack här till vår skrivare Joseph.
[Applåder]
>> DAVID MALAN: Okej, så vad är i
Faktum är att ett datorprogram?
Nåväl, låt oss ta en snabb titt på en
representant här.
Så detta är ett program skrivet i ett språk som kallas C. C är
ganska gamla dessa dagar, men många nyare språk byggs
ovanpå det.
Faktum PHP, en av de webb-centrerad språk kommer vi
användning mot termen slut, har själv vad som kallas en
tolk, ett program som är skrivet i C, men mer om det
i många veckor nu.
Men detta program, och det är vad det innebär att skriva en
Programmet, om än en mycket enkel.
Vi har några ganska kryptiskt syntax här, men du kan
förmodligen gissa, även om du aldrig har programmerat förut, vad
detta program gör.
I själva verket vet jag inte vad printf är, men skriv ut säkert
frammanar tanken att skriva något.
Och så ja, det här programmet kommer i slutändan att skriva ut
orden "Hej, Världen".
>> Nu, om du har en Mac eller en PC eller en Linux-dator, oddsen
är, åtminstone om du hämtade några fritt
tillgängliga programvaran kan du har skrivit program på
din egen bärbara dator ganska länge nu.
På Mac OS, till exempel, det finns det här programmet som heter
Terminal som kommer med en Mac, det är oftast i ditt
Mappen Verktygsprogram, och det öppnar vanligtvis en svart och
vit eller en vit och svart fönster där du har en
frågar där du kan skriva kommandon.
Så detta är faktiskt påminner om vad datorer
brukade vara innan grafiskt användargränssnitt
gränssnitt, GUI, kom.
Nu i Windows, har du en liknande mekanism i form
av kommandotolken.
>> Men vad jag ska göra här är att öppna upp, låt oss säga,
Textredigerare igen, så samma program vi använder för
pseudokod för en stund sedan, och jag ska gå vidare och
skriva min första programmet.
Inkludera stdio.h, vad det nu betyder, int main
ogiltigt, vad det nu betyder, och sedan i mitten här,
printf ("hej, värld."). Och stäng sedan citat,
Stäng paren, semikolon.
Nu ska jag gå vidare och bara slå kommando-S. Jag ska
att gå vidare och spara det som hej.c så konventionen i
världen av C programmering är namnet på filen prick C.
Jag ska bara sätta i John Harvard hemkatalog,
Här klickar du på Spara och nu ska jag gå över till denna
terminalfönster, som återigen är svart och vitt snabb
där jag kan utföra kommandon.
>> Jag kan köra program genom att skriva deras namn, inte av
dubbelklicka på ikoner i vanlig mening.
Men saken är om C är att ett språk som C 1.
kommer i denna form, kallas något källkod.
Något som ser lite ut som engelska men är
definitivt mindre som engelska än Josefs pseudokod en
stund sedan.
Det är lite mer svårbegripliga.
Det verkar följa vissa mönster och regler.
Det faktum att jag har klammerparenteser, semikolon, citat,
vinkel hängslen, känns som en dator kom med detta
typ av språk.
Men om jag går nu, denna terminalfönster, kan jag köra en
kommando som kommer att konvertera källkod är
något som kallas objektkod.
Det kommer att konvertera engelska-liknande syntax nollor
och sådana, samma sorters nollor och ettor vi
talade om onsdag.
Nu ska jag köra ett kommando som heter klang.
Mer om detta i de kommande veckorna, men det är ett program med
som jag kan konvertera hej.c till en massa
av nollor och ettor.
>> Nu har jag köra det här kommandot.
Jag har rymt klang, och då sa jag köra själv på den här filen
heter hej.c, som jag skapade nyss, och
ingenting verkar hända.
Men ja, om jag petade runt min hemkatalog, skulle jag se
att detta dumt namn programmet a.out finns nu.
Detta är bara standardnamnet för ett program när du skriver i
C. Vi kan åsidosätta detta så småningom, men a.out är
namnet på programmet jag konverterade bara till nollor och ettor.
Och nu när det är nollor och ettor, min Mac, i detta fall, eller
din Windows-dator kan förstå dessa bitar, de
nollor och ettor.
Och så när jag slog in, ser jag "hej, världen!"
>> Men det är lite buggig.
Jag har inte riktigt säga "hej, värld: luft: -! Jharvard." Luft är
namnet på min dator.
Jharvard är namnet på kontot, så vad gjorde jag klart
utelämna från programmet?
Något slags radbrytning.
Jag träffade inte motsvarande Enter eller vagnretur,
och detta är återigen ett bevis på det faktum att datorer kan
bara gör vad du säger till dem att göra.
Och det faktum att jag inte tala om för datorn att flytta
markören till nästa rad -
Tja, är det verkligen inte kommer att bara göra det
övermodigt för mig.
Så om jag går tillbaka till mitt program, och jag säger \ n -
Så \ n, som vi snart kommer att se, är vägen för
representerar konstiga saker som nya linje karaktärer, saker
som annars skulle vara resultatet av
trycka Enter.
Men nu, vet bara att trycka på Enter skulle
bara göra vår kod ser udda, så världen bestämde, vet du
vad, för att hålla saker och ting vackrare, för att hålla den på en rad, låt oss
bara säga \ n representerar en ny rad.
Låt mig spara om min fil, gå tillbaka till terminalfönstret, och
repris a.out, Enter.
Fortfarande buggig, men varför?
>> PUBLIK: [OHÖRBAR]
DAVID MALAN: Ja, så jag måste kompilera det.
Så för att kompilera ett program betyder bara konvertera den från källan
kod objektkod, källkoden till nollor och ettor.
Nu har det faktum att jag slog Spara i Textredigerare inte
bär på dessa nollor och ettor, eftersom jag först behöver
berätta klang hej, jag har ändrat de rader kod,
källkod.
Du behöver att förnya a.out.
Ingenting verkar ha hänt, men i en dator,
på kommandoraden, så att säga, när ingenting händer,
det betyder oftast allt är bra.
När något händer, betyder det
Ni ställt till det, i allmänhet.
>> Så låt oss nu gå till a.out, ja nu har jag "hej,
värld. "
Och nu, hur dessa nollor och ettor?
Om det i själva verket är de?
Jag kan inte riktigt bara typ av säcken runt mycket
effektivt.
Låt mig öppna Textredigeraren.
Här är a.out.
Låt mig gå vidare och öppna, och det är tydligen vad min
Programmet ser ut.
Så jag har öppnat, inte hej.c, men a.out.
Men detta är egentligen inte vad mitt program egentligen är.
Detta är naturligtvis något slags alfabetiska tecken.
Jag ser inga nollor och ettor, men detta är
eftersom a.out är ett program.
Nollor och ettor - men Textredigeraren, som namnet antyder, är det
precis som Anteckningar i Windows är bara en textredigerare, så det är
förvirrande alla dessa nollor och ettor som
om de vore, vad?
ASCII-tecken.
>> Så minns på onsdag, kom vi bara upp med detta
godtycklig kartläggning av siffror, eller bitar, för bokstäverna i
alfabetet och symboler skiljetecken och liknande.
Så Textredigerare, att det är en textredigerare som misstolkar
de mönster av ettor och nollor som är tänkta att vara
utskrift ord, som "Hej, världen." Det är att visa dem
som ASCII, och det är därför det ser lite rörigt.
Nu finns det några inslag av korrekthet i här.
Märka om jag lyfta, det finns en antydan till faktiskt "Hej,
värld ", så någonstans i programmet är
meningen jag skrev.
Men låt oss gå vidare och nu ser med ett annat program.
Detta är inte något vi kommer att använda så ofta, men det också kommer med
en Mac och kommer att vara inne i CS50 apparaten.
Låt mig gå vidare och öppna med ett program som heter XXD.
>> Tillbaka i dag, var de flesta program som heter ganska kryptiskt,
och så trenden fortsätter.
Men-b betyder spotta programmet ut som binär.
Kör inte det.
Visa det för mig som nollor och ettor, och det är C
programmera vi bara skrev.
Nu har jag, som en mänsklig här, jag har ärligt talat ingen aning om vad
dessa olika mönster av nollor och ettor representerar.
Tillbaka i dag, jag med mina hålkort eller liknande, skulle
faktiskt måste se upp vad dessa olika mönster för
01111000, faktiskt representerar.
Eller ännu värre, skulle jag behöva göra stansning eller skapande
av dessa mönster av nollor och ettor.
Men nu, ta på tron ​​att en CPU, Intel Inside, så
att tala, inuti alla våra datorer i dessa dagar, vet
hur man ska tolka dessa nollor och ettor.
Och vissa nollor och ettor betyder tryck.
Vissa nollor och ettor innebär spela ett ljud.
Vissa nollor och ettor betyder ta indata från ett tangentbord.
Det finns alla möjliga olika mönster, men vi tack och lov,
som människor, bara i allmänhet behöver oroa programmering
detta ganska högre nivå.
Och i andra CS klasser kan du gräva ner djupare och titta
på saker som de nollor och ettor, eller ännu
andra saker fortfarande.
>> Så nu ska vi omvandla detta.
Låt oss gå mycket snabbt bort från C och flytta till något
lite mer tröstande, lite mer spännande, eftersom
vi kan få tillbaka våra animationer och ljud och liknande som
tydligt undgått oss i detta
ganska primitiv gränssnitt.
Så detta samma program i C kan representeras nu i detta
programmeringsspråk som kallas Scratch enligt följande.
Detta motsvarar detta hallå världen program skrivet i
denna pusselbit stil språk kallas Scratch.
Så låt mig gå vidare och öppna upp denna mycket program.
Det åter kallas Scratch.
Det är fritt tillgängliga, och det är samma sak som vi
igång idag på.
>> Så detta är här Scratch, och det är delas upp i ett fåtal
olika delar.
På högst upp till höger, har vi sk fas, och
faktiskt, det är där kakorna
utförs bara lite sedan.
Och på detta stadium är saker kallas sprites, tecken eller
föremål eller enheter.
Det spelar egentligen ingen roll hur du tänker på dem, men de
är programmerbara, rörliga ting, och i detta fall, detta
program som våra studenter skrev har ett par pepparkaka
kakor, ett par cirkulära kakor, en hel massa
hjärtan, en hel massa glasögon.
På grund av detta, är han eller hon kan programmera varje av dessa
enskilda tecken separat.
>> Nu vad betyder det att programmera dessa tecken?
Nåväl, låt mig gå vidare och klicka på denna vänster cookien
och bläddra över till det övre vänstra här.
I den övre vänstra min skärm nu är det
så kallade skript området.
Detta är en slags oskrivet blad inledningsvis på vilken jag kan
dra och släpp pusselbitar som, uppriktigt sagt, gör
exakt vad de säger.
Längst upp på denna bunt pusselbitar är ordet
När Grön Flagg klickning, och om du inte märker innan,
hur jag började att cookies låten klicka, bokstavligen,
en grön flagga.
Så att pusselbit uppe till vänster där medel när
mänskliga klick den gröna flaggan, fortsatte att göra
följande saker.
>> Nu gjorde vad de cookies fortsätta att göra?
Jag vet inte riktigt hur man ska tolka detta ännu, men
Cookien tydligen satt sitt spår till noll, då det väntade
tre sekunder, sedan bytte grupp till en, då det
väntade en sekund, sedan bytte
spår tillbaka till en.
Och då detta ser faktiskt ut som en bit av en bugg, bör inte
måste ändra sitt spår och om igen om det inte är
ändras någon annanstans, men denna serie av steg är vad som är
dikterar beteende denna kaka.
Så låt oss faktiskt bläddra tillbaka och inte titta på något
ganska så komplicerad än.
Låt mig gå vidare och gå till Arkiv, Nytt,
och få en kula.
>> Så nu har jag verkligen ett tomt skript område, en tom scen,
med vår standard sprite Scratch och längst upp till vänster
på min skärm har jag pallen i alla sina
tillgängliga pusselbitar.
Och vi kommer inte att gå igenom nästan att många av dessa saker
dag eftersom, återigen, de flesta är självförklarande, men vi kommer
försöka kategorisera dem och påpeka likheterna
med dessa framtida språk som vi kommer att dyka.
Och uppe till vänster här är den första När Grön Flagg klickning,
så låt mig dra det här, zooma ut lite.
Och om jag klickar på den gröna flaggan, händer ingenting verkligen eftersom
Jag har inte fäst någon logik, eventuella uttalanden så att säga, att
den gröna flaggan, så låt mig gå upp till
kategorier där borta.
Jag är för närvarande i Control kategorin.
Jag stället att gå ner till utseende kategori och
Det finns en hel massa saker här som säger Säg,
Tänk, ändra färg, Switch Kostym.
>> Så du kan göra dumma saker med kostymer och
ljud och liknande.
Låt mig gå vidare och bara säga Säg, och nu märker när jag drar
och släppa denna pusselbit, det kommer att vilja låsa
till motsvarande form.
Så när jag går vidare och släppa min mus, låsa de
tillsammans, och nu om jag går hit och klicka på den gröna flaggan,
katten säger faktiskt hej eftersom det är vad som finns inuti
detta vita rutan.
Vi kommer snart att se att detta vita rutan är vad som kallas en
argument eller en parameter.
Det är ett sätt att förändra beteendet hos, i detta fall, en
pusselbit, men om jag vill säga exakt vad jag sa
tidigare, säga hej, värld, kan jag gå nu tillbaka hit,
Klicka spela och "Hello, world" är vad som är sagt.
>> Så vi bokstavligen programmering nu.
Det är inte så övertygande av ett program, men åtminstone
det är lite mer övertygande än något som ser på
första anblicken, så här.
Och vi kan mycket snabbt få alla mer uttrycksfullt
eftersom Scratch, liksom på andra språk, det finns allt
typer av uttalanden, inte bara säga eller skriva något, men
Du kan göra saker som väntar, som vi bara såg med
cookie, visst antal sekunder.
Du kan spela upp ljud i omgivningen av Scratch bara
som du kan i en normal dator programmerad uppspelning ljud.
Du kan kontrollera vad som kallas booleska uttryck.
Så nu, låt oss börja att lägga till vår verktygslåda några terminologi
som faktiskt avser exempel som Josef och jag gjorde
här med strumpor.
Så uttalanden är bara uttalanden faktiskt.
Gör så här.
Ett direktiv för spriten, eller jag människan, att göra något.
Ett booleskt uttryck är något som har ett värde, en
sk sanning värde, det är antingen en nolla eller en, felaktiga eller
sant, av eller på, Nej eller Ja.
Spelar egentligen ingen roll hur du tänker på det, men det är en
binär tillstånd.
Som Nate diskuteras i onsdagens video, två
olika saker.
>> Så i Scratch, booleska uttryck råkar titta
som dessa blå föremål här, och i detta fall, frågan
märke innebär att du ställer en fråga.
Är katten eller spriten, röra muspekaren?
Så detta är bara ett exempel på en repa block som händer
att tillåta oss att kontrollera ja eller nej, är musen vidrör
sprite på skärmen?
Och detta kan vara användbart om du verkligen vill göra saker
med musen.
Förutom booleska uttryck har vi saker
Liksom är musen ner, så att du kan upptäcka denna typ av
fråga också.
Vi kan göra matematik om du verkligen vill, och det finns
faktiskt mer övertygande användningsområden för detta än bara ren om
aritmetik, som vi får se.
Pseudo slumpmässighet och göra ditt program verkar tro
eller bete sig annorlunda baserat på några till synes slumpmässiga värden,
och sedan har vi saker som booleska uttryck som AND.
Så om du verkligen vill kontrollera två värden, vi ser i
Scratch att vi faktiskt kan testa om det är
sant och det är sant.
Till exempel i fallet med mina strumpor, kunde jag har på
slutet ställde frågan om de lämnas strumpa är på och höger strumpa
är på, avsluta.
Du är klar för dagen, så det skulle vara en
möjlighet för det.
>> Så låt oss gå vidare och försöka pussla några av dessa tillsammans
och gå in i ett par exempel mer
övertygande än denna.
Så låt mig gå vidare här och öppna upp några exempel
som alltid kommer att finnas på kursens hemsida också, och
öppna hello2.
Så hello2 här har vi ett program som gör några
saker, men det är inte att göra det så effektivt som vi skulle kunna.
Så här står det "Hello, world" i en sekund och sedan väntar
för en sekund.
Och sedan gör det igen, och sedan gör det igen.
Så om jag klickar på den gröna flaggan, Scratch säger "Hej, världen.
Hej, världen.
Hallå, världen. "Och detta är naturligtvis kandidat nu
förbättring.
>> Vad är marginell förbättring, förhoppningsvis, kan vi
nu gör om Scratch stöder tanken?
Någon form av slingan.
Någon form av upprepning, nu skulle vara trevligt, så låt mig
faktiskt prova det.
Låt mig faktiskt gå och flytta det.
Så varsel kan ta bort block så lätt som du kan lägga till
bifoga dem.
Låt mig gå under kontroll, rulla ner här, och faktiskt,
Det är detta pusselbit här, Upprepa och för evigt och
Evigt om.
Så det finns ett antal sätt att uttrycka looping konstruktioner
i Scratch.
Det enda jag vill förmodligen här är inte för evigt eftersom jag bara
vill att detta ska hända tre gånger, men förmodligen Upprepa.
Så låt mig dra Upprepa hit, dra och släpp den, och
nu i stället för att säga "Hej, världen" tre separata gånger,
Låt mig dra denna pusselbit här.
Och även om det inte verkar passa, är programmet smarta
nog att inse det kommer att växa för att fylla, så det är den
former som materia och inte den absoluta storleken.
Låt mig ändra upprepning till tre, och nu vill jag gå
framåt och dra vänta en sekund där liksom.
Det kommer att knäppa i också, och så nu ska jag dra
dessa killar hit och bara kasta bort dem eftersom jag
inte behöver dem längre.
Låt mig zooma ut och klicka på den gröna flaggan nu, och vi har
samma program men som jag förutspådde tidigare, bättre
utformade för att ni kan föreställa er hur illa det här programmet
skulle få, säkert estetiskt, om du var tvungen att
börja kopiera och klistra, kopiera och klistra in, eller
dra och släppa samma darn saker om och om igen.
>> Nu bara säga saker på skärmen, skriva ut till
skärmen, verkligen allt inte så spännande, så låt oss öppna en
3. varians här.
Och nu, som ni ser, det här snabbt få irriterande -
[MEOW]
DAVID MALAN: - men det är också rätt söt.
[MEOW]
DAVID MALAN: Okej, så bättre, och vi kan verkligen använda det
Samma övergång spaltning upp detta i en looping
struktur, men låt oss göra det mer intressant ändå.
>> Låt mig gå vidare och öppna upp kvart varians här, där jag
ta saker ett steg längre.
Så enligt detta, dum om detta är först
blick, vad detta program kommer att göra?
Det kommer att jamar gång.
Varför?
Tja, en är, såvitt jag vet, alltid mindre än två.
Det finns ingen uppfattning av slumpmässighet här.
Jag har bokstavligen hårdkodad en och två, men detta är ett
exempel nu på att faktiskt använda ett booleskt uttryck.
Mycket vill som Josef gjorde i sitt pseudokod, fördjupningen IF
du hitta matchande strumpor gör följande, här har vi
ett uttryck om man är mindre än två då -
och i själva verket har vi även en liten bit av indrag,
där den lila är något indragen till höger -
Då du kommer att spela upp ljudet mjau.
Nu, i detta fall, är att man alltid är mindre än två, så detta
är typ av slöseri av ett tillstånd.
Men vi kommer att kunna, som vi ska se, att ansluta andra saker i
Dessa platshållare där ett och två nu är.
Så låt oss nu gå vidare till exempel fem av dessa flera
hellos och titta på vad det här programmet kommer att göra.
>> Så nu, i en engelsk mening, hur det
Programmet beter sig?
PUBLIK: meows halva tiden.
DAVID MALAN: Mjau har hälften av tiden, så detta är ett sätt att
förmedla en mycket enkel idé.
Även om vi råkar använda vissa ojämlikheter här
I vissa siffror, det är egentligen bara en programmatical
sätt, ett exakt sätt, att säga om myntet kommer upp huvuden, gå
framåt och jamar.
Eller omvänt, om myntet kommer upp svansar, inte mjau.
Och i detta fall, hur vi uttrycker det?
Vi hämtar ett slumptal från 1 till 10, och om det
nummer är mindre än 6, gå vidare och jamar.
Och hur gick det in?
Bra igen, märker bara att dra och släppa och
Saker spärrarna på plats.
>> Så nu ska vi se om denna slumpmässighet fungerar.
Låt mig gå vidare och klicka på den gröna flaggan.
[MEOW]
DAVID MALAN: Okej.
[MEOW]
DAVID MALAN: Okej.
Okej, bra, så vi fick huvuden, huvuden, svansar effektivt.
Svansar.
[MEOW]
DAVID MALAN: Heads.
[MEOW]
DAVID MALAN: Utmärkt.
Det är alltid besvärligt när bara statistiskt får du en dålig
springa, och det är alla huvuden, och programmet faktiskt inte
arbete som du skulle hoppas.
Men den här gången, det fungerade, och vi verkar ha, om vi gjorde
detta ett oändligt antal gånger, 50% odds.
Nu igen, inte så intressant, bara göra katter
mjau, så låt oss se om vi inte kan gå detta lite längre
här i version sex.
Så nu har vi verkligen irriterande version -
[Meows några sekunders]
DAVID MALAN: - och detta är vad som kallas, allmänt som en
oändlig loop.
>> Så oändlig slinga i det här fallet känns dåligt.
Det kommer definitivt att börja låta dåligt, men ändå oändligt
slingor är inte alltid dåligt.
Kan du komma på sammanhang i datorprogram där du skulle
faktiskt vill ha en oändlig loop?
Ja?
PUBLIK: När du vill kontrollera ett villkor.
DAVID MALAN: Okej, när du vill fortsätta att söka ett tillstånd?
Som vad?
PUBLIK: [OHÖRBAR]
DAVID MALAN: Okej, bra, så om du hade några program, vissa
typ av hemautomation sak, där du vill hela tiden
bildskärm är något fallet.
Är belysningen?
Är belysningen på eftersom du kanske har en timer, och
du vill att de ska gå ut, kan du behöva göra något
och om igen.
Och i själva verket talar om timers, som har någon av er
klockor på datorn eller digitala klockor, det är en
oändlig loop.
Det fortsätter att uppdatera tiden eftersom det är ständigt
kontroll och kontroll och kontroll har tid ändrats,
och i så fall Herregud.
Klockan har äntligen förändrats.
Det behöver visa att värde för dig.
Så medan de flesta av tiden oändliga slingor är ett misstag,
eller åtminstone ett dåligt beslut konstruktion, ibland gör
har sitt värde.
>> Nåväl, låt oss gå vidare här hello7.
Så nu kommer programmet att bli lite mer interaktiv.
Låt mig zooma in här, och igen, det är vad som är bra
om Scratch.
Och vi kommer att använda den för att vara tydlig, Scratch, bara idag och i
nästa veckas problem in.
Men på måndag, dyka vi in ​​C. I detta program här, det gör det,
evigt, följande.
OM röra muspekaren - nu, vem
sammanhang här?
Tja, och märker att vem valt här nere på botten
höger är katten, sprite en, så dessa skript, detta
Programmet gäller för honom specifikt.
Så om det katten vidrör muspekaren, så kommer
att spela detta ner och vänta två sekunder och
upprepa sedan annons nauseum.
>> Så låt oss gå vidare och träffa spela.
Ingenting händer, men om jag vill klappa
katt nu kan jag helt enkelt.
[MEOW]
DAVID MALAN: Adorable.
[MEOW]
DAVID MALAN: Okej, mindre irriterande, men blir också tråkig,
så låt oss gå vidare och se om vi inte kan injicera
lite mer logik.
Det var exempel sju.
>> Här i exempel åtta, vi ska
införa en ANNARS tillstånd.
Så mycket som en bokstavlig vägskäl, där du kan gå
vänster eller så kan du gå till höger, ett tillstånd i ett program
språk som Scratch, eller som vi får se C kan tillåta dig att
gå i en riktning eller en annan via en IF ELSE konstruera.
Så bokstavligen OM röra muspekaren, detta
kommer att spela vissa ljud, annars kommer att spela denna andra
ljud, mjau.
Nu, om du kan dra slutsatsen att namnet på dessa ljud kan du
förmodligen gissa vad det här programmet är tänkt att trolla fram
idén om.
Denna katt jamar lyckligt.
[MEOW]
DAVID MALAN: Lyckligtvis, men inte
ganska vilja att bli rörd.
[Vrålar]
DAVID MALAN: Så nu har vi en katt som kommer skrika på dig.
>> Okej, en sista exempel med katter här, och
låt oss öppen version nio av detta här.
Så nu har vi den näst irriterande ljud som jag kunde
hitta, så vi har en valross eller sjölejon här som kommer att
gör följande.
[SEAL BARK]
DAVID MALAN: Okej, så detta kommer att fortsätta tills du räkna ut hur
Programmet fungerar.
Så den här gången har detta djur två manus, och vad
intressant här är att dessa skript kommer att utföra
parallellt.
Så eftersom de båda börjar med en grön flagga klickade,
Det är som att gå ut så här, och båda programmen börjar visas den
gång även om de är looping evigt.
Så i den övre manus, jag har en viss logik.
Vilka funktioner ger upp det där?
[SEAL BARK]
PUBLIK: [OHÖRBAR]
DAVID MALAN: Om det är vad?
[SEAL BARK]
PUBLIK: Om avstängt noll, det kommer att fortsätta spela
ljuda. [SEAL BARK]
DAVID MALAN: Okej, bra.
Så OM avstängt, oavsett detta är, denna orange sak är noll,
Sedan spela sjölejon ljud och tänker "Åh,
Hej, "i två sekunder.
Nu vet jag inte vad avstängt är, men noll frammanar den
idén om falsk eller av.
Så om avstängt är falsk, så om inte är avstängd,
fortsätta spela ljudet.
Okej, hur ska vi stänga av denna sak?
>> Nåväl, låt oss titta på den andra skriptet nere.
Det andra skriptet säger satt dämpad till noll.
Notera det är också orange, så vad Scratch gör är det färger
block i samma nyans om det är typ
av logiskt relaterade.
Så lika dämpad uppe var orange, så dämpas här nere
nämns i orange blocket.
Men detta är en variabel uppdrag, så precis som i
algebra, du x och y och z, i programmering har du
variabler, men de är i allmänhet -
låt oss stanna upp en stund och figur hur
att stoppa denna skällande.
Hur gör jag det?
[SEAL BARK]
DAVID MALAN: Okej.
Det slutade. Okej.
>> Så precis som i algebra har variablerna x, y, och z, men i
programmering, med variabler som x, y och z är i allmänhet
ogillat eftersom de är inte alls uttrycksfull.
De har ingen semantisk innebörd som helst, så i de flesta
programmeringsspråk, kan variabler ha full
utvecklad namn eller ord eller fraser, gillar dämpad, säga
vad de gör.
Så denna andra skriptet också lyssnade alltid, och det sade
om nyckeln, tangenten Space är
trycks frågetecken.
Så det finns ett tillstånd med ett booleskt uttryck som är
kommer att svara på en fråga antingen sanningsenligt eller falskt,
så har jag inne i det om mellanslagstangenten trycks ned och
OM avstängt är noll, ställ dämpad till en, annan har dämpad till noll.
Så denna andra vägskäl, och märker hur jag har
kapslade de två om villkoren är ett sätt att kontrollera den
Space Bar tryckte för om så är fallet, jag antingen vill gå här
sätt eller så.
Och hur jag vända värdet av avstängt?
Jag måste kolla det noll?
Om så är fallet, gör det en, annars gör det noll till därför växla
de två stater.
>> Okej, så vi har sedan några av dessa grundläggande
konstruktioner.
Vi har booleska uttryck, och inse, även dessa är
inte så främmande.
I själva verket är här en snabb skärmdump av Harvard kursens CS50
shoppa verktyg och en webbplats där ute som har kryssrutor
och släpp nedskrivningar har verkligen, hela tiden, använt
Booleska uttryck.
I detta fall här, om du klickar på kryssrutan bredvid
Naturligtvis är större än eller lika med 4,5, eller samma bredvid
fakultet, du anger ett booleskt uttryck.
Visa mig kurser för vilka uttrycket är sant.
Eller till höger, inte strider mot kurser jag är
tar, om det är markerat, så ja, du vill kontrollera
detta villkor, annars du vill ignorera det.
Så booleska uttryck är typ av runt, men när
Vi satte dem i förhållanden, vare sig om villkoren, OM
Annans, eller vi kan även simulera djupare
nivåer, om annat om ELSE -
så det är typ av en ternär stat.
Du kan gå på detta sätt eller på detta sätt eller så.
Vi kan hålla häckande saker att gå i olika riktningar.
>> Så Scratch har dessa slingor, som alltid.
Den har dessa funktioner som Repetera 10, några
ändligt antal gånger.
Vi har förmågan nu att sätta variabler, så i det här fallet
Jag har deklarerats, exempelvis, en variabel som heter strumpor.
Jag har initieras till 0, och det är ännu en riktning
Vi kunde ha tagit upp här med Josef, där jag kanske
bara hålla koll på hur många strumpor jag har på och avsluta
programmet när det variabelns värde är 2.
Det skulle vara ett annat sätt att sorts generalisera det
problem och göra något och om igen.
Nåväl, låt oss gå vidare och nu introducerar ett par nya saker.
Så de av er med tidigare programmering erfarenhet kommer
vet att många språk har matriser eller vektorer eller
listor, och faktiskt har Scratch något sådant också.
Så låt oss se om vi inte kan ta det till nästa nivå här.
Om jag har möjlighet, nu med dessa pusselbitar till
lägga till något, som ett ord eller nummer, till en variabel, kan jag
börjar ackumulera saker.
Och det är faktiskt ganska apropos för saker som spel,
rollspel där du är typ att gå runt
några fantasivärld samla saker, plocka upp saker,
tjäna poäng, eller liknande.
Du kanske vill hålla reda på någon form av lager och
faktiskt det är vad en av våra tidigare studenter här gjorde med
något som kallas Fruitcraft RPG.
>> Så låt mig gå vidare och öppna upp denna sak här, och i
Fruitcraft har vi den här världen upp på toppen.
Så låt mig gå vidare och klicka på den gröna flaggan.
Meddelande uppe till vänster är någon form av inventering.
Det är genomfört i Scratch som vad vi ska kalla en matris eller
en lista och nu har vi denna lilla animation.
Så precis som vi började tidigare med den här cookien kärlekshistoria,
och då vi avancerade till katter och sjölejon, nu kan vi ha
saker som är ännu mer interaktiv.
Och den här lilla blå kille, kan jag börja att flytta runt sina
lilla hem här.
Så det ser ut som han har en utgång här nere, så jag använder
piltangenterna, upp, ner, vänster, höger.
Och nu är jag utanför, så låt är vad jag har här.
Ser ut som en apelsin, och faktiskt, så fort jag rör vid
apelsin, det blir plopped i min inventering.
Om jag går hit till körsbär, nu har jag något
annat i mitt lager.
Och detta är alla trevliga och söt, men fundera på hur, nu detta
genomförs.
Tja, vi har denna föreställning om en lista, och det är uppenbarligen en
pusselbit som du bara säga vad du vill lägga till det, lägga
apelsin, körsbär lägg.
Nu, vad detta lilla blå killen gör?
Jo, han är en sprite.
Och förmodligen är orange och körsbär -
de själva var separata sprites.
Och med hjälp av förhållandena i booleska uttryck, de
elev var förmodligen kunna uttrycka IF blå killen är
röra körsbär sedan lägga ordet körsbär till hans
inventering och sedan också dölja körsbär spriten.
Så under huven, är det antagligen fortfarande är ett körsbär
sprite där.
Vi har precis sagt att det blir effektivt osynlig.
>> Nu, om jag hålla promenader hit, kan vi också göra det
proximala sak, där jag kan gå och läsa skylten.
Så om blå kille röra tecken, kan vi ha denna Say blocket
precis som katten talade till oss i ord, hej, tidigare "Got
lite frukt?
Ta med den till frukten plats. "Okej, så nu, tydligen,
Jag har mina riktningar.
Jag kan gå hit till frukten platsen, Line mig upp
med dörren.
Nu är jag här.
Jag kan gå upp till mannen vid disken.
Han upptäcker att jag är nära honom, så det behöver inte vara
helt identiskt röra, och jag har vunnit spelet.
Så där har vi Fruitcraft RPG.
>> Så vi kan göra saker och ting ännu mer avancerade än så.
Vi kan lägga till ljud.
Vi kan lägga till pseudo slumpmässighet.
Vi kan lägga komplexitet.
Låt mig gå vidare här, och i stället göra det själv,
Låt mig visa dig en av de mer sofistikerade bidrag
vi fick förra året från en viss person som heter Blake.
Kan vi få en volontär som är bekväm visas på
kameran och är upp för att spela ett spel?
Vad sägs om där?
Kom upp.
Okej, så spelet som du just har omedvetet
frivilligt att spela -
[Applåder]
DAVID MALAN: - är något från förr kallades
"Frogger". Vad heter du?
Renda: Renda.
DAVID MALAN: Redna?
Renda: Det är som Brenda med en B.
DAVID MALAN: Okej, Renda.
David.
TREVLIGT ATT TRÄFFAS.
>> Så här i "Frogger", och om vi kunde öka volymen bara
lite, är du här lilla
grön groda på botten.
Du kan använda vänster, höger, upp och ner, och ditt mål är att
korsa gatan, över floden, och tryck på lilja vadderar
upptill.
Aw.
One More t -
gör om, okej?
Låt oss hit stopp.
Ingen såg det.
[Applåder]
DAVID MALAN: Ja.
Mycket bra gjort.
Utmärkt, tack.
>> Så att det var Frogger. Nu när du vet vad du har
fått er till, en mer frivillig för en annan
spel som lagts fram av en annan student.
Vill du komma på upp?
Vad heter du?
RICHARD: Richard.
DAVID MALAN: Richard.
Okej, Richard, kom upp.
[Applåder]
DAVID MALAN: Du har något som kommer att låta
bekant snart, så här är dina instruktioner.
Så i ett ögonblick, är några pusselbitar kommer att rulla uppåt
från skärmen som antingen ser kvar
eller höger upp eller ned.
Du kommer att få träffa piltangenterna på ett sådant sätt
att det motsvarar de pusselbitar kö med
platshållarna upptill.
Så när du ser en vänsterpil, och det är i linje med vänster
pil, slog på vänsterpilen.
Du kan börja.
[MUSIK - "starkare" Kayne WEST]
DAVID MALAN: Okej, stor applåd för Richard.
[Applåder]
DAVID MALAN: Mycket bra gjort.
Tack.
[Applåder]
>> DAVID MALAN: Så kul och, till synes, typ av
skrämmande som det kan vara att genomföra något så
synes sofistikerad som denna, inser att den studerande
inte anges, och bara skriva detta på en gång.
Snarare kan man bryta ner ett problem som till synes komplexa
eftersom detta i mycket mindre bitar, och detta är också
kommer att bli ett tema.
Det värsta du kan göra i att skriva ett program i de flesta någon
språk är att sitta ner, bli riktigt upphetsad, skriver
hela jävla sak, och sedan bara hoppas att det fungerar med
tid du är klar skriver.
Snarare programplaneringsprocessen bör generellt
vara mycket medvetet, mycket iterativ, där du bara
ställa mycket små steg för er själva, lagom stora bitar
vill du bita av, och så att du har dessa förstånd
kontroller, lite milstolpar du kan möta.
Och sedan bygga ovanpå dem att skapa mer
sofistikerade saker fortfarande.
>> Så till exempel, hur skulle vi gå
genomföra ett spel som detta?
Tja, ärligt talat, skulle jag börja verkligen med bara
stödja en tangent i taget.
Låt oss bara genomföra stöd för vänster pil.
Så att studenten hade något skapa i Photoshop, eller
Repa sig med den lilla grafisk editor, en
pil som ser ut som en uppe till vänster där, bara
den grå platshållaren.
Sedan studenten var tvungen att räkna ut vad x, y-koordinat till
uttryckte det, var att sätta den i fönstret.
0, 0 är här uppe, så du måste räkna ut hur många
bildpunkter eller prickar, för att kompensera den pil från
överst på skärmen.
Och sedan en gång som är på plats, inte ditt program egentligen inte
göra något ännu, så du sedan behöver en andra sprite, för
exempel en grön pil som också är som pekar åt vänster, och du
då måste börja skriva några skript för det.
>> Och du märker kanske att dessa saker började komma på
olika hastigheter, och färgerna var olika
platser, och det beror på eleven använt lite
pseudo slumpmässighet.
Och med pseudo slumpmässighet, menar jag bara plocka ett nummer
mellan något och något eftersom du kan
börjar på saker, som om antalet är mellan en och
fem, ja, låt oss göra saken grönt.
Om det är mellan 6 och 10, låt oss göra pusselbiten
röd istället.
Så länge du har ett sätt att generera någon form av
slumpmässighet kan du göra sedan beslut bygger på att
slumpmässighet.
Och jag fortsätter att säga pseudoslumptal eftersom det finns en
lite smutsiga hemlighet.
Datorer kan inte komma med slumptal.
De kan bara göra vad de blir tillsagda att
de är konstgjorda enheter.
De kan inte bara gissa ett nummer som vi människor
känns som vi kan.
En dator har att göra något matematiskt att trolla fram
illusion av matematiska tal, ibland med hjälp av
aktuell dag tid som en ingång till räkna ut vad
nummer att återvända, men mer om det en annan gång.
För nu, vet bara att vi kan generera pseudo slumpmässighet.
>> Så när jag har möjlighet för den vänstra pilen för att starta
uppträder vid olika tidpunkter och med olika hastigheter, sedan
Jag kan gå tillbaka och lägga till några av dessa om villkoren.
OM denna sprite vidrör den andra, och vänsterpilen
har tryckts -
så tre villkor i det fallet.
Jag kan använda det och blockera kanske i så fall -
Då vill jag gå vidare och öka poängen.
Och på toppen har vi en poäng, vi har Awesome,
Cool, bra, och Boo.
Så det finns tydligen fem variabler som denna elev
används för att hålla reda på dessa olika mått.
Så kort sagt, är slutresultatet häpnadsväckande.
Det är kul, det är kul att spela, det engagerande, men det är inte
där studenten började.
Han eller hon började på ett mycket mindre antal steg.
>> Så vad är några andra byggstenar som vi kan
väva in dessa program?
Tja, det finns det andra begrepp i de flesta språk,
Scratch bland dem, som kallas trådar.
Så en dator kan faktiskt inte riktigt göra flera saker på en
tid, åtminstone inte vanligtvis.
Snarare, har en dator i allmänhet bara en CPU, och även
Men datorer är supersnabbt och kan därför
skapa en illusion av att göra flera saker samtidigt -
kontrollera din e-post, få en omedelbar
meddelande, skriva ut ett dokument -
verkligen är en dator hoppar bara från utskrift till IMing
att skicka e-post, tillbaka och tillbaka och fram och tillbaka så snabbt att vi
långsamma witted människor bara inte inser att det faktiskt är
kör dessa program en liten bit i taget.
Nu, detta lite av en vit lögn dessa dagar eftersom numera
många våra datorer är så kallade multi-core, så att du
ha en processor men flera kärnor, vilket är ungefär som
har flera processorer.
>> Och så ibland kan datorer göra riktigt många saker
vid en tidpunkt, men vanligen inom ett program, program
förlita sig på dessa saker som kallas trådar.
Så en tråd är ungefär som en miniatyr program som kan
samexistera med annan miniatyr program och kan köras
parallellt, eller åtminstone kan köras under illusionen att
De kör samtidigt.
Så Scratch stöder dessa saker som kallas trådar.
Du kan ha flera skript exekverar på en gång, precis som vi
gjorde med sjölejon, och detta gör att vi kan faktiskt
sedan har samspelet mellan dessa sprites.
Låt mig gå vidare här och dra upp, låt oss säga, trådar och
spela detta på följande sätt.
Vi har två sprites, var som vi får se
har bara en skript.
Och du märker att det verkar finnas en viss intelligens i
katt i detta eftersom han närmar -
[Vrålar]
DAVID MALAN: - och närmare den lilla fågeln.
>> Så hur är fågeln drift?
Nåväl, låt oss ta en titt på fågeln först.
Fågeln manus sa när den gröna flaggan klickas, gå till X
lika negativ 115 och y är lika med 150.
Så jag tänkte bara ut en slumpmässig plats där jag ville
fågel att starta, och jag bara plopped honom där som standard.
Då evigt om inte röra katt, så det här är en annan
typ av looping konstruktion, men samma idé, göra det igen och
och om igen.
Så länge du inte röra katten, flytta tre steg, och
om du är på kanten, studsa, där det är en slags
reflektion i biljard mening.
Så det är hur fågeln rör sig runt typ av
synes slumpmässigt, men det är bara för att det är studsar
väggarna i detta fall.
>> Nu katten, under tiden, är typ av fusk.
Katten, när den gröna flaggan klickas, ja, startar i
någon plats, en slumpmässig position -
åtminstone delvis enligt hackan
slumpmässiga gröna blocket där -
och sedan för evigt om att röra fågeln, spela lejonet ljud,
och sedan stoppa script.
Så när jag sa avsluta, eller avsluta tidigare, det finns ett pussel
bit i Scratch som bara kommer att döda programmet på den
punkt eftersom det är typ av logiskt gjort.
Men annars, här, ser vad som kommer att hända.
Pekar mot fågeln och flytta ett steg.
Så denna punkt mot fågel är typ en fördel katten
har i att det är målsökande in på den rörliga fågel, och vi kan
nu göra detta program ännu mer intressant.
Istället för att flytta ett steg i taget per CPU cykel, per
slå Toll på klockan, så att säga, låt mig gå vidare och
flytta, låt oss säga, fem steg i taget som katten.
Klicka på Kör, och nu är han verkligen finner honom snabbt.
Om vi ​​fördubbla detta ytterligare till 10 steg, det slags går
rätt för honom.
Nu kan vi ge fågeln,
kanske lite av en fördel.
Låt oss gå till fågeln och säga i stället för att flytta tre steg,
låt oss gå honom 30 steg.
Men han fastnade till slut.
>> Så här har vi två trådar.
Det är inspärrade i Scratch med två skript och två
sprites, men tanken på andra språk är att man kan
skriva i huvudsak för många program som detta och har
dem springa riktigt, eller imaginärt, parallellt.
>> Nu finns det även detta koncept inom programmering kallas
händelser, och detta är något vi inte kommer att se i C, de
språk som kallas C. Vi kommer att se den mot termin slut
i webbprogrammering, när vi introducerar JavaScript och
begreppet sidor bygga webbsidor som är dynamisk och interagerar
med användare.
Så i det här fallet har vi ett mycket enkelt exempel på två
älvor, pojke och flicka, som var och har sina respektive
trådar, men på något sätt dessa två hänger kommunicerar genom
av något som kallas händelser.
Så låt mig gå vidare här och zooma in på pojkens manus,
som ser ut så här.
När gröna flaggan klickar alltid göra följande.
Om nyckeln Space eller mellanslagstangenten, trycks säga
Marco för två sekunder, det är rent estetiskt på
skärm, lite pratbubbla, men sedan sända.
>> Så sändning är en annan Scratch pjäs som är
representant för en klass av funktionalitet i programmering
som gör att olika program, olika trådar,
till mellan kommunicera, att på något sätt skicka
meddelanden, ett till en annan.
Förbi ett papper i klassen är ganska låg tech
motsvarande.
Så sänder händelsen.
Jag kan skicka det här meddelandet och ordet händelsen
är helt godtycklig.
Scratch har ibland dessa drop downs, så jag bara kom upp
med ett slumpmässigt ord som händelse eftersom nu, vad pojken gör
när jag trycker på knappen är han sänder denna händelse.
Och om jag nu titta på flickans manus, är hennes manus
super enkelt eftersom allt hon behöver göra är inte agera när
den gröna flaggan klickas.
Hon är utformad för att agera när hon får offert, unquote,
"Händelse", och vid den tidpunkten, hon lyssnar därför
den så kallade händelse och om igen.
Så fort hon får denna händelse, hon kommer att skrika
Polo i två sekunder.
>> Och så kan du kanske sluta från detta exakt vad
nästa resultat kommer att bli.
Låt mig klicka på den gröna flaggan.
Ingenting händer att jag behöver göra det?
Publiken: Mellanslag.
DAVID MALAN: Space Bar.
Pojke säger Marco, säger flickan Polo.
Men det är inte svårt kodad i sig.
Det är mellan kommunikation mellan skript, så nu har vi
har förmågan att göra ännu mer komplexa program där
Dessa två är något mellan kommunikation.
>> Så vad riktningar kan vi ta detta?
Tja, i problembild 0, egentligen, är målet att
ha kul med Scratch.
För hacker utgåvan får du istället kul med en mer
sofistikerad version av Scratch kallas BYOB, Bygg
Dina egna block, men idén är densamma.
Du kommer att kunna -
Ja, det var avsiktligt.
Det kom från Berkeley.
BYOB är hacker utgåvan av denna, men båda
demografi, Standard Edition och hackare upplaga både den
Målet till hands för den kommande veckan är egentligen bara att dyka i
djup, få händerna smutsiga med programmering, och göra
något intressant, göra något interaktivt, gör
något konstnärligt, göra något roligt att faktiskt
visa, så att genom veckans slut, har du ett projekt,
inte bara för din första CS50 pset, men du har en
liten sak som du kan visa upp i Annenberg till
vänner eller ens familj genom att överföra den till MIT: s webbplats.
Och så som jag sa på onsdagen räknar vi 90% av klassen,
allmänt att göra de vanliga utgåvorna.
Inse att det finns också här utlopp för dig som
annars hitta dig själv lite uttråkad med grunderna
och verkligen vill dyka in och hantverk en vision som du redan
har med tidigare bakgrund i detta mer vänligt
miljö.
>> Så låt mig dra upp en annan exempel som en av våra tidigare
eleverna gjorde här och berätta lite något genom sång.
Det samma sätt, eftersom detta spelar, tänk på hur du går om
genomförandet av detta program med just dessa samma
byggstenar, lite av pseudo slumpmässighet, och en
lite bekant sång.
Om vi ​​kunde öka volymen bara lite?
[MUSIK - "Det regnar MÄN" Vädret FLICKOR]
>> DAVID MALAN: Det är det för CS50.
Vi kommer att se dig på måndag.
[Applåder]