[REPRODUÇÃO DE VÍDEO] [CAR PORTA fechando] [CAR MOTOR DE PARTIDA] [Música tocando] -Mover Direita junto em busca de bons momentos e boas notícias. Com bons amigos que você não pode perder. -Este Poderia tornar-se um hábito. Vamos bate -Opportunity apenas estender a mão e agarrá-lo. -Sim! -junto Vamos nab-lo. -Vamos Caminhar engate, ônibus ou táxi amarelo-lo. -Dammit. -Estamos Em movimento o tempo todo. -Footloose E extravagante. -Getting Lá é metade da diversão. Venha compartilhar comigo. -Estamos Em movimento o tempo todo. -Estamos Indo para compartilhar a carga. -Nós Não precisa de um mapa para obter este show na estrada. Ei Fozzy, eu quero que você vire à esquerda se você chegar a uma bifurcação na estrada. -Sim senhor. Vire à esquerda na bifurcação na estrada. Vire à esquerda. -Eu Não acredito nisso. -Cruising Direita junto encontramos as luzes na estrada. -E O seu caminho ou o meu caminho. -Então Confiar na minha navegação. Estrelas -Movie com carros chamativos e da vida com a capota abaixada. -Estamos Atacando os grandes montes. -Sim, Tempestade está certo. Caso seja nevar? Não, eu não penso assim. -Mover Direita junto. -Footloose E extravagante. -Você É pronto para o grande momento. -É Pronto para mim? -Mover Direita junto. Seguindo em frente. Seguindo em frente. Seguindo em frente. -Eu Acho que é melhor você encostar. -Sim senhor. [FIM DE REPRODUÇÃO] [Aplausos] David J. MALAN: Este é CS50. E este é o fim de semana 0, mas o início de uma bela amizade. Estamos tão animado para ser aqui na Universidade de Yale pela primeira vez com a nossa SCAZ amigo, e Jason e Andy. Todos os 40 do TF da do CS50 e CA está aqui em Yale. E todos vocês. E, na verdade, provavelmente é hora a-- [Aplausos] Assim, mesmo que a maioria das palestras vai estar realmente em Cambridge deste ano, a realidade é que por design, e muito deliberadamente em CS50, Eu acho que estamos chegando ao ponto tecnologicamente, e pedagogicamente, onde ele pode ser um de Ensino Superior experiência de se envolver com alguma de material on-line do curso. Na verdade, o reality-- e se eu acredito este philosophically-- é que as palestras não são particularmente meios eficazes para a entrega informações relativamente complexo. Certamente mais de hora além de longos períodos de tempo. E, de fato cada poucos minutes-- Eu me lembro em college-- você zona fora por um momento, você perca algum tema complexo, e você se foi muito bonito para os próximos 45 minutos. E a realidade é que se você está aqui em New Haven ou Cambridge ou para além, a simplicidade de ter a capacidade de fazer uma pausa e avanço rápido, rebobinar, hiperlink para relacionado Recursos, transcrições de pesquisa de texto completo e similares é uma oportunidade que Atrevo-me a dizer para os nossos alunos on-line bem além de New Haven, oferece-lhes uma oportunidade para realmente compreender o Material conceptual que nós introduzir em palestras tanto melhor. Mas em última análise, CS50, é a experiência dos estudantes caracteriza-se por isso, muito mais por conjuntos de problemas do curso, ou projetos de programação semanais, o seções do curso liderado pelo ensino bolseiros, as horas de expediente noturno liderada por os assistentes do curso e do ensino bolseiros e, na verdade, tais eventos como CS50 enigma Dia, Hack-a-thon do CS50, CS50 o Fair, almoços semanais, e muito mais. E assim se você está aqui em Nova Haven, ou sintonizar de longe, hoje, em Cambridge, e vamos vê-lo novamente em breve, a realidade é que isto é uma e a mesma classe. E estamos tão animado para estar aqui todos juntos hoje. E assim, no final do semestre, seja aqui ou longe, bem espero que você vista orgulhosa, feliz, e talvez com um pouco de alívio, a camisa que dá testemunho para você ter tomado CS50. Então, de onde paramos na quarta-feira? Nós demos uma olhada pensamento computacional. E isso é o que nós em direção destilada ciência da computação até, pelo menos, para agora. Mas nós destilada que pouco mais na pelo menos três elementos componentes. Insumos, então o que é o problema que estamos tentando resolver? As saídas, o que é a responder estamos esperando para começar? E a representação de lá. E nós não vamos morar aqui em depois em binário, ou até mesmo ASCII, e similares tanto, mas sim levar para concedido que podemos representar esta informação, porque as partes mais interessante desses problemas não são apenas o entradas e saídas, mas os algoritmos que vão para resolver esses problemas. E você pode se lembrar de no outro dia que nós tomou um bastante tradicional conceito de olhar alguém em um bastante grande livro de telefone, ou mais geralmente digitalmente nos dias de hoje, apenas um conjunto muito grande de dados. A lista de contatos realmente grande, com muitos nomes por ordem alfabética. E percebemos que enquanto eu poderia abordar esse problema simplesmente usando um linear approach-- página por página, ou mesmo dois de em um tempo-- percebemos que o algorithm-- mais intuitiva apenas uma espécie de dividir e conquistar o problema de novo, e de novo, e reduzir para metade novamente---lo com cada tempo, nos deu este resultado verde. E é muito mais plana porque sugere que, mesmo que este problema fica cada vez maior, como é o caso nos dias de hoje com dados conjuntos e reality-- Facebook e Google resultados de pesquisa e como-- faz nosso algoritmo executar a mesma eficácia aqueles com maiores picadas como o fez, mesmo com as pequenas mordidas. Agora ele levanta a questão, o que podemos resolver efectivamente semelhante com este tipo de intuição? Este tipo de divisão e conquista? Bem, nós poderíamos fazer alguma coisa como este aqui hoje. Poderíamos ter atendimento. Então, talvez como 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11-- não vai ser tudo o que eficiente. Então, espere, escola primária. 2, 4, 6, 8, 10, 12, 14, 16, 18 e assim por diante. Mas poderíamos fazer um pouco melhor? Eu tenho certeza que eu não posso fazer isso por mim mesmo. Então, se você vai humor nos para apenas um momento, trouxemos conosco um algoritmo que é só tenho três etapas, mas não se você require-- não mente-- todos nós levantar-se, se você o faria. Assim, com tudo de nós agora de pé, passo um deste algoritmo é o seguinte. Levante-se e atribuir -se o número 1. Então, neste momento, literalmente todos nesta sala esperemos que está pensando em si mesmos, no entanto sem jeito, o número 1. Agora passo dois deste algoritmo é vai envolver o seguinte. Passo dois, emparelhar com alguém de pé, adicionar seus números juntos, e adotar a soma como o seu novo número. Verificação de sanidade rápida. O número é todo mundo pensando agora? Então 2, exceto, talvez, por um lado, desajeitado pessoa, solitário. Se temos um número ímpar de pessoas na sala. Assim, uma pessoa pode ainda ser o número um, tudo bem. Mas o passo três aqui, um de que você deve sentar-se. O outro deve voltar para a etapa dois, e repetir, se você faria. Então, se ainda de pé, você deve ser entre aqueles que voltar para a etapa dois. Continue. Algumas pessoas ainda de pé. Então, se ainda de pé, emparelhar-se com alguém. Tudo bem, diminuindo para baixo. Algumas pessoas ainda de pé. Eu vou ajudar se necessário. Lembre-se do takeaway chave aqui, é como muito mais rapidamente do que este é me contagem. Então vamos ver. Eu posso ajudar. Então, o número são você ainda está pensando? AUDIÊNCIA: Eu sou a 44. DAVID J. MALAN: 44, então vá em frente e se sentar. O número que você está pensando? AUDIÊNCIA: 74. DAVID J. MALAN: 74. Tudo bem, vá em frente e se sentar. Quem mais ainda está de pé? 86. E é que ninguém ainda está de pé? Qual número? Ouvi 67. E, em seguida, no topo? 32. Qualquer outra pessoa ainda está de pé e pensando em um número? Oh Oi. Desculpe. Volto logo. 42. Alguém mais? AUDIÊNCIA: 47. DAVID J. MALAN: 47. Tem mais alguém ainda de pé que não foi contado? Assim, o número final de pessoas em uma sala que tem 497 assentos é-- todos os quais são filled-- é 390. Então, isso é ótimo. Em breve, discutir a noção de um bug em um programa de computador. Mas vamos voltar para que em pouco tempo. Mas, em teoria, o que pode ter acontecido apenas agora? Assim, mesmo que houvesse três grandes passos para este algoritmo, cada um daqueles era apenas uma espécie de uma grande operação. E havia esta ciclicidade a ele em que, se você ainda estavam de pé, Você manteve passando de etapa 3-2, passo 3-2, passo 3-2. Mas o que continuou acontecendo em cada iteração? Cada ciclo deste loop? O que aconteceu em outros lugares na sala? Não só a mesma coisa, mas o que estava acontecendo com metade de vocês? Sentando. E assim lá em mentiras esse insight, muito parecido com o exemplo do livro de telefone, em que, se metade de vocês são sentando-se a cada vez, o problema está começando com talvez 400 pessoas, em seguida, para 200 pessoas, de 100 pessoas, em seguida, 50 pessoas, e assim por diante. E, assim, reduzir gradualmente em teoria para apenas uma pessoa, pensando no valor total de todos. Agora a realidade, algumas dinâmicas sociais, e alguns erros aritméticos pode contribuir para esse bug final. Mas, em teoria, enquanto ainda estava contando distância, tendo várias dezenas passos, ou centenas de passos para contar-vos, para contar uma sala cheia de 500 ou mais pessoas deveria ter tido muito menos passos, porque você só pode dividir 500 e 1/2 tantas vezes. E assim como com o telefone reservar exemplo no outro dia, se temos algo logarítmica por assim dizer, pelo qual se fôssemos todos operar em uníssono, e ignorando o erros de adição, que seria de nós ter alcançado exactamente esse tipo de tempo de execução? Agora, para ser justo, tipo de enganado, em que eu aproveitado outro recurso. Considerando que é apenas um de mim, I aproveitado centenas de você. Mas pode-se dizer que para ser um exemplo de processamento paralelo, ou um estado de arte muito em voga onde os computadores estes dias têm múltiplas CPUs, ou mais tecnicamente, mais múltiplos núcleos, e pode realmente fazer múltipla coisas ao mesmo tempo, muito parecido com você tudo o que estamos fazendo lá, em paralelo. Mas lembre-se que o que nós Também fez na quarta-feira foi tentar capturar essa intuição e formalizar-lo no código. Algo como pseudo-código. E, na verdade, e eu espero que você perdoar, é como 80 graus em aqui. Então eu vou levar este off para apenas um pouco. O que eu pensei que ia fazer é transição agora para uma aplicação em que voltamos a envolver o público, mas escrever um programa em Inglês como sintaxe, com a qual a resolver este problema aqui. [REPRODUÇÃO DE VÍDEO] Tempo da geléia da manteiga de amendoim -É. Hora da manteiga de amendoim e geleia. Hora da manteiga de amendoim e geleia. Way ya! Way ya! Way ya! Way ya! Agora há que você vá! Ai está! Ai está! Ai está! Manteiga de amendoim geléia! Manteiga de amendoim geléia! Manteiga de amendoim geléia! Manteiga de amendoim geléia! Amendoim, manteiga de amendoim geléia! Manteiga de amendoim geléia! Geléia de amendoim manteiga com um taco de beisebol. [FIM DE REPRODUÇÃO] DAVID J. MALAN: --que vídeo, mas é um pouco viciante, se não um pouco chato. Mas para fazer isso, eu pensei que estaríamos fazer é tentar escrever um programa em conjunto, para o qual precisamos de três voluntários. Tem que ser confortável na câmera e internet. Sam, vamos lá para cima. Camisa roxa, aqui, vamos lá para cima. E a partir de aqui, deixe-me ir um pouco mais para trás. Carmesim e camisas azuis, vamos lá para cima. Perfeito. Venha agora. Vamos lá para cima, vamos lá para cima. E qual é o seu nome? Erica. David, prazer em conhecê-lo. Se você gostaria de aproveitar esta sede aqui. Este é Sam. Qual o seu nome? Antonio. Antonio, prazer em conhecê-lo. Erica e Sam, se você gostaria de ter um assento aqui. O que nós viemos preparados com, como esses caras estão descobrindo, é os ingredientes com os quais fazer um sanduíche de manteiga de amendoim e geléia. Agora, isso pode ser algo que você toma muito para concedido. Mas demos a cada dos nossos três voluntários aqui-- dois voluntários e Sam aqui, um naco de pão cada, um prato, uma faca, um pote de geléia ou compota, e um pote de manteiga de amendoim. E o objetivo agora é na mão vai ser para estes três para fazer uma manteiga de amendoim e sanduíche de geléia. Mas o que vamos fazer é esperar o audience-- desde todos vocês certamente sabe como fazer este tão bem em reality-- vão nos fornecer a instruções passo a passo. O pseudo-código, se você quiser. Então, eu vou desempenhar o papel de escriba aqui. E eu tenho uma pequena lista de coisas a fazer, e assim como cada um, um de cada vez, chama um potencial instrucional, eu vou anotá-la, repeti-la quando necessário. E então vocês vão fazer a manteiga de amendoim e geléia sanduíche somente fazendo o que você é dito. Então, pense de si mesmos como computadores. Você só pode fazer o que você disse. Não suposições, não há dúvidas. Você só precisa fazer isso. Então, quem gostaria de arriscar a primeira instrução para fazer um sanduíche PBJ? Na varanda há. AUDIÊNCIA: Abra o saco de pão. DAVID J. MALAN: Abra a saco de pão, se você quiser. Então vamos ver. Vamos fazer uma iteração, e obter um pouco mais precisa. Boa maneira de começar embora. Passo dois, outra pessoa. Agora ninguém quer ser voluntário. Passo dois, na frente. AUDIÊNCIA: Abra o interior saco de pão também. DAVID J. MALAN: Abra a saco interior do pão bem. Ótimo, estamos aprendendo. Um pouco mais preciso. Vamos começar este trabalho. Sim, na camisa verde. AUDIÊNCIA: [inaudível] DAVID J. MALAN: Fatias de pão. Remova cuidadosamente duas fatias de pão. Isso é bom. Passo quatro, outra pessoa? Por aqui, sim? AUDIÊNCIA: [inaudível] DAVID J. MALAN: Coloque o pão no prato. Passo Cinco? Passo cinco, sim? AUDIÊNCIA: [inaudível] DAVID J. MALAN: No topo de-- oh, mão. Coloque a mão em cima da manteiga de amendoim. É isso que eu vou? AUDIÊNCIA: É, e desapertar. DAVID J. MALAN: e- dizê-lo novamente. AUDIÊNCIA: [inaudível] DAVID J. MALAN: E colocar o tampa ao lado da manteiga de amendoim. Levemente colocar a mão no topo de manteiga de amendoim, e desapertar, e colocar a tampa ao lado da manteiga de amendoim. OK, etapa seis. Passo seis, outra pessoa. Sim? AUDIÊNCIA: [inaudível] DAVID J. MALAN: Diga isso de novo. AUDIÊNCIA: Repita o passo cinco novamente. DAVID J. MALAN: E repita o passo cinco de novo, que vai criar um pouco de um problema Agora, se nós estamos fazendo isso passo a passo. Então agora vamos voltar para a etapa cinco. Levemente colocar a mão no topo de manteiga de amendoim e desapertar e coloque a tampa ao lado da manteiga de amendoim. Em seguida, segure a manteiga de amendoim e repita o passo cinco novamente. Então, vamos substituir essa loop infinito, se você quiser. Passo sete, outra pessoa. Sim, na parte de trás. AUDIÊNCIA: [inaudível] DAVID J. MALAN: top --em de outro. AUDIÊNCIA: [inaudível] DAVID J. MALAN: No Por outro lado, por outro superior. Você quer apenas chegar aqui? Como posso terminar a instrução? O que é o resto da instrução? AUDIÊNCIA: Ignorando essa parte. DAVID J. MALAN: Ignorando essa parte. Vamos começar de novo. Passo sete. AUDIÊNCIA: [inaudível] DAVID J. MALAN: Segure com opondo hand-- isso é bom. Este é realmente bom. AUDIÊNCIA: [inaudível] DAVID J. MALAN: E jar-- plástico AUDIÊNCIA: [inaudível] DAVID J. MALAN: E twist-- AUDIÊNCIA: [inaudível] DAVID J. MALAN: Por dois segundos. Basta abrir o pote de manteiga de amendoim. Eu espero que você perdoar. Então vamos supor que chegamos lá. Abra o frasco de manteiga de amendoim. [Aplausos] DAVID J. MALAN: Passo oito, vamos embora. Passo oito, sim, na parte de trás. AUDIÊNCIA: [inaudível] DAVID J. MALAN: Good. Passo nove, sim? AUDIÊNCIA: [inaudível] DAVID J. MALAN: --out de o pote de manteiga de amendoim. E- eo que? AUDIÊNCIA: [inaudível] DAVID J. MALAN: E colocar faca de volta em manteiga de amendoim. Passo dez. Passo dez. AUDIÊNCIA: [inaudível] DAVID J. MALAN: Coloque a faca para fora, e, em seguida, retire o selo. Agradável. Fora da manteiga de amendoim. Tudo bem, passo 11. AUDIÊNCIA: [inaudível] DAVID J. MALAN: OK, cinzento computador siga computador azul ou vermelho. Boa. [Aplausos] DAVID J. MALAN: Traga-nos para casa. Mais algumas etapas. Qual é o próximo? As etapas 12. Passo 12. Sim? AUDIÊNCIA: Coloque uma das fatias de pão delicadamente em uma de suas mãos. DAVID J. MALAN: Uma das suas mãos. E então, o passo 13. Sim? AUDIÊNCIA: [inaudível] DAVID J. MALAN: Fatia --em de pão. Boa. Muito bom. Passo 14, sim. AUDIÊNCIA: Desfazer a etapa 13. DAVID J. MALAN: Desfazer a etapa 13. Vamos passar para a geléia. É um programa 100- passo, mas estamos estavam na etapa 15. Sim. AUDIÊNCIA: [inaudível] DAVID J. MALAN: 7 a 13 utilizando a geléia, porque aqueles correu tão bem. Repita os passos 7 a 13, utilizando a geleia. Assim, compreender a metade inferior do frasco da geléia com uma mão em cima. Por outro lado do outro top, ignorando essa parte, agarrar com as mãos opostas, a tampa do frasco de plástico e na parte inferior, e torcer por dois segundos. Em seguida, abra o frasco da geléia. E, finalmente, vamos tentar dar-nos algo comestível. Passo 16. Então, por que não deixá-lo lá. Muito obrigado a nossos três voluntários. [Aplausos] Nós temos um pouco CS50 bola de stress para você. Ele estava indo para ser um sanduíche mas-- então o que foi o ponto de, além de ter um pouco de diversão com o algoritmo? Mas a realidade é que, mesmo quando você está programando um computador, você precisa para ser super precisa. Tão complexa e intimidante como o seu próprio computador poderia muito bem ser para você, pelo menos quando algo dá errado, a realidade é que é um muito burro dispositivo que foi inventado por nós, seres humanos, e só pode fazer um subconjunto do que nós fazer-- às vezes certamente faster-- mas não sabe como fazer suposições. Ele não sabe como ser em o mesmo comprimento de onda, como você. Ele só vai fazer precisamente o que você diga a ele. E você vai ser atingido, talvez, como começamos escrever código real com o conjuntos de problemas primeiras e mais além, o quão fácil é fazer um pressuposto como um ser humano, e não antecipar eu preciso para lidar com Nesse caso, ou que caso de canto, por assim dizer, que poderia muito bem surgir se, por exemplo, Sam teve a única jar squeezable de geléia, enquanto toda a gente tinha alguns frascos de vidro como bem. Então, antes de voltar nossa a atenção para alguns código real, permita-me apresentar o cabeças de curso aqui em Yale. Nossos amigos SCAZ, Andy, e Jason para vir e dizer Olá. [Aplausos] SCAZ: Nós perdemos Jason temporariamente. Oi novamente, todo mundo. Meu nome é SCAZ. Eu tenho ensinado na Universidade de Yale desde 2001. E quando eu não estou ensinando, minha pesquisa é na área da robótica e inteligência artificial. E o anúncio de que eu tenho hoje é que a partir de um par de semanas, vamos estar trazendo algum material suplementar para CS50 para falar sobre o software de inteligência. Nós vamos falar sobre como lugares como Netflix e Hulu pode recomendar filmes que você pode querer assistir. Onde nós vamos falar sobre como carros-motorista menos realmente funcionar. E nós vamos ser capazes de fundamentar essas coisas nos conceitos que você está aprendendo nesta classe de hoje. Porque todas estas coisas são construído sobre a mesma base. E é isso que este série vai explorar. Então, eu estou realmente olhando ansioso para ver mais de você tudo, e você vai chegar a ver mais a partir de todos nós muito em breve. Permitam-me, em seguida, introduzir Jason. JASON: Olá a todos. Meu nome é Jason. Eu, infelizmente, foi para Harvard como uma graduação. Isso vai se cortar fora do fluxo real. E agora eu estou aqui como professor de o departamento de ciência da computação. E eu estou ajudando funcionar o curso com SCAZ, David e Andy. ANDY: Hey guys. Andy do meu nome. Estou realmente a única Yale estudante no palco no momento. [Aplausos] Estou em Berkeley College, originalmente de Solon, Ohio. E eu era uma daquelas crianças onde, quando eu vim para Yale, Eu realmente pensei que eu nunca faria tem que olhar para um número cada vez mais. E então eu percebi que você precisava ciência e QR créditos para pós-graduação. E assim minha primavera calouro, eu tirei uma classe, um CS, introdução CS classe aqui em Yale. Eu era como, isto é como realmente muito legal. E enquanto eu realmente acabou declarando como um dos principais assuntos globais, as habilidades Eu aprendi no CS e programação são assim aplicáveis ​​a qualquer campo você escolhe fazer. Ea equipe aqui em Yale, temos sido tão duro no trabalho para se preparar para vocês. E estamos ansiosos para vê- tudo na seção e de escritório horas. Então sim. [Aplausos] DAVID J. MALAN: Obrigado. Então, basta antes da aula começou, tivemos uma oportunidade para andar em torno do campus com um telemóvel e tomar alguns selfies em forma de vídeo de verdade minha primeira turnê do campus de Yale aqui. E então pensamos que iria partilhar um áspero corte de exatamente isso como SCAZ e Andy e Jason levou-me em torno do campus. [REPRODUÇÃO DE VÍDEO] [SIRENS] -David. -Bem-Vindo a Yale. -Bom te ver. -É bom te ver. -Podemos Ir em uma turnê? -Vamos Fazer um passeio. -road Turnê. -Este Sinal tem sido há algum tempo. -Whah, CS50. -Hurry! Vai Vai vai VAI. Você deve [inaudível] Harkness Tower. -E Vimos que algumas vezes. [Aplausos] -Olha Para fora para a bicicleta! Ahh! Oi Frank. -Qual É para cima, rapazes? -Como você está? -Bom te ver. -Welcome Para o vídeo. Não aja muito animado. -Eu Amo Silliman. Ahh! -Ele Tem sido cerca de três horas desde Jason tinha sorvete e Nutella. Então nós temos que parar de volta ao Silliman para um pouco. -Não É mesmo [inaudível] no entanto, apenas o fato de que eles têm aqui é tão incrível. Cara, não há Nutella em cada refeição. -Houve No ano passado também. -Sim. -Diga muito sobre Yale até agora. Mas eu agora que TD lá. E que é considerado fora do campus. -Aqui Temos arquitetura gótica. Famoso mundialmente. Temos uma arquitetura mais gótico. E construção, arquitetura mais gótico. Oi. Este é o lugar onde nós estamos tendo o horário de expediente Terça a quinta-feira em Hogwarts, como [inaudível]. -Tudo certo. Isso é tudo para o passeio. Estamos em Yale University de Law School, onde A palestra de hoje está prestes a ter lugar. Vamos cabeça. [FIM DE REPRODUÇÃO] DAVID J. MALAN: E que nos traz aqui agora. Então, até agora, temos sido concentrando-se em pseudo-código, o que é essa sintaxe Inglês-like. Não tem nenhuma especificação prescrita. É só você usar algum linguagem intuitiva se você quero explicar o que você quer fazer. Mas vamos começar agora a transição ao código, como a maioria das pessoas diria. Mas, mais precisamente, algo conhecido como código fonte. Esta é a linguagem que os humanos escrever que os computadores ultimately-- possivelmente depois de um certo número de steps-- em última análise, entende a fim de saber como fazer alguma coisa. Que você viu um vislumbre de este talvez na quarta-feira. Este é um exemplo que incrivelmente, underwhelming quando executado simplesmente diz "Olá mundo". E está escrito em uma linguagem chamada C, que é sintaticamente muito semelhante para um monte de outras línguas que você pode não saber, mas pode ter ouvido falar de como Java, e C ++ e Python e Ruby, e similares, e, na verdade, vamos gastar muito do semestre usando C, e, em seguida, perto do fim do semestre, construindo sobre ele, e introdução de qualquer número de outras línguas. Entre eles PHP e JavaScript, uma linguagem de banco de dados chamado SQL. Mas com C, o que nós vamos ter esse entendimento de baixo para cima exatamente como os computadores funcionam, o que você pode fazer com eles, e como você pode resolver problemas tudo o mais eficazmente por este estratificação que discutimos na quarta-feira, e em pé sobre os ombros dos outros. Mas mais sobre isso mais para vir. Hoje olhamos para um ambiente mais simples, mas uma fundamentalmente idêntico ambiente conhecido como Scratch, nossos amigos no MIT Media Lab. Este é um gráfico linguagem de programação, risco, através do qual você pode arrastar e soltar coisas que parecer peças do puzzle que única interlock se faz sentido lógico ou programática para o fazer. Mas ele vai nos permitir ter uma conversa sobre tudo da mesma programação fundamentos que alguns de vocês já deve saber, que muitos de vocês talvez não sabe alguma coisa sem ter de se atolar, francamente, no intelectualmente sintaxe desinteressante do ponto e vírgula, e parênteses, e cita, e semelhantes. Todos os quais, no início diante, são uma distração para o que são interessantes e idéias genuinamente úteis. Então, vamos dar uma rápida olhar para o ambiente aqui, para que você saiba o que o espera. E, de fato, entre os jogos que pode jogar são alguns programas escritos por próprios ex-alunos do CS50. Um deles, eu mesmo, eu vou ser um presente escrita na escola de pós-graduação para mim. Se eu pudesse tomar um voluntário que está disposto a jogar um jogo pela primeira vez. Certo. Vamos lá para cima. Qual o seu nome? AUDIÊNCIA: Angela. DAVID J. MALAN: Angela, vamos lá para cima. Então Raspadinha foi para fora por alguns anos. E quando eu estava na faculdade, Eu estava cruz registradas no MIT, tendo professor de Mitchel Resnick de curso sobre tecnologias educacionais. E nós estávamos entre os primeiros estudantes do mundo para realmente beta Risco de teste. E o meu projeto era o que Angela já ofereceu graciosamente a peça chamada Oscartime. Então, eu estou indo para ir em frente e duplo clique no ícone aqui. Vai abrir uma programação ambiente que logo vamos mergulhar. Eu estou indo para full-screen -lo para Angela, aqui. Eu estou indo para bater o verde bandeira em apenas um momento. E em seguida, um lote inteiro de lixo vai cair do céu. E você vai usar o mouse aqui realmente arrastar e soltar o lixo em latas de lixo de Oscar. Então, se você quiser ir em frente e clique a bandeira verde, o jogo vai começar. [Música tocando] Oh, eu amo lixo. Qualquer coisa suja ou Sombrio ou empoeirado. Qualquer coisa irregular ou podre, ou enferrujado. Sim, eu amo lixo. Se você realmente quer ver algo inútil, olhe para isto. Tenho aqui uma sapatilha isso é esfarrapado e desgastado. É tudo cheio de buracos detém e os laços são rasgadas. Um presente de minha mãe o dia em que nasci. Eu adoro isso, porque it's-- DAVID J. MALAN: --green estes dias apenas estar jogando tudo no lixo. E assim que um dos Fez-- própria equipe do CS50 Jordan, que você pode atender today-- tem, na verdade, actualizado este para tempos de hoje. E então permitam-me a abrir um remix em vez de Angela. E nós vamos jogar isso em vez de alguns momentos onde agora você está vai ter que decidir entre se jogar algo no lixo, ou reciclá-lo ou compostagem-lo. Portanto, há um pouco de pressão sobre você para obter este direito na frente de sua 392 a 497 colegas aqui no hall, se você o faria. [REPRODUÇÃO DE VÍDEO] [Música tocando] Oh Eu amo lixo. Qualquer coisa suja ou Sombrio ou empoeirado. Qualquer coisa irregular ou podre ou enferrujado. Sim, eu amo lixo. Se você realmente quer ver algo inútil, olhe para isto. Tenho aqui uma sapatilha isso é esfarrapado e desgastado. É tudo cheio de buracos e os laços são rasgadas. Um presente de minha mãe o dia em que nasci. Eu amo isso porque é lixo. Oh, eu amo lixo. Qualquer coisa suja ou Sombrio, ou empoeirado. Qualquer coisa irregular ou podre ou enferrujado. Sim, eu amo lixo. Aqui está mais algumas coisas podres. Eu tenho aqui alguns newspaper-- [FIM DE REPRODUÇÃO] DAVID J. MALAN: --are realmente compostáveis. Mas agradeço a nosso voluntário, Angela. Nós temos uma bola de stress para você aqui também. Então, obrigado. Então, este foi escrito por mim. Mas agora, um por um ex-aluno real que implementou este, que é um jogo. Tudo nesta língua chamada Zero, que veremos em breve descascar as camadas de. Mas se tivéssemos como-- como sobre outro voluntário? Certo. Vamos lá para cima. Qual o seu nome? Glance? Lance. Lance, vamos lá para cima. Bom te conhecer. Venha desta forma. Então este pode ter um tema familiar para alguns de vocês. Mas você vai ver também que pode haver interactividade, em que você poderia realmente ser a papel do personagem movendo ao redor. Bom te conhecer. David. Eu dou-lhe, Pikachu. Instruções quiser sobre para vir na tela. Mas em suma, você vai quer pegar o material saboroso, e evitar as bombas e outras coisas. Com os cursores inteiramente. Então bateu a barra de espaço. -Pikachu. DAVID J. MALAN: Catch as coisas do lado esquerdo, não pegar as coisas à direita. [Música tocando] Assim, uma última aqui. Se pudéssemos ter uma mais voluntário aqui. Nós pensamos em recriar algo de-- no shirt-- amarelo a partir de quarta-feira. Qual é o seu nome? Mary, venha até Mary. E lembro de na quarta-feira nós introduzimos a noção de binário, e lâmpadas binários. Este é na verdade um agora implementação desse mesmo interface de que tivemos no iPad com a luz lâmpadas, mas aqui rendeu digital. E ao invés de fazer um estresse ball-- bom conhecer você, David. Nós trouxemos alguns luz lâmpadas de Cambridge. Se você pode, clicando sobre os lâmpadas para transformá-los dentro e fora, vir para cima com o binário representação de dizer 256. E você vai ver no meio, a contagem atual. De modo que um está ligado. Assim, o bit mais à esquerda está ligada. MARIA: Sim, [inaudível] DAVID J. MALAN: Bem, por isso temos apenas-- oh. Portanto, esta é a coluna 128. Então, nós estamos até 128. Temos chegar a 256. E você pode mexer em e fora, não é grande coisa. Ou você pode bater que 128 mais vezes, se quiser. Tudo bem, bom. 24. Sim, se aproximando. Mais perto! Oh, qual é o problema, então? Então, qual é o problema? Então, o que nós precisamos resolver este problema? Então, precisamos de um outro bocado. E isso é perfeitamente razoável, na realidade, certo? Se você deseja contar a partir do número 1 para 2 a 3 para 4 a 5, 6, 7, 8, 9 para realmente passar para 10, você é vai precisar de um bit adicional. Então vamos realmente rebobinar aqui, e vir para cima com-- que foi obviamente concebido para ser um set up. Você não pode fazer 256 com apenas uma lâmpada. Assim como sobre simplesmente o número 50? Número 50. Excelente. Um grande aplauso para Maria e dela também. Obrigado. Portanto, este topic-- intencional como foi-- que vai realmente voltar a ocorrer. O maior valor que você pode representar com oito bits, ou um byte, é de fato 256. Mas não se você começar contando a partir de 0, como nós parecem continuar fazendo por ter todos os bits off. Mas agora vamos mergulhar na subjacente implementação deste ambiente, e provocar uma separação de algumas dessas idéias. Então, em um momento em que está prestes a ver uma alguns fundamentos de programação diferentes. A primeira das quais nós chamaremos comunicado. Tipo de verbos, se você quiser. Ações. Coisas que devem ser feitas. E em um momento em que você verá blocos que algo como isto. Diga "Olá mundo", por exemplo. Ou esperar um segundo. Ou jogar meow som. E de fato o ambiente no que nós vamos estar fazendo isso é chamado de risco. E se eu puxar para cima sem risco pré-carregamento de qualquer código real, vamos ter um rápido olhar para este interface do usuário, por assim dizer. Os controles com os quais nos relacionamos. No canto superior esquerdo do aqui tela, abaixo dos menus, temos a fase, por assim dizer. Então Scratch é o que vamos chamar Sprite. É um personagem. E, ele pode ser controlada pela escrever programas contra ele. E ele vai ser capaz de subir e descer e à esquerda e à direita neste ambiente, não apenas movendo o mouse, mas de forma programática. Posso dizer-lhe andar para a direita, a pé esquerda, para cima, para baixo ou similares. E eu posso apresentar outro sprites ou caracteres bem. Na verdade, na parte inferior aqui é onde você verá a sua lista de sprites. No momento, eu só tenho um, mas posso criar mais, e eles vão aparecer exatamente lá em baixo. Então, se você recuar por um momento, como Oscartime-- por exemplo, Oscar, no lado esquerdo, o lixo pode, era um sprite. E a coisa no meio, o Caixote de Reciclagem, foi outro sprite. E o composto bin foi outro sprite. E cada pedaço de lixo ou materiais recicláveis que foi caindo do céu é também um sprite, cada um dos quais foi programado individualmente. Como você programar? Bem, aqui à direita lado é a área de scripts. E é aí que nós podemos arrastar e soltar peças do puzzle. Em uma semana, ele vai ser onde nós equivalentemente escrever código com mais de um teclado, mas para hoje ele vai ser arrastando e soltando peças do puzzle, o paletas para os quais podem todos ser encontrada aqui no meio. Com efeito, no meio aqui há um grupo inteiro das categorias de quebra-cabeça peças ou blocos. Um está relacionado ao movimento, olhar, som, uma caneta indo para cima e para baixo, de dados, controle de eventos. Não é bem certo ainda o que tudo isso significa, mas você vai ver que eles têm foram bem categorizados. E para escrever um programa em Zero, vamos fazer exatamente isso. Vou começar sob Eventos e arraste este aqui. Quando a bandeira verde clicado. Agora, por que um? Bem lembrar que nossos voluntários veio à tona, a coisa que eu primeiro ou o que fiz foi clicar nesse verde bandeira no canto superior direito. E isso apenas significa que iniciar o programa. Assim, quando esse evento acontece, o que eu quero fazer? Eu estou indo para ir sob Looks, e eu vou fazer "dizer Olá." E eu vou mudar isso e dizer algo como "Olá Yale." E agora eu estou indo para zoom fora, clique na bandeira verde, e voila, eu escrevi um programa. Não é tudo o que emocionante ainda, mas esta é exatamente onde cada daqueles autor começou, ambos com Pikachu, eo lâmpadas binários e Oscartime, e tantos outros exemplos. Você começa super simples, e então você começa a camada, e adicionar recursos e funcionalidades. Então, quais são essas camadas vai consistir em? Bem, além de declarações, vamos também tem coisas que são pouco mais fancily chamado Boolean Expressions, depois de alguém chamado Bool. E uma expressão booleana é simplesmente um expressão que é verdadeira ou falsa, sim ou não, 1 ou 0. Quaisquer opostos polares assim. É verdadeira ou não. Mas nós também estamos indo para ver Os que pode ter esta aparência. Assim, por exemplo, é o mouse para baixo? Eles são uma espécie de perguntas, se você quiser. O mouse é ou para baixo, verdade ou não é, falsa. 1 ou 0, se quiserem, tende a ser o mapeamento. Verdadeiro é 1, falsa é 0. Bem que sobre menos do que isso? Ou então, isso é menos do que isso? Isso é uma questão de sorte. E se você colocar dois números lá, seja x vai ser menor do que ou Y igual a y, ou maior do que Y, mas este bloco veremos, é apenas vai responder à pergunta, este é menos do que isso? Nós também pode ver algo como isso. Tocando ponteiros de mouse. Assim, em zero, você pode pedir a questão, é o Sprite tocar o ponteiro do mouse? Outras palavras, é o que paira cursor sobre a tampa, ou o equivalente? Vamos ver as coisas anding juntos. Você pode fazer duas perguntas, e certifique-se de que ambos dar-lhe sim ou verdadeiras respostas antes tomar a decisão de fazer alguma coisa. Mas então como você tomar decisões? Bem, nós temos essas condições. E nós vimos isso em nosso exemplo do livro de telefone. Olhando para a esquerda ou certo para Mike Smith. E na condição, você fazer algo potencialmente, se uma expressão booleana é verdadeira. E, de fato, observe as formas agora. Há esse espaço reservado agora sobre a sobrecarga onde podemos fit-- se eu recuar uma slide-- que forma. Não é exatamente o mesmo tamanho. E, de fato, você vai ver que Zero redimensiona as coisas de forma dinâmica encaixar peças de quebra-cabeça, mas o forma é que é importante. Essa coisa parece que, e de fato é aproximadamente a mesma forma que deve caber lá dentro. E se quisermos fazer alguma coisa este ou aquele caminho, se ou então, temos esse quebra-cabeça peça em risco também. Agora suponha que você queria fazer if, else se, ou outra coisa. Em outras palavras, um garfo de três vias na estrada. Bem, o que você pode fazer apenas olhando para isso? Eu posso tomar esta parte do enigma, e não parece se encaixar, mas, novamente, vai Raspadinha o re-size muito bem para nós. Eu poderia começar a camada essas coisas juntos. Então agora eu tenho uma de três vias fork se isso é verdade, fazer isso. Else if essa outra coisa é verdade, ir por este caminho, então ir esta outra maneira. E em The Muppet do filme, o bifurcação na estrada, por assim dizer, entre Yale ou Stanford, estava exatamente aquele, apenas duas condições. Ou ir por este caminho, senão ir por esse caminho. Bem, loops também existem na programação. E nós usamos estes já em classe e no código pseudocódigo, e, certamente, naqueles Programas de raspadinhas para sempre. Zero tem essa peça do puzzle que só vai deixar você fazer algo para sempre. E às vezes você quer fazer algo para sempre. Não é necessariamente um erro, ele é porque você quer um relógio para continuar, ou um jogo para continuar jogando. Ou você pode especificar um número finito de passos, como acontece com este bloco de repetição aqui, que irá repetir algo 10 vezes. Podemos definir variáveis, veremos em breve. E com variáveis, semelhante em espírito a álgebra, como x ou y, ou z. É algo simbólico que pode armazenar algum valor, alguma peça de informação, que você pode querer para se lembrar para mais tarde. Melhor exemplo disso pode ser um jogo onde você tem uma pontuação, como em Pikachu. Quantos pedaços de bolo e outros enfeites você pegou? Bem, isso pode ser uma variável chamado pontuação que começa em 0. E, em seguida, cada vez que pego um parte de bolo ou doces, ou semelhantes, ele é incrementado. Ele é adicionado a um de cada vez. E lojas para que uma variável um pedaço de informação como essa. Depois, há arrays, e nós viremos de volta para estes em uma semana ou duas vezes, mas uma matriz é como uma espécie de inventário ou uma mochila, dentro de que você pode colocar as coisas virtuais. Ele permite que você armazene mais de uma peça de informação. E isso pode ser útil se no jogo, você é tipo de caminhada ao redor pegar coisas. E talvez você deseja manter todos esses pedaços de bolo ao redor, e não apenas comer -los um após o outro. E depois há uma columbófilo construção nós vamos vir a chamadas funções ou processos. E embora nós vamos mais rápido aqui, vamos ver que estes são muito solução natural para problemas que vamos encontrar. Como os nossos programas começam ficando maior nós vamos começar a notar padrões em o código que estamos escrevendo, as peças do puzzle que estamos arrastando e soltando. E assim que você percebe-se a fazer algo novo e de novo, ou pior ainda cópia e programação colando código que você escreveu, isso é provavelmente um oportunidade de fatorar o que quer que você mantenha cópia e colar, e colocando- em algo chamado de "função". Mas mais sobre aqueles em grande mais detalhes antes do tempo. E depois há ainda recursos mais extravagantes. Para aqueles de vocês mais confortável, ou tomar APCS ou equivalente, Zero, na verdade, suporta coisas como fios e eventos e muito mais. Então, percebe que ele tem um limite máximo bastante elevado, mesmo que seja também muito amplamente acessível para as pessoas que nunca programou antes. Então, na verdade, vamos dar uma olhada em um programa simples ou dois. Já olhou para como nós pode dizer Olá com o Scratch. Deixe-me ir em frente e abrir uma pequeno programa mais interessante que eu escrevi com antecedência. E este seu chamado Pet a Cat. Todos esses programas serão disponível no site da CS50. Na verdade, já está lá. Então você pode baixar eles, e brincar com eles, e com Conjunto de Problemas 0, o que é também no site do curso, você é encorajado a caminhar por estes. E além disso, nós temos uma número de vídeos pé-through on-line em que eu e A equipe de CS50 verdadeiramente caminhar através de cada um destes exemplos a uma muito mais ritmo mais lento, uma forwardable muito rápido, ou ritmo rewindable, de modo que você pode andar através destes em seu lazer também. Então aqui está o zero à esquerda. Aqui está um programa à direita que eu já pré-fabricados. Então deixe-me fazer zoom sobre o assunto. E poderia alguém em Inglês, sabendo o que você sabe, só a partir de agora como de como funciona a Raspadinha, espécie de dizer em uma frase em Inglês ou sentença, o que faz deste programa, aparentemente, fazer? Sim, na camisa alaranjada. AUDIÊNCIA: [inaudível] DAVID J. MALAN: Sim, se o seu cursor estiver em risco o gato, tocar um som miando. Mas note como nós expressamos isso. Há aparentemente um loop de lá, para sempre. E depois há uma condição, a expressão se. E coletivamente, o que aqueles significa? Isso significa que este programa apenas está sempre correndo, e isso sempre esperando e observando e escutando para eu movo o mouse sobre o gato. Porque cada vez que eu faço isso, como você propõe, ele vai fazer isso. Deixe-me começar o programa. Nada parece ser acontecendo, mas observe como que destacaram agora em uma linha amarela. Isso significa apenas que ele está correndo. E porque há um forever loop, ele ainda está em execução. Então deixe-me mover meu cursor sobre Raspadinha. [MEOW] [MEOW] E se eu movê-lo fora, [MEOW] Agora, ele pára, mas o programa de ainda em execução. [MEOW] E assim, adorável. [MEOW] Então, vamos abrir um pouco mais avançado exemplo chamado Não pet o gato. E agora vamos ver o que acontece aqui. [MEOW] Miar. Então é um pouco sobre piloto automático, se você quiser. --pet o gato. Porque será. [ROAR] [MEOW] Então, como isso funciona? Bem, você pode tipo de razão por isso intuitivamente, talvez. Mas vamos olhar para o código real. Então, novamente, quando a bandeira verde é clicado, fazer isso para sempre. O que você quer fazer para sempre? Bem, se tocar rato ponteiro, em seguida, jogá um som que está aparentemente chamado Lion 5, que está dentro deste projeto, mais jogar miado de som, e então esperar dois segundos, de modo que não está miando sem parar. Na verdade, você pode começar muito rapidamente para irritar-se e seus companheiros de quarto. Vamos remover este bloco. E perceber o que é agradável sobre Raspadinha. As coisas simplesmente tipo de arrasto e soltar e intertravamento. Então, novamente, ela cresce para preencher o que você quer. Mas se eu remover isso, e, em seguida, jogo da batida, [COMPUTER BLIP SOUND] --É tipo de tropeçar em si, porque é literalmente fazendo o que eu estou dizendo. Ele está dizendo para sempre jogar esse som, mas Eu não estou dando-lhe a chance de terminar. E para que seria um erro. E é por isso que nós tivemos esta coisa aqui agora. Então vamos realmente começar a partir scratch-- espécie de trocadilho ligeiramente intended-- em que nós temos agora o movimento gato. Então, eu vou fazer isso em tempo real. Eu estou indo para fazer zoom aqui, apenas para me fale sobre eventos. E bandeira verde clicado. E há outras maneiras para iniciar os scripts. Nós estamos indo para mantê-lo simples aqui. E agora eu estou indo para ir em frente e ir sob controle. E, novamente, se você esquecer de onde as coisas estão, basta clicar em torno, e, eventualmente, você encontrá-los novamente. Então, eu quero sempre fazer o quê? Eu quero usar o bloco de movimento Eu sei que existe, mover 10 passos. Então, vamos ver o que acontece aqui se eu jogar este jogo. Felizmente ele não ir longe demais. Eu posso ainda tipo de agarrá-lo pelo rabo e puxá-lo de volta. Mas o programa ainda está em execução, então ele é tipo de lutar contra mim. Mas seria bem legal se eu condicionalmente corrigir isso no código. Porque este é não-- na verdade, este é realmente não um jogo divertido para qualquer pessoa de qualquer idade. Então, vamos tentar corrigir isso ter algum tipo de condições. Então, eu estou indo para ir ao abrigo De controle e, em seguida, se. Eu gosto dessa idéia. Então, depois de mover 10 passos, se-- deixe-me sentir onde eu sou. Eu estou indo para ir sob Sensing, e então parece que eu posso ir aqui. remar para os jogos de forma. Tamanho não faz, mas é vai crescer para preencher. E agora este é um pequeno menu. E agora rato pointer-- eu não quer o mouse, eu quero a borda. Então Scratch é inteligente o suficiente para saber quando um sprite está tocando a borda. O que eu quero que ele realmente faz? Deixe-me ir em frente e mudar movimento. Você sabe o que? Eu estou indo para tê-lo virar. Assim, a 15 graus não é realmente vai me ajudar. Eu quero que ele vire-se e ir por outro caminho. Então, vamos ver o que acontece aqui, se eu acertar Jogue agora. OK, uma espécie de idiota olhando, mas ele está fazendo exatamente o que eu disse. E ele está girando todo o sprite. Agora não é que eu posso consertar isso. E eu não sabia como para corrigir isso em primeiro lugar. Eu meio que tive que futz ao redor e ver a melhor maneira de fazer isso. Mas se eu for a-- vejamos, movimento. Oh, eu encontrei este. Na verdade, de ajuste da rotação Style. Esquerda, direita, ou não gire, ou todos ao redor. E verifica-se que é o que eu quero. E eu vou colocar este não é meu loop, porque eu não preciso definir o modelo de rotação múltiplas vezes. Vou colocá-lo no topo de este programa para que ele seja definido uma vez, e, em seguida, lembra. E agora eu vou tentar isso de novo. Deixe-me parar o programa. E agora que fixa esse bug. Então, eu estou melhorando de forma iterativa em cima deste. O programa está recebendo um pouco mais complexa e maior, mas eu estou tomando passos de bebê por assim dizer, e pequenas mordidas fora do problema para obtê-lo cada vez melhor. Mas isso, também, é uma espécie de coxo. Você sabe o que? Será que pedir a alguém com um realmente bom, voz assustadora gostaria de vir para cima? Alguém com uma voz. Uh, sim. Vamos lá para cima. Com a camisa verde. Assim, verifica-lá fora é outra diversão coisas, estética e sons parecidos. Aqui está o miado. Eu clique na guia Sons. [MEOW] Há o miado. [MIAU MIAU] [MEOW] --actually algo recorde de nossa própria aqui. Então, vamos fazer exatamente isso. Em vez de usar este som gato, vamos vá em frente aqui, e qual é o seu nome? Nick, prazer em conhecê-lo. É David. Então, em um momento, eu vou para acertar o botão Record. E se você puder apenas gritar para o laptop, "ouch", como se você apenas orientado para a parede, que será muito apreciado. 1, 2. NICK: Ouch! DAVID J. MALAN: Awesome. E agora pode fazer um pouco de edição aqui. Vai se livrar das partes tranquilos. E eu acho que isso é bom. Muito obrigado. NICK: Prazer. DAVID J. MALAN: Eu tenho apenas renomeou "ouch" mas agora eu vou voltar para meus scripts. E notem há de fato som aqui. E eu estou indo para ir em frente e reproduzir o som ouch, e eu vou fazer isso se ele está tocando somente nas bordas. E então eu vou tê-lo virar. Então, vamos ver o que acontece aqui. Vamos tela cheia. [REPRODUÇÃO DE VÍDEO] -Ouch! Ouch! Ouch! Ouch! Ouch! Ouch! Ouch! Ouch! [FIM DE REPRODUÇÃO] DAVID J. MALAN: Então você percebe que estamos ficando um pouco de sorte. Eu estou indo para tê-lo de movimento como 100 degraus de cada vez. O efeito do que agora vai para ser-- [COMPUTADOR GLITCH SOUND] Então, dentro da razão. Assim, a oportunidade de refinar essa ainda mais se nós realmente queremos. Então agora vamos introduzir um outro conceito. Para me deixar ir em uma chamada Contando carneiros e uso algo chamado de uma variável. Este é um carneiro pequeno adorável, e I mudou seu traje por assim dizer. Assim, mesmo que o padrão é uma gato, você pode fazer upload, você pode desenhar, você pode fazer qualquer número de caracteres em seu sprite. Aqui está um programa que é vai fazer o que em Inglês? Baseado novamente em exatamente o que você sabe agora. O que este programa faz? Sim, ele vai contar. Um número cada vez. Temos aparentemente tem este contador set. Eu não sei o que é isso, mas talvez seja uma variável. É apenas um recipiente, x ou y. Mas o contador de palavras é mais descritivo do que x ou y do matemático. Assim, podemos usar palavras em inglês para as coisas. Para sempre, apenas significa continuar fazendo isso. Diga balcão. Agora onde veio isso? Bem, acontece que contador é uma variável. Portanto, é apenas mais um quebra-cabeça peça que eu criei com antecedência. E mesmo que isso acontece não ser da mesma forma aqui, normalmente você diria algo como Olá aqui. Você também pode arrastar uma variável de modo que é isso que está se disse. Então eu esperar por um segundo, eu alterar o contador por um, incrementá-lo adicionando um. Assim que o efeito líquido é esta ovelha contagem adorável. Embora ele está contando a si mesmo. Agora é muito rapidamente vai ficar chato porque ele vai fazer isto verdadeiramente para sempre, mas isso é exatamente o que o O projeto de programa prescreve. Vamos agora tentar outro exemplo que utiliza uma variável. Este chamado Hi Hi Hi, que não ficar chato rapidamente. Agora este tem dois scripts. E então, novamente, estamos dando passos de bebê. Começamos com algo super pequeno, adicionado a ele, adicionado a ele. Agora eu quero fazer alguma coisa ainda mais dinâmico, então eu quero estar a ouvir para duas coisas diferentes ao mesmo tempo. Assim, do lado esquerdo, quando bandeira verde é clicado, Eu definir uma variável que eu escrevi com antecedência chamado silenciado. E eu arbitrariamente definir como 0. Então Raspadinha não tem verdadeira e falso, mas ele tem 0 e 1. Então eu posso aproximar essa mesma idéia. E, em seguida, sempre, se a barra de espaço é pressionado, em seguida, defina a variável a 0. Ou arrependido. Se o espaço for pressionada, e se silenciado, a variável, é 0, em seguida, definir silenciado a 1, mais silenciado definir a 0. Isto parece uma espécie de como estamos apenas fazendo e desfazendo trabalho. Mas o que é o efeito? Toda vez que eu bater a barra de espaço, o que acontece com o meu variável silenciado chamado, logicamente? Tipo de fica invertida. Ele muda de 0 a 1, ou 1-0. Por isso, tomou a poucas quadras para expressar isso, mas tudo Eu estou fazendo está alternando o estado de esta variável de 0 ou 1, ou 0 ou 1 cada vez que eu bater a barra de espaço. Agora aqui, o que está fazendo isso? Para sempre, se silenciado é 0, por isso, se silenciado é falsa. Então, se ele não está silenciado, é a semântica lá, jogar leão mar som, e pensar hi hi hi para dois segundo, espere dois segundos. Então, observe agora estes roteiros são efetivamente indo para executar em paralelo para que se possa estar escutando para uma ação, o outro para tomar uma decisão com base nessa ação. E ele pode fazer isso para sempre. [LEÃO DE MAR BARKING] [LEÃO DE MAR BARKING] Vai fazer isso para sempre e [LEÃO DE MAR BARKING] como eu acabei de fazer. E agora ele ainda está em execução mas eu tenho "silenciado" o jogo. [LEÃO DE MAR BARKING] E isso é tudo isso cara faz agora também. Vamos abrir um outro exemplo aqui. Deixe-me entrar em Eventos, e agora este adorável também. Mas note que tem dois sprites. Portanto, não apenas dois scripts com um sprite, mas dois sprites. E se eu clicar sobre o indivíduo azul como eu já tem, eu vejo ele como um programa -se aqui que, literalmente, apenas diz este, quando eu receber um evento, dizer "Polo" por dois segundos. Então, se você já jogou em uma piscina, o jogo Marco Polo, se o script laranja cara é qualquer indicação, aparentemente cada vez que eu bater a barra de espaço, o que é o cara laranja vai fazer? Ele vai dizer "Marco". E então este é um novo bloco. Nós não vimos isso antes, mas difundir um acontecimento. E eu poderia chamá-lo nada evento que queremos. Nós vamos voltar a este talvez antes do tempo. Mas a transmitir um evento é uma maneira para uma entidade gráfica para falar com outro por essencialmente uma mensagem de passá-lo. Não é uma mensagem que você vê. Não é algo visual. É uma espécie de uma mensagem do computador que o outro cara está aguardando as. Porque, na verdade, o cara azul, recordação não tem bandeira verde quando clicado. Ao invés disso, tem, quando eu receber um evento. Quando ele se entregou esta nota em sala de aula, por assim dizer, ele deve dizer "Polo". E assim, o efeito líquido é que quando eu bateu a bandeira verde, nada acontece. Mas quando eu bati a barra de espaço, ele diz "Marco", ele responde com "Polo". Mas a única entidade gráfica que eu sou interagindo com é o laranja. Portanto, esta é uma forma de tipo de passar mensagens entre sprites e tê-los comunicar uns com os outros. Agora vamos olhar para uma última um aqui chamados segmentos. E perceber isso por jogá-lo. Então, essas são duas sprites. O pássaro é espécie de voar ao redor. Ele está saltando. Não há nenhuma "ouch", mas mesma idéia. Mas o gato parece muito inteligente. O que é o gato aparentemente fazendo? E esperar por ele. O que é o gato aparentemente fazendo? Não é só saltar. Ele está seguindo o pássaro. E assim, aparentemente, há uma maneira com uma combinação de blocos de aqui- e vamos olhar para o gato rápido real. Para sempre, se tocar pássaro, em seguida, jogá o som Lion 4, o que quer que seja. Ouvimo-lo uma vez. Caso contrário, apontam para pássaro, e dar um passo. Agora, o fato de que é um passo é o que dá o pássaro um pouco de vantagem inicialmente, mas se em vez fazer esta 10, por exemplo, tão que cada iteração do loop de que ele é movendo 10 passos de tempo. Então, mais espaço. Vamos ver o que acontece em seguida. [LION ROAR] Nem tudo o que muito melhor. Então agora vamos tentar melhorar sobre estes um pouco de forma iterativa, e voltar para que noção de uma função. E, de fato um dos fundamentais takeaways do design de classe. Não apenas escrever programas que funcionem e que estão corretas, mas estão bem projetados. E design é muito mais subjetivo, e você vai ficar melhor para ele ao longo do tempo. Mas vamos dar alguns passos de bebê na direção começando com um programa que funciona, absolutamente, mas não é muito bom. Não é muito bem escrito. Então aqui está um programa que faz isso. Tosse, tosse, tosse. O que o programa se parece? Parece correto para mim. É dizer sofá por um segundo, então ele espera. Em seguida, ele diz que de novo, então ele espera. Em seguida, ele diz que de novo, então ele espera. E, em seguida, o programa implicitamente termina, porque não há loop. Mas por que este é um programa mal escrito? Mesmo que você nunca tenha programado antes? Como, o que esfrega o forma errada, talvez aqui? Sim? AUDIÊNCIA: [inaudível] DAVID J. MALAN: Exatamente. Você está repetindo -se uma e outra vez. E, literalmente, Copiei e colei dois desses blocos novamente e novamente. E isso é exatamente o tipo de sanidade verificar que você deve fazer. Espere um minuto. Devo realmente estar fazendo isso? Então o que é isso o que está a solução óbvia, talvez? Ter algum tipo de loop. E eu não lembro bem que a peça do puzzle é, mas se eu olhar para o próxima iteração aqui, de fato, não há apenas o loop para sempre, há alguns repetir várias vezes. E assim eu especifiquei três. E agora perceber o quanto mais apertado, como muito mais sucinta este programa é. E num certo sentido, como muito mais sustentável. Se eu quiser alterar a palavra de tosse para outra coisa, como achoo, como se ele estivesse espirros. Então eu mudá-lo em um lugar, e não três. Portanto, esta já se sente como um pouco melhor design. Deixe-me tosse vez aberto 2, o nosso terceiro exemplo. Observe como um cientista da computação, Eu começar a contar a 0, tipicamente. Agora, isso parece um pouco assustador no em primeiro lugar, mas o efeito é o mesmo. Tosse, tosse, tosse. Mas o que parece ser fundamentalmente nova na parte superior do programa? Eu removi a palavra. Eu removi a espera. E o que eu tenho ligado em vez disso? Uma função. Um bloco de tosse. Quero dizer, francamente, me parece tipo de um idiota se eu não fizesse apenas começar com o bloco que é aparentemente chamado "tosse", se isso é tudo que eu quero que ele faça. Mas isso não existe no Scratch. Em vez eu fui a uma no paleta chamado mais blocos aqui, e eu arrastar esta grande coisa roxa aqui que me permite definir uma função. É, essencialmente, me deixa criar meu próprio quebra-cabeça peça que pode ser chamado de qualquer coisa que eu quer, que pode fazer o que quiser, mas dá-lhe um nome. Isso me dá uma nova, parte do enigma roxo que agora faz tudo o que eu diga a ele para fazer. Portanto, esta peça roxa aqui corresponde a este aqui. E o que ele faz? Diz tosse por um segundo, e então ele espera. E agora eu tenho a sorte de criado minha própria parte do enigma feito sob encomenda, de modo que ele se comporta exatamente do mesmo jeito. Então eu posso continuar fazendo isso. E, de fato, não vai ser mais e mais oportunidades para a modularização, e para camadas, complexidade em cima do outro. Mas essa idéia básica, de fato em problema, disse 0. O que você vai ser desafiados a fazer é fazer o download do risco, ou apenas usá-lo na web, e apenas se divertir com ele. Nós vamos dar-lhe um conjunto de necessidades, tendo um som, e um certo número de peças do puzzle. Mas você vai fazer exatamente isso. E você vai perceber que você está indo quer dar alguns passos de bebê, inicialmente, até que seu programa recebe mais e mais complexa. Mas, considerando este é o melhor maneira que eu poderia fazer isso? É possível evitar esse instinto talvez, para copiar e colar? Mas antes do Conjunto de Problemas 0, e antes de encerrar, pensei que iria demorar até um mais voluntário se pudéssemos, para um programa final que é talvez o mais montagem de todo, dado local de hoje. Vamos lá para baixo. Sim. Sim. Qual o seu nome? Uh oh. Está ok. Ambos vêm para baixo. E eu tenho que lidar com isso de alguma forma dentro desse próximos dez segundos. Então venha para baixo. Vamos lá para baixo. Deixe-me vir aqui em cima. Vamos. Tudo certo. Vamos ver aqui. Então, observe bem rápido aqui, se você gostaria de vir em cima. Nós vamos fazer duas rodadas de presente. E qual é o seu nome? SABRINA: Sabrina. DAVID J. MALAN: Sabrina e? YING GEE: Ying Gee. DAVID J. MALAN: Ying Gee. Prazer em conhecê-los. David. Assim, o nosso último exemplo é aqui O jogo mais difícil do chamado Ivy. E por que não temos de fazer Nível 1 e Nível 2 você faz. E vamos ver o quão longe além de que nós realmente ir. Escrito por um estudante no ano passado, remixada por mim de modo que este iria sobre bem em New Haven. E dou-vos um jogo que vai envolver movendo as setas para cima e para baixo, e ficando Yale para a linha de chegada. Aqui vamos nós. [REPRODUÇÃO DE VÍDEO] [MUSIC - NFL ON FOX música tema] [MUSIC - MC Hammer, "U PODE NÃO TOQUE  ESTA"] -U Não pode tocar isso. U não pode tocar neste. Não pode tocar nisto. Meu, meu, meu, minha música me bate tão duro, me faz dizer, oh, meu senhor. Obrigado por me abençoar com um mente para rimar e dois pés hype. Isso é bom quando você sabe que está para baixo. A homeboy narcótico super do Oaktown. E eu sou conhecido como tal e esta uma batida uh, você não pode tocar. Eu disse que homeboy U não pode tocar neste. Sim, é assim que nós estamos vivendo e você sabe U não pode tocar neste. Olhe nos meus olhos, cara. U não pode tocar neste. Yo, deixe-me rebentar as letras de funky. U não pode tocar neste. Novos chutes e calças frescas. Você gostou disso e você sabe que você quer dançar. Então, sair do seu assento e ficar uma menina mosca e pegar esse ritmo. Enquanto ele está rolando em espera bombear um pouco bit e que eles saibam o que está acontecendo. Como aquilo. Como aquilo. Frio em uma missão tão puxe de volta. Deixe-os saber que você é demais e este é um movimento uh você não pode tocar. Yo, eu disse que U não pode tocar neste. Por que você parado lá homem? U não pode tocar neste. Yo, soar na escola sino, otário. U não pode tocar neste. Dê-me uma canção, um ritmo tornando- suar é isso que eu estou dando-lhes agora. Eles sabem que quando você fala sobre o Martelo você fala sobre um show que é sensacionalistas. E cantores são apertados suando assim passá-los um microfone. Ou uma fita para saber o que que vai tomar e agora ele vai queimar as cartas. Legit tanto trabalho duro ou assim como você pode sair. Porque você sabe que U não pode tocar neste. U não pode tocar neste. Quebrá-lo para baixo. Pare. Tempo do martelo. Vá com o fluxo em uma rodada se você não pode mover-se para este então você provavelmente estão mortos. Então balance sua mão no o ar [inaudível] Isto é para uma dança ao vencedor isso e você está indo para obter mais fino. Mova deslize o garupa apenas para um minuto, vamos todos fazer a colisão. Sim. U não pode tocar neste. U não pode tocar neste. É melhor você sensacionalistas menino U não pode tocar neste. Anel de volta da escola sino in. Quebrá-lo para baixo. Pare. Tempo do martelo DAVID J. MALAN: Isso é tudo para CS50! Muito obrigado por se juntar a nós! Vejo você lá fora. [FIM DE REPRODUÇÃO] [REPRODUÇÃO DE VÍDEO] [MUSIC - "Seinfeld" música-tema] Ei David. Ei, David. Como está indo? -Bom Trabalho, hoje. -Então Você já pensou sobre o que você vai fazer para as piadas fora? Não, eu não tenho nada. -O Se-- o que se esta é a piada? -Como, Desembalar carrinhos? Uh-huh. Você sabe, é sobre nada. -Então Gosta, nenhuma história, nenhuma conflito, nenhuma resolução. Não estou entendendo. Sobre o que é então? -Nada. -Então Temos a piada é sobre nada, e não temos atores. Quem vai estar nessa? -Não não não. Quero dizer, eu vou estar nele. -Você Vai estar nele? -Sim! As pessoas estão sempre dizendo me que eu sou um personagem. Bem, eu quero dizer, é verdade. Mas quem mais vai estar nele? Ele não pode simplesmente ser você. -Você Vai estar nele, Gavin, Dan, Dan, Colton, Z'Myla, Alysse, Doug, David, todo mundo. -Então É sobre nada, e todo mundo está nele? -Absolutamente nada. -Isso é ridículo.