Så det är min största glädje att välkomna er alla här i dag
för första föreläsningen , ja, Introduktion
till Beräkningar och programmering.
Även känd som CS50 eller brunn, CPSC 100, officiellt här vid Yale.
>> Så vi kunde inte vara mer upphetsad att välkomna er alla här.
Mitt namn är Patrick Rebeschini.
Jag är huvudinstruktör för klassen.
Jag här representerar en grupp cirka 60 anställda
som kommer att arbeta med dig hela terminen.
Denna siffra är nästan 60 av oss.
Ändå längs extraordinära nivån på åtagandena
att vi lagt ned på detta klass gör CS50 klassen
vid Yale University som erbjuder den högsta nivån av stöd
till alla er.
Och vi kunde inte vara mer stolt över erbjuder denna klass här igen.
>> I själva verket, som snart kommer att uppleva, CS50 är mycket mer än en klass.
Det är en gemenskap.
Och du kommer att vara en del snart av denna gemenskap.
Detta är andra året som Yale erbjuder denna klass.
Vi bygger på den yttersta framgången med förra året, där
för första gången, här på universitetet,
grund-lärande assistent antogs i klassrum.
Det hela började med denna klass förra året.
>> Så som ni vet, är klassen undervisas tillsammans med Harvard University.
Att lära den här kursen vi är relying-- vi kan
räkna med stor sakkunskap David Malan och Harvard laget.
Så David har varit undervisning CS50 för väl, 10 år nu.
Och varje år han har varit tänja på gränserna
och förbättra klassrummet erfarenhet.
Återigen, vi kunde inte vara mer glad att fortsätta samarbetet med dem.
>> I själva verket en av de mest intressanta delarna,
Jag kommer att säga att köra denna klass nu, både vid Harvard och här vid Yale,
är det verkligen otroligt korsbefruktning
av idéer, som syftar till att förbättra lärandet till er alla.
Så som ett resultat av denna omfattande samarbete mellan de två
universitet, är CS50 stolt tillkännage den nya versionen i år
med märkbara förändringar.
David kommer alla berätta om dem nu.
Så please-- denna varelse sade, vänligen gå mig
och välkommen att ge en stor applåd
välkomna David och Harvard team här på Yale.
>> [APPLÅDER]
>> DAVID MALAN: Tack.
Tack.
Detta är CS50, Harvard University och Yale University introduktion
till den intellektuella företag i datavetenskap
och konsten att programmera.
Och vad det betyder är att denna kurs i slutändan handlar om problemlösning.
I själva verket många av er kanske har kommit ut ur gymnasiet
eller har tillbringat de senaste åren undrar vad några av dina vänner
gjorde förra året eller i andra klasser.
Och ändå, verkligheten är, oavsett vad vi
göra i slutet av dagen i denna klass, det kommer att handla om problemlösning.
>> Och som sådan, kanske ta några försäkringar i det faktum
att 73% av eleverna som ta denna klass, både här
vid Yale liksom vid Harvard, har aldrig tagit en CS klass innan.
Så om du sitter här i publiken idag undrar
varför du sitter här i publiken idag,
eller kanske du bara följt tillsammans med några vänner,
eller kanske du har varit en lite nyfiken på vad
datavetenskap och programmering, inser
att de flesta av dina klasskamrater till vänster och till höger om du
är mycket i samma demografiska.
>> Och faktiskt, om vi ser Vid förra årets statistik
inom studentkåren i CS50, både här och på Harvard, 58% av studenterna
beskriver sig själva som mindre bekväm.
9% är mer bekväm.
Och då 33% är någonstans mittemellan.
Och det finns ingen formell definition vad dessa hinkar betyder.
Du vet slags du mindre bekvämt om du är.
Du känner dig lite orolig med kanske vara i klassen.
Du är inte helt säker på om en dator vetenskap klass är ytterst för dig,
och inse att du är i mycket gott sällskap.
Och faktiskt graderingen, och bedömningen,
och återkopplings, och allt det stödstruktur i klassen
i slutändan mycket individuellt.
Mer så än de flesta någon annan klass av design.
Och faktiskt, det som slutligen frågor i denna klass är inte
så mycket där du avslutar upp i förhållande till andra,
men där man i vecka 11 eller sista, och i förhållande till sig själv i veckan
0 här vår första.
Så vad betyder det?
Tja, innebär detta för de 73% av studenter förra året som aldrig hade tagit
en CS-klass innan, av terminsstart de
var syssla med ett språk kallas Scratch, som vi själva
kommer att se här i dag.
Och i slutet av den termin hade de gått
genom hela denna lista utmaningar.
Från och med ett språk som kallas c.
Genomföra, vad är vid första anblicken, gå
att vara lite av en utmaning för några, men ganska glädjande när du
få Super Mario studsa upp och ner en pyramid
genomförts, om än med bara något som kallas ASCII-konst.
Genomföra sista year-- vad studenterna förra året då
gjorde efter som genomför sina egen Caesar chiffer och Vigenère chiffer.
Så krypteringsalgoritmer som du kan
scramble information och sedan unscramble information för att skicka hemliga meddelanden.
Spelet 15.
Om du kommer ihåg från barndom eller någon partyfavör,
den lilla plast spel där du flyttar siffrorna uppåt, nedåt, vänster och höger
för att försöka få dem i ordning, faktiskt genomföra det spelet
och lösa den logik som behövs där.
Och då vi sysslat med forensics förra året.
>> Så i mitten av terminen, studenter som aldrig
använde sina tangentbord för detta ändamål före,
skrev programvara att återhämta sig, så att säga,
JPEG eller fotografier att vi hade av misstag
utgår från en digital minneskort från en kamera.
Återställning hemliga meddelanden från insidan av en bitmappsbild
och andra sådana typer grafik samt.
>> Vi övergick sedan till att ge hela klassen ett lexikon.
Bara en riktigt stor textfil med 150.000 engelska ord.
Och alla utmanades att på något sätt läsa, så att säga,
dessa ord i minnet.
I datorns minne.
Och sedan svara på frågor av formen, är detta ett ord?
Är detta ett ord?
Egentligen bara genomföra en stavningskontroll.
Och sedan utmana varje andra med en stor board--
en ledartavlan för att se vem som kunde använda den minsta mängden minne,
i kortast möjliga tid till faktiskt stavningskontrollera stora dokument.
>> Vi flyttade därefter till genomföra sin egen webbserver.
Så inte göra webbsidor i språk som HTML och CSS, om du är bekant.
Men faktiskt genomföra servern som
lyssnar på internet för förfrågningar från webbläsare
och sedan svara på dessa förfrågningar.
Sedan genomföra vår egen e-handel som hemsida, där
studenter kan köpa och sälja aktier.
Ritning i nästan realtid aktiekurser från Yahoo Finance.
Och låta elever se hur deras portfölj utvecklas.
Och slutligen en mash up Google News och Google
Kartor där studenterna genom sikt genom termer slut
hade förmågan att klicka, och runda, och söka på en Google-karta.
Och sedan se alla de nyhetsartiklar som
finns i närheten dessa särskilda områden.
Så verkligen går från noll till 60.
>> Och längs vägen har vad vi hade förra året kallas hacker tillägg.
Att höja ribban ytterligare för er
som kan mycket väl ha en bra mängd erfarenhet är att 9%
av mer bekväm.
Så inser att det finns en mycket högt i tak
även inom de utmaningar för studenter
kommer från en annan bakgrund.
Eftersom i slutet av dagen, vi är i slutändan
fokuserade helt enkelt på detta.
>> Men vad gör detta menar, problemlösning?
Så låt oss föreslå att vi destillera det så här.
Så problemlösning är verkligen just denna typ av bild.
Så du har ingångar till vissa problem, något du verkligen vill lösa.
Målet är att få resultat, en lösning på det problemet.
Och sedan i mitten är vad vi kallar en svart låda.
Du behöver inte nödvändigtvis vet eller ens bry sig om vad som finns inuti den svarta lådan.
Allt du vet är att när du mata bidrag till det,
du förhoppningsvis få utgång eller en lösning av det.
Och medan vi i dag kommer att se både på in- och utgångar,
vi ska långsiktigt, och över under hela terminen,
fokusera på vad som finns inuti den rutan.
>> Och däri kommer att ligga något som kallas algoritmer.
Steg för steg instruktioner för faktiskt lösa några problem.
Men vad är ett exempel på några ingångar?
Så kanske en enkel sak på start av varje läsår, någon
kanske vill ta närvaro.
Så vi kan göra en, två, tre, fyra, fem, sex,
och hur skulle jag behålla reda på den informationen.
Jag kan bara gå en, två, tre, fyra, fem, sex.
Och bara använda slags ensiffriga tal.
>> Eller jag kunde faktiskt spela detta lite längre sikt.
Och hur gör jag representerar alla människorna i det här rummet?
Tja, jag kan göra något, OK.
Jag ser en person.
Okej.
Jag ser en annan person, en tredje person, och så vidare.
Men ingen räknar personer gillar detta.
Så bokstavligt, de flesta av oss om vi är även kommer att dra någonting alls,
är förmodligen kommer att gå ett två tre Fyra,
kanske få lite fantasi, fem, sex, sju, åtta, nio, tio och så vidare.
>> Och det är faktiskt en system som kallas unär.
Uno, som uno innebär ett, där du bara har en bokstav i alfabetet.
Du har just fått denna hash märke.
Och jag, Effektivitet, bara drog dessa hash märken, i slutändan
som raka linjer.
Men jag kunde ha dragit dem så lite streckgubbar.
Var för att representera en person, en ingång,
Jag drar bara en pinne figur eller en hash märke.
Men detta är inte allt som uttrycks.
>> Om allt jag har är dessa hash märken, för att inte tala pinne figurerar,
Hur kan jag företräder något som nummer 15?
Eller 15 personer i rummet?
Jag kanske måste göra något liknande en, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15.
Det kan bara inte fungerar mycket bra.
Som ingångarna får stora, vi behöver ett bättre system än detta.
>> Och det visar sig att system som datorer använder
är inte så annorlunda från vad du och jag vet.
De flesta människor i det här rummet, även om du är bland de mindre
bekväm, inte nödvändigtvis vet hur din Mac eller PC verkligen fungerar,
du har förmodligen åtminstone hört, att under huven är 0: or och 1: or.
Det så kallade binära systemet.
Så ja, datorer har mer än bara hash märken i deras ordförråd,
men inte så mycket av en ordförråd som vi människor.
>> I själva verket behöver vi människor inte använder binär.
Bi betyder två, 0 och 1.
Men decimal, deka vilket innebär 10, 0 till 9.
Så vi har en mycket mer uttrycks kapacitet i vår normala mänskliga världen.
Men jag skulle hävda att dessa system, binär, och decimal, och allt
i mellan och utanför, är faktiskt alla ganska bekant.
Till exempel anser detta exempel här, 123.
Så detta är verkligen, naturligtvis, ett antal som vi känner som 123.
Men allt jag bara drog var just detta mönster av symboler, skåror så att säga.
Sortera former på tavlan med krita.
>> Men varför gör vi omedelbart och intuitivt förstå detta som 123?
Tja, om du var som mig i skolan,
du lärt förmodligen att det är 1s kolumnen är detta 10s kolumnen
detta är den 100s kolumn.
Och varför är det bra?
Tja, det enkla aritmetiska du nu göra för att komma från ett mönster av symboler
till ett antal som vi förstår intuitivt.
Är vad, 100 gånger 1, och sedan 10 gånger 2 och 1 gånger 3,
vilket naturligtvis är bara 100, och detta är 20, och detta är tre.
Och så om vi lägga till dem together-- ah.
Så ligger däri slags resonemang bakom varför denna uppsättning av symboler
betyder något verkligt och numerisk.
>> Tja, datorer gör exakt samma sak, men de bara kan räkna så högt som en.
Medan jag kunde räkna så högt som tre.
Och faktiskt, om jag fortsatte jag kunde gå så högt som nio i detta system.
Datorer har bara nollor och de i sin alfabetet.
>> Så vad betyder det?
Tja, det betyder bara att om en dator vill representera, säger siffran 0,
kanske med hjälp av tre characters-- tre bokstäverna i alfabetet så att säga,
det är hur en dator representerar 0.
Så inte så skrämmande hittills.
Det är precis vad vi människor skulle göra.
Och i själva verket de flesta av oss skulle bara ignorera inledande nollor i alla fall.
>> En dator, om den vill att lagra numret 1,
visar sig kommer att göra detta.
Och en dator för att lagra siffran 2 är inte
kommer att göra unära systemet, som jag nämnt tidigare.
Det är faktiskt kommer att göra detta.
Och det är förmodligen där mönstret börjar
att bli mindre självklart för de flesta människor.
Det är två, är detta 3.
Märkligt nog är det nu fyra.
Och nu är det verkligen verkar vara kanske kryptisk,
men det är inte om vi anser vilken binär egentligen innebär.
Det betyder att du har två bokstäverna i din alfabetet.
Så två möjliga tecken för varje platshållare.
>> Så det verkligen betyder att vi ska behöver en 1s eller 2s plats,
en 4s plats och sedan 8 och 16, 32, och 64.
Och vad är skillnaden där?
Liksom dessa är 1, 2, 4, 8, 16, 32, 64.
Och innan vi hade 110, 100,000, 10,000.
Vad är likheten där?
Och vad är mönstret?
Ja.
Elev: befogenheter 2 i stället för befogenheter 10.
DAVID MALAN: Ja.
Befogenheter 2 i stället för befogenheter 10.
Och så om jag ville behålla gå, 8, 16s och så forth--
men nu om du har denna typ ledtråd, nu det binära talsystemet
är faktiskt ganska enkelt.
Varför är detta mönster av 0: or i en värld av datorer 0?
Jo eftersom det är 4 gånger 0, 2 gånger 0, 1 gånger 0 och du får 0.
>> Varför är detta nummer ett?
Samma resonemang, men nu har vi har en 1 i en kolonn.
Varför är detta två?
Vi har en 1 i 2s kolumnen.
Och hur gör sedan jag representerar säga, nummer 7 i binär?
Säger starkare.
>> STUDENT: Tre 1s.
>> DAVID MALAN: Tre 1s.
Så en, ett, ett, eftersom vi behöver bara 4 plus två plus ett ger mig 7.
Okej.
Så därifrån hur gör vi representera 8 med 3 platshållare?
Ja.
>> STUDENTEN 1, 0, 0, 0.
>> DAVID MALAN: Ja 1, 0, 0, 0.
Och ändå kanske, jag typ tekniskt behöver
att lägga till en annan platshållare till styrelsen.
Om jag vill passa på att jag verkligen behöver göra något sådant.
Så jag faktiskt behöver använda nu den 8s kolumnen, och det är bra.
Men märkliga i computing är att det kommer att kosta oss något.
Du behöver mer RAM-minne i datorn nu.
Du behöver mer minne eftersom du behöver något
fysiska att lagra den extra bit, så att säga.
Binära siffror.
Och faktiskt allt som har hänt här, som decimalsystemet,
Om vi ​​fortsätter att lägga till siffror upp och upp och upp, går vi till 5-6 till 7-8
det är som bär en, bokstavligen.
Och sedan allt annat går tillbaka ner till noll.
>> Men hur vi faktiskt representerar dessa saker fysiskt i en dator?
Ja, vid slutet av dagen, den enda fysisk ingång går in i min dator
Här är denna nätsladd, så elektricitet eller elektroner från väggen.
Och så hur gör jag får från något fysiska sådär faktiskt
representerar en idé så här istället.
>> Tja, vad kan vi göra?
Vi skulle kunna överväga att, okej, kanske om elektricitet flödar
Jag kunde lagra den och hålla fast vid det.
Och om jag håller på till viss el,
som bara kommer att godtyckligt representera en 1.
Och om jag dra ur kontakten och det finns inget där,
du vet att det bara kommer godtyckligt representerar en 0.
>> Så om något är det, en.
Om ingenting är där, 0.
Eller så kan du göra det här lite mer visuellt.
Här är en 0.
Det finns inget intressant pågående på om baksidan av min telefon.
Men om jag tillåter lite bit av elektricitet att flyta,
även om det är lite ljus här gick min ficklampa på.
Så jag lagra en laddning och ergo, den här telefonen utgör nu en 1.
Så 0 1.
>> Så med en iPhone hur högt kan jag räkna med denna typ av strategi?
Jag menar att en.
Det är inte så övertygande.
Så vad mer kan vi göra?
Nåväl låt oss se, är alla på deras telefon just nu att jag kunde låna?
Den som har en telefon med en ficklampa inbyggd?
Kan jag få låna?
Jag behöver inte den upplåst.
Okej.
Tack.
Låt mig låna detta.
Okej.
Så om jag rullar nu upp och här, vad jag representerar nu?
Ja.
Så det är en tre eftersom det är i 1s kolonn, detta är i den 2s kolumnen.
Så ett plus två är tre.
Och sedan om vi försöker få verkligen creative-- åh, tack.
Mycket förebyggande.
Okej.
Jag har nu tre iPhones.
Okej.
>> Och nu this-- jag kommer inte göra något mer än detta.
Vad jag representerar nu?
Bara sjuor.
Men jag behövde fysiskt mer minne i det här fallet.
Men det är allt det är.
Du kan tänka på vad som händer on-- tacka du-- insidan av din telefon
som bara är en switch som är att slås på och av.
>> Och om du någonsin hört ordet transistor.
Eller om du någonsin hört marknadsföring tala Intel inside,
som är att tala med den typ av hårdvara det är insidan av din dator.
Intel gör processorer, centralenheter,
som är som hjärnorna insidan av din dator.
Och dessa processorer och saker som de är anslutna
att ha massor av små switchar.
Miljoner, miljarder switchar som kan vara antingen på eller av.
>> Så datorer, tack och lov, som våra Mac och PC,
kan räkna sätt högre än 7 eller 8 eftersom de har mycket mer än tre
eller fyra bitar.
Sätt mer än motsvarigheten till tre ficklampor som vi just haft.
Men nu detta börjar bli ganska ointressant snabbt.
Om jag vill nu att faktiskt kunna att göra något mer intressant,
Jag vill kunna hoppa till något sådant.
>> Så ASCII, det är egentligen inte en användbar akronym, men American Standard Code
för informationsutbyte.
Det betyder bara några år sedan vi människor beslutade
Vet du vad, vill vi kunna göra mer med datorer än bara siffror.
Vi vill inte att de bara vara dyra miniräknare,
Vi skulle vilja kunna göra saker som ordbehandling, om än mycket enkelt.
Senare hade vi e-post och andra sådana medier.
>> Och så världen bestämde några år sedan enligt detta system ASCII,
vet du vad?
I vissa typer av program varje gång du
se motsvarande antalet 65, i likhet med mönstret av bitar.
Och vi kunde göra matematik här på bordet.
Mönstret av bitar som representerar 65.
Tänk inte på det som 65 i decimal.
Tänk på det som godtyckligt, men globalt, konsekvent som huvudstad
EN.
Och då världen bestämt, vet du vad?
Låt oss ta ett annat mönster av bitar.
Och om vi någonsin se nummer 66, låt oss bara
antar att det är kapital B. Spola fram till H
och jag, om du ser 72 eller 73, som bör vara en H och ett I, respektive.
Och så länge som hela världen kommer överens om detta.
Så att när du tar emot ett e-postmeddelande, eller du skulle få en fil på ett USB-minne,
eller något liknande that-- när du ser att mönstret av bitar,
du vet att det ska vara så här brev eller någon annan bokstav.
>> Men det är sammanhanget specifikt, höger.
Ett e-postprogram kan tolka dessa saker som tecken,
men en grafräknare eller kalkylator kan representera eller tolka
dessa saker, naturligtvis, som bokstäver.
>> Så med det sagt, snabb liten recension.
Detta är kanske en tre tecken e-post som har skickats till mig.
Under huven är det allt i 0 och 1, men vi bryr oss inte.
Vi kommer att börja abstrakt ovanför 0 och 1 till bokstäver.
Och om jag ser ett mönster av 0 och 1 som verkligen representerar 72, tips, tips, 73,
och sedan 33, vad är budskapet?
>> STUDENT: [OHÖRBART]
DAVID MALAN: Så om du tror tillbaka bara för en stund sedan, HI
var budskapet jag försökte kommunicera här eftersom H är 72,
Jag är 73, och nu 33-- du skulle inte nödvändigtvis vet detta i förväg,
men det visar sig om man faktiskt se mer av diagrammet och systemet
att mänskligheten överenskomna år sedan är det bara ett utropstecken.
Och faktiskt, det finns ett mönster av symboler och siffror för varje tecken
som du kan ha på tangentbordet.
>> Okej.
Låt oss abstrakt ytterligare.
Om vi ​​inte vill bara ha saker som siffror och bokstäver,
vi faktiskt vill genomföra grafik.
Tja, om du har någonsin hörde akronymen RGB.
Det är typ av daterad nu, men det är fortfarande typ av där.
RGB är röd, grön, blå.
Och det är bara ett system att säga, vet du vad,
låt oss använda tre uppsättningar bitar.
En uppsättning av 8 bitar, en annan uppsättning av åtta bitar, och en annan uppsättning av 8 bitar.
Och låt oss använda dessa bitar att lagra hur mycket rött vi
vill på vår skärm, hur mycket grön vi vill ha på vår skärmen,
och hur mycket blå vi vill ha på vår skärmen.
Och det betyder bara att om du har en lot-- ett stort antal för rött,
det innebär att ge mig en hel del rött.
Om du har ett stort antal för grön, ge mig en hel del grönt.
Och om du har bara en liten bit blå eller ett litet antal som 33,
ge mig lite blå.
Och om du råkar kombinera dem tre storheter, så att säga,
du får this-- du knappt kan se på projektorn här, men denna skumma
nyans av gult eller brunt.
>> Men detta är att säga, med hjälp av att mönster av åtta plus åtta plus plus 8--
att mönstret av 24 bitar är hur en dator skulle
lagra den nyans av gult i en liten prick en pixel på skärmen.
Så vi har gått från 0 och 1 till decimal nummer till bokstäver i alfabetet.
Eller mer intressant, färgade prickar.
>> Nå, vad naturligtvis då kommer nästa?
Ja, vad är en bild som du se på Facebook eller få i ett e-postmeddelande?
Eller liknande?
Vad är definitionen tekniskt av en bild?
Ja.
Vad är en bild som består av om du ser riktigt nära på skärmen?
Ja.
Det är bara en massa pixlar.
I själva verket, om du tar din laptop kanske senare,
och ser verkligen nära vid det-- beroende
på hur dyr den bärbara datorn är och hur hög kvalitet skärmen är,
du kan mycket väl se alla de små prickar på skärmen.
>> Och dessa punkter eller pixlar, vilket innebär att det finns
24 bitar som representerar varje pixel i den fotografi som du ser på Facebook,
eller att du just tagit på din iPhone nyligen.
Och så det är hur vi får saker som grafik.
Ja, vad är en video?
En video är bara en uppsättning av grafik flyger förbi på skärmen igen
och om och om igen.
Och så filmer verkligen är bara mönster bitar som representerar stödraster, rader
och kolumner av punkter, flyger förbi skärmbilden,
efter bild, efter bild, alias
Rörliga bilder.
Så det är det för in- och utgångar.
>> Allt vi har nu är en antagandet att du
vet vad, om vi vill ha en dator att representera information,
Vi har ett system för att göra det.
Vi kan göra det med 0: or och 1s vid slutet av dagen.
Men vi kan abstrakt, så att tala, på toppen av det
för att representera mer intressanta saker.
Och här på ut i CS50, och datavetenskap mer generellt,
vi nu står på axlarna av alla de människor som
kom före oss som räknat ut det.
Och nu bara anta att datorer kan representera in- och utgångar.
>> Men nu ska vi faktiskt göra något med dem.
Så en algoritm är bara en uppsättning instruktioner, steg för steg,
för att lösa vissa problem.
Och vad skulle ett sådant problem vara.
Så detta är en gammal skola teknik, en telefonbok.
Och inne i en telefonbok är en massa namn och nummer.
Och dessa namn är i allmänhet sorterade i bokstavsordning.
>> Så om jag ville hitta någon i denna telefonbok som Mike Smith,
vad är en typisk människa ska göra?
Tja, kan du helt enkelt öppna upp, titta på den första sidan.
Jag ser inte Mike Smith.
Vänd dig till den andra sidan, Jag ser inte Mike Smith.
Och bara hålla på och gå.
Är detta steg för steg korrekt?
Ja.
Det är typ av dum, höger.
Det är ineffektivt, höger.
Eftersom det kommer att ta för evigt att komma till Mike, men det är korrekt.
För om Mike är här Jag kommer verkligen hitta honom.
>> Så vad är en något mer förnuftig person kommer att göra?
De kan fortfarande öppna till fronten, och kanske flyga genom telefonboken
två sidor åt gången.
Två, fyra, sex, åtta.
Jag kan faktiskt inte fysiskt gör det mycket bra.
Men i teorin borde detta vara dubbelt så snabbt, två sidor åt gången.
Är denna algoritm korrekt?
>> STUDENT: [OHÖRBART]
DAVID MALAN: Inte nödvändigtvis.
Bra.
Varför det förbehållet?
>> STUDENT: Eftersom han kunde vara på en av de sidor som du hoppa.
DAVID MALAN: Ja.
Så även om jag får närmare och närmare.
Tänk om han är bara av misstag, dålig lycka, inklämt mellan de två sidorna
att jag flyger över?
Så vi behöver en fix för detta.
Vi behöver faktiskt sedan säga, vänta en minut,
kanske om vi går för långt, kanske om vi träffade T avsnitt,
för T kommer efter Smith, då vi bör åtminstone dubbelt tillbaka åtminstone en sida.
Så fastställbara, men det finns en villkorad fråga där.
Så det är dubbelt så snabbt, men du kanske måste fördubbla tillbaka bara lite.
Men ingen i hans rum, även om du inte verkligen använda telefonböcker längre,
kommer att börja från början.
Vad ska du göra efter Mike Smith?
Du kommer att gå ungefär till S.
Eller om du inte verkligen har den fusklapp på papperet,
du kommer att gå åtminstone ungefär till mitten.
Och absolut inte framsidan av boken.
Du kommer att titta ner.
Och matematiskt du förmodligen kommer att se M avsnitt, som
är ungefär i mitten.
Och då du kommer att inse vad som är sant?
Var är Mike?
>> STUDENT: [OHÖRBART]
DAVID MALAN: Ja.
Så han är över på denna sida.
Och så vad kan du göra?
Tja, både bildligt och bokstavligt kan du riva problem i halv gång?
Och då vet att du kan kasta Halv av problemet bort.
Och nu är vi kvar med grunden samma problem, men det är hälften så stort.
Och så nu vad är uppsättning instruktioner?
Vad är algoritmen för att hitta Mike Smith?
Det är exakt samma sak.
>> Nu händer det att vara M sektionen och detta är den Z sektion,
men det grundläggande formeln är fortfarande densamma.
Gå ungefär till mitten, titta ner, oh, darn det.
Nu är jag i T avsnittet Jag har gått för långt.
Men även här kan du tillämpa samma logik.
Throw halv av problemet bort och nu är vi
vänster med ett problem som är en fjärdedel av storleken.
Och vi kan upprepa, och vi kan upprepa, och vi kan upprepa tills teoretiskt
det finns bara en sida kvar på som Mike antingen är eller inte.
>> Så vad är så kraftfull om denna idé?
Jag menar efter allt, det är ganska intuitivt.
Ingen kommer att börja på i början av telefonboken
och flip 1.000 sidor för att hitta Mike Smith.
De flesta alla i det här rummet kommer att göra ungefär den typen av algoritm
spara för rivningen.
>> Och så varför vi gör det?
Tja, anser effektiviteten.
Överväga hur mycket bättre den här algoritm var genom att bryta ner
i sina beståndsdelar.
Så vad gjorde jag först göra?
Jag plockade upp telefonboken.
Och en datorforskare, och en programmerare,
mer generellt visar det sig, går att börja räkna allt på 0.
>> Varför?
Tja, det är lite konstigt att vi människor räknas, i allmänhet,
utgående från en.
För vad är det minsta antalet Vi kan tydligt representerar baserad
även på vår gamla grundskolan matte?
Ja, det var 0, om det är i decimal eller binär.
Och så du ser i världen av datorer och programmering,
specifikt, vi börjar räknar allt från 0.
>> Så jag plockade upp telefonboken steg 0.
Jag kommer att öppna för mitt i telefonboken.
Och det är sannerligen en uttryck för vad jag gjorde.
Och sedan steg två var titta på namnen.
Steg tre är en liten annorlunda konceptuellt.
Jag frågar mig själv en fråga.
Om Smith är bland de namn, Jag kommer att fatta ett beslut.
Om han är bland de namn, då jag kommer att kalla Mike.
Och jag kommer att fatta ett beslut baserat på denna del av information.
>> Men om inte, om Smith är tidigare i boken till vänster,
Jag kommer att öppna till mitten av den vänstra halvan av boken.
Och så här är skicklighet, Jag kommer att gå tillbaka till steg två.
Jag kommer att sortera av stå på egna axlar
och bara upprepa tidigare arbete jag gjorde.
Men det arbete jag har kvar är mindre, och mindre, och mindre.
Men det är fortfarande kommer att fungera.
Men om Mike är i stället senare i boken till höger,
Jag kommer att öppna till mitten av den högra halvan av boken,
sedan gå tillbaka till steg två.
>> Men det finns faktiskt en fjärde scenario.
Mike är antingen här, eller här, eller här, eller--
>> STUDENT: Inte där.
DAVID MALAN: Inte där.
Och faktiskt, om vi räknar inte med denna fjärde och sista scenariot
vårt program kan vara buggig eller brister på något sätt.
Else, sluta när det gäller att Vi har inte hittat Mike alls.
Och faktiskt, om du har någonsin märkt datorn hängande, eller alla
plötsligt ord eller någon annan Programmet avslutas bara oväntat,
och ibland thee fel meddelande är bokstavligen det.
Detta program avslutas oväntat.
Det kan vara för någon av flera skäl.
Men ibland är det något så enkelt som detta.
Den mänskliga programmerare som skrev att mjukvaran
inte inse att, åh, det finns en fjärde sak som faktiskt kan hända.
Och om du inte skriva kod för att fånga den fjärde scenario,
det är verkligen oväntat ibland vad datorn kan faktiskt göra.
Nu ropar en några av dessa saker.
Så i gult här, jag har markerade villkor
som hädanefter vi bara kommer att kalla funktioner.
Funktioner i världen av programmering är precis som åtgärder,
uttalanden av åtgärder.
Så plocka upp, öppen för, titta på, ring, öppna, öppna, sluta.
Det är en funktion, en procedur, en åtgärd, vilket som helst antal synonymer
skulle fungera lika bra.
Nu vad är dessa saker nu i gult?
Om annat, om annat, om annat, dessa är vad
vi kommer att kalla villkoren i programmering,
eller filialer, beslut Parlamentet, om man så vill.
Men hur vet du vilken gaffel i vägen för att ta, så att säga?
Vi måste lyfta fram villkoren till höger
där, vilket är dessa Ja Nej frågor.
Dessa sanna falska frågor.
Smith bland namn?
Smith tidigare i boken?
Smith senare i boken?
Det är frågor till där det finns en ja eller nej,
eller ekvivalent sant, eller falskt, eller ekvivalent, ett eller noll svar.
>> Och under tiden finns det bara en sista biten.
Detta har här vilken typ av effekt?
Oavsett om du programmerar innan, hur skulle du
beskriva vad steg sju och 10 gör?
Vad sa du?
STUDENT: En rekursiv steg.
DAVID MALAN: En rekursiv steget.
Ja, i huvudsak.
Det är tekniskt iterativ här om du är bekant.
Men vi ska återkomma till det.
Men det gör något klart.
Återigen, det är att framkalla en cykel, en slinga, rätt.
Du bokstavligen gå tillbaka till någon tidigare steg.
Och så sannerligen, detta kommer att genomföra någon form av cykel.
Men du kommer inte att få fastnat i denna oändligt, höger.
För om du ständigt kontrollera är Mike här, eller till vänster, eller inte här,
småningom han inte kommer att vara där.
Och du kan bara sluta helt och hållet enligt den sista raden.
>> Så det är det för vokabulär.
Och det var vad vi skulle i allmänhet kallar pseudokoden.
Det är inte en faktisk språk.
Det är bara mycket bryskt engelska, men den kommunicerar punkten.
Det finns ingen formell struktur här.
Du använder bara det fåtal ord, men som tydliga ord
som du kan kommunicera din idé.
>> Nu hur bra är att algoritmen och hur mycket bättre är det?
Tja, vi har inte att komma in i detaljerna i siffror eller något
sådär.
Men vi kan titta på form av denna lösning.
Så om vi drar bara några xy plot här på den horisontella axeln här.
Låt oss bara ringa storleken på problemet.
Och datavetare skulle typiskt använder n som variabel här.
Så n sidor, eller n personer i rummet, eller vad det är du försöker räkna.
>> Och sedan på den vertikala axeln på vänster, skulle det vara dags att lösa.
Så hur många sekunder gör det ta mig att hitta Mike Smith?
Eller hur många steg tar det?
Hur många sida varv tar det?
Så det är hur mycket det kostar mig i tid för att lösa ett problem.
Och vi skulle kunna dra den första algoritmer lutning, om man så vill,
som just denna raka linje i rött.
Och jag ska kalla det n.
>> Varför n?
Varför är det just detta en till en relation?
Tja, om Verizon eller oavsett telefonbolag
adderar ytterligare en sida till telefonboken nästa år,
som kan driva Mike en steg närmare slutet,
beroende på var den sidan är.
Och så effekten kanske bara vara att lägga till ytterligare en sekund.
Eller en mer sida sväng.
En 1-1-förhållande.
>> Däremot den andra algoritmen.
Hur mycket snabbare var det intuitivt?
Där jag gick två sidor åt gången?
Ja.
>> STUDENT: [OHÖRBART]
>> DAVID MALAN: Ja.
Så det kommer att bli dubbelt så snabbt.
Och vi skulle dra det här beroende på omfattningen.
Det är fortfarande en rak linje, men lägre än den röda linjen.
Eftersom det för ett visst antal sidor, om det tar
du här många steg med den första algoritmen,
det kommer att ta dig halv så många steg med den andra.
Och så den gula linjen som beskriver den andra algoritmen
bara kommer att ligga under den.
>> Men vad är riktigt kraftfull är att tänka på tredje och sista,
och otroligt mest intuitiva algoritm, som har denna form.
Tekniskt vi skulle kalla detta en logaritmisk kurva.
Log bas 2 n i detta fall.
Men som egentligen inte roll.
Det viktiga är egentligen grunden annan form som den har.
Och du kan överväga hur mycket kortare denna linje verkligen
är i det långa loppet.
Det är hela tiden ökar.
Det är inte platta ut perfekt.
Men det blir allt så mycket långsammare eftersom problemet blir större och större.
Och du kan tänka på det här way-- om Verizon inte bara
lägga till en sida nästa år men dubblar antalet sidor i telefonboken,
den första algoritmen kanske ta dubbelt så många steg.
Om det är 1000 sidor detta år, 2.000 sidor nästa år,
Mike kan vara så mycket längre bort.
Så det är 1000 extra steg för att hitta honom.
Den andra algoritmen kanske bara 500 mer
åtgärder för att hitta honom eftersom igen, Jag flyger igenom det två åt gången.
>> Men hur är det tredje algoritm?
Om Verizon fördubblar storleken av telefonboken
nästa år från 1000 till 2000 sidor, hur många fler steg
är min tredje algoritm kommer att ta?
Ja, det är bara en.
Och det är den kraftfulla idén.
Du kan ta 1000 sida bita ut ur det problemet på en gång.
Och nu om man betänker en dum scenario,
men det slags talar till kraften i denna typ av intuition--
om en telefonbok hade, liksom, fyra miljarder sidor, känns som ett riktigt stort problem.
Och faktiskt, kanske det ta mig fyra miljarder sida
vänder för att hitta Mike Smith i det fallet med den första algoritmen.
Men hur många steg skulle det ta i den tredje algoritmen
att hitta Mike bland fyra miljarder bitar av papper?
Så fyra miljarder man river på mitten.
Du får två miljarder.
Sedan en miljard, då 500 miljoner, 250 miljoner, 125 million-- men det
känns som om detta är kommer att ta ett tag.
Jag kanske behöver 32 fingrar att räkna upp så hög.
Men det är verkligen som få som 32 Page tårar.
Du kan gå från fyra miljarder till en sida delnings
det ursprungliga antalet sidor i halv 32 gånger
tills du är kvar med bara denna enda sida.
>> Nu, naturligtvis, jag fusk här.
Det är inte så att vi bara vara sort dumma helt med de två första
algoritmer.
Jag fusk i någon mening, eller verkligen jag utnyttja ett antagande.
Vad var sant om telefonboken i sin ursprungliga form som tillät
mig att ens använda det tredje algoritm?
Ja?
PUBLIK: Det var alfabetiskt.
DAVID MALAN: Det var i alfabetisk ordning, eller hur?
Om det var bara i slumpmässig ordning, är detta ett slöseri
tid, hela det här samtalet.
Jag måste titta på varje sida om det är i slumpmässig ordning
att hitta Mike Smith innan jag kan konstatera att han är där eller inte.
Och så hörnet vi har skurit är att jag har
antas att någon annan i det här fallet gjorde jobbet åt mig.
Och så att i slutändan inviterar frågan, ja, vänta en minut.
How do you sorterar 1000 sidor av namn och nummer?
Det är faktiskt en annan problem, något
Vi ska återkomma till i framtiden.
Men när man tänker på hemsidor som Facebook och Google för Gmail
och saker som Googles egna sökindex,
när man har miljoner eller miljarder bitar av data som finns lagrad i dessa dagar,
searching-- och inte tala sortering dessa problems--
i slutändan är en utmaning i sig.
Och faktiskt, så är detta bara en av dessa utmaningar
att vi kommer att titta på.
>> Så nu ska vi ta en stund och ta en titt på CS50
själv och ge dig en känsla av vad som väntar den här terminen.
Faktum är att om du inte redan har gjort, tar en titt på den här webbadressen.
Och som Patrick hänvisade till detta år vi är
gör en betydande investering alla desto mer under loppet stöd
struktur i termer av terapi och CA, kontorstid,
sektioner tillgänglighet, och digitalt material på nätet, liksom.
Själva verket, i termer av banans föreläsning, vi är här i dag.
Och förväntningarna detta år officiellt av kursen
är sköta idag, kursens sista föreläsning, och en kurs
ungefär i mitten av terminen med varje föreläsning i mellan
förfogande i allmänhet på en fredag ​​eftermiddag
på nätet, både för Yale studenter och Harvard studenter i år.
I själva verket en av de grundläggande förändringar är
att vi antar på Harvard ett paradigm mycket
som vi gjorde här förra år och nu i år,
så att liknande, vi fortfarande filma mest av kursens föreläsningar i Cambridge
men göra dem tillgängliga tidigare än vad vi har i det förflutna
så att de av du-- om du vill, till exempel,
få ett försprång på material på den första helgen i stället
än den andra helgen, har du tillgång till dessa typer av material,
sökbar, inbäddningsbar, hyperlinkable till relaterade resurser allt tidigare.
När det gäller de ämnen, för att ge dig en känsla av kursens trajectory--
och en del av detta kan vara jargong för nu, men inte för länge, vara säker.
Vi börjar idag, i slutändan, med att titta på programmering en
språk som kallas Scratch.
Vi kommer övergången därefter nästa vecka till något som kallas C
och sedan titta på andra byggnaden block för att lösa problem,
saker som kallas matriser och algoritmer, hur vi använder minne till vår fördel
och nackdelar, och saker som datastrukturer,
och sedan mot den bakre änden av den klass tittar på maskininlärning
och tittar på en annan språk som kallas Python,
hur webben fungerar, hur internet mer i allmänhet fungerar, protokoll som HTTP,
språk för databaser som SQL, JavaScript för webben,
och slutligen binda alla av dem tillsammans.
>> Och så sannerligen, vid slutet av dagen, du
kommer inte lära sig i denna klass Scratch eller C eller Python eller SQL eller JavaScript.
Du kommer i stället mer generellt lära datavetenskap och grunden
därav, och du kommer lära sig att programmera
i valfritt antal av dessa språk på vägen.
Så ja, ett av målen av kursen i slutet
är att ta bort alla kursens stödhjul av de sista veckor
så att efter detta, kan du återgå till din egen fields--
oavsett om det är eller är inte datavetenskap
eller teknik, i den naturliga vetenskaper, konst, humaniora eller beyond--
och ta del av detta kursens idéer och detta fältets
idéer och praktiska kompetens till din egen domän
För att lösa problem däri.
>> Vad vi ska göra här tiden i de flesta torsdagar efter idag
är med kursens huvuden leder vad vi kallar genomgångar
av kursens problemsamlingar.
Så varje vecka när vi har ett problem in, vi ska
att gå igenom på en plats så här kursens utmaningar,
erbjuder dig några tips och tricks och designtekniker.
Men om du inte kan för att göra dem personligen,
inser de samma resurser kommer att bäddas
genom en av banans amanuenser
i problemet ställer sig, liksom.
>> Problemet ställer i år, till skillnad från förra året, baserat på återkoppling,
kommer fortfarande att släppas på fredagar.
Men snarare än att vara beroende efterföljande fredag,
vilket ger dig bara sju dagar, kommer att effektivt bero 10 dagar senare.
Och faktiskt, kommer detta att innebära att de kommer att överlappa med en helg.
Men vi hoppas att detta år särskilt denna kommer
tillåta elever att bättre tillgodose ebb och flod i sina scheman,
oavsett om det är akademiker eller extracurriculars eller idrott
eller midterm säsongen.
Du kan antingen front-load eller back-belastning din vecka med fokus på CS50 baserad
på egen hand vecka faktiska kurs belastning.
>> Problemet ställer sig kommer att omfatta ett antal språk,
även om vi ska fokusera främst tidigt på C
innan vi fokuserar därefter på högre nivå, fler webbcentrerade språk.
Och sedan ett par frågor här-- bör du ta en klass som CS50
som en första året?
Så absolut.
Och faktiskt, det är inte nödvändigtvis något
du bör skjuta upp tills du har klippt tänderna på andra typer av klasser.
Utan snarare överväga att för många studenter,
inklusive mig själv tillbaka i dag, detta är en mycket obekant område,
särskilt om du aldrig tog en AP CSA
eller något liknande i high school.
Men inser att tidigt, oavsett om det är den här kursen
eller någon annan introduktionskurs, nu är verkligen den bästa tiden,
Jag tror, ​​att hitta någon ny väg eller några nya akademiskt intresse, liksom.
Och sedan ta med andra courses-- så en av de viktigaste skillnaderna här
kontra Harvard är att vi bara ta fyra kurser per termin
vid Harvard av någon anledning.
Och ni faktiskt dra av några 36 kurser totalt
under loppet av dina fyra år, vilket innebär i allmänhet fyra eller fem
klasser.
Och jag tror att det är ganska rimligt att säga och frånsäger sig CS50, genom design, är
förmodligen inte den typ av klass att du bör normalt
ta med fyra andra kurser för totalt fem
eftersom psets är genom utforma ganska intensivt.
Faktum är att jag också lärt mig detta tillbaka i dag.
Jag skulle inte beskriva CS50 och datavetenskap, programmering
som så mycket hårt som det är bara tidskrävande.
Det är inte sånt där efter middagen, du
kan gå tillbaka till studentrummet rum, sitta ner och börja
fokus på PSET tänker, okej,
Jag är ute kommer bang detta i kväll och sedan flytta
på min nästa ämne nästa dag.
Ibland kan du bara trycka en vägg.
Du har fel i koden.
Du behöver inte nödvändigtvis vet hur man kan lösa vissa problem.
Och en av de viktigaste funktionerna i programmering för mig i dag
är du bara typ av behöva ta ett steg tillbaka ibland, sova på det
eller tänka på det under loppet av en joggingtur eller någon annan aktivitet,
och sedan komma tillbaka till det färska.
Och du behöver bara dessa fönster tid.
>> Och faktiskt, det är därför vi har förlängt den tid
tillgängliga för problemsamlingar i år och även, per den webbadressen
Jag satte upp tidigare för att vad som är nytt denna termin,
trimmas problemet sätter så att de är i grunden inte mindre rigorös,
och takeaways är inte mindre, men Det finns en hel del mindre front materia,
en mycket mindre uppdragen som du behöver göra på framsidan av varje problem set,
som du ser, innan du kan faktiskt dyka in i köttet av det.
Så inse att dessa och andra förändringar på horisonten
att bättre tillgodose studenter, men i slutändan för att se
att de takeaways är faktiskt så högt som möjligt.
Så medan mer arbete än det kan vara i en typisk klass,
Vi hoppas att avkastningen för du och hämtställen för dig
och kunskaper och idéer som du avslutar
är desto mer övertygande som följd.
Och för att få dig there-- och detta är en av de viktigaste hämtställen,
som Patrick alluded earlier-- är kursens stödstruktur.
Så inte bara CS50 har en av de största kurs personal på campus.
Den har också en av de mest grund.
I själva verket, CS50 förra året var den första klassen
att ha en grund lärare.
Och ett bevis på att framgång göra nu många andra kurser inom Yale CS
har det, liksom.
Och för studenter, specifikt kommer dessa terapi och kursassistenter
att stödja en hel nätverk av supportresurser,
Bland dem sektioner eller uppläsning, veckovis möjligheter
att ha mer intima diskussioner och recensioner av material riktat
för olika spår, för studenter mindre bekväm, bekvämare,
eller någonstans däremellan.
Dessa kommer att följa tillgången på föreläsningarna efter flera dagar varje vecka
på måndagar och tisdagar.
Och sedan kontor hours-- en-mot-en möjligheter
för att få hjälp från kurs certifikatutfärdare och Tas kommer att vara på onsdagar och torsdagar
och söndagar på flera tider, vilka alla
kommer att publiceras på kursens hemsida, ännu mer än förra året, liksom.
>> Men vad är nyckeln till CS50, om inte visserligen lite ovanligt,
är kursen kultur som Vi har försökt att odla,
både i Cambridge under många år och nu senast i New Haven.
Och i själva verket kommer upp här Lördag, om du inte har hört,
är CS50 Puzzle Dag, som har ingenting att göra med datavetenskap
men är i sin helhet utformad för att skicka ett meddelande som datavetenskap är
om problemlösning.
Och faktiskt, om du vill att samarbeta med en eller två eller tre vänner
och bilda ett team för CS50 Pussel Dag, ta en titt
på annonser som är på väg ut.
Och tre timmar av pizza och pussel och priser väntar.
Och faktiskt, för första gången i år,
Det kommer inte att hållas tillsammans med Harvard.
Det kommer att vara här oberoende vid Yale.
Så håll utkik efter de om du inte.
De flesta varje fredag ​​i terminen vi försöker göra en stor klass
känna sig liten och ta några 50 elever till lunch med kursen personal,
med alumner, vänner från industrin att prata
om hur livet är efter en klass som CS50 och över somrarna
och efter examen.
Så håll utkik efter inbjudningar till det.
För första gången någonsin detta år kommer vi
hålla den allra första CS50 kodning tävling, en valfri opt-in tillfälle
mid-termin, efter alla av oss har haft vissa sex eller sju veckor av programmering
i C under svångremmen för att konkurrera, om du vill så choose-- igen
på teams-- försöker lösa så många utmaningar
som du kan i programmering med vänner av era mot andra.
>> Och mot den bakre delen av terminen kommer vi charter några bussar,
faktiskt tillbringa lite tid i Cambridge, om du skulle
vilja ansluta sig till oss, för s.k. CS50 hackathon.
Vid 07:00 vi ska börja.
Omkring 09:00, kommer vi att ha pizza.
Omkring 01:00, kommer vi att ha burritos.
Och någon fortfarande vaken på bussresa hem runt 05:00,
vi stanna för pannkakor vid IHOP på vägen home--
en 12-timmars möjlighet att fördjupa själv med klasskamrater och personal
under sista projekt, vilket är en möjlighet
att gå långt utöver den kursens problemsamlingar
och utforma och genomföra de flesta något av intresse för dig,
som i slutändan kommer att vara visas här i Commons.
Den första någonsin CS50 rättvis senast år, en slut-på-termin utställning
eller firandet av vad alla i klassen hade åstadkommit,
särskilt de, återigen, som gick från inget att något, från noll till 60,
har ingen tidigare bakgrund och som uppvisar, i slutändan,
något för hela campus och, om nätet, till världen se, liksom.
>> Nu, dessa här är bara några av Resebyråerna och CA som gör CS50 möjligt.
Låt mig inbjuda av dessa anställda
som är här för att komma upp på scenen, liksom kursens huvuden,
att erbjuda några ord inspiration, liksom.
>> ANDI: Hej, killar.
Kan ni höra mig?
Tack för att förena oss på detta vacker, regnig torsdag eftermiddag.
Mitt namn är Andi.
Jag är en junior i Berkeley.
Och tillsammans med Stelios och sommaren, vi kommer att vara din tre huvud undervisning
assistenter för kommande år.
Så jag antar att, show av hands-- hur många av er
har inte för avsikt att vara en CS större heller verkligen dykning djupt
i datavetenskap som en stor här?
Grymt bra.
Det är lysande.
>> Så jag är faktiskt en global frågor och kognitionsvetenskap som huvudämne.
Jag kom bokstavligen Yale med avsikt
att aldrig behöva titta på en antalet någonsin igen i mitt liv.
När jag kom till Yale, var detta något som var aldrig på min radar.
Jag ville lära sig om poesi.
Jag ville lära om internationella affärer.
Jag ville lära om vattenfärg ritningar.
Ja, erbjuder vi en klass på vattenfärg ritningar.
>> Men jag har aldrig riktigt var intresserad i något STEM närstående.
Men då ju äldre jag fick, desto mer insåg jag
att varje fält verkligen på något mening sysselsätter datavetenskap,
eller om inte datavetenskap, beräkning.
Faktum är att för min globala angelägenheter Capstone projekt,
vi använder uppgifter analytics att analysera terroristattacker
för Boko Haram i Nigeria.
Och så som ni kan se, oavsett vad stor du hamna bedriver
eller vad dina intressen här på Yale är programmering och grunderna
oavsett färdigheter är super bra.
Och CS50 verkligen är väl rustat för att typ av låna en hel del av sina resurser
till dig, oavsett hur bekväm du är
eller hur intresserad du är att fullfölja klassen.
>> Sommar kommer att prata lite lite om vad ni är
kommer att lära sig om detta år.
SOMMAR: Hej, alla.
Jag är Summer Wu.
Jag är en junior i Morse.
Och jag faktiskt började som CS50 studerande själv.
Så tre år sedan var jag på ett sabbatsår.
Jag hade aldrig tagit en CS klass i high school,
men jag trodde att min fritid, det skulle vara häftigt att lära sig att koda.
Så jag gjorde en snabb Google-sökning, letade efter vad som fanns tillgängligt på nätet,
och såg den här videon med muppets och DJs och cool webbplatser.
Jag var som, vill jag lära sig att göra det.
>> Så jag tog kursen, och jag bara blev kär i den.
Men jag minns att så avundsjuk på barn som kunde närvara vid hackathon,
närvara Puzzle Dag, delta i kontor timmar, få hjälp från resebyråerna personligen.
Och så jag aldrig trott att jag skulle få chansen
att här involverade i kursen som först fick
mig intresserad av dator vetenskap och är anledningen till
Jag är en datavetenskap stor idag.
Så jag ska varna dig, denna klass kommer att sträcka dig.
Det kommer att utmana dig.
Men det kommer också att lära dig hur man gör saker
att du aldrig trott du kunde.
>> Stelios: Hej, alla.
Mitt namn är Stelios.
Jag är en junior i Branford College och en CS-dur.
Jag är också från Aten, Grekland.
Jag ser verkligen fram emot att träffa er alla,
chatta med dig i avsnitt, på kontorstid, på fredag ​​lunch.
Jag är verkligen glada eftersom Vi har lagt ned så mycket ansträngning
att skapa ett unikt stöd struktur för er alla
att göra din upplevelse med kursen på bästa sätt.
Och jag hoppas att även om de flesta av du har antagligen inte tagit CS
kurs innan, jag hoppas att det är CS50 för dig är vad gnistor intresse
gå vidare med dator vetenskap i framtiden,
som den har gjort med så många människor i det förflutna.
Så tack för att vara Här glada att se dig.
Jason Hirschhorn.
JASON Hirschhorn: Hej, alla.
Mitt namn är Jason Hirschhorn.
Jag bor i Silliman.
Och jag gick till Harvard som en undergrad och huvudämne i samhällskunskap
och minored i datavetenskap.
Och en av mina viktigaste roller här är att stödja denna underbara personalen
som de stöder er alla.
I själva verket är detta inte alla av dem.
Det finns 55 studenter och utexaminerade här för att stödja er.
Och jag daresay en av de bästa delar av kursen för dig
allt är att få arbeta med dem, lära känna dem,
att få se dem, både i CS50 och utanför CS50 denna termin
och för många terminer framöver.
Så förhoppningsvis du tar den Naturligtvis eftersom förhoppningsvis du
komma att interagera med underbar personal vi har på scenen.
>> Speak: Tja, låt mig avsluta genom att säga att det kommer att bli kul.
DAVID MALAN: Tja, tack vare hela vårt team.
Låt mig dämpa belysningen och tillåta lite mer av vårt team,
både från Cambridge och New Haven, att säga hej som killarna fila bort.
Och efter det kommer vi att övergå till den första av våra programuppdrag
med detta språk som kallas Scratch.
Så tack till teamet.
Låt oss dämpa belysningen och höra från några andra.
>> [APPLÅDER]
>> [VIDEOUPPSPELNING]
>> -Den Uppdrag CS50 är att göra dig mer bekväm med ett helt nytt sätt
att tänka, detta beräkningstänkesätt.
-Det Gjorde datavetenskap intressant, vilket
är något jag inte riktigt inse var möjligt förrän jag tog klassen.
-Jag Var som, whoa.
Jag är verkligen översätta mina tankar i en dator just nu.
>> -Även Om du inte har någon bakgrund i datavetenskap eller någon erfarenhet,
detta är faktiskt klassen för dig.
>> -Så Jag definitivt vill mina studenter att bara
bli upphetsad över datavetenskap.
Inte bara programmering, men tänka som en datavetare
är verkligen vad jag vill försöka lära mitt första.
>> -CS50 Är hård och givande.
>> -En upplevelse.
>> -Extravaganza.
>> -Det Föra oss till nästa nivå.
>> [Musik spelar]
>> -The TF är, tror jag, den livsnerven i kursen.
>> -Jag Glada över att ha mina elever Jag hjälper
har att aha ögonblick att inse vad de faktiskt försöker
att göra, för att räkna ut hur man gör en PSET.
>> -CS50 Är definitivt en hård kurs.
Men till skillnad från alla andra Naturligtvis verkligen vid Yale,
det har en sådan stor, stödjande gemenskap.
-Du Gör absolut inte behöver veta något
om kodning för att kunna att ta kursen.
-Det Är fantastiskt att se hur långt människor kommer i en termin.
>> -Du Var inte ensam sitter i rummet lära sig koden,
men det var mer än bara en klass.
Det var en upplevelse.
-Det Bästa sättet att lära sig begrepp och att behandla dem är genom att lära andra.
>> -Vad Är split telefon?
>> [Musik spelar]
>> -och Detta är CS50.
>> [Musik spelar]
>> -Detta Är CS50.
>> -Har ett problem?
Riv den i två halvor.
>> [Musik spelar]
>> Kasta iväg det.
>> DAVID MALAN: Okej.
Så låt oss tackle-- i en liten bit, för övrigt, är det
varit denna tradition för någon anledning i 10 år
att tjäna kakan vid början och slutet av CS50.
Så väntar dig i slutet av idag, förutom kursplaner,
kommer att vara lite tårta också, och kursens personal att säga hej.
Men nu, låt oss övergång till första av våra språk, där
Vi kommer att tillbringa egentligen bara en vecka och en Problemet ligger på detta område, Scratch.
Och du hittar om du har programmeras före, många
av idéer och Möjligheterna är bekant för dig.
Men du kommer att upptäcka att det är kul längs vägen
att räkna ut exakt hur man översätter några av de idéer som du redan känner till
till denna speciella miljö att verkligen imponera din familj
och vänner med ditt arbete, vilket kan gå online, om du så önskar, efteråt.
>> Och om du inte har någon tidigare erfarenhet och är
bland majoriteten av studenter mindre bekväma,
inse att många av de idéer som vi bara utforskas med reality-- saker
som telefonböcker och närvaro och så forth-- late
ganska fint till en dator, men inte om du använder,
initialt, ett språk som denna.
Så det här är ett program skrivet på ett språk som kallas C.
Och vi kommer att tillbringa en hel del tid i C, i slutändan.
Men oddsen är, kommer detta ser lite kryptiskt till dig vid första anblicken.
I själva verket finns det en hel del konstig syntax, parenteser, vinkelfästen,
klamrar, citat och semikolon.
Och faktiskt, om du dyka in programmering för första gången
titta på och försöka skapa saker så här, ärligt, du får så fastna
så ofta i bara dum minutiae som inte har något
intellektuellt intressant om det.
>> Men tänk om du kunde skapa denna samma program-- vilket,
som ni kanske slags sluta, troligen skriver "Hej världen" på ett eller annat.
Vi kan destillera samma idé i bara två pusselbitar, om du vill.
I själva verket är intressant Scratch eftersom det är det grafiska språket.
Du kan dra och släppa dessa pusselbitar som endast förregling
om det gör logisk mening att göra det.
Och så i Scratch, Vi kommer snart att se, detta är
hur du skulle genomföra samma program, med bara två pusselbitar
som ganska mycket gör vad de säger.
>> Men vi får se i bara ett ögonblick att vissa av de byggstenar som vi alluded
till tidigare och några fler är allt som i slutändan kommer att utgöra
några av våra tidigaste program.
Vi kommer att ha saker liknande functions-- bara
åtgärder som gör något, som säger hej, värld.
Vi kommer att ha slingor, saker som inducerar cykler
om och om igen, precis som vi gjorde en stund sedan med sökning
för Mike Smith.
Variabler, som i algebra, om du har x eller y, som kan lagra ett nummer.
Tja, i ett program, kan du faktiskt lagra mer än bara siffror.
Du kan lagra ord och meningar och grafik och andra saker fortfarande.
Booleska uttryck, precis questions-- ja eller nej, sant eller falskt.
Villkor, beslut making baserat på dessa ja / nej svar.
>> Och sedan snyggare saker som matris och trådar och evenemang
och vilket som helst antal andra funktioner, men som alla
karta mycket fint till mycket vänliga block som denna.
Detta kommer att vara en funktion, en lila pusselbit som bara säger
vad namnet är-- i det här fallet, säger.
Och då ofta finns det en vit ruta som du
kan skriva in eller dra något värde i.
Och det är vad som är allmänt kallas ett argument eller en parameter.
Det är ett sätt att förändra standardbeteende ett pussel
bit eller en funktion så att den gör något anpassad för dig som att säga,
Hej, världen eller hej, Andy eller hej, Jason eller någon annan mening i stället.
>> Om du vill säga att en lot-- rally forever--
du kan ta en annan pusselbit kallas för evigt
och bara inklämt den två tillsammans så här.
Och att slingan, som bilden visar, betyder bara säga hej, världen för alltid,
igen och igen och igen.
Eller, om du bara vill göra det en ändligt antal gånger, som 50 gånger,
det kommer att vara en annan pussel bit för that-- upprepa 50 gånger.
>> Under tiden, om du vill att ha en variabel
på detta språk vi om att leka med,
du kan använda en apelsin-block som denna.
Och denna variabel jag godtyckligt kallas i för heltal.
Och jag bara ställa det lika med 0.
Och så kanske jag, i detta case-- detta variable--
representerar någon poäng i ett spel.
Du börjar på noll, och varje gång du göra ett mål eller något liknande,
du får en extra poäng.
>> Du kan ställa frågor i Scratch.
Om vi ​​drar och släpper pussel bitar i en stund som denna,
Du kan ställa frågor som, väl, är jag mindre än 50?
Kanske behöver du 50 poäng för att vinna.
Och så detta skulle vara Frågan du skulle fråga.
Eller, mer allmänt, du kan säga är x mindre än y,
där det finns två variabler inblandade?
Nu är detta en mycket större vid första anblicken,
men verkligen inte allt som mer komplex.
>> Detta är bara en kombination villkor och variabler
och booleska uttryck för att fråga tre questions-- är x mindre än y?
Om så är fallet, säger så.
Säg, är x mindre än y.
Annat, om x är större än y, måste annars x vara lika med y.
Och medan med Mike Smith, fanns det fyra scenarier, här
i en värld av siffror, är x antingen mindre än, större än, eller lika med.
Allt vi har är tre gafflar i vägen.
Och så finns det snyggare pusselbitar som denna
för saker som matriser, där vi är kommer att kunna lagra information.
Vi kommer att se block som tillåter oss att genomföra flera trådar,
en annan funktion som vi kommer att använda, och då också något som kallas händelser.
Men innan vi kommer till det punkt och skapa ännu,
i slutändan, vår egna pusselbitar låt oss
faktiskt öppna själva programmet.
>> Så det här är Scratch.
Den finns på scratch.mit.edu.
Och du är välkommen att spela nu eller senare, liksom.
Detta råkar vara offline versionen.
För personer som inte nödvändigtvis stor internet,
du kan ladda ner samma programvara, liksom.
Och det finns egentligen bara tre komponenter till detta program.
På den översta vänstra hörnet av skärmen är den typ av scenen
att Scratch som standard ser ut som en katt, lever inuti.
Han kan flytta upp, ner, vänster och höger och gör något antal andra saker,
och kan se ett antal sätt baserade på kläderna som du tilldelar honom.
Men detta är vad vi kallar en sprite, ett slags tecken.
Och du kan ha flera tecken, som vi snart se.
>> I mitten nu är alla dessa pussel bitar och dessa kategorier eller pallar
därav.
Så just nu, jag klickade på Motion.
Och så jag ser alla rörelserelaterade pusselbitar eller block,
så funktioner som har att göra med att gå upp,
nedåt, åt vänster eller höger eller någon annan operation.
Men om jag klickade på utseende, du kunde se saker som att säga blocket
som vi såg bara en stund sedan.
Och om jag klickar på kontroll, kan du se saker som repete och evigt
och om block som vi såg för en stund sedan.
>> Och så du hittar att vi ska bara skrapa
ytan av en del av pusselbitar,
men det är allt ganska intuitivt och peka och klicka.
I själva verket var Scratch utformad för yngre elever
att bidra till att ge dem ett utlopp för kreativt tänkande.
Och ändå underbart, det är en underbar språngbräda
till exakt de idéer vi kommer att utforska i C och Python och JavaScript
också.
>> På den högra sidan, slutligen, här är detta, det så kallade skript område.
Och detta är bara oskrivet blad med som du börjar skriva ett program.
Och jag ska just detta.
Nu, jag råkar veta var saker är eftersom jag har gjort det här några gånger.
Men jag vet att det under Händelser kategori
Det är det här blocket här-- när grön flagg klickade.
Och märker om jag zoomar ut och tillbaka i hit på scenen,
Scratch liv inom denna liten rektangulär världen,
ovanpå vilket är en grön flagga och en röd stoppskylt.
Så gå och stoppa respektive.
>> Och så vad gör jag vill göra när den gröna flaggan klickas?
Nåväl, låt mig gå till den ser kategori.
Och låt mig gå vidare och dra och släppa det här.
Och lägg märke till så fort det blir nära, de är typ av magnetisk.
Så om jag låter nu gå, knäpper det tillsammans trevlig och rent.
Och jag kommer att gå vidare och säga något i stil hej, värld
i två sekunder.
Låt mig zooma ut och klicka nu grön flagg, och säga, hej, värld.
Okej.
Så det är alla fina och bra.
Inte så spännande.
Låt oss göra det lite sötare.
Och jag vet att i förväg, händer Scratch
att komma med några söta saker som detta.
Så spela upp ljud jamar tills gjort.
Så låt oss göra detta.
>> [MJAU]
>> Aw, det är bedårande.
Och om jag klickar det igen--
>> [MJAU]
>> Och igen.
>> [MJAU]
>> Men jag fortsätter att behöva väcka till liv Scratch.
Men jag kan göra bättre än så här.
Varför inte jag bara dra tre av dessa.
Och nu är det tre gånger så bedårande.
>> [Meowing]
>> OK, faktiskt, det är lite obehagligt.
Så vi behöver något i mellan det.
Om jag går till kontroll, det ser ut som det finns faktiskt en vänta-block.
Och så märker om jag svävar över there-- och låt mig göra det lite större.
Om jag sväva, det kommer att snäppa på plats.
Så vänta en sekund, vänta en sekund.
Låt oss slå grön flagg igen.
>> [Meowing]
>> OK, lite mer naturlig, men inte mycket effektiv.
Så det här är rätt om min programmets Målet var jama tre gånger.
Men det är inte mycket väl utformad.
Jag typ av klippa vissa hörn.
Jag fick lite lat.
Vad känns like-- vad jag verkar ha gjort dåligt, skulle du säga?
Ja?
Ja, i mitten.
PUBLIK: Används mer minne än du behövde
eftersom du använder så många annan linje.
DAVID MALAN: Ja, så fler linjer.
Och det skulle inte nödvändigtvis vara minne, även om det kan ses som det sättet.
Men det är definitely-- det finns redundans.
Och jag bokstavligen typ av drog och släppte samma saker.
Och om du typ av extrapolate-- om Det är inte självklart här-- väl, hur skulle
Jag jamar 30 gånger?
Jag skulle dra och släppa, liksom, 30 flera par pusselbitar.
Och säkert finns det ett bättre sätt.
Och vi har sett ett bättre sätt.
Vad intuitivt skulle vara bättre sätt?
Ja, bara använda en slinga.
Ingen kopiera och klistra in.
Och faktiskt, när detta termin om du börjar
hitta dig själv att dra och släppa, eller verkligen kopiera och klistra in,
farlig vana att komma in eftersom Detta är bara inte mycket utrymme för detta.
Till exempel, om jag vill ändra ljudet till något annat,
Jag måste ändra det nu i tre platser i stället för bara en.
Eftersom faktiskt, om jag bryta denna away-- jag
bara kommer att frikoppla det så.
Låt mig ta en upprepning blocket, och klicka tre, skriver tre,
kasta några av dessa bort genom att bara släppa taget.
Och sedan märker det ser inte ut som det passar,
men magnetiskt, det kommer att inte bara knäppa på plats
men växer för att passa formen.
Så det är bra.
Och nu om jag klickar på play.
>> [Meowing]
Mycket trevlig.
Okej.
Och nu är det väldigt lätt att förändras också, eftersom jag kan bara
ändra ett nummer på ett ställe.
Men även detta är inte så intressant.
Låt oss faktiskt har Scratch inte jama, men flytta.
Låt mig gå till Motion och flytta 10 steg inuti of-- hoppsan, låt mig fixa detta.
Låt mig få den att flytta 10 steps-- faktiskt, låt oss inte upprepa.
Låt mig ta ett styrblock, och gör följande för evigt.
Evigt, flytta 10 steg.
Och klicka på Spela.
>> OK.
Så tack och lov, stannar han.
I annat fall skulle barnen få mycket upprörd när de slags förlorar sin katt.
Men åtminstone jag kan dra honom tillbaka in i skärmen.
Men detta är inte allt som stor i ett spel eller animation.
Det skulle vara trevligt om kanske Han studsade mot kanten.
Så vad gör vi?
Vad konstruktion behöver vi ha Scratch besluta att studsa, tror du,
även om du har aldrig sett Scratch förut?
Ja, på baksidan.
PUBLIK: Du behöver en Om blocket eller om-då.
DAVID MALAN: Ja, så vissa typ av om blocket eller om-då.
Så egentligen har vi en av dessa här.
Så if-- så låt mig få rid av rörelsen.
Låt mig zooma in så det är större.
Så vad sägs om detta.
Evigt, om Sensing-- vi har inte sett det här förut.
Jag behöver ett booleskt uttryck.
Och det visar sig om att röra vad?
Om att röra kanten, Vad vill jag göra?
Tja, om jag går tillbaka till Motion, visar sig, oh, kan jag vända.
Låt mig dra detta här.
Varför jag inte gå vidare och vända 180 grader?
>> Och nu, låt mig bara flytta i slutet.
Jag skulle kunna sätta rörelsen på början eller slutet.
Men logiskt, varje gång jag flyttar, jag vill kontrollera, jag röra vid kanten?
Jag röra vid kanten?
Så det logiskt jag vända om så.
Så låt oss slå play.
>> OK.
Så det är lite buggig, så att säga.
Och en bugg är bara ett misstag i ett datorprogram.
Men åtminstone det fungerar.
Och i själva verket kan jag gå in här.
Och låt mig göra det inte 10 steg på en tid, men detta är animation är.
Detta är allt en tecknad eller ens en film är.
Låt mig gå 20 steg i taget.
Så 20 gånger så många saker händer en gång, eller två gånger så många, i detta fall.
Och han går snabbare.
Låt mig ändra till 30.
100.
1000.
Och det går riktigt snabbt.
Och detta är-- ja, OK.
>> Så nu är vi bara jävlas med det.
OK, så buggy.
Men vi kan dra honom ur vägen här.
Men vi kan göra mer kul med denna också.
Vad sägs om this-- han är upp och ned.
Men det visar sig Scratch-- och det finns i själva verket,
Jag måste frånsäger sig, ingen akademisk värde vad jag ska göra.
Men om jag öppnar upp mikrofonen, låt oss stoppa honom och göra något liknande.
aj!
>> [SKRATT]
>> Det var bedårande.
Tack.
Nu är detta vad min röst ser ut när jag skrika AJ.
Jag tror inte att vi fångade ditt skratt.
Det är ok.
Låt mig spara som "aj".
Låt oss spara som "aj".
Och nu ska vi gå tillbaka till skript.
Och nu har jag need-- låt oss se, Sound.
Åh, spela upp ljud aj.
Så om jag vidrör kanten, låt mig första play ouch, och sedan vända.
Och nu ska vi sätta honom i mitten.
>> [Sade "AJ"]
>> Dubbelt så snabbt.
>> OK.
Men det är bokstavligen gör vad jag säger.
Så det är i själva verket korrekt, det är bara lite irriterande snabbt.
Så låt oss lägga till något mer intressant att redan.
Låt mig faktiskt öppna upp ett som jag gjort i förväg,
träffande kallas klappa Katt, som gör detta.
Här är skriptet upp här.
Vad detta kommer att göra i engelska termer?
Vad detta syftar till att göra?
Ja, låt oss some-- ja?
>> PUBLIK: När du klappa katten, meows det.
DAVID MALAN: Ja, så när du klappa katten, det kommer att jama.
Så med andra ord, det finns nu en evigt loop fortfarande kombination
med ett tillstånd, i kombination med ett booleskt uttryck,
i kombination med ett par av funktioner, effekten
varav en gång jag spelar detta program är ingenting
händer tills jag flyttar markören närmare och närmare och närmare och--
>> [MJAU]
Då är det som att klappa katten.
[MJAU]
Först när du faktiskt Flytta markören över honom.
Nu, jag piskade även upp inte sällskapsdjur katten, som gör detta i stället.
>> [Meowing]
>> Så han bara ständigt jama.
>> [Meowing]
>> Men om jag får för close--
>> [Meowing]
>> [RYTA]
>> Så hur fungerar det?
Nu har jag bara en två-vägs gaffel i vägen.
Om att röra muspekaren, sedan spela lejon ljud.
Else bara spela mjau ljud, och sedan vänta tre sekunder så
att det är typ att göra det mycket lugnt.
Okej.
Så det är en kombination några fler idéer fortfarande.
Låt oss ta en titt på detta exempel Jag piskade upp kallas trådar.
Och detta är i grunden annorlunda eftersom det hävstångs
ett särdrag hos många programmeringsspråk som kallas
trådar, förmågan av ett program för bokstavligen göra två saker samtidigt.
Faktum är att dessa dagar om du använder Google Docs eller Microsoft Word,
och dokumentet är ständigt vara stavningskontrolleras även när du Motortyp- eller du
hit Kommando-P eller Ctrl-P och skriva ut något,
det skriver ut medan du fortsätter att skriva.
Program idag kan verkligen göra flera saker på en gång, precis som i Scratch
här.
>> Så här, jag har två sprites nu, en fågel och en katt.
Och om jag klickar på vart och ett av de tecken ett i taget,
Jag ser just nu fågelns skript uppe till höger.
Nu ser jag kattens.
Fågel, katt.
Så var och en av dem har sina egna manus.
Men varsel, vilken pusselbit gör de båda börja med?
När grön flagga klickade.
Och fågel, när grön flagg klickade.
Så när jag klickar på den gröna flaggan, båda dessa skript eller program
kommer att löpa parallellt.
Och du kommer att märka att fågeln är bara tanklöst studsar utanför kanten.
Katten tydligt har programmerats med en strategisk fördel.
Och--
>> [RYTA]
Okej.
Så katten fångade fågel i det här fallet.
Varför är det så?
Tja, meddelande först vi bara har fågeln precis tanklöst gå
till detta initiala läge, och sedan för evigt,
om inte röra katten, bara flytta.
Och om du är på kanten, studsa.
Och bara flytta.
Och om du är på kanten, studsa.
Men katten, under tiden, har några ytterligare logik
som säger this-- första, bara så att detta inte är helt förspänd
mot fågeln, märker att jag har använde en grön pusselbit där
som plockar faktiskt ett slumptal.
Ett kännetecken för många språk är att ge du slumpmässiga eller pseudoslumptalen.
Så i detta fall, katten början väljer ett slumptal mellan, liksom,
90 grader och 180 grader, i huvudsak, så
att det finns en liten bit av variansen.
Och sedan för evigt, om beröring fågeln, spela lejonet ljud.
Annars, bara peka mot fågeln.
Peka mot fågeln.
Pekar mot fågel, som är en pusselbit sig själv i det här fallet.
Tja, kan vi göra en annan sak här.
Låt mig öppna programmet händelser här.
Och här har vi återigen två sprites, som ser ut som dessa två dockor här.
Och vad som är intressant här är det.
Den orangefärgade killen har detta uppsättning av pusselbitar här.
Evigt göra following-- om mellanslagstangenten trycks
sedan säga, Marco, och sedan sända ett evenemang.
Och under tiden, här har den blå killen this-- när du tar emot händelsen,
säga Polo.
Så visar det sig i Scratch och på andra språk,
det finns sätt för två program eller två manus, i detta fall,
att kommunicera med varandra så att när jag tryck på mellanslagstangenten, säger han Marco.
Och den andra hör det, så att tala, och säger Polo svar.
Så du kan skriva program som faktiskt samverka på detta sätt.
Och om jag gör det här stället, Jag kan även lägga till variabler,
bara använda en sprite i det här fallet.
Den här är särskilt irriterande.
>> [SEAL BARKING]
>> Nu, meddelande om rätt vi har några ytterligare logik hit.
Hur stoppar jag detta sigill från att skälla?
>> [SEAL BARKING]
>> Det ser ut som på den högra sida är vad som spelas ljudet.
Men det är bara att spela en ljud om det är sant?
Om en variable-- apelsin block-- dämpad är noll.
Hur ändrar jag dämpade att vara en, betyder sant, gör detta dämpad?
Tydligen andra manus, jag kan tryck på mellanslagstangenten, och nu stannar han.
Så vi kan ha denna förbindelse över manus, liksom,
genom att bara dela en variabel över två så här.
Nu är det inte så intressant.
Låt oss gå vidare och göra det och kombinera en hel del av dessa idéer med detta program
här.
Innan vi gör det, men, vad sägs om en volontär?
Låt mig ta bort trycket av mig eftersom jag inte faktiskt
spela detta spel.
Låt oss ha någon vi inte har sett förut.
Du måste vara bekväm att komma upp på scenen här, på kameran.
OK, kom upp.
Mycket modig.
Vad heter du?
>> IDRIS: Idris.
DAVID MALAN: Tyvärr?
IDRIS: Idris.
DAVID MALAN: Idris, trevligt att träffas.
Kom upp.
Och nu, på din egen mobil telefon, du spelar Pokemon GO?
>> IDRIS: Nej
DAVID MALAN: Verkligen?
IDRIS: Ja.
DAVID MALAN: OK.
Okej.
Nå, trevligt att träffas.
Kom över.
Jag gör inte heller.
Så vi ska räkna ut tillsammans hur man spela detta, där någon faktiskt
gick och genomförs i Scratch genom att ändra katten att väsentligen
olika karaktärer tillsammans.
Och om jag helskärm det här, kommer vi
att se följande spel tillsammans.
Fortfarande lastning, fortfarande laddas.
Kom igen.
Låt mig göra detta.
Kom igen.
Detta spel är så stor att den kraschade.
Står fast vid.
Prova denna gång.
Kom igen.
Okej.
>> Det går vi.
OK.
Grön flagga.
Så här går vi.
>> [Musik spelar]
>> Välj den mellersta nivån här.
Klicka på den blå killen där.
Okej.
Och du kan använda pilen keys-- uppåt, nedåt, vänster, höger.
Nu, låt oss betrakta som vi gör this-- och sedan gå efter tecknet där.
Japp.
Och nu klicka honom med musen.
Oh, ja.
Flytta.
Var är pilen?
Här har du.
Så klicka på det.
Ja.
Okej.
Så nu, jag sa ju har en Poke boll, att om klicka på det, kommer det att göra det.
Mycket bra.
Vid utövande för idag, jag tyckte att det här versionen av spelet
faktiskt inte särskilt svårt.
Så om du vill gå igen här, gå ner till denna Poke boll.
Och sedan gå ta en rätt.
Klicka på den.
Åh, faktiskt, det är butiken, tydligen.
OK så nära det.
Aldrig gjort det förut.
Kanske gå upp till denna sak här.
Åh, där du går.
Vänta, det finns en borta.
Åh, det finns en annan.
OK.
Ner.
Ja, klicka.
>> OK, det är väldigt söt.
OK, mycket bra gjort.
Detta spel är inte särskilt svårt.
OK.
Grattis.
Här har vi en CS50 stress boll för dig.
Men överväga för ett ögonblick vad några av de takeaways är där.
Lättare än det riktiga spelet, tydligen.
Men allt vi har att gå på här är ett tecken
som förmodligen har någon form sling i samband med det.
Det är inte en katt.
Det är denna karaktär i stället.
Och att slingan är bara ständigt sade om uppåtpil trycks
om nedåtpilen intryckt, om vänsterpil trycks eller höger
pil intryckt, flytta upp eller nedåt eller åt vänster eller höger.
Eller om det finns en annan pusselbit där som säger när du vidrör en annan sprite,
när man rör ett av tecknen till petar bollen, om beröring,
sedan göra detta.
>> Så alla de idéer vi ve använt hittills verkligen
kan bara användas i denna sammanhang att spela detta spel, liksom.
Låt mig gå vidare och dra upp en annan här, faktiskt.
Låt mig gå vidare och dra upp, låt oss säga, det här.
Detta är något vi remixed.
Tillverkad av en av våra studenter i Cambridge,
och sedan gick jag igenom och ändras ganska mycket varje instans av Harvard
Yale denna gång.
Skulle någon vilja tävla mot de Ivies
här i en annan ackumulering alla dessa idéer?
Kom ner, ja.
Vad heter du?
>> DINA: Dina.
>> DAVID MALAN: Adina?
>> DINA: Dina.
>> DAVID MALAN: Dina, kom ner.
Okej, Dina.
Så det här spelet blir svårare och hårdare, eftersom det i det här spelet,
Det finns variabler som används samt att ständigt hålla reda
av vilken nivå du befinner dig i spelet.
Så trevligt att träffa dig.
Kom runt här.
Och så målet är att sortera av göra dig igenom en labyrint
att denna elev genomföras.
>> Och bara för att ställa scenen, varje av bilderna på skärmen
är sin egen sprite, sin egen karaktär.
Så dessa var som standard katter, men studenten ändrat dem
till de olika Ivies logotyper här.
Och då ser du att bara genom användning av betingelser och loopar
och funktioner och mer, får du här.
>> [Musik spelar]
[MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> Ja okej.
Ja, fortsätt.
Första nivå är väldigt lätt.
Du har just fått gå dit.
Men återigen, anser detta är bara en loop lyssna efter pilen keys--
upp ner vänster höger.
Och nu sensorblock.
Mycket trevlig.
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> Mycket trevlig.
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> Mycket trevlig.
Ganska lätt, Crimson.
Okej.
Levels-- uh-oh.
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> Och återigen, i dessa tre Harvard kammar,
du bara har logik säger om på kanten, studsa.
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> OK, vad du gör är mer intressant än varför.
Mycket trevlig.
Hoppsan.
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
Jag tror att du måste offra dig själv.
[MUSIK - MC Hammer, "U kan inte röra DETTA"]
Snabbt!
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
Trevlig.
Det är ok.
Du får det.
Jaja!
Mycket trevlig.
>> [GLÄDJANDE]
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> Trevlig!
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
Jag fattar.
Kom igen!
Näst sista nivå.
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> Okej.
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
Ja.
Bra användning av variabler här.
[MUSIK - MC Hammer, "U kan inte röra DETTA"]
Ja.
[MUSIK - MC Hammer, "U kan inte röra DETTA"]
Trevlig.
[MUSIK - MC Hammer, "U kan inte röra DETTA"]
Det är ok.
Vi fick komma till slutet.
Det.
åh!
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> Kan köra sent idag, men det kommer vara värt det.
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> Du kan göra det!
Ja!
>> [GLÄDJANDE]
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> Den här är verkligen svårt.
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> Vi ger dig ytterligare två liv.
Kan du göra det?
>> [MUSIK - MC Hammer, "U kan inte röra DETTA"]
>> Okej.
Vad sägs om en stor rund applåder ändå.
Du kom till näst sista nivån.
Tack.
>> [APPLÅDER]
>> Så detta är bara att säga hur mycket du kan göra med dessa typer av saker.
Och inser också att när pusselbitar inte exist--
och faktiskt, det kommer att vara en av befogenheter det första problemet
apparater och beyond-- är att faktiskt skapa din egen.
Och detta är bara ett utdrag av ett av exemplen
du kommer att kunna spela online, där
om du inte har byggt in Scratch något som en hosta pusselbit,
du faktiskt kan göra det själv.
>> Och så allt detta och mer väntar.
Och bara för att måla en slutlig bild av verkligen vad är
framåt i beredskap för klassen för dig, baserat på några bilder från klasskamrater
förflutna, låt mig dämpa belysningen en sista gång och visar dig CS50.
>> [Musik spelar]
>> Okej.
Det var allt för CS50.
Kaka serveras nu.
>> [Musik spelar]