[REPRODUÇÃO DE MÚSICA] Este é CS50-- Harvard introdução da universidade ao intelectual empresas de informática e a arte da programação. E o meu nome é David Malan, e Eu só estava pensando nesta manhã, tem sido surpreendentemente 20 anos hoje desde a última vez se sentou em que vocês fazem agora. Foi 1996. Eu estava no segundo ano, e eu estava tomando CS50 pela primeira vez. E eu ainda não tinha chegado até o nervo para levá-lo a mim mesmo primeiro ano, em parte por causa do tempo. ciência da computação para mim era uma espécie de gosto, meh. Eu estava um pouco de um geek que cresce -se, mas eu realmente não ter qualquer intelectual interesse em o que parecia para ser apenas um monte de pessoas programando o tempo todo. E eu estava com medo de ser honesto. O curso e ciência da computação mais geralmente tinham e, em certa medida, ainda tem essa reputação de um campo para cuidado, mesmo porque tantos de nós não estão familiarizados com ele e não tem certeza disso. E realmente não foi até que eu comprei esta classe que segundo ano fall-- e, mesmo assim, eu só inscritos porque o professor-- um dos meus primeiros mentores, Brian Kernighan agora em Princeton-- me permitiu tirar o passe classe falhar. E, de fato, é por isso hoje nós permitir e encorajar os alunos a tomar esta classe se sentou / unsat. E só então, pela final do semestre me dei conta de como, uau, isso não era um campo tão desconhecido. Na verdade, este foi um muito estimulante campo, e mais excitante, especialmente mais tarde, como eu fez cursos de Artes Dramáticas 101 e latino-A e, eventualmente, arqueologia escola do graduado, eu realmente começar a ver a intersecções deste campo, computador ciência, com as ciências humanas, ciências naturais, artes, medicina, e similar. E é isso que é tão interessante sobre ciência da computação em última instância, como nós esperamos que você vai see-- é a sua aplicabilidade a esses outros campos, e como você pode tomar um pouco do hoje e do semestre de idéias e habilidades práticas de volta para o seu próprio domínio, e realmente explorar esta intersecção das artes liberais e ciências. Assim, 73% de você, se a última ano é qualquer indicação, nunca tomou um curso de CS antes. Então, se, como eu, você está sentindo um pouco medo, ou francamente você não está realmente certo porque você está mesmo aqui. Talvez você apenas seguiu alguns amigos para Sanders agora mesmo. Isso é totalmente bem. O objetivo aqui é ligar você e para tranquilizá-lo que se você olhar para a esquerda e para a direita, você vai ver colegas com tão pouco ou muita experiência que você mesmo possa ter. E, de fato, vamos compartilhar algumas estatísticas mais tarde hoje quanto ao que a demografia de a classe normalmente se parecem. E como adicionado reassurance-- e isso nós quero dizer desde que assumi o curso alguns anos em ago-- syllabus do curso é isto-- que o que em última análise, assuntos neste curso não é tanto onde você termina -se em relação aos seus colegas, mas onde na semana 11, a fim de a semestre, acabam em relação ao mesmo na semana 0, que é onde estamos aqui hoje. E é isso que eu percebi todos esses anos atrás. E eu conheço um monte de aulas de dizer isto, mas é especialmente verdade em ciência da computação. No final do dia, este campo não é familiar como foi para mim e pode ser para você, é realmente apenas sobre a resolução de problemas. E como tal, não têm este aplicabilidade para obter outros campos. E, de fato, se tentássemos para destilar o que isso significa, esta é a resolução de problemas em sua essência, ouso dizer. Há input-- assim que for é que você está tentando resolver. Não há saída, que é esperançosamente a solução para esse problema. E então, como seria dizer em ciência da computação, há essa caixa preta no média que você não necessariamente tem que se preocupam com a forma como funciona. Você mesmo, eventualmente, pode implementar o que está dentro dessa caixa. Mas para fins de hoje e mais geralmente na vida, tudo o que importa é que estes problemas são resolvidos. E o que esta disciplina é em última análise, sobre está explorando a interseção de estas entradas e saídas, e os chamados algoritmos, como veremos em breve, que implementam o que é embaixo lá, o capô. Mas estas entradas e estes outputs-- o que isso realmente significa? Bem, no final do dia, precisamos alguma forma de representar informações. Isto é especialmente verdadeiro em um computador, que tão extravagante e complexa, uma vez que pode parecer, é um dispositivo muito burro. Leva electricity-- se a partir de um cabo ou uma bateria como input-- e, em seguida, que produz algum respostas pré-programados na tela. Mas como é que vamos começar a partir de do início ao fim lá? Bem, o que é um problema a ser resolvido? Bem, talvez nós pode, em do início de qualquer semestre, tentar levar atendimento em uma sala como esta. Então eu poderia fazer como um, dois, três. Ou talvez, se eu fiz isso a sorte de acompanhar de myself-- manter o controle de coisas- Eu poderia rapidamente ficar sem dedos. Então, eu só poderia fazer hash de um marks-- pessoa, dois, três, quatro, cinco, seis, sete oito. E todos nós temos, provavelmente, feito isso, seja em suas mãos ou sobre um pedaço de papel. E isso é realmente apenas algo chamado notation-- unário onde se você só tem uma letra no seu alfabeto, um ou haxixe marca neste caso, para cada entrada que deseja contar, você precisa colocar para baixo uma delas letters-- uma dessas marcas. Tudo certo. Isso é tudo muito bem e bom e não tão complicado. Mas os computadores não são todos que muito mais complicada. Na verdade, a maioria de vocês provavelmente sei mesmo se você não tenho realmente considerou que isso significa, que computadores só entendem zeros e ones-- o chamado sistema binário. Nós, seres humanos, por contraste, são tão muito mais sofisticado na medida tal como a entendemos zeros através de noves. Mas mesmo se binário é, em primeiro lugar vista, não tão familiarizado, verifica-se que é como os sistemas e as idéias que nós já sabemos. Assim, por exemplo, considerar isso. Esta é apenas uma sequência de símbolos. E todos vocês, quando olhando para ele, provavelmente, acho 123-- nada realmente interessante lá. Mas por que é esse número, 123? Estes são apenas glyphs em o screen-- apenas padrões que alguém poderia ter desenhado ou digitado. Mas se você é como eu, você provavelmente se lembra da escola primária que há uma espécie de colunas ou lugares aqui. Não há lugar eo do um lugar ten e local a centenas de. E a razão que este é 123 e não apenas um padrão de três símbolos é porque, é claro, se têm uma em casa das centenas, você fizer as contas de 100 vezes um, e em seguida, dois no lugar dos dez. Então, isso é 10 vezes 2, e, em seguida, de três em o lugar do um e que é 1 vezes 3. E quando você adiciona todos aqueles acima, de Claro, você tem 100 mais 20 mais 3. Então começamos com apenas um padrão de symbols-- um alphabet-- mas, em seguida, mapeamos significado para que por meio destas colunas. Bem, verifica-se que computadores não são realmente tão diferente de você e eu. Mas em vez de usar potências de 10, de modo a speak-- 1, 10, 100, 1000, 10.000 lugar e assim forth-- eles realmente basta usar poderes de 2-- assim uma, duas, quatro, e em seguida se colocarmos mais dígitos, 8, 16, 32, 64, 128, e assim por diante. E assim isto é como um computador representaria o número 0, Assim como nós seres humanos. 0, 0, 0-- e você provavelmente pode adivinhar o padrão de zeros e uns, se um computador só pode falar 0 ou 1-- o padrão vai representar o número que nós seres humanos sabem como 1? Yeah-- 0, 0, 1. Tudo certo. Assim, 0, 0, 1 é como nós representamos 1, de modo que você pode estar inclinado em seguida, para representar o número 2, se tiver lugar a quatro do local e os dois de como a um lugar, você pode dizer, bem, se tivéssemos um 1 no lugar do um, e agora queremos contam-se a 2, você pode fazer isso e deixar que este é um zero. Mas é claro que isso não é assim o sistema decimal funciona tanto. Se você colocar um dígito ambas as colunas, você tem que fazer a aritmética. Então, o número fez I acidentalmente apenas representam? Então é 3, porque 2 vezes 1 mais 1 1 vezes, é claro, dá-nos três. Portanto, este seria dois. O bit tipo de aletas, por assim dizer, como 0 torna-se um, muito parecido com um 9 papéis mais e se torna um 0 quando você levar a 1. Este seria, então, três claro. Four-- outra coisa interessante acontece, onde os rolar e transportar a 1, por assim dizer. Então, isso, claro, é de 4. Mas se você avanço rápido agora, Qual é o maior número vai ser um computador que pode representar? Então é só sete neste caso, certo? Porque você tem uma em quatro, um em dois, um a um, em uma. Então, isso é 4 mais 2 mais 1. Assim que lhe dá sete. E, de fato, seria parecer à primeira vista que os computadores podem contar não superior a esta. Mas isso, claro, não é verdade. O que nós humanos fazemos quando quiser a contagem mais elevada do que como 999? Basta levar a um e apenas adicionar um quarto dígito para a esquerda. E assim, na verdade nós poderíamos. Poderíamos ter um oito de lugar e um lugar de um dia 16, e lugar a 32 de, 64, 128-- e você pode apenas manter em curso até ao infinito. Então, esses zeros e ones-- o chamado binário system-- são o que um cientista da computação seria geralmente chamamos um pouco, ou dígito binário. Mas agora, como é que vamos começar a partir do conceito ou os gráficos destas coisas a um computador real? Parece que estamos a pular uma etapa aqui. Bem, a única entrada no final do dia, para o meu laptop aqui é este fluxo de electricidade. Mesmo se ele tem sido um longo tempo desde que você pensou sobre ou nunca pensou em como a eletricidade funciona, há elétrons que fluem dentro ou para fora, e esse é o meu tipo de entrada. Então, se isso é tudo o que nós somos recebendo como entrada aqui, o que podemos fazer com essa informação? Bem, poderíamos pensar em um zero como apenas uma ausência de electricidade. Nada é flowinw, nada é em movimento, nada está acontecendo. Isso é apenas o padrão state-- zero. Mas se há eletricidade fluindo, por que nós não apenas arbitrariamente, mas globalmente consistentemente, chama isso de um. Então, simplesmente por ter nenhum poder, temos um zero, sim poder, temos uma um-- nenhum poder, sim poder. E dessa forma, usando algo mais físico ou eletrônico começamos a implementar essa noção de algo, quer ser um ou um zero. Na verdade, poderíamos apenas fazê-lo aqui. não aqui, eu tenho três, mas oito lâmpadas, cada uma das quais tem a sua própria chave. E então se eu queria representar o número sete aqui, Eu poderia ligar estes três lâmpadas. E, de fato, dentro de meu computador é de milhões, bilhões de coisas que são apenas menor do que, chamados transistores, switches, que você acabou de ligar e desligar. Então, essas são big-- relativamente interruptores big-- dentro da minha laptop-- muitos, muitos, muitos, muitos mais interruptores. Mas todos eles fazem é exatamente isso-- transformar algo, ligue algo fora. E, como tal, um computador pode representar, com os milhões ou bilhões de transistores, lotes e lotes de zeros e uns. E não há outro hardware ainda que permite armazenar informações de longo prazo, de modo que quando você puxa o ligar, você não perdê-lo. Mas isso é uma história para outro dia. Então o que podemos fazer com esses bits? Poderíamos apenas para tirar a pressão fora de me-- pode alguém quer vir até aqui e oferecer uma demo? Eu vi isso em primeira mão. Qual o seu nome? Maday: Maday. DAVID MALAN: Maday, vamos lá para cima. Prazer em conhecê-lo. Maday: Prazer em conhecê-lo. DAVID MALAN: Vem por aqui. Eu não terão de lip-lo. Tudo certo. Então, aqui, temos, notice-- um, dois-- vamos editar esse out-- um, dois, quatro, oito, 16, 32, 64, 128. Isso é deliberado. Há oito bits aqui-- binário zeros digits-- e uns. E é um pouco útil uma unidade de measure-- não é tão útil uma unidade de medida sobre si própria. Normalmente você quer, pelo menos, oito dessas coisas, a.k.a. um byte. Portanto, temos um byte de bits aqui. Então, se nós queria desafiá-lo com, por exemplo, soletrando, em binário, este valor aqui-- 42. Quer tomar uma facada em que? Maday: [inaudível]. DAVID MALAN: Sim, basta apertar o pequenos interruptores brancos na frente. E você deseja soletrar a 42, e para ganhar é esse estresse CS50 bola, se você conseguir isso. Tudo certo. Então você tem 32. Nós vamos precisar de 42. Então, isso é um oito, de modo que é 40. E excelente-- muito bem feito. Obrigado. [Aplausos] Tudo certo. Portanto, temos mais uma bola anti-stress. Vamos fazer isso mais uma vez, se pudermos. Um outro voluntário? bola sem stress, bola sem stress. ESTÁ BEM. Durante aqui no meio, quer descer? Tudo certo. Eu sei. Aqui vamos nós. Assim, os números aqui-- vamos lá para baixo. Qual é o seu nome? Davey: Davey. DAVID MALAN: Davey. ESTÁ BEM. Vamos lá para cima, Davey. Prazer em conhecê-lo. E o que nós vamos ter você spell-- se você poderia ficar lá para apenas um moment-- é o número 50. Mas, mas, mas, mas, mas, estes são escola primária ímãs por uma razão. Ficou um pouco mais difícil, certo? Ainda há oito. Tudo certo. Então o que temos lá? Temos 32. Agradável. 32 mais 16 nos dá 48-- tão perto. E maravilhoso. Parabéns a Davey bem. [Aplausos] Tudo certo. Assim, podemos fazer isso durante todo o dia, e ele não fica tudo muito mais interessante e mais desafiador. Mas isso é realmente o ponto-- É assim relativamente simples é, no final do dia, o que é um computador faz para armazenar informações, para armazenar as entradas e finalmente armazenar ou representar essas saídas. Mas números por si só não são tudo o que interessante. Assim, os seres humanos, há alguns anos, decidido, você sabe o quê? Seria bom se computadores não eram apenas calculadoras para a aritmética operações, mas, na verdade, poderia fazer coisas como processamento de texto, ou e-mail, ou encarnações mais modernos desses tipos de tecnologias. E assim o mundo decidiu arbitrariamente, mas universalmente, que se você deseja armazenar a capital letra A em um computador, você sabe o quê? Vamos apenas todos concordam para armazenar algum padrão de zeros e ones-- bits-- que em última análise representa o número decimal 65. Vamos todos concordam com isso. 66 representaria B, 67 representaria C, e não há cachos de outros padrões de zeros e uns, ou os números subjacentes, que representaria outras letras estáticas. Então, se você tipo de mentalmente absorver isso por um momento, Eu deliberadamente colocar-se de A a I, onde H a 72 e I é de 73. Se um computador, em seguida, no contexto de um programa de processamento de texto ou um e-mail, revelado por baixo do capuz ter esses padrões de padrão bits-- de bits representando 72, depois 73, depois 33-- o que poderia esta mágica nesse programa? Então, oi, e depois alguma coisa. Nós não necessariamente sabem, mas na verdade, 33-- não no gráfico earlier-- era simplesmente um ponto de exclamação. Então 72 foi H, 73 é I, 33 acontece para ser um ponto de exclamação ainda. Mas isso é tudo muito bem e bom, e, de facto, hoje em dia, em vez de usar apenas sete ou oito bits, graças a algo chamado Unicode em oposição para ASCII de volta ao dia, nós realmente pode representar ainda mais personagens interessantes do que apenas estes original em Inglês tendenciosa letras. Mas também pode representar até mesmo coisas mais puro como cores. Se você já ouviu a sigla RGB, vermelho, verde, azul, que Significa apenas que um computador geralmente usa três conjuntos de bits-- algum número de bits que representam um número para a quantidade de vermelho que você quer, outro conjunto de bits para quanto verde que você quer, e outro número definido para a quantidade de azul que você deseja. Assim, um grande número significa lotes de vermelho número, pequeno não significa nenhum vermelho. E assim estes são o tipo dos valores médios aqui. Então me dê um pouco de vermelho, me dê um pouco verde, e me dar um pouco de azul. E se você misturar essas três máscaras de cor em conjunto, neste caso, você receber essa sombra escura de amarelo ou marrom. Mas esse padrão de oito mais oito mais eight-- assim 24 bits-- esquerda para a direita, é como um computador representaria essa cor particular. Agora, este é apenas um ponto em uma tela. Se você olhar muito de perto o seu televisor seu computador, você verá pontos ou pixels. E se você tem uma grade inteira de pixels, horizontalmente e verticalmente, você tem imagens. E então se você tomar uma imagem e, em seguida, lavagem mostrar-se outra imagem, uma outra imagem, outra imagem, outra imagem, muito rápido, você naturalmente têm filmes. E assim perceber onde começamos. Começamos com esses zeros e uns. Nós trabalhamos de lá para decimal números, como podemos representá-los. Agora temos letras do alfabeto. Mas em outros contextos esperar, podemos usar mais alguns bocados e representam as cores. Assim que você tem a capacidade de representar as cores, você tem a capacidade de representar fotografias e gifs animados e outros tais personagens na tela. E quando você tem um monte de imagens voando pelo ser humano de uma só vez, parece que imagens em movimento, e de modo a obter vídeos também. Então, usando estes muito primitivas simples nós tem a forma de representar em última análise, todas estas formas de mídia. E nós captada novamente e de novo e de novo, até que começar a partir do nível mais baixo a esse nível mais elevado. De modo que nos dá essa ideia geral de abstração. Mas nós começamos aqui. Aqui, agora, poderíamos representam em um computador nossos entradas com zeros e uns, nossas saídas em zeros e uns, mas o que se passa dentro da caixa? É aí que computador ciência fica interessante. É aí que você realmente trazer o seu mentes próprias de suportar para resolver problemas. agora podemos prever, para o resto do semestre, sim. Eu sei como funciona o binários. Lembro-me como ASCII ou Unicode-- o mapeamento para letters-- obras. E isso certamente se para raciocinar que nós poderia representar vermelho e verde e azul, e representam multimídia também. Mas esta é a coisa interessante. Isto é o que faz alguém capaz de resolver os problemas. E um tal problema que gostamos de fazer, de fato, está levando atendimento, ou fazer isso através de algoritmos. E novamente, eu poderia fazer isso. Eu poderia fazer um, dois, três, quatro cinco, seis, sete, oito e nove. E eu poderia escrevê-lo para baixo para manter o controle do mesmo. Mas isso é apenas como eu faria representam as informações. Ou eu poderia fazer isso faster-- dois, quatro, seis, oito, dez, 12, 14, 16, 18, 20, 22-- parece que o dobro tão rápido, mas ainda é vai levar um monte de tempo. Mas acontece que, se alavancar ainda outros computadores resource-- e de fato estes dias têm múltiplas CPUs ou cérebros. Acontece que computadores podem fazer muitas coisas ao mesmo tempo, e, na verdade, nós, nesta sala, pode representar exatamente isso. Portanto, é um pouco socialmente estranho, mas se você faria humor me por apenas um processo de três etapas, vamos me pedir a todos no lugar há apenas a levantar-se por um momento. Levante-se. Então, pensar a si mesmo, o número de um-- para que todos nesta sala, exceto as pessoas que não fizeram oblige, estão pensando número um. Então esse é o seu número no momento. Este é o primeiro passo, ou como uma cientista da computação ou um programador normalmente faria, vamos para começar a contar do zero. Se o menor número que pudermos representar com essas lâmpadas é zero, por apenas deixando- tudo isso, assim como eu poderia apenas começar a contar a partir de zero é, em vez de um. E é isso que Cientistas de computador. Então, passo zero, levantar-se e pensar no número um. O próximo passo é isto-- par fora com alguém de pé e adicionar os seus números. Maravilhoso. Portanto, neste momento no tempo, literalmente todos os participantes está pensando do número 2, com excepção para uma pessoa estranha se tivermos um número ímpar de pessoas na sala. E agora o terceiro passo aqui vai ser isto-- um de vós deve sentar-se. Um de vocês deve sentar-se, e se você ainda está de pé, volte ao passo um. Tudo certo. Tudo certo. Assim, mais e mais pessoas deveria estar sentado para baixo. Note que este tem induzido um loop-- algum tipo de ciclo. Alguns de vocês devem estar sem jeito preso, indo e voltando entre o primeiro passo e dois, um e dois, um e dois. Isso está ok. O nosso primeiro erro. Nós vamos lidar com isso. Tudo certo. Deixe-me tentar estimular as coisas. Em teoria, apenas uma pessoa está de pé como todos continua a par fora. Mas deixe-me apressar as coisas com o povo ainda está de pé. Que número você está pensando? 46. ESTÁ BEM. Vá em frente e sentar-se. Vocês ainda estão de pé. Que ainda está de pé? Que número você está pensando? ESTÁ BEM. Então, vamos voltar para você. Na volta? O que é isso? 22. OK alguém se top-- sim? 34. ESTÁ BEM. Aqui no meu direita-- aqui em cima? 132, muito bom. 22? ESTÁ BEM. E que ainda está de pé? Por aqui? 46, muito agradável. 72. Eu não posso parar por muito mais tempo. Sim? 30, agradável. Por aqui? 23? 23. E eu acho que isso é todos exceto vocês, nenhuma pressão. Oh espere. 28? Apenas oito. ESTÁ BEM. Apenas oito. Aqui embaixo? 30. 23. 24. 18. Este é o pior implementação deste algoritmo nunca. ESTÁ BEM. Então, mais alguém? Alguém mais? ESTÁ BEM. Mais um. 16? ESTÁ BEM. 16. Tudo certo. Então, se eu não perdi ninguém em o brilho aqui, quando eu pressione Enter, vamos ver, através de algoritmos, o número total de pessoas em Sanders. Porque mais uma vez, é como se todos como você sentou-se, passou o seu número off a outra pessoa, a outra pessoa, a outra pessoa, de modo que, em teoria, No final, apenas um estranho pessoa deve ficar de pé. Mas isso é bom. Nós acelerou as coisas manualmente. É especialmente difícil de ver neste espaço particular. E o número total de pessoas acreditamos que há aqui é 546. O número total I foi entregue pelos companheiros de ensino, quem fez isso o velho forma lenta escola, era 820. [RINDO] [Aplausos] Isso está ok. Assim, certamente, em seguida, existem esses bugs. E isso é bom. E assim acho que volta nesta a primeira vez que algo você escreve não necessariamente funcionar. Isto aconteceu-me aqui também. Mas vamos agora considerar como podemos aplicar esta mesma ideia para algo você pode ter visto antes, o que É esta tecnologia antiga escola aqui-- um livro de telefone realmente grande. E suponha que este livro de telefone tem 1.000 páginas e 1.000 nomes e os números em ordem alfabética dentro dele. Bem, nós poderíamos tipo de aplicar um semelhante ideia para este problema muito físico, apenas me usando. Eu só tipo de enganado aproveitando tudo de você com lotes e lotes de CPUs diferentes ou cérebros executar algum algoritmo. Mas se é apenas pouco velho mim, eu ainda puder aproveitar essa mesma essência de uma idéia de dividir e conquistar esse problema uma e outra vez, em que metade de vocês, metade de vocês, metade de vocês, metade de vocês, teoricamente manteve sentado, até que foram embora, teoricamente, com apenas uma pessoa. Portanto, neste velha escola technology-- nós não precisa deste map-- este tecnologia da velha escola, podemos começar a olhar para alguém como Mike Smith, uma página de cada vez. E eu vejo que não, Mike não está aqui. Eu ainda estou na secção A. Eventualmente, eu acho me na seção B. E esta é uma algorithm-- passo-a-passo instrução. Comece na página de início e um de cada vez, olhar para Mike Smith. É este correct-- este algoritmo ou abordagem? Sim, é correto. Se Mike está aqui, eventualmente, Vou chegar até ele. Mas não é eficiente. É óbvio que é muito lento. Para que eu possa alavancar o mesmos twosies aproximar. Eu posso fazer uma espécie de dois, quatro, seis, oito, 10, 12. É duas vezes mais rápido. Eu vou chegar a Mike mais rápido se ele está lá. Está correto? Sim, mas eu ouvi um não little--. Agora eu ouvi um não. Sim. Há um bug potencialmente. Talvez Mike fica apenas acidentalmente ensanduichada entre duas páginas, porque eu estou voando através este dois de cada vez. Assim, pelo menos precisamos de algum tipo de correção condicional. Eu preciso dizer, hey, se eu acertar alguém cuja nome começa com um T em vez de um S, É melhor eu dupla volta pelo menos uma página. Então, de buggy no início, mas solucionáveis. Mas nenhum de nós estão indo para procurar Mike Smith através de um telefone com 1.000 páginas reservar uma página de cada vez. O que é uma pessoa normal vai fazer? Você está indo para ir para o S do, se você sabia onde o S do. Você pode ir mais ou menos para o meio ou ligeiramente inclinado para o final. E eu olho para baixo aqui e Estou na seção M. Mas o que você sabe sobre este problema agora, que não necessariamente saber antes com todos nós apenas contando-nos equivalentemente? Bem, Mike vai claramente estar nesta metade do livro se ele está aqui em tudo, porque ele é classificado. E assim você pode muito dramatically-- [Ofegante] Eu sei. [Aplausos] É realmente muito fácil se você fazê-lo na espinha lá. Mas você pode em seguida, jogá metade do problema de distância. Agora, eu estou à esquerda com a mesma problema-- encontrar Mike Smith em um telefone book-- mas agora o livro de telefone começa em M e vai até Z, mas é metade do tamanho. Mas isso é o que é impressionante. Assim como na teoria, rapazes, quando todos vocês sentou-se apenas a metade de cada vez, o problema tem metade do tamanho, metade do tamanho, uma e outra vez. Então, tem esse problema se tornar o mesmo problema, mas metade do tamanho. Agora é um problema de 250 páginas. Assim que eu percebo, oh, eu sou na seção T acidentalmente. Eu tenho ido longe demais. Eu posso jogar que metade do livro de telefone de distância. Agora, eu estou disposto a um trimestre do problema. E você pode repetir, repetir, repetir até que, em teoria, você está deixou com apenas uma página. E se Mike está nessa página, agora eu posso resolver este problema. Mas a rapidez com que eu resolver isso? No primeiro caso, ele me levou como talvez 1.000 passos para encontrar Mike Smith. Ele poderia ter tomado me-- Peguei o livro de telefone e eu comecei a olhar uma página de cada vez, e Mike poderiam ser 1.000 páginas mais tarde. Segunda abordagem, talvez me leva 500 passos, porque eu estou voando através de dois de cada vez. E a terceira abordagem, porém, é especialmente poderosa. Mas vamos considerar o que realmente fez com que essa terceira via. Eu vou ter o que eu vou chamar apenas estes demonstrações aqui, um de cada vez. Pegar um livro de telefone. Abra para o meio do livro de telefone. Olhe para nomes. E então as coisas ficam um pouco intelectualmente mais interessante, se ainda simples. Se Smith está entre os nomes nessa página atual, em seguida, fazer algo condicionalmente. É como uma bifurcação na estrada. Ligue para Mike. Se Mike está entre os nomes nessa página, chamado Mike. Mas só faça linha quatro se a linha árvore, se você, é verdade. A resposta a essa pergunta é sim. Else if Smith é no início do book-- em outras palavras, se eu estiver na seção M e eu estou procurando alguém para a esquerda, então o que devo fazer é algo muito semelhante. Então eu deveria abrir para o meio da metade esquerda do livro. Então vá para a esquerda e, em seguida volte para a etapa dois. Olhe para os nomes lá. Portanto, em outras palavras, fazer a mesma coisa, mas em um problema que tem sido reduzida para metade. Sabe o que mais? Se Smith é mais tarde no livro com base na página que eu estou olhando, aberta para o meio da metade direita do livro e, em seguida, voltar novamente a etapa dois, else-- há uma quarta possibilidade aqui. Mike aqui ou para a esquerda ou para a direita ou não existe. E aqui é melhor considerar isso. E, na verdade, se você já teve seu computador apenas bater em você, que é, por vezes, mas não sempre, a resultado de apenas um programador humano não percebendo, oh disparar, há realmente este quarto cenário. E se você não escrever o código para lidar com esse cenário, às vezes você não sabe o que o computador pode fazer. E, de fato um programa pode falhar. Mas, neste caso, eu pensei sobre ele, e eu disse, senão sair, porque essa é a quarta lógica cenário possível. Agora, vamos adicionar algum vocabulário para que pode começar a atirar em torno de termos que são de outra maneira muito intuitiva. Todas as coisas que eu apenas destacadas em amarelo aqui, Eu estou indo só para o funções ou procedimentos. Eles são apenas um tipo de acções. Então pegue, aberto a, olhar a, chamada, aberto, aberto, quit-- estes são apenas ações, ou nós vamos chamá-los de maneira mais formal, funções. Enquanto isso, agora em amarelo, Eu destacou as coisas isso-- vamos começar a chamar -lhes condições ou ramos. Estes são os pontos de decisão onde que você pode ir por este caminho, desta forma, ou alguma outra direcção ainda. Portanto, aqueles estarão condições. E agora esta é um pouco amador. Vamos chamar essas perguntas expressões booleanas, depois que alguém com um apelido Bool. E uma expressão booleana é apenas algo isso é verdadeiro ou falso, sim ou não. Portanto, é a pergunta cuja resposta você se preocupam, de modo a em uma condição fazer uma decision-- voltar uma resposta, e depois ir para a esquerda ou direita, ou algo outra coisa completamente. E, em seguida, por último, estes linhas aqui-- voltar a etapa dois, volte ao passo que poderia dois-- implementar esta ideia de maneiras diferentes. E então aqueles de vocês com experiência em programação poderia ter feito ou pode imaginar fazendo isso de forma diferente. Mas para fins de hoje, é apenas a idéia que importa. Isto é o que induzir vamos geralmente chamamos um loop-- algum tipo de ciclo, porque isto está me fazendo fazer algo novo. Então, agora, vamos considerar apenas como é bom este algoritmo é. Está certo. Se Mike no livro, é um dos os quatro scenarios-- novo e de novo e novamente, vamos encontrá-lo. Mas como é que é bom? Bem, não temos ser demasiado formal aqui. Mas vamos traçar algo, x e y, para obter um sentido da forma deste problema. No eixo dos x é aqui o tamanho do meu problema. E um eixo y aqui será o tempo para resolver. Então, talvez este é o número de páginas. Talvez esta seja segundos ou A página turns-- o que quer. No entanto, você quer contar é o que esta imagem vai representar. E que primeiro algoritmo, eu vou para descrever como apenas uma linha reta. Se há n páginas o livro de telefone, então ele pode me levar como muitos como n passos para encontrar Mike. Se Verizon ou a empresa de telefonia acrescenta mais uma página no próximo ano, isso pode levar-me mais uma step-- mais uma unidade de tempo para encontrar Mike. Portanto, há apenas isso 12:59 ratio. É um declive linha reta. Enquanto isso, que a segunda algorithm-- se eu sou indo de dois em dois dois tempo--, quatro, seis, oito, ou double-- passando as páginas duas vezes de cada vez, duas de cada vez, ainda é linear. Há agora um 1-2 ratio, mas um pouco mais baixa. Portanto, se há isso muitas páginas no gráfico aqui em amarelo, que possa me aproveitar esta muitos passos ou segundos, caso contrário ele vai me levar o dobro na linha vermelha. Mas a linha verde é o takeaway real. Isto é o que geralmente chamar um log logorithm-- de n, onde n é o número de páginas. Mas é a forma que importa hoje, porque não temos para sequer pensar em plotar pontos. Pense em um cenário extremo. Suponha Verizon amanhã dobra o número de páginas em que o livro de telefone, de 1.000 a 2.000. No primeiro algoritmo, I pode perder um extra de 1000 etapas à procura de Mike, só porque Verizon duplicou o tamanho do livro. A segunda algorithm-- que poderia leve-me um extra de 500 passos. mais de 1.000 páginas, eu vou de dois em dois tempo-- mais 500 passos para encontrar Mike. Mas esse terceiro algoritmo é uma espécie de mágica. Verizon duplica o número de páginas de 1000 a 2000, Mas quantos mais passos faz ele me levar para procurar Mike? É apenas um, porque eu posso apenas rasgar o livro de telefone mais uma vez de um problema de 2.000 página a um 1.000 problema página, e pronto. Eu tomei uma mordida enorme fora dele. E se você for realmente extremo, supor que o livro de telefone empresa tinha algo louco como um livro de telefone 4 bilhões página. Bem quantos passos que pode demorar para encontrar Mike Smith num 4000000000 livro de telefone página? É um grande número, mas apenas 4 bilhões para 2000-1000 milhões para 500 milhões, 250 milhões-- ainda soa como grandes números, mas eu sou muito rapidamente chegando a valores menores. E, na verdade, se eu fizer as contas direito, só posso dividir 4 bilhões por cerca de 32 vezes antes Eu descer para apenas um. Portanto, se esse livro de telefone foram 4 bilhão de páginas, não é grande coisa. Dentro de poucos segundos, talvez 32 segundo, eu poderia dividi-lo ao meio e, eventualmente, encontrar Mike ou concluir que ele não está lá. E essa é a essência de um algorithm-- um bom algoritmo. E isso é uma das objetivos de uma classe como este, está tentando descobrir como faço resolver o problema não apenas correctamente, como eu sempre sabia como fazê-lo um página de cada vez-- mas corretamente e bem. Como eu crio boa soluções para os problemas? Portanto, vamos ter um momento aqui e dar-lhe um sentido agora de CS50 o curso itself-- introduzir membros da equipe a poucos curso. Pouco antes de 02:00, nós vamos fazer uma pequena pausa de modo que aqueles de vocês que estão comprando pode duck para fora e dar uma olhar para alguma outra classe e assistir o resto deste online. Mas, por agora, deixe-me apresentar CS50, a classe em si, e, particularmente, o que é novo. Assim, a mola passado, nós passei um pouco de tempo-- o pessoal do curso e eu- pensar sobre o que é que queremos CS50 a ser, e voltar para a primeira princípios, por assim dizer, a considerar o que é que queremos este curso para parecer e ser como por seus alunos. E então você verá no problema definir a zero, bem como, um convite para dar uma olhada no que URL que resume algumas das motivações por trás do seguintes características de queda de 2016. Então, como você pode ter recolhido do TL: apostila DR, o programa de hoje, bem como de o catálogo de cursos, este ano, em CS50, você é esperado apenas para participar today-- assim trabalho bem done-- ea última palestra em 21 de novembro. E você é bem-vindo, mas não se espera que assistir a essas palestras no meio, porque o que estamos fazendo este ano, está atirando em tempo real o material do curso. Então, tudo vai ficar corrente e incorporada o melhor que can-- eventos atuais e conversas que pessoas podem ter na indústria no mundo, mas fazendo que o material disponível, como um resultado, mesmo earlier-- completo com transcrições de texto completo e pesquisa e a links para outros recursos. E, de fato, temos sido reivindicando por algum tempo e nós agora acreditar, que podemos criar, digitalmente, um mais envolvente, a mais atraente experiência educacional, em oposição para se reunindo aqui cerca de 23 vezes em pessoa, ouvindo alguém como eu simplesmente falar sobre ciência da computação, em oposição ao envolvimento de forma mais activa. Então você verá no currículo do curso um esboço do semestre aqui, juntamente com quando palestras ser filmado, para o qual você está bem-vindo, mas não esperava, e quando eles vão ser lançado no site do curso. E o que vamos fazer aqui na Quartas-feiras a partir da próxima semana, é muito mais intimamente, com apenas aquelas pessoas que querem participar, é um chamado caminhada através, onde eu e as cabeças do curso vai realmente fazer as coisas um pouco mais íntima aqui em baixo na orquestra seção, ainda têm alguma tecnologia e percorrer o conjunto de problemas semana em curso, e oferecer-lhe particularly-- se entre Os menos comfortable-- ainda mais orientação que você pode querer ou precisa para o desafio da semana. E da mesma forma, para aqueles que não podem assistir aqueles em pessoa, não é grande coisa. Não será semelhante conduzido por um dos quadros superiores do curso, Zamalya, a mesma oportunidade incorporado no problema define-se. Problema define este ano será lançado em sextas-feiras e já não fazem sete dias depois, mas 10 dias later-- deliberadamente sobreposição com cada problema definido, de modo a melhor acomodar, esperamos, fluxo e refluxo em horários de estudantes, especialmente quando midterms ou atletismo ou acadêmicos ou extracurriculars tendem a ir e vir especialmente na metade do semestre. Isso deve lhe dar um pouco mais critério para saber se você frente carregar o seu semana com CS50 ou carga de volta -lo no fim de semana seguinte em vez disso. Então olhe para syllabus do curso aqui para a programação da mesma. E você vai notar também entre as mudanças este ano, para aqueles mais familiarizados com programação no passado, vamos começar o semestre como vamos hoje em risco, concentrar especialmente na linguagem chamado C, e depois não transição para PHP, mas para uma linguagem chamada Python para o fim do semestre no contexto de programação web, juntamente com SQL e JavaScript, HTML, CSS, e ainda mais. E, em resposta a um FAQ, que é realmente o caso que o CS não é tão assustador como eu uma vez pensei que era, mas é tanto trabalho como eu tinha ouvido falar que poderia ser. Mas esta é a palavra que aqui estão alguns estatísticas do outono de 2015 corpo discente, em que as linhas azuis horizontais representa o número médio de hora relatado. E você vai ver uma média de seis a 10 a 16 12-- talvez ou assim e assim por diante, mas com alta variância para ser claro. E assim perceber que não há apenas alunos mais confortável e menos confortável no curso, mas um suporte correspondente estrutura para obter esses alunos por meio do semestre com sucesso. Com efeito, em resposta a uma FAQ, deve você tomar CS50 como um primeiro ano? Absolutamente. E, na verdade, eu me arrependo Não tendo encontrado meu caminho ou encontrado um novo campo que o primeiro ano também. E você deve tomar CS50 com outros cursos, certamente como bem-- e o conselho geral poderíamos dar aos alunos, que CS50 é provavelmente não o tipo de classe ou classe de introdução que você deve tomar com três Outro ou outros quatro classes de set-p. Mas se você está tomando dois outros p-set aulas, outra coisa, e CS50, absolutamente controlável. Eu tive muitos alunos na passado feito isso com bastante sucesso. E para chegar em direção a esse terminar linha com sucesso, O curso tem sections-- diferentes faixas para estudantes menos confortável, mais confortável, e em algum lugar no meio, pelo que no decurso da primeiro conjunto de problemas, você será solicitado a descrever a si mesmo. E se você está entre os menos confortável, é o tipo de coisa que você acabou de vez sei. E, de fato, essa tem sido a crescimento demográfico no CS50 há muito poucos anos. A partir do final do ano passado para exemplo, 58% da classe descreveram-se como entre aqueles menos confortável, com 9% entre aqueles mais confortável, e, em seguida, os outros alunos lá em vermelho se descrevem como algures no meio. E você vai ver aqui os tópicos geral e programação de secções, todos os quais são oferecidos em pessoa, em tempo real, com o curso de incrível equipe de bolsistas de ensino e os assistentes do curso, alguns dos quais você vai encontrar em apenas um momento. Secções si, como você verá, a vontade ser segundas-feiras e terças-feiras e quartas-feiras, de modo a permitir-lhe mergulhar em depois de se engajar, se assim escolher, no decurso do palestra no início daquela semana. E depois do expediente, que Certamente, a cada ano que passa, não foram menos de um desafiar para o curso. E este ano, não estamos planejando apenas para exercer o cargo horas-- um em um oportunidades de ajuda para alunos às quartas-feiras às quintas-feiras e aos domingos, a última destas sendo na parte da tarde por design para reduzir algum do esforço que invariavelmente surge com tarde da noite p-settting com um prazo looming-- mas também será oferecido o horário de expediente às segundas e terças-feiras e Quartas e sextas-feiras e sábados, graças aos nossos amigos no HSA. CS50 agora tem seu próprio espaço para estudantes e pessoal CS50, no topo de 67 Mount Auburn Street, ali mesmo na Harvard Square. A visão para o que é que CS50 de TFs e CAS ao longo da semana, praticamente durante a maior dias, vai estar lá para o apoio. Então, se você tem algum pergunta em um p-set ou se você estiver sentindo um pouco bloqueadas ou um pouco confuso, e diabos, você tem uma hora ou meia hora entre as classes, especialmente no square-- você pode pop e ter essa pergunta respondida de ter essa confusão clarified-- muito no espírito, você está familiarizado, da matemática próprio centro de perguntas de matemática do departamento, mas praticamente todo o dia por [? Gcal?] Que colocaremos online. Explicações também está disponível para aqueles estudantes, livremente do curso de próprio pessoal se você gostaria mais íntima um em um, ou dois ou três colegas de classe única, trabalhando com um dos membros da equipe do curso. E, de fato, estas aqui são apenas alguns dos membros da equipe do curso, alguns dos quais você vai reunir-se em apenas um momento. Na verdade, CS50 própria cabeça de ensino companheiro, e claro cabeça assistente e preceptor, poderia vir em cima, permitem -los para dizer Olá. [Aplausos] COLUNA 1: [inaudível]. [Aplausos] COLUNA 2: [inaudível]. [Aplausos] COLUNA 3: [inaudível]. [Aplausos] DAVID MALAN: E nos permitem trazer a bordo dois dos CS50 da maioria altos funcionários, Rob e Zamayla também. [Aplausos] Com efeito, tanto Rob e Zamayla têm estado conosco por tanto tempo, que eu era capaz para entrar em arquivos do CS50 e acho isso muito SD metragem deles participando no palco-se há alguns anos. ROB: [inaudível]. [Aplausos] ZAMAYLA: [inaudível] [Aplausos] DAVID MALAN: Obrigado. Assim, para além destas os membros da equipe aqui, CS50 tem uma equipe de quase 100 os funcionários, os quais estará disponível para secções e horas de escritório e muito mais. E, como Rob diz também, este é a revisão mais significativa de CS50 nos 10 anos que Eu estive no [inaudível]. [Inaudível] focado especialmente no fornecimento de uma estrutura de suporte, aparar fora um monte de a maior que tem sido acumulada em 10 anos desenvolvimentos de iterativos em conjuntos de problemas do curso. Portanto, este ano, não só em sala de aula, mas também sob a forma do problema do curso conjuntos, você deve encontrar as coisas para ser mais racionalizado, trimmer, muito mais manejável do que no ano passado, como nós lançar alguma da bagagem que é desenvolvido pela natureza do ano em evolução após ano e iteração. Assim, o novo e melhorado começa hoje. Você vai conhecer um pouco mais da equipe fora do curso no [inaudível] às 2:30, onde servimos, como uma tradição, bolo. Há um pouco mais bolo do que isso, mas você vai meet Erin e Tobias e outros ainda. E deixe-me dar-lhe um passeio antes de ouvir de alguns dos outros membros da equipe na classe, do que espera também. Na verdade, nós sempre começar CS50 de semestre no próximo sábado, com o que é chamado de Dia CS50 Puzzle. Não tem nada a ver com ciência da computação, por si só, mas com cerca de problema resolvendo de forma mais geral. E, se assim optar por participar, por alguns dos convites, você pode ter visto porta caiu ou na fase aqui, é uma oportunidade em equipes de dois ou três ou quatro, para participar de puzzles e pizza e prêmios e more-- neste sábado, Fique ligado para mais. Você encontrará também que todos os Sexta-feira, em Fire and Ice, O CS50 trazer um todo grupo de estudantes para o almoço, para fazer um grande classe se sentir mais íntimo, e, geralmente, aproximar ex-alunos e amigos da indústria para falar sobre o que eles têm sido até desde a graduação. Da mesma forma, este ano, será que inaugurar a primeira CS50 50 codificação contest-- a meio do semestre oportunidade de permitir que todos em uma opção na base, para ter um desafio de juízo contra os colegas, novamente em equipes de dois, três ou quatro, usando apenas que a programação savvy que você então tem sob o cinto depois de apenas seis ou sete semanas da classe, e participando neste tipo de competição online-- se você gostaria de aprimorar o seu próprio habilidades ainda mais nesse desafio. No final do semestre é o chamado CS50 Hackathon-- uma oportunidade que começa às 7:00 PM termina às 07h00, e ao longo do caminho São 12 horas da noite em que a mergulhar em project-- final da Claro uma oportunidade para projetar e implementar a maioria qualquer coisa de interesse para você com seu ensino a orientação de colegas. Por volta de 09:00 nós normalmente servem pizza, 1:00 AM, Philippe de, e os poucos de nós que ainda estão acordados às 5:00 AM, são shuttle bussed para baixo da estrada para IHOP no café da manhã. E depois de alguns dias mais tarde é o chamado CS50 fare-- um fim de exposição semestre em celebração de quão longe tantos de CS50 estudantes vieram de semana de zero até a semana passada, e tendo em conta que 73% daqueles colegas e seu este ano Nunca feito um curso de CS antes. Na verdade, para enfatizar tanto, aqui É mais alguns rostos do pessoal do CS50. COLUNA 4: [inaudível]. COLUNA 5: [inaudível]. COLUNA 6: [inaudível]. COLUNA 7: [inaudível]. COLUNA 8: [inaudível] COLUNA 9: [inaudível]. COLUNA 4: [inaudível]. COLUNA 10: [inaudível]. COLUNA 11: [inaudível]. COLUNA 12: [inaudível]. COLUNA 13: [inaudível] COLUNA 14: [inaudível]. COLUNA 13: [inaudível]. COLUNA 15: [inaudível] COLUNA 16: [inaudível]. COLUNA 11: [inaudível] COLUNA 5: [inaudível]. DAVID MALAN: Alguns da equipe são eles próprios compras classes. Mas se esses membros do pessoal CS50 está aqui, poderia vir em cima por apenas um momento. TFs do CS50 e CAs e [? funcionários ?] membros aqui-- estes são apenas alguns do faces-- um dos quais você só vi, e alguns outro-- e alguns outros ainda. Por que não podemos ir em frente e permitir vocês uma pausa de cinco minutos. Se você precisa de pato para aulas de loja, tudo bem. E em cinco minutos, vamos retomar, tendo um olhar para o primeiro Scratch-- da nossa linguagem de programação, atender o pessoal do curso aqui um pouco mais, e em última análise, concentrar no conjunto de problemas zero. Então, vamos estar de volta em cinco minutos. [Aplausos] Tudo certo. Então, estamos de volta. E no nosso restantes vez hoje, o objetivo é nivelar o campo de jogo em termos de alguma terminologia, em termos de algumas idéias. Uma vez que, de facto, conforme alguns dos gráficos anteriores, lá vai ser uma série de níveis de experiência na classe, alguns de cujos alunos têm tomado alguma programação antes, alguns dos quais não têm. E assim, com este primeiro problema e definir com este primeiro idioma temos uma oportunidade para começar a tomar para concedido a partir de hoje algum vocabulário ea idéia comum. E nós vamos fazer isso por meio de primeira languages-- do curso Além de C e Python e JavaScript e SQL e HTML e CSS, vamos nos concentrar inicialmente e apenas para o problema de definir a zero nesta linguagem gráfica, chamada Zero, desenvolvido pelo Laboratório de Mídia do MIT abaixo da estrada, para ajudar estudantes e crianças especialmente expressar-se algorithmically-- de um modo mais consistente com o que podemos chamar de pensamento computacional. E é uma língua útil porque muito rapidamente na próxima semana em uma semana, é que vamos fazer a transição para uma forma mais linguagem tradicional e misteriosa chamada C, que é puramente textual. Você só pode usar o teclado na Para escrever instruções como estes na tela. Mas mesmo se você nunca viu uma linguagem de programação antes, em apenas olhando para isso, todos seja enigmático, você provavelmente pode adivinhar que provavelmente imprime Olá Mundo. Mas há um monte de sobrecarga sintática lá. Não é o hash estranho símbolo ou de hash tag em cima. Há o ângulo entre parênteses, alguns parênteses, colchetes, semi-colon-- há tanta coisa visuais sintaxe que fica no caminho. Começamos o curso com Zero de modo a obter passado todos os intelectualmente distrações desinteressantes, e concentrar-se nas ideias. Na verdade, isso pode ser antes. Este, por isso, a semana será depois. Isto, neste gráfico Risco linguagem, é como você poderia implementar essa mesma program-- um programa que, quando executado, simplesmente diz Olá mundo. E o que é agradável sobre Scratch é que é esta programação gráfica ambiente que usa peças do puzzle ou blocos, que só em conjunto interbloquear se faz sentido lógico para fazê-lo. E com o Scratch você pode desenvolver animações e jogos interativos e arte, e qualquer número de coisas que que você pode imaginar em sua própria mente, e implementá-las simplesmente arrastando e soltando peças do puzzle. E, de fato, teremos a capacidade para expressar algumas das mesmas ideias que eu acabei de mencionar um momento atrás no contexto de Mike Smith e pesquisar as coisas um telefone book-- como funções, apenas a ações, coisas como loops que fazer coisas de novo e de novo, variáveis, que é algo que vamos apresentar, mas é familiarizado talvez a partir de algebra-- apenas algum tipo de espaço reservado para armazenar algum valor que você pode precisa expressões booleanas later--, onde aqueles sim não ou verdadeiro falsas questões de antes. As condições são aqueles garfos na road-- os ramos por assim dizer. E depois há alguns columbófilo características que veremos ainda hoje, chamados de matrizes e fios e eventos, que vamos, em seguida, voltar mais tempo em diferentes idiomas. Mas zero nos permite para explorar todos estes. Então, aqui em zero, este roxo bloco é o que uma função é tipicamente vai parecer. Esta peça de quebra-cabeça roxa que tem algum palavra como por exemplo, que é a ação, e em seguida, ele pode ter um argumento ou um parameter-- alguma forma do tipo de personalização o que o bloco faz de modo que não está pré-determinada pela MIT o que este bloco roxo diz. Na verdade, você verá em um momento que eu sou capaz de escrever as palavras como Olá mundo, ou Olá David, ou Olá Zamayla, ou o que eu quero, no argumento para esse enigma piece-- a caixa branca há. Enquanto isso, se eu quero um loop, vamos ver que não há peças do puzzle que olhar um pouco de laranja como este. E a sua forma de tipo que sugere algo acontece uma e outra vez em um ciclo. Então, se eu quebrar um bloco mundo dizer Olá com um bloco para sempre em risco, ele só vai continuar a dizer Olá mundo para sempre, literalmente. Enquanto isso, não há outra tipo de loop em risco que vamos see-- uma repetição block-- onde, se você saber com antecedência quantas vezes você quer que o loop para executar um número finito de vezes em fact-- você pode especificar que, digitando um número ou até mesmo ligar uma variável, como x ou y, como veremos. Na verdade, variáveis ​​como I neste caso, que é um nome comum para uma variável inteira que apenas armazena uma number-- um inteiro pode ser, usar este bloco de laranja aqui para definir uma variável como eu a zero. Aqui está um exemplo no verde de um expressão booleana em risco. Mesmo que esta parece ser uma matemática fórmula, as desigualdades de matemática como este realmente são expressões booleanas. Isto é verdadeiro ou falso. I é inferior a 50. É tanto uma resposta sim ou não ou resposta verdadeira ou falsa. E nós vamos geralmente chamamos essas expressões booleana. E não tem que ser 50. Pode ser x menos do que Y, maior do que Y, igual a y-- qualquer número de outras perguntas podem ser feitas. Agora, à primeira vista, isso pode parecer de repente bastante ousada aqui, e é. Mas o conceito sábio, é bastante familiar de antes. Se x é menor que y, do que dizer o mesmo. Senão, se x é maior de y, em seguida, dizer o mesmo. Outro dizer de x é igual a y. Portanto, temos um exemplo Há de uma terceira scenario-- a única terceira possibility-- x é ou maior do que, menos de, ou igual a. Portanto, temos um garfo de três vias na estrada. E perceber o que é legal zero aqui--, ao que parece, tem apenas um quebra-cabeça peça, neste caso, em se bloco else. E, no entanto, que parece implicar que você pode só tem um garfo de duas vias no caminho. Você pode ir para a esquerda ou para a direita, mas que sobre esse terceiro cenário? E se x é igual a y? Nada demais. Pegue uma peça de quebra-cabeça, colocou uma outra dentro dele para criar o equivalente semântico de if, else se, else-- e agora você tem o seu garfo de três vias na estrada. E, como veremos, o peças de quebra-cabeça do zero pode ser esticado e crescer, assim como empinar mais coisas neles. Você não tem que se encaixam tudo em seu tamanho padrão. Isso é algo que vai ver em breve é ​​chamada uma matriz. É como um lista-- alguma forma de armazenamento de múltiplas peças de informação em uma variável, não apenas um número. Estes vamos ver um representante da algo chamado multi-threading. Na verdade, todo o seu Macs e PCs estes dias suporte multi-threading, que significa que você pode literalmente fazer várias coisas ao mesmo tempo. Você pode ter o Microsoft Word para cima no primeiro plano, trabalhando em algum ensaio. Você pode ter um navegador na abertura de fundo G-mail ou Facebook ou similar. Seu computador pode fazer várias coisas hoje porque é multi-threaded, e os programas que estão em em particular também são multi-threaded. Há coisas chamadas eventos como bem no mundo do Scratch, e depois há uma maneira também, para fazer nossas próprias peças do puzzle costume se as coisas na verdade não existem com antecedência. Então, vamos motivar isso da seguinte forma. Alguns anos atrás, quando eu descoberto pela primeira vez Scratch quando eu era na verdade um estudante de graduação no MIT, nós nos foram incumbidos de fazer a lição de casa. E eu implemented-- que, em retrospecto, Foi uma decisão muito pobre porque é a música mais irritante do mundo para ouvir durante oito horas enquanto trabalhava em seu homework-- mas algo que eu tinha chamado Oscar Time, que é, talvez, uma canção familiar. CS50s possui Jordan Hayashi, um dos nossos funcionários mais seniores, elevou-o para 2015 e agora 2016, uma vez de volta ao dia, Eu tinha tudo indo só em lata de lixo do Oscar. Agora vamos apoiar a reciclagem e compostagem. Mas, para pintar o quadro do que podemos fazer aqui e motivar alguns dos os exemplos de nível mais baixo, poderíamos obter um outro voluntário para apenas vêm-se e jogar o meu primeiro lição de casa sempre? Vamos lá para cima. Qual o seu nome? HENRY: Henry. DAVID MALAN: Henry, vamos lá para cima. Vamos lá para cima. Cabeça de qualquer forma, e você verá em um momento, Eu estou indo para ir em frente e bateu no bandeira verde na mão superior direito canto, o que significa ir. O ícone de sinal pequena parada vai dizer stop, e isso é quando você começa e parar o programa. Prazer em conhecê-lo. Tudo certo. Então, nós estamos indo para ver as instruções na tela em apenas um momento. E apenas por jogar este jogo para alguns seconds-- confia em mim, nós não vamos querer jogar todo o caminho para o end-- você vai ter uma noção do que o programa faz. E mais do que apenas se concentrar em Henry sendo bom ou ruim nesse jogo, foco E como foi implementado por mim inicialmente e depois por Jordan. Em outras palavras, onde estão as variáveis? Onde estão os loops? Onde estão as funções? E vamos ver se nós não vemos aqueles debaixo do capô. Basta clicar e arrastar o lixo para a bandeja apropriada. [REPRODUÇÃO DE MÚSICA] Tudo certo. Isso é muito bom. Por que não podemos pará-lo lá. Obrigado. Parabéns a Henry. Obrigado. [Aplausos] Basta imaginar a depuração esse programa. Se há um problema de dois minutos de song-- mas tão o que está acontecendo aqui realmente? Tão complicado como pôde começam a parecer para chegar ao longo do tempo, na verdade, mais e mais coisas começaram a cair, o que é interessante sobre este tipo de example-- e vamos ver algumas outros- é ​​que se você olhar o passado a complexidade ou a sofisticação do jogo, há um edifício muito simples blocos que play-- todos os quais, se você destilar-los àqueles blocos de construção, são muito acessíveis e implementável para si mesmos. Por exemplo, é Já faz algum tempo, mas estou certeza que eu inicialmente fez quando tornando este jogo pela primeira vez eu estava completamente como procrastinado. Eu não focar em tudo na a lógica ou as peças do puzzle, Eu me concentrei nos gráficos e descoberta o poste de rua e a lata de lixo e tudo isso. Mas aqueles eram necessárias ingredientes em primeiro lugar. E uma vez que eu terminei de procrastinar e que define o quadro geral, Eu decidi, deixe-me fazer uma pedaço de queda lixo do céu. E vamos ver Raspadinha suporta coisas chamadas caracteres que podem sprites-- têm diferentes trajes em que eles parece diferente. E por isso eu coloquei uma lata de lixo traje em uma tal entidade gráfica. E eu só precisava a cair do céu. E assim ele sair, risco, como a maioria das linguagens de programação, suporta números aleatórios ou números aleatórios tecnicamente pseudocódigo, de modo que, arrastando e deixando cair algumas peças do puzzle, Eu era capaz de ter o lixo vêm da esquerda em primeiro lugar. E então a próxima vez que ele caiu, de a direita e, em seguida, a partir do meio. E todo o jogo que era apenas tem lixo que cai do céu. Você não pode apontar para ele ou clique sobre ele. Você não podia abrir a lata de lixo. Você não podia fazer nada. Mas foi um passo de bebê em direção a minha visão final. E depois disso, eu realmente implementado algum tipo de detecção de modo que se você clicou e arraste sobre o pedaço de lixo sobre a lata de lixo, Oscar de tampa iria abrir e fechar. Nada aconteceria para o lixo, mas pelo menos a tampa iria abrir e fechar. Então, em seguida, verificar, passo dois de dois. E é isso que vai ser chave em ambos conjunto de problemas de zero e na programação de um modo mais geral, é a tomar estes pequenos passos muito deliberados. Porque não só permitem que você sinto honestamente conseguido muito mais quickly-- é o pior coisa do mundo para tentar implementar todas Oscar Time, em seguida, horas depois bateu a bandeira verde, e nada funciona como esperado porque onde você mesmo começar a depuração ou para solucionar esse programa? É apenas esmagadora. E assim realmente abraçar essa idéia de dar passos de bebê steps-- novamente e novamente-- edificação algo que é, no final, realmente impressionante e complexo, mas em primeiro lugar, não é quase tão grande assim. Na verdade, vamos fazer isso. Deixe-me ir em frente e- Raspe si existe na web em Scratch.MIT.edu, e você vai ser dito como muito novo no problema definir zero, a especificação para que já está no site do CS50. Mas isso é o que Raspe em si é. E não há realmente apenas três áreas principais. No canto superior esquerdo existe é a fase de chamada. Este é zero. O traje padrão é um gato. E este é o mundo rectangular em que você pode move-- cima, para baixo, para a esquerda direito e algumas outras coisas. No meio aqui estão as nossas categorias ou os nossos paletes de peças do puzzle, e cores diferentes significar coisas diferentes. E se você picar ao redor, você verá coisas como loops e condições e variáveis ​​e outros ingredientes. E então aqui é a área de scripts. Este é o lugar onde eu possa arrastar e soltar essas peças do puzzle para fazer as coisas. Então vamos fazer uma coisa dessas. Deixe-me ir em frente e- e eu sei onde ele está. Então, eu vou imediatamente clique em onde eu sei que as coisas estão prontas para ser, mas apontando e clicando e bisbilhotando são inevitáveis. Então, quando a bandeira verde clicado, o que eu quero fazer? Eu vou fazer isso. Eu estou indo para arrastar esse quebra-cabeça roxo peça, dizer Olá por dois segundos, e deixe-me fazer zoom. E eu vou mudar isso para ser o que eu quero que ele ser-- Olá mundo por dois segundos é bom. Agora, eu vou clique no bandeira verde, ou se eu realmente quero, Posso tela cheia lo e depois voltar. Ele só vai manter tudo em uma janela. Verde Olá mundo flag--. Tudo certo. Nem tudo o que interessante. Então deixe-me ir em frente e fazer isso. Deixe-me tentar outro. Quando a bandeira verde clicked-- vamos fazer algo parecido com um som. E note que, de a caixa de graça que você começa um som de gato, como é o sprite padrão. Então, agora deixe-me ir em frente e bateu a bandeira verde agora. [Miando] Aw. Isso é adorável. Eu estou programando. Então o que foi que eu fiz? Isto é o equivalente de um programa. É óbvio que é super simples. Realmente não tomar tanto assim esforço e MIT fez a maior parte do trabalho, mas eu tenho chamado de função. Eu tenho usado uma função. Eu fiz um pouco de ação, usando apenas que uma parte do enigma roxo. Bem, se eu quero fazer três miados em uma fileira? Deixe-me ir em frente e fazer dois e três. E observe que quando você pairar nas proximidades de uma parte do enigma, um pouco de linha branca aparece tipo de magneticamente, e ela se encaixará juntos quando você deixar ir. Vamos ver o que acontece aqui. [Miando] Há um bug. Eu só ouvir um miado. Por que poderia ser? Sim? Sim. Nós realmente não ouvi-lo, mas isso é boa intuição. Eles estão todos tocando ao mesmo tempo. Por quê? Bem, o computador é só ir para fazer o que você diga a ele para fazer. Então, se você diz, som jogo, reproduzir o som, reproduzir o som, mas você não diga a ele para jogar até estiver pronto, jogar até que você está feito, ele vai soprar através o programa muito rápido e não apenas o que você diga a ele para fazer. Então, eu realmente precisa corrigir isso em um par de formas. Eu poderia apenas fazer isso, se livrar dessa. Deixe-me tentar este outro quebra-cabeça piece-- jogar miado de som até feito, em seguida, arraste três estes e clique em Reproduzir. [Miando] Não é realmente very-- obrigado você-- muito natural. Então por que não deixá-eu- me ir para controlar aqui. Agradável. Espere um segundo, e agora deixe-me voltar a sons e som jogo até feito, e, em seguida, deixe-me esperar um segundo. E, em seguida, deixe-me ir e obter um mais de som, e aqui vamos nós. [Miando] Um pouco mais natural, mas Isto não é muito eficiente. Como eu estava ficando entediado, ser todos -lo brevemente, clicando frente e para trás e realmente duplicar o meu trabalho-- praticamente copiar e colar. Na verdade, se eu controlo clicado ou direito clicado, Eu poderia ter apenas copiado e colado. O que seria uma melhor construção de usar? Que ideia de antes? É, portanto, um loop. E, de fato, se remexia, podemos encontrar exatamente isso. Deixe-me ir a eventos ou melhor controle. Então repeat-- eu não quer que seja 10 vezes. Isso vai ficar chato rapidamente. Mas vou repetir três vezes. Deixe-me voltar ao som e reproduzir o som até que seja feito. Deixe-me voltar para Controle e apenas esperar um segundo. E observem, você pode acho que não se encaixa, mas novamente se magneticamente você deixá-lo encaixe no lugar, ela vai crescer para preencher. O que é que jogar agora? [Miando] ESTÁ BEM. Agradável. E isso é o que seria chamado um programa que também é correto. Ele miou três vezes bastante naturalmente, mas é melhor concebido. Estou usando menos redundância. Eu não copiar e colar qualquer coisa. Eu apenas usei uma idéia melhor. Agora, isso ainda não é tudo o que interessante com o Scratch não fazer qualquer coisa. Então, vamos fazer outra coisa em seu lugar. Vamos fazer algo para sempre. E sabe de uma coisa? Movimento parece interessante. Vamos tê-lo mover-se 10 passos e bateu jogar agora. ESTÁ BEM. Bem podemos tipo de arrasto -lo de volta, e ele ainda está correr, porque ele está fazendo isso para sempre. Assim, o circuito está fazendo o que está dizendo para fazer, mas isso não é tudo o que interessante. Vamos fazer isso. Deixe-me acrescentar um bloco de controle, e utilizar uma destas condições para a primeira vez. Por isso, vai para mover 10 steps-- 10 pontos, 10 pixels na screen-- em seguida, ele vai fazer esta pergunta. Se algo é verdadeiro, em seguida, fazer algo dentro deste bloco. Então não é que a detecção tem um todo bando de expressions-- booleana questões do sim não ou verdadeiro false form-- deixe-me fazer isso. Se touching-- e então há este pequeno menu suspenso. I pode parametrizar isso. Se tocar na edge-- vamos fazer algo assim. Então, se tocar edge-- deixe-me voltar ao movimento. E por que nós não apenas virar 180 graus? Tudo certo. Então, para sempre, mover 10 passos. Se você está tocando o borda, girar 180 graus. E isso não é o fim do programa porque você está em um bloco para sempre, por isso vai para ir novamente e de novo e de novo e de novo. Então, vamos ver o que acontece. ESTÁ BEM. Um pouco de buggy, mas legal. E podemos acrescentar a isto algumas coisas tolas que não são todos que intelectualmente interessante. Mas se nós batemos este pequeno microfone button-- ouch. Deixe-me limpar isso. Deixe-me melhorar isso como eles diriam na TV. Limpar isso, Salvar e agora vá até scripts. E agora, deixe-me ir ao som. Deixe-me dar-lhe um nome. Vou chamar este ouch. E agora jogar ouch som. Repare que aparece no pouco menu suspenso. Vamos ver. [AI] [RINDO] Mas podemos mudar t seu na mosca. Podemos ser duas vezes mais irritante. [AI] Ou se nós torná-lo como 1.000 degraus de cada vez-- ESTÁ BEM. Então, nós estamos indo para deixar que um só. Então, novamente, a construção de blocks-- I começou com algo super simples, e então eu adicionei um recurso, adicionou um recurso, adicionou um recurso. E eu já não precisa se preocupar com como a primeira dessas características foi implementado como eu continuar a camada coisas em cima. Então, na verdade, deixe-me fazer um outro aqui. Deixe-me ir em frente e abrir um arquivo que Eu trouxe de antecedência, chamado Sheep. Então, ele tem um pouco diferente personagem que se parece com isso. E deixe-me ver se eu não puder fazer algo usando um contador neste case-- uma variável chamada. Eu estou indo para ir em frente e sob Events-- deixe-me ver uma bandeira verde clicado. Então deixe-me ir para dados, que eu sei de brincar um pouco antes, é onde as variáveis ​​são. E eu estou indo para ir em frente e arrastar esta. Assim, uma variável chamada contador, e Eu estou indo para inicializar a zero. Posso chamá-lo anything-- x ou y ou z-- mas na programação, chamando algo em um semanticamente forma útil, como contador, que descreve o que é, é um muito mais fácil de ler o seu código mais tarde. Deixe-me ir em frente e obter uma bloquear sempre aqui. E deixe-me ir para a aparência página e fazer um bloco Say. Mas o que é legal sobre variáveis ​​é I Não é necessário apenas digitar algo como Olá mundo, que nós já feito, eu posso em vez de ir para Data e arraste minha variável, e mesmo embora a forma não bastante olha como ele deve se encaixar, ela vai crescer para preencher. E eu vou apenas dizer que o contador para um spoiler-- second-- ele vai contar. Vamos dizer que por um segundo. Então eu estou indo para ir e tê-lo esperar por um segundo, por isso não conta muito rápido. E, em seguida, por último, contra alterar por um-- em outras palavras, incrementar o contador por um valor adicional e fazer isso para sempre. Assim, as ovelhas também, como um programador, conta de 0. E se esperarmos o tempo suficiente, ele vai fazer isso para sempre. Mas isso não é exatamente verdade, porque de fato, como vamos descobrir em uma semana, inteiros e computadores de modo mais geral, tecnicamente têm apenas uma finite-- bem, em vez computadores, quando eles representam números inteiros, só tem um número finito de bits. Essas lâmpadas lá só pode contar tão alto antes que você está fora de lâmpadas. E também um computador, só tem tanta memória, só tem tantas transistores, por isso só pode contar tão alto. Assim, verifica-se que as ovelhas, Eu penso, pode contar até 2 bilhões ou algo muito grande. Então, nós não vamos esperar para que isso aconteça. Mas, eventualmente, algum bug vai acontecer que pode ter um mundo muito real ramificações. Mas, além das ovelhas, que apenas introduz uma variável. Vamos em frente e abrir algo que eu fiz com antecedência aqui chamado Pet o Cat-- Acariciar o gato aqui. E observar aqui é pouco blocos, mas quando a bandeira verde clicado, sempre fazendo o seguinte. Se você está tocando o mouse pointer-- de modo que o cursor no ecrã, o miado de som jogo arrow-- e depois esperar dois segundos. E apenas fazer isso para sempre. Basta esperar constantemente para ver se o pointer-- se o gato está tocando o ponteiro. Então eu bati jogo. Não está acontecendo nada. Mas como eu mover o cursor sobre o gato, [Miando] E se eu afastá-lo, não acariciando mais o gato. Então, alguma lógica condicional aninhada dentro de um loop. Como sobre este exemplo, deliberadamente chamado Não pet o gato? O que é que isto vai fazer? [Miando] Por que você não deve brincar com o gato? [Miando] ESTÁ BEM. Portanto, este é um exemplo de um caso mais. É um ponto de decisão e porque ele está sentado no circuito, ambos estão sendo verificados. Isso é verdade? Isso é verdade? Isso é verdade? Isso é verdade? E, eventualmente, um de aqueles vai aplicar e assim pode ouvir o miado ou o rugido do leão, nesse caso. Bem, vamos fazer um pouco mais extravagante que eu feitas com antecedência demasiado-- threads. Assim, um fio é apenas um coisa que um computador pode fazer. Assim, um programa multi-threaded é um programa que pode fazer várias coisas ao mesmo tempo. E todos esses exemplos até agora têm tido apenas um script, então a speak-- um programa como este aqui em cima. Mas observe este programa tem dois sprites, dois caracteres. Um deles é um pássaro. Um deles é um gato. E note quando eu clicar sobre estes para baixo esquerda, cada um deles tem seus próprios scripts ou programas associados a eles. E ambos os programas, aviso prévio, início com clicked-- bandeira quando verde vamos olhar para a cat-- quando a bandeira verde clicado. E assim, na verdade, quando eu bati o jogo agora, duas coisas vão acontecer ao mesmo tempo. O gato eo pássaro são ambos vai operar simultaneamente para criar esse efeito. E você pode imaginar o que está acontecendo. Há um loop e o pássaro e que o gato está em um loop. O pássaro é apenas saltando como Eu era antes quando eu disse ouch. Mas o gato tem claramente uma vantagem. Há um outro bloco de detecção que aponta o gato deliberadamente ao pássaro, neste caso aqui. Assim, poderíamos provocar uma separação, olhando através desses blocos, o que está acontecendo. Mas o ingrediente chave aqui é um deles. A ave, de modo que este jogo não é completamente boring-- ou este animation-- começa numa direcção aleatória. E o computador é escolher um número entre 90 e 180 essencialmente, de modo que é um pouco animação diferente de cada vez. E, em seguida, observar aqui, se o gato está tocando o pássaro, em seguida, jogar o leão quatro sound-- o rugido. Mas, enquanto isso na ave de paleta, temos isso. Para sempre, se não tocar o gato, apenas manter em movimento três etapas. E então aqui está outra peça do puzzle. Se você é na borda, saltar. Então, o pássaro é apenas uma espécie de cuidando de seu próprio negócio, apenas voando ao redor e saltando, e é realmente o gato que tinha a lógica condicional para determinar se ele tinha pego o pássaro. Tudo certo. Então vamos fazer um outro aqui, esta sendo chamado Hi Hi Hi. E este aqui só faz isso em um loop para sempre. Mas notice-- como é que vamos parar este programa muito chato? Bata a barra de espaço. Porque se eu fizer isso, o program-- mão esquerda notar que é constantemente listening-- é o pressione a tecla espaço. Se a barra de espaço pressionada, e se assim for, o que ele faz? Ele faz uma técnica muito comum. Ele define uma variável igual a algum valor. Mas ele alterna esse valor. [? Assim aparência?] com base no I shape-- tem uma variável que eu escreveu previamente chamado Silenciado, que apenas diz sim ou não. É o som mudo ou não? Verdadeiro ou falso? E notem, eu estou dizendo isto-- se silenciado é zero, então mudar para um, else definir mudo-a para zero. Então, basta virar o valor de zero a um. Eu poderia ter done-- alterá-lo de dois para três e 3-2 ou 4:56 ou 5:56. Mas isso não importa o que os números que eu uso, enquanto eu continuo mudando-se o oposto. E o mais qualquer programador seria apenas escolher zero e um-- falso e verdadeiro, off e on-- para representar este. E isso ainda está em execução. Se eu acertar a barra de espaço novamente [SEAL sons] O programa ainda está em execução. Porque não há esse outro script que diz que, para sempre fazer o seguinte. Se a variável silenciado é igual zero-- por isso, se você não está silenciado é o logic-- se é falsa ou não, em seguida, reproduzir o som, porque você não está silenciado. Você deve reproduzir o som e, em seguida, acho oi oi oi por dois segundos e depois esperar, e fazê-lo de novo e de novo e de novo. E assim, desta forma temos um caminho para pessoas a-- para programas para interagir. E eles não tem que ser como datada como os outros. Na verdade, cutucando circundar-- sem trocadilho intended-- alguém passou uma enorme quantidade de tempo na internet execução PokemonGo em risco. Ele ainda geolocates-lo em Cambridge ou Allston aqui. Então, se você quer ver também o que as pessoas pode fazer é isto-- menu muito extravagante. Clique aqui. Esse sou eu com as minhas chaves de seta agora. Eu estou indo para ir depois disso. Clique. E agora você clique no Pokéball. Quer dizer, eu acho que você é suposto clique no Pokéball. Tudo certo. Então eu fiz isso. Eu posso passar por cima aqui. E essa pessoa implementado um pouco mais Pokeballs mais aqui-- três pokeballs. Vamos postar um link para esta on-line para que você possa jogar. Mas aviso há apenas alguns blocos de construção básicos. Ela se parece muito mais sofisticado, e é. Isto é impressionante e mais do que seria normalmente esperar, certamente para conjunto de problemas zero. Eu não tenho nenhuma idéia de quanto tempo essa pessoa passou online. Mas é tudo apenas um loop. Há um jogo de som. Há algum tipo de circuito ouvir para se estou bater a seta para cima ou para baixo a flecha ou à esquerda e à direita, e, em seguida, se assim for, ele está se movendo -lhe algum número de pixels. E então se eu clicar em outro sprite, há algum tipo de condição if lá. Sim, isso está ficando muito intensa. Nós vamos parar. É todos os blocos básicos de construção. Não há outros outros ingredientes do que os que já olhou para já. No entanto, aqui, deixe-me fazer um conjunto final de exemplos que pinta um quadro muito do que você pode fazer aqui. Aqui está um programa muito simples que só faz isto-- tosse, tosse, tosse. E com base apenas no que nós olhamos até agora, onde está o óbvio oportunidade de melhoria. Este programa está correto. Ele tosse por três vezes, que é o que eu pretendia. Mas está mal implementado. É mal projetado. Por quê? Sim. Não é um loop. E não é tanto que não é um loop, é que há um monte de redundância. Não é copiado e código colado, por assim dizer. E a solução, provavelmente é de fato um loop. Então deixe-me ir em frente e melhorar em cima disso. E eu vou arrastá-los para cá. Deixe-me ir em frente e conseguir uma repetição bloco, mudar isso para três. Eu estou indo para jogar fora alguns desses blocos. E você verá que é bastante intuitivo. Você arrastar e soltar e coisas aparecem e desaparecem eventualmente. E eu posso simplesmente arrastar este aqui, e agora eu tenho uma versão mais limpa ainda. Mas você sabe o que? Há esta oportunidade -se agora para abstraction-- para começar a definir um novo vocabulário que o MIT não antecipar. Há esperar e repita e para sempre e se, mas o que se eu quiser introduzir a palavra tosse como um bloco? E se eu quiser uma peça do puzzle cujo propósito na vida é a tosse? Bem, vamos olhar para esta versão aqui, o que eu fiz como segue. Magicamente, eu criei esse quebra-cabeça pedaço aqui, que zero permite que você faça. E, de fato C e Python e JavaScript são vai permitir que você faça isso também. Você pode criar seu próprio costume peças que você chama o que você quer. Neste caso, tosse sente como uma definição razoável. E, em seguida, com estas peças para baixo aqui você pode definir o que significa. Eu arrastado e caiu de esta paleta aqui-- mais blocks-- este grande roxo bloco, onde eu digitei na tosse como o nome da minha nova peça do puzzle. E então eu estou dizendo sempre que um usuário chama essa nova peça tosse quebra-cabeça, fazer uma palavra a dizer e uma espera. E assim até aqui no meu bloco de repetição, Eu posso apenas tossir três vezes. E eu diria, especialmente Se agora você esconder esse detalhe. Quem se importa como tosse é implementado? Tudo que me importa como programador que eu posso tossir. Eu não me importo como dizes é implementado. Eu só me importo que o gato pode dizer alguma coisa. Eu puder abstrair esse detalhe e incidir apenas sobre o que está na tela aqui. Mas posso dar um passo mais longe. Observe que aqui, eu tenho implementou o circuito três vezes. Mas e se ao invés disso eu agarrar esta versão? E se, em vez nesta versão aqui, Eu só mudar a minha peça do puzzle para tomar um argumento e de entrada em si mesmo? E essa entrada pode ser um número como três. Então, agora, se eu estou escrevendo um programa e eu quero o gato a tossir, Eu posso realmente dizer o quebra-cabeça peça quantas vezes a tossir, porque na parte inferior aqui, um columbófilo versão destas peças do puzzle personalizado permite-me especificar que tosse realmente leva um input-- leva um argumento como este. E sabe de uma coisa? Talvez eu percebo, espere um minuto. A tosse é o same-- é fundamentalmente a mesma ideia como espirros. É apenas um diferente palavra na tela. Eu puder abstrair mais e implementar esta versão final de um tosse, que à primeira vista é muito mais complexa procura. Mas observe o que eu fiz. Eu tenho agora generalized-- genericized realmente-- esta peça de quebra-cabeça a ser chamado dizer palavra n vezes. E agora eu tenho duas novas peças do puzzle aqui definir tosse n vezes. E o que faz a função de tosse fazer? O que o meu costume fazer parte do enigma? Ele apenas chama o bloco digamos, passando a palavra que eu quero dizer, passando o número de vezes que eu quero dizer. Porque agora eu posso implementar espirro, simplesmente dizendo achoo, neste caso, um determinado número de vezes. E por isso estou camadas e camadas. E, novamente, a chave aqui não é como eu implementado, mas o fato que se eu apenas literalmente movê-los para fora da tela, veja como simples, se não muito meu programa agora parece. Porque ele faz o que diz, eu abstraído o que estiver dentro dessa caixa preta. ele passa a ser uma caixa roxa aqui, mas eu obstruída fora o que está dentro porque eu não me importo como ele funciona. Eu só me importo agora que ele funciona. E, de fato, no problema definir zero, isto é exatamente o tipo de sobreposição de idéias que você vai têm a oportunidade de explorar. É exatamente a oportunidade de aplicar técnicas de resolução de problemas, para o que é, provavelmente, um ambiente desconhecido. E se você não tenha programado antes ou programado antes, você vai descobrir que há um pouco de algo neste ambiente para todos. E com conjunto de problemas um em uma semana, vamos ser transferida para focando em uma linguagem de alto nível chamada C-- ou melhor, um menor linguagem de nível chamada C-- que é ainda mais poderoso, mesmo que seja um pouco mais enigmática à primeira vista. E você vai perceber por TL de hoje: DR, que este problema definido tem um menor a janela de tempo do que os do futuro, basta porque você deve achar que é bastante acessível. E não se preocupe se você adicionar a classe tarde. Nós vamos resolver isso antes do tempo. E antes de suspender os trabalhos por bolo, vamos terminar com apenas um olhar de dois minutos pelo que o espera aqui no CS50. [REPRODUÇÃO DE MÚSICA] Tudo certo. Isso é tudo para CS50. Vamos vê-lo em breve. O bolo é agora servido. [REPRODUÇÃO DE MÚSICA] COLUNA 17: Você já ouviu falar de um ano sabático, chefe? COLUNA 18: Talvez haja mais sob o capô.