[Música tocando] [MUSIC - Rossini, "RANZ DES Vaches "do Guilherme Tell] [MUSIC - THE BEAT INGLÊS, "MARÇO DOS CHEFES giratória "] [Aplausos e aclamações] DAVID MALAN: Então isso é CS50. Meu nome é David Malan. E 73% de vocês não têm experiência prévia com a ciência da computação, ao contrário do que se poderia pensar. Então, hoje, achei que seria desbastar em que a falta de familiaridade, mas também dar-lhe um sentido de, para aqueles de vocês com mais conforto, que as direções você pode ir neste semestre. Então, vamos começar com isso. Eu realmente não tenho idéia do que está dentro de um computador, mesmo que, como você, eu usá-lo todos os dias. Mas é uma espécie de caixa, e não há não há muitas entradas para ele. No mínimo, há, o quê? Provavelmente um cabo de alimentação. E, de fato, com este ingrediente, eletricidade, parece que estamos a ser capazes de fazendo um pouco nestes dias. Contudo, no final do dia, tem que representar as coisas que nos preocupamos. Temos que representam informação de alguma forma. E você provavelmente pelo menos vagamente familiarizados com a idéia de binário ou pedaços de alguma forma ou de outra, os computadores reduzida a zeros e uns. Mas podemos abraçar isso e, pelo menos, colocar um pouco de luz para isso? Então, eu tenho esses pequenos lâmpadas de mesa aqui. Eu tenho uma tomada elétrica aqui. E eu vou propor que dentro de computador é, pelo menos, um dos essas coisas, algo capaz de ser ligado ou desligado. Neste caso, é na verdade uma lâmpada de mesa, mas no nível mais baixo, é algo chamado um transistor. Mas, no nosso mundo, é uma lâmpada de mesa, de modo Eu estou indo para ir em frente e ligar este no meu eletricidade aqui. E eu afirmo que o uso desse simples, dispositivo simples, este interruptor simples, eu pode representar informações. Por exemplo, agora, eu sou representando nada, certo? Estou representando o que eu vou chamar 0 ou falso, o oposto de algo realmente estar presente. Mas se eu simplesmente ligar esta opção, agora eu tenho representado a 1. Então, usando este simples pedaço de memória, se você quiser, eu posso representar informação. Agora, infelizmente, o meu computador não pode fazer muito. Ele só pode representar dois valores em todo o mundo - 0 ou 1. Mas o que é uma solução óbvia, agora, se queremos expandir o nosso computador de memória e representam mais que apenas 0 e 1? Bem, vamos pegar outro exemplo bit. Vamos pegar um outro interruptor, outro transistor, mas você gostaria de pense nisso. Deixe-me ir em frente e ligar este no meu computador também. E eu vou afirmar, agora, que por usando um pouco mais de energia elétrica e tornando mais dessas opções e em fora, eu posso representar mais como informação. Então, agora, este é um. Se eu quiser representar agora 2, eu poderia fazer isso. Mas, normalmente, convenção, como veremos eventualmente ver, vai que eu faça isso. Portanto, este é 0, esta é uma. Este seria 2. E não surpreendentemente, isso seria 3. Assim, deste modo, ainda assim, pode contamos-se ainda mais? Se eu conseguir um terceiro bit, um terceiro switch, qual é o maior número que puder agora contar-se a partir de 0? Então 7 se eu estou começando em 0, certo? Porque se eu transformar essa luz e realmente ligar esta terceira e última luz na minha tomada elétrica aqui, então eu tenho a capacidade de representar nenhum dos dois valores aqui, dois valores aqui, dois valores aqui - e para que eu possa representar 2 vezes 2 vezes Dois, ou oito valores possíveis. E se eu começar a contabilidade em 0, assim que é 0, 1, 2, 3, 4, 5, 6, 7. Portanto, este binário. É realmente tão simples como isso. E eu diria que este é realmente muito familiar para a maioria todos nesta sala. Deixe-me ir em frente e abrir uma editor de texto pouco aqui. E você pode se lembrar de escola primária que tínhamos coisas como as centenas lugar, o lugar de dezenas, e aqueles lugar. E lembrar que, se você teve algum decimal número, como algo aleatório como 123, você faria essencialmente escrever isso na forma destes três colunas. E por que é 1, 2, 3 que sabemos como 123? Bem, na coluna mais à esquerda, temos uma 100, mais dois 10s, de modo que é 120, mais três 1s, de modo que é 123. Agora, este mundo que nós apenas iluminado é exatamente o mesmo que você já esteve familiarizado com por anos, Só que agora, as nossas colunas não são potências de 10. Eles são apenas potências de 2. Assim, enquanto que o lugar queridos, este vai ser o lugar duplas, este é vai ser o lugar de quatro. E porque eu estou usando apenas a mais simples de mecanismos para transformar as coisas on e off - eletricidade está fluindo ou eletricidade não está fluindo - Eu não consegue ter a mesma expressão gama de 0 a nove. Nós estamos indo para mantê-lo super simples neste mundo dos computadores. Tenho apenas 0 ou 1 - off ou on, falso ou verdadeiro. E então o que eu estou representando agora é 1, 1, 1, porque cada uma dessas luzes é iluminada. Bem, isso me dá um 4, mais um 2, então que é 6, mais um 1, e isso é 7. E ergo faz essa seqüência de três bits representam o número 7. Então todo esse tempo, dentro do seu computador, ter sido qualquer número de transistores, qualquer número de bits. Contudo, no final do dia, pode representar informações tão simples quanto isso. Agora, infelizmente, nós só contava até 7 na, até agora, CS50, mas espero que possamos fazer um pouco melhor que isso. E, de fato nós podemos. Suponha que nós, como seres humanos apenas decidiu arbitrariamente que vamos para associar números como 1, e 2, 3, 4, 5, 6, 7, com as letras específicas o alfabeto. E por razões históricas, eu vou iniciar um tanto arbitrariamente, mas estou vai dizer, os seres humanos, nós estamos indo decidir como um padrão, a nível mundial, que 65 representa o número da letra A. 66 irá representar B. Dot, ponto, ponto. 90 irá representar a letra Z. E vamos supor que, se realmente colocar alguns pensei nisso, poderíamos chegar com os números de pontos de exclamação e letras minúsculas, e de fato, outras pessoas têm feito isso por nós. Então, agora nós tinha pedaços com os quais podemos representam números, números com os quais podemos representar letras, e com cartas agora podemos começar a compor e-mails e personagens impressão no ecrã. Então deixe-me convidar, se eu pudesse, oito voluntários bravos - que não se importa que aparece não só na câmera, mas na internet - para vir aqui e representar oito tais bits, em vez de três. Assim como sobre um, dois? Como cerca de três? Como cerca de quatro horas de luz azul, cinco à final? Sobre alguém aqui? Seis na frente, sete na frente, e oito em frente, bem como. Então, eu só aconteceu para vir preparado com um monte de pedaços de papel. E, estas peças de papel são números que representam as colunas vocês vão representar. Então você vai ser - Qual o seu nome? ALUNO: Anna Leah. DAVID MALAN: Anna Leah, você será a coluna 128s. Você está? ALUNO: Chris. DAVID MALAN: Chris vontade ser a coluna de 64s. Você está? ALUNO: Dan. DAVID MALAN: Dan vontade ser a coluna de 32s. ALUNO: Pramit. DAVID MALAN: Pramit vontade ser a coluna de 16s. ALUNO: Lillian. DAVID MALAN: Lillian será a 8s. ALUNO: Jill. DAVID MALAN: Jill vontade ser a coluna de 4s. ALUNO: Mary. DAVID MALAN: Mary será o 2s, e? ALUNO: David. DAVID MALAN: David vontade ser a coluna de 1s. Então, se vocês pudessem pisar um pouco para a frente para que todos possam ver. O que vocês não vêem é que no volta desses pedaços de papel é uma pouco cheat sheet que está prestes a instruir os oito bits para cada levantar a mão ou não levantar a mão. Se sua mão sobe, eles são representando um 1. Se sua mão fica para baixo, eles são representa um 0. Enquanto isso, o público deve ser capaz de descobrir, com base nesta mapeamento, o que a palavra de três letras estes pessoas estão prestes a soletrar. Assim, em apenas um momento, que você vai ler a primeira linha fora da parte traseira sua folha de fraude, e você é ou vai aumentar ou não levantar a mão. Se você é um, você levanta, se você é um 0, você está lá desajeitadamente, apenas como aquele. Ir. O número, em primeiro lugar, esses caras estão representando? 66. 66, certo? Temos um 1 na coluna 64s, um 1 na coluna 2s. Isso me dá 66, de modo que parece estar representando B. Então, vocês têm escrito - OK, isso é o suficiente. B. Então agora vamos passar para nossa segunda carta. Ir. Quem é o mais rápido em matemática aqui? Assim, 79. Mais uma vez, se somarmos todas as colunas em que há a 1, atualmente, apenas como fizemos antes com o mais simples de exemplos de 7, agora obter o número 79. Que de acordo com o nosso mapeamento é o letra O. Então, estamos quase lá. B, O. E, finalmente, ir. O que eles estão representando agora? Menos consenso. Isso é apenas um murmúrio absoluta. Sim, é de fato 87. Bom. Então, se nós agora mapear essa volta para - vamos começar a chamar a nossa tabela ASCII, American Standard Code para Intercâmbio de informações. Isso nos dá a letra - não "bo", mas "arco". E isso é um perfeito sugestão para vocês para ter um arco ea cabeça nas costas. Muito obrigado. [Aplausos] DAVID MALAN: você pode mantê-los. Embora, na verdade, alguém como uma lâmpada de mesa, também? [BUZINA DE AUDIÊNCIA] DAVID MALAN: Lâmpada de mesa? [Risos] DAVID MALAN: Sério? Lâmpadas de mesa para todos? Tudo bem. Assim, começando com o muito mais simples de princípios, temos agora não só contava acima de 0 todo o caminho até a 7, temos assumido que apenas jogando mais bits ou mais luzes ou mais transistores para este problema, podemos representar números cada vez maiores, e Logo, faixas cada vez maiores de alfabetos, como o Inglês. E só vamos na fé para hoje Da mesma forma que podemos começar a representar gráficos e de vídeo e qualquer número de outros meios de comunicação com os quais estamos familiarizados hoje. Portanto, este é CS50, e nesta classe ao lado de vocês, mais uma vez, muitos mesmo colegas que têm tão pouco experiência como você. E Digo isto apenas porque muito frequentemente, incluindo como recentemente como um dos o calouro assessoria de eventos e em segundo ano de primavera passada aconselhando evento, muitas vezes ouvimos os alunos isentam quando chegando à mesa de CS, bem, Eu estive pensando em fazer isso classe intro, mas eu não sou realmente um pessoa computador. Ou, mas todos certamente sabe mais do que eu. E eu coloquei isso na maior fonte possível, para transmitir essa mensagem de que isso não é de fato o caso. E se você está se perguntando, se I, na verdade, estar aqui? Perceba que não é só deste curso título Introdução à Computação Ciência, é Introdução à Computação Ciência I. Portanto, não é de fato um segundo essa introdução. Então você não é, de fato, no lugar errado. E entre os objetivos que tenho para hoje são para amenizar-lhe quaisquer preocupações pode ter, mas também para pintar uma imagem do que está na loja para estudantes menos e mais confortável tanto neste curso. Mas em primeiro lugar, uma palavra em uma das apostilas você tem hoje, entre os quais há uma série de perguntas frequentes. Tem sido uma visão de nosso há algum tempo agora introduzir uma nova classificação opção para este curso - ou seja, SAT / unsat. Filosoficamente para mim, é muito, muito, muito mais importante que o alunos nesta classe se envolver com o material, ser contestada pelo material, e se preocupar muito, muito menos sobre a mecânica de pontuação reais e notas de letra no semestre de final, mas realmente abraçar a curso e seu material. E realmente isso se sente, mais geralmente, para o que é interessante para eles, a sentem desafiados e recompensados, mas sem medo do fracasso. E, de fato, esta é também uma recorrente tema este e outros introdutório cursos em outros campos, que você tem este receio quando se trata de colocando os dedos da pessoa em águas desconhecidas. Eu mesmo, em 1995, era um calouro. Eu estava muito focada em ser um concentrador Gov aqui. E ainda que eu sempre cresceu com um pouco de um interesse em ciência da computação. Eu sempre fui curioso. Mas naquela época, mesmo, eu tinha esse medo de mesmo de pisar no CS50, tanto de modo que eu nem sequer fazer compras que no primeiro ano. E a única razão de eu colocar um pé na porta segundo ano foi porque eu foi autorizada a levá-lo de aprovação / reprovação. Mas mesmo passa / falha exigiu que eu recebo coragem para fazer uma consulta com Professor Kernehan na época, trazer esta grande folha de papel, e pedir ele para a sua assinatura e sua permissão para explorar essas águas desconhecidas. E isso não tem ajudado nos últimos anos que ao fazer isso na CS50, quando utilizado para ser aprovado / reprovado, seria semelhantemente dezenas ou centenas de seus colegas tem que vir para cima, Deus me livre, no frente de Sanders com esse formulário, que em algumas mentes representa uma incapacidade, Ouso dizer que, para realizar é o nível de seus pares. O que é ridículo, mas eu acho que há essa mentalidade. E nunca houve nesta cultura do SAT / unsat, ou de aprovação / reprovação mais Geralmente, neste curso, ou realmente neste campus. Portanto, este ano nós mudamos isso. Eu seria a metade de êxtase de esta classe ou mais terminou levando CS50 SAT / unsat. No período de um ano, seria maravilhoso Se quase todo mundo é. A partir daí, talvez, nós vamos trabalhar em notas de letras na Universidade de Harvard Faculdade em geral. Mas, por agora, vamos fazer isso dentro da nossa própria esfera, e eu gostaria de coração incentivá-lo a rever os FAQs e fazer perguntas, como você vê o ajuste, de modo que espero que você, ao contrário de mim, não é bem ter o mesmo fator de medo quando explorar o que é, provavelmente, um lugar desconhecido. Então, qual é CS50? É uma introdução ao empresas intelectuais de computador ciência e da arte da programação. Mas o que isso realmente significa? Bem, até agora, nós conversamos muito brevemente sobre a representação da informação. Mas suponha que nós realmente queremos de fazer alguma coisa com ele. Precisamos introduzir a noção de o que vamos chamar de um algoritmo. Um algoritmo é um processo, um processo, um conjunto de instruções para fazendo alguma coisa. E um algoritmo pode ser algo super simples. Por exemplo, um exemplo com o qual alguns de que você pode estar familiarizado é este coisa aqui. Portanto, este livro aqui é cada vez mais datados, mas era uma vez, ele continha um monte de nomes e os números de telefone. E, de fato, se eu queria encontrar alguém nesta lista telefónica - dizer, alguém chamado Mike Smith - Eu poderia encontrar Mike Smith em qualquer número de maneiras bastante simples. Eu poderia começar no início e ir para página 1, não está lá. Page 2, não existe. Page 3. É que o algoritmo, é que processo, correto? Por isso, é correto, certo? Eu sou o tipo de idiota por fazer isso em dessa forma, mas, eventualmente, eu vou encontrar o sobrenome S, e espero que Mike É nessa seção, e eu me tornarei feito com o meu algoritmo. Mas certamente não é intuitiva. Mais cada ser humano razoável neste quarto não teria feito isso. O que você teria feito? Você teria ido direto para o meio, certo? Aproximadamente ao meio. E você percebe, oh, estes são os Ms. Então, Mike Smith, último nome a ser Smith, não é, claramente, em seguida, na metade esquerda do livro. Ele deve ser em direção ao S está na direita. E neste ponto, embora a maioria de nós não faça isso, na realidade, podemos literalmente rasgar este problema pela metade. [Aclamações e aplausos] DAVID MALAN: Obrigado. [Aclamações e aplausos] DAVID MALAN: Você pode literalmente destruir o problema pela metade, deixando-me com, literalmente, um problema de metade do tamanho. Então, se este livro telefone era - e é provavelmente foi - cerca de 1.000 páginas, agora é apenas 500. Se eu fizer isso de novo e eu percebo, oh, caramba, eu fui longe demais, eu estou no Ts seção, eu posso semelhante - figurativa ou literalmente - rasgar o livro de telefone - era, na verdade, muito mais fácil do que o tempo. Eu posso literalmente rasgar o livro de telefone ao meio, deixando-me agora com Não 1000, não 500 - 250 páginas. E eu posso ir 125, e metade disso, e metade disso, e metade disso, até que, finalmente, eu vou ficar com apenas uma única página. [Risos] DAVID MALAN: Esse é o parte eu falhar diante. Uma única página em que Mike espero é. Agora, esses algoritmos diferentes podem ser tipo de ou avaliadas em maneiras diferentes. O primeiro foi muito linear, certo? Virar a página, olhar para Mike. Virar a página, olhar para Mike. É muito linear. Se houver mais de uma página no telefone livro, ele provavelmente vai me levar mais um segundo, mais uma unidade de tempo, no entanto estamos computando tempo. Então, eu poderia chamar assim esta linha aqui, em que medida que o tamanho do problema aumenta da esquerda para a direita - livro de telefone fica menor ao maior - eo tempo vai aumentar em no eixo vertical, a maior o livro de telefone é. Então n é apenas uma variável geral que cientistas da computação usam para representar algum valor, algum número. Assim, n vai aumentar linearmente. O dobro do tamanho da lista telefónica, é vai me levar duas vezes mais tempo, muito provavelmente, para encontrar o Mike. Agora, eu poderia ter sido inteligente sobre isso, certo? Eu estava ficando entediado rapidamente. Poderia ter feito isso por dois. Assim, duas páginas, em seguida, quatro, depois seis, depois oito. E eu poderia começar a voar através de uma pouco mais rápido, embora em menor risco de superação Mike, mas que não é curva vai ser muito diferente. Ele ainda vai ser uma reta linha, mas um pouco mais rápido. Mas o que foi que eu fiz? Na verdade, eu fiz uma coisa fundamentalmente melhor. Eu consegui o que vamos chamar logarítmica tempo, o registro de n, em que este verde linha tem um muito, muito, muito borda menos direto a ele. E em vez disso, ele sugere, como espécie de se aproxima do infinito sempre de forma gradual, que eu poderia realmente ter uma página 1000 livro de telefone, o dobro de seu tamanho no próximo ano - porque acho muito mais pessoas se mudam para a cidade. Então agora eu tenho 2.000 páginas, mas como muitos mais passos é que mais inteligente algoritmo vai levar? Apenas um. Quero dizer, isso é uma coisa poderosa. Se formos para 4.000 páginas no próximo ano, que vai me levar apenas mais duas etapas. Então você pode jogar cada vez maior problemas em me, não muito diferente da web é jogando problemas cada vez maiores todos os dias no Googles e Facebooks da do mundo, e não é um negócio tão grande. Porque eu coloquei mais atenção e cuidados em meu algoritmo com o qual deve resolver problemas de forma eficiente. E, de fato, que será um dos os objetivos deste curso. Você vai, ao longo do caminho, aprender a programar. Você vai aprender a programar em qualquer número de idiomas. Contudo, no final do dia, o curso sobre a resolução de problemas e obtendo melhor em resolver problemas - e, como em casos como este, resolução de problemas mais eficiente. Agora, até agora, fizemos esta bastante intuitiva. Vamos introduzir algo bastante genérica chamada pseudocódigo. Então, vamos finalmente chegar, neste curso, para várias linguagens de programação. Mas hoje nós vamos fazê-lo em Inglês-like sintaxe, onde apenas uma espécie de, digamos, o que quer dizer, mas você é sempre tão sucinta e você não se preocupar com gramática e frases completas. Você acabou de se expressar como concisa possível. Então pseudocódigo é o Inglês-like que representa a sintaxe uma linguagem de programação. E para esse fim, deixe-me propor que agora modelar o processo que acabamos de descrito de contar algo um pouco diferentemente, desta vez tendo um olha este vídeo de cinco minutos produzido pelos nossos amigos na TED que define o pseudocódigo seja, define o que pensamento algorítmico é, e mesmo embora o exemplo que você está prestes a ver é, em si mesmo, super simples, é vai começar a dar-nos o mental modelo, o vocabulário, com a qual fazer muito, muito mais complexo algoritmos muito rapidamente. [BEGIN REPRODUÇÃO DE VÍDEO] [Música tocando] Narrador: O que é um algoritmo? Na ciência da computação, um algoritmo é uma conjunto de instruções para resolver alguns problema passo a passo. Tipicamente, os algoritmos são executados por computadores, mas nós seres humanos temos algoritmos, bem. Por exemplo, como você iria sobre a contagem do número de pessoas em uma sala? Bem, se você é como eu, você provavelmente ponto em cada pessoa, em um um tempo, e contar a partir de 0. 1, 2, 3, 4, e assim por diante. Bem, isso é um algoritmo. Na verdade, vamos tentar expressá-lo um pouco mais formalmente em pseudocódigo - Inglês-como sintaxe que se assemelha uma linguagem de programação. Deixe-N igual a 0. Para cada pessoa em quarto, definir N igual a N + 1. Como interpretar este pseudocódigo? Bem, uma linha declara, por assim dizer, uma variável chamada N e inicializa seu valor para 0. Isto significa que apenas no início do nosso algoritmo, a única coisa com a qual estamos contando tem um valor de 0. Afinal, antes de começar a contar, não ter contado nada ainda. Chamar essa variável N é apenas uma convenção. Eu poderia tê-lo chamado mais nada. Agora a linha de dois demarks o início de uma loop, uma seqüência de passos que repetir um determinado número de vezes. Assim, em nosso exemplo, o passo que estamos tomando está contando as pessoas na sala. Sob a linha dois é a linha de três, que descreve exatamente como vamos sobre a contagem. O recuo implica que é três linhas que se repetem. Então, o que o pseudocódigo está dizendo é que, depois de a partir de 0, para cada pessoa na sala, nós vamos aumentar N em 1. Agora é este algoritmo correto? Bem, vamos bater nele um pouco. Isso funciona se houver duas pessoas na sala? Vamos ver. Na linha um, que inicializar N a 0. Para cada uma destas duas pessoas, Em seguida, incrementar N em 1. Assim, na primeira viagem através do lacete, actualizamos N de 0 a 1. Na segunda viagem através desse mesmo lacete, actualizamos N 1-2. E assim até o final deste algoritmo, n é 2, que de fato corresponde ao número de pessoas na sala. Tão longe, tão bom. Como cerca de um caso de canto, embora? Suponha que existem 0 pessoas na sala - além de mim, quem está fazendo a contagem. Na linha um, que inicializar N a 0. Desta vez, porém, a linha de três não executar em tudo desde que não haja uma pessoa na sala. E assim permanece N 0, o que corresponde a número de pessoas na sala. Muito simples, certo? Mas a contagem de pessoas, uma de cada vez é bastante ineficiente, também, não? Certamente que podemos fazer melhor. Por que não contar com duas pessoas ao mesmo tempo? Em vez de contar 1, 2, 3, 4, 5, 6, 7, 8, e assim por diante, por que não contar, 2, 4, 6, 8, e assim por diante? Ele ainda parece mais rápido, e é certamente. Vamos expressar essa otimização em pseudocódigo. Deixe-N igual a 0. Para cada par de pessoas na sala, definir N igual a N + 2. Mudança bastante simples, certo? Ao invés de uma contagem de pessoas de cada vez, que, em vez contar eles dois de cada vez. Este algoritmo é, portanto, duas vezes tão rápido quanto o último. Mas será que é correto? Vamos ver. Isso funciona se houver duas pessoas na sala? Na linha um, que inicializar N a 0. Para que um par de pessoas, Em seguida, incrementar N por dois. E assim até o final deste algoritmo, N é 2, que de fato corresponde ao número de pessoas na sala. Suponhamos que existem próxima 0 pessoas na sala. Na linha um, que inicializar N a 0. Como antes, a linha de três não executa em tudo, uma vez que não existem quaisquer pares de pessoas na sala. E assim permanece N 0, o que de fato corresponde ao número de pessoas na sala. Mas o que se há três pessoas na sala? Como é que esta tarifa algoritmo? Vamos ver. Na linha um, que inicializar N a 0. Para um par dessas pessoas, Em seguida, incrementar N por 2. Mas e depois? Não há outro par cheio de pessoas na sala, por isso a linha dois não se aplica mais. E assim até o final deste algoritmo, N ainda é 2, o que não é correcto. De fato, este algoritmo é dito ser carrinho, porque tem um erro. Permite corrigir com alguma nova pseudocódigo. Vamos n igual a 0 para cada par de pessoas na sala. Conjunto N igual a N + 2. Se uma pessoa permanece não pareado, definir N igual a N + 1. Para resolver este problema particular, temos introduzidos, em linha de quatro, uma condição, também conhecido como um ramo que executa somente se houver uma pessoa que não poderíamos par com o outro. E agora, se há um ou três ou qualquer número ímpar de pessoas em o quarto, este algoritmo agora contá-los. Podemos fazer ainda melhor? Bem, nós poderíamos contar em 3s ou 4s ou mesmo 5s e 10s, mas, além disso, é vai ficar um pouco difícil a ponto. No final do dia, se executada por computadores ou de seres humanos, algoritmos são apenas um conjunto de instruções com que para resolver os problemas. Estes foram apenas três. O problema que você resolve com um algoritmo? [FIM REPRODUÇÃO DE VÍDEO] DAVID MALAN: Esse é o único momento Vou aparecer em forma de desenho animado. Mas onde essa história deixa de fora, agora, é como podemos fazer melhor? Três e quatro, reivindicamos, podemos contar pessoas muito mais rápido, mas podemos fundamentalmente fazer melhor do que isso? E eu aposto que podemos. Se introduzirmos um pouco de nossa própria pseudocódigo aqui, eu vou propor que podemos alcançar uma linha como esta. Nós não vamos contar as pessoas um, dois, três, quatro. Nós não estamos indo para dois, quatro, seis, oito. Nós vamos fazer fundamentalmente melhor por repensar o problema, e neste caso, aproveitando uma outra forma subutilizados recurso. Em apenas um momento, eu espero que você perdoe E o humor nos por de pé em lugar, em que ponto nós estamos indo pedir a cada um de vocês para assumir em seu mente o número 1. Você, então, vai cada vez mais desajeitadamente, como o tempo passa, encontrar alguém que está de pé, combinar seus números juntos adicionando-up. Um de vocês é, então, vai correr para se sentar para baixo em primeiro lugar, e a outra pessoa vai repetir. Assim, em outras palavras, por sementeira de todas você com o número 1, e, em seguida, combinar aqueles em 1s 2s e aqueles 2s em 4s, com todos cada vez mais sentado, devemos, no final do este algoritmo, tem apenas um empréstimo alma que não se sentou rápido o suficiente, mas que tem toda a contagem de audiências em sua mente. Então, se você, vamos em frente e - Primeiro Passo - levantar-se no lugar. E executar. [Multidão murmurando] DAVID MALAN: Você sabe onde Lauren é? 729? [Multidão murmurando] DAVID MALAN: Tudo bem? [Multidão murmurando] DAVID MALAN: Tudo bem, devemos estar se aproximando do fim. Vemos um colega aqui de pé ainda. Quem precisa de mais para ser emparelhado? Se vocês querem emparelhar. Alguém lá em cima. Por que não dar uma mão aqui. Para as poucas pessoas que ainda estão de pé, o que os números você tem em sua mente? ALUNO: 78. DAVID MALAN: 78 plus - que está de pé aqui em baixo? ALUNO: 39. DAVID MALAN: Mais 39. Além disso, quem mais ainda está de pé? 81? OK, quem mais? Outro 81? Uau. E então o que está em volta? ALUNO: 49. DAVID MALAN: 49, além de? ALUNO: 98. DAVID MALAN: 98 plus? Será que mais alguém? 12? Bom trabalho. [Risos] DAVID MALAN: Oh, 112 - oh. Bom trabalho! [Risos] [Aplausos] DAVID MALAN: Qualquer pessoa ainda está de pé? Desculpe? ALUNO: 99. DAVID MALAN: 99. Qualquer outra pessoa ainda está de pé? E o número total de alunos aqui é, na verdade, de acordo com a - você tem um número? Oh, o número real de pessoas no quarto, de acordo com o que conta os bolsistas de ensino estavam fazendo no caminho de todos, foi 729. Assim, a partir de uma sala cheia de estudantes de Harvard que se contaram, o resposta é 637. [Risos] DAVID MALAN: Tão perto. Mas ainda assim. OK, então isso é um ensinamento momento, certo? Este agora é o que nós descrevemos como um bug. Em algum lugar ao longo do caminho, fizemos alguns aritmética errado, ou alguém se sentou, ou para a esquerda, ou algo deu errado. Mas isso é bom. Porque mesmo assim, nós ficou muito perto. E eu diria que nós temos para o mal responder muito mais rápido do que eu teria usando a minha abordagem mais linear. Então, vamos supor que tenha de fato obter esse corrigir, mas acho que agora sobre o que estava acontecendo cada vez, contra a minha próprio algoritmo apontando ingênuo. Um, dois, três. Se há de fato 729 ou 637 pessoas aqui, que teria me levado , literalmente, 637 ou 729 pointings do dedo e incrementando a minha contagem total. E eu poderia fazer um pouco melhor, vai dois, quatro, seis, oito, e dobrar essa velocidade, talvez até triplicar ou quádrupla, dependendo quão bem eu posso fazer isso contando na minha cabeça. Mas esta abordagem que vocês tomaram era fundamentalmente diferente. Devido, no início, todos vocês se levantou. Então, tudo 729. E então, literalmente, metade de você se sentou. E, depois disso, uma outra metade do que você sentou-se. E, depois disso, uma outra metade do que você sentou-se. E o número total de vezes que se vocês poderiam ter sentado é mais ou menos oito ou nove ou dez vezes o total, dependendo do que nossa contagem total é. E podemos classificar de fazer este o outro lado. Se tivéssemos 1.024 pessoas na sala, o número total de vezes que você poderia reduzir pela metade a 1024 é de 10 pessoas. Agora pense sobre isso em outra direção. Suponha que, ridiculamente, que tivemos, digamos quatro bilhões de pessoas nesta sala, ou uma sala um pouco maior. Quantas vezes teríamos ido por este algoritmo, tal que metade dessa classe se senta? Ele só vai ter 32 como operações, mesmo em uma classe de tamanho quatro bilhões. Por quê? Devido quatro mil milhões vai para dois bilhões, vai para um milhão, vai para 500 milhões, vai para 250 milhões, ponto, ponto, ponto. Eu só posso fazer essa divisão cerca de 32 vezes, no ponto em que, todos, exceto uma pessoa estaria de pé esquerdo. E que, também, é uma espécie de poderoso idéia de que cada vez mais vamos tentar alavancagem neste curso, e em programação e ciência da computação mais Geralmente, esses germes de uma idéia com que pode então resolver problemas muito, muito mais poderosa. Então começamos muito simples com que pseudocódigo e um cara em uma sala, mas agora com uma sala cheia de pessoas fizemos fundamentalmente melhor. Bem, vamos agora transição pseudocódigo para algum código real. Esta linguagem que você está prestes a ver acontecer para ser chamado Javascript, e vamos voltar a esta direção final do semestre. É uma linguagem de programação que você usar para fazer sites e outros tais software nos dias de hoje. E nós tê-lo usado, graças a um amigo de nossos em Stanford, para codificar alguma informação escondida aqui. Esta é a arte de esteganografia, por assim dizer, onde você pode se esconder informações que por outro lado parece ser ruído ou um completamente diferente imagem completamente. Mas incorporado nesta imagem em particular é realmente uma mensagem secreta das sortes. Então deixe-me ir em frente e puxe para cima a mesma imagem aqui, este tempo em um navegador web. E eu vou acenar a mão em alguns dos os detalhes para hoje, particularmente para aqueles de vocês que isso parece não apenas JavaScript, mas grego, como um linguagem completamente estranha. Mas esta é uma lista de uma linguagem de programação. E, por enquanto, assumir a fé que esta primeira linha de código - e por código, eu só quero dizer o texto. O texto que eu poderia ter literalmente digitado em Microsoft Word, se eu tivesse a software direito para, em seguida, fazer algo com ele. Código de programação, programação código, é realmente apenas texto, e parece diferente com base em que língua você está usando, e não ao contrário Inglês e Espanhol e russo todos olhar diferente quando você digita em seu teclado. Portanto, esta primeira linha, para agora assumir fé, simplesmente abre um gráfico da internet, esse gráfico barulhento acabamos de ver. Esta próxima linha aqui é um exemplo de uma loop, e que se viu a mesma jargão no vídeo TED. Um ciclo é algo que acontece mais uma vez e de novo, e mesmo que isso parece absolutamente enigmática, com o palavra-chave, e alguns parênteses, e alguns pontos e vírgulas. Voltaremos a isso em pouco tempo, mas que não há essencialmente lacete dizendo ao programa, iterar sobre todos desses pontos ruidosos, da esquerda para a direita, de cima para baixo. Porque, no final do dia, a imagem como este - e você pode realmente tipo de vê-lo no projetor - é realmente apenas uma grade de pontos. Assim, podemos identificar cada um desses pontos por um sistema de coordenadas, X, Y, e com esta programa, agora podemos começar a fazer alguma coisa para esses pontos. Então o que eu estou indo para ir em frente aqui e não é que eu vou fazer algumas mudanças. Primeiro, eu estou indo para ir em frente e se livrar de tudo isso esverdeada e azulada ruído, e eu estou indo para ir em frente e digite o seguinte reconhecidamente sintaxe enigmática. im por imagem. definir azul no local x, vírgula, Local de y, a 0. Em outras palavras, eu quero apenas desligar toda a azul pontos em que a imagem. Eu estou indo para ir em frente agora e clique este botão Run / Salve, e você vai observar no lado direito, a imagem resultante é exibido. Agora seu super verde, mas isso não é surpreendente, porque eu literalmente virou fora, fazendo a 1 a 0, todos o azul na foto. Bem, agora vamos fazê-lo um pouco mais. im para a imagem, ponto setGreen, x, y. E isso significa apenas iterate da esquerda para a direita e de cima para baixo. Desligue isso com um valor de 0, bem. Salvar. E no projetor, você não pode realmente realmente ver nada. Na tela do meu laptop, se eu espreitar em apenas o caminho certo, eu posso ver um pouco de um imagem, porque eles ainda estão algum vermelho lá dentro. Se você já ouviu a sigla RGB - vermelho, verde, azul - ele está se referindo a essa composição de uma imagem usando apenas essas três cores. E agora, temos jogado fora tudo verde, tudo azul, mas não há muito vermelho. Então deixe-me pôr em marcha acima o vermelho. Como posso fazer isso? Bem, primeiro, eu vou pedir este programa uma pergunta. Eu estou indo para ir em frente e vamos chamá-lo uma variável, como na álgebra. Você pode ter x ou y ou z. Eu estou indo para declarar uma variável e dizer: colocar nesta variável, temporariamente, o valor da imagens getRed valor de x, y. E, novamente, vamos voltar a todos deste detalhe no futuro. Mas, por agora, basta ter fé em que esta linha está pedindo o programa, o que é o valor de vermelho em x, y? Nesse ponto em particular? Então eu vou fazer alguma coisa para ele. Então eu vou fazer image dot set vermelho em x, y, y, mas desta vez eu vou impulsioná-lo, fazendo vezes vermelho, digamos, 10. Então, aumentá-lo por um fator de 10. Deixe-me afastar agora e clique poderia Run / Salvar. E voila, que estava lá todo o tempo, mesmo que os nossos olhos humanos não conseguia vê-lo. Então, novamente, este agora é o código real, uma exemplo de uma linguagem que nós viremos de volta para antes do tempo. Mas perceba, particularmente aqueles de vocês sem essa experiência, é muito logo que nos será escrever código como esse aí. Na verdade, uma ferramenta com a qual você é tudo um pouco familiar, talvez, é CS50 da própria ferramenta claro-shopping, que era realmente reiniciado neste verão por alguns dos próprios ex-alunos do CS50, agora voltar TFs. Portanto, este passa a ser um site construído em uma linguagem chamada PHP. Ele usa um banco de dados chamado MySQL, as coisas com a qual nós vamos chegar em nossas mãos sujo no final do semestre. Mas, acredite ou não, até mesmo algo como esta última análise, reduz a simples de ciclos e as condições e ramos, como os que vimos apenas um há pouco no vídeo TED. O que eu pensei que eu ia fazer agora é compartilhar não apenas algo que a equipe tem feito para o campus, mas sim algo um ex-aluno - três estudantes, na verdade - fez no ano passado, Serra, Daniel e Sam, o último dos quais não tinha antes experiência de programação quando assumiu o CS50. E para o seu projecto final, que exibiu, na Feira do CS50, uma wrdly aplicação chamada, que é um programa baseado na web para que eles fizeram este vídeo que eu pensei que eu iria partilhar a dar-lhe um sentido de o que é possível até o final do prazo. [Música tocando] DAVID MALAN: Isso é da Semana Zero Semana de 12 no ano passado. [Aplausos] DAVID MALAN: Como uma provocação, muito, muito para aguçar o apetite é o que é possível, você já deve ter visto, ou pode ver em breve, market.cs50.net, um nova ferramenta que a equipe do curso tem vindo a trabalhar, desta vez em colaboração com Harvard Estudante Agências, de tal forma que a partir deste ano e continuando esperançosamente neste próximo verão você vai ter um padrão oportunidade no campus para comprar e vender as coisas de seu interesse. E com a parceria por meio de HSA, você vai também ser capaz de soltar itens off em uma das lojas físicas da HSA em algum momento no futuro, de modo a coisas proxy, particularmente como você pós-graduação e não necessariamente quer descartar as coisas, mas na verdade pagá-lo encaminhar para as pessoas que você pode seguir aqui no campus. Então, mais sobre isso mais para vir. Mas um pouco mais concretamente, uma ferramenta que veio de CS50 em recente anos, com o qual alguns de vocês podem estar familiares e outras pessoas de que você pode ser pesquisando agora, pelo CS50.net/2x, você vai encontrar um link para uma extensão do Chrome o que é demonstrativo de como você pode usar JavaScript, que mesmo idioma que nós usado com a torre Eiffel um momento atrás, para implementar a velocidade de reprodução 2x para todos os vídeos de Harvard Genwi. Isso é algo que é construído no próprio player de vídeo do CS50. Mas isso, também, se você começar a cavar no código-fonte, o que vamos felizmente disponibilizar, você vai ver como você pode até mesmo resolver problemas como esse, acelerando widgets em sites com que você já está bem familiarizado. Assim, uma palavra de agora o curso e expectativas e que está à frente. Em geral, nós vamos de fato se reúnem aqui às segundas-feiras e quartas-feiras - embora nesta sexta-feira, vamos reunir porque do Shopping Semana - 01:00 - 14:00, embora às vezes até 2:30. Dado que você poderia, portanto, quer ou tem que tomar alguma classe em 02:00 em diante, ou mesmo antes, percebem a curso é de suporte do que é chamado inscrição simultânea, em que vamos apoiar uma petição ao Conselho Ad e o residente reitores em seu nome se você tem um conflito em algum lugar deste 01:00 - 02:30 intervalo. Cabeça para que URL on-line para detalhes adicionais. Mas, em termos da estrutura de suporte que caracteriza CS50, para estudantes mais e menos confortável iguais, nós oferecer faixas distintas de seções. E este é um par de semanas de folga, mas em pouco tempo, você será solicitado a seu nível de conforto. Você está entre os menos confortáveis, mais confortável, ou algures no meio? E nós vamos ter três distintas faixas que atendem a precisamente aquelas audiências. Assim, em nenhum ponto o termo que você deveria até se sentir como você está competindo contra qualquer aluno com mais ou menos fundo do que você. Na verdade, o curso destina-se a ser muito mais colaborativa e muito mais mais aberto do que isso. Em termos de conjuntos de problemas, você vai encontrar-se também que para além da edição padrão do problema de cada semana definido, muitas vezes há um "hacker edição ", que está destinado a ser alvo a 5% a 10% ou mais do demográfico que está de fato entre os mais confortável e gostaria mais um desafio do que o padrão edição do que pset espera. Mais detalhes sobre aqueles a serem encontrado no programa. Mas também podem encontrar-se detalhes sobre os cursos de dias de atraso. Normalmente problema define são devido às quintas-feiras. No entanto, você pode estender a muitos de seus prazos esta queda de quinta a Sextas-feiras simplesmente por nos encontrar a meio caminho, por assim dizer, respondendo a alguns warm-up perguntas em alguns dos problemas da semana sets, que irá automaticamente em seguida, dar-lhe um extra de 24 horas. Também vai cair seu menor pontuação, de acordo com o conteúdo programático. Para lhe dar uma sensação de que o problema conjuntos são - porque é de fato o problema do curso define que em última análise, definir quase todos os experiência do aluno, mais do que palestras, mais do que seções, mais de modo que a maioria de qualquer outra aspecto do curso. No ano passado, por exemplo, que começou, como vamos começar este ano, com o Scratch. Particularmente nesta sexta-feira, vamos usar, por apenas o tempo de um dia, uma gráfica linguagem de programação, com o qual vamos iniciar a programação, arrastando e soltando peças do puzzle que só montar fisicamente se faz sentido a fazê-lo logicamente. Na próxima semana, vamos rapidamente a transição para C, um bastante antigo, mas muito pequeno e linguagem simples que nos permitirá realmente ir de 0 a 60 no decurso de apenas algumas semanas, e depois apostar essas mesmas habilidades e conhecimentos de construções básicas de programação em linguagens de alto nível, como PHP, JavaScript, e ainda outros ainda. No ano passado, o terceiro pset no curso foi o de criptografia, um aplicação específica do domínio pelo qual estudantes desafiados a implementar qualquer número de cifras, programas com os quais para codificar ou decodificar informações, para criptografá-lo. Para a edição hackers, em contraste, demos aos estudantes de hackers um arquivo a partir de um computador padrão Unix contendo nomes de usuário e senhas, o último dos quais foi codificado, e desafiou os hackers alunos para descriptografar, o melhor que podiam, essas senhas, ainda que em mesmo domínio. Scramble, um jogo com o qual alguns vocês são talvez familiar. A peça forense, onde pedimos aos alunos para recuperar dados que haviam sido caso contrário excluído do meu próprio digitais cartão compact flash da câmera, por realmente escrever software para descobrir, onde estavam os zeros e uns em que a câmera digital que anteriormente compôs um gráfico JPEG? Um desafio de sorte no ano passado envolvendo a escrever o mais rápido corretor ortográfico possível, competindo contra amigos e colegas se eles gostariam. Implementar n Huff Puff ', um programa de compressão. E, em seguida, terminando o semestre com CS50 Finanças, um aplicativo baseado na web com qual você cria um site eTrade-like para comprar e vender ações, de modo a falar, por realmente puxando quase cotações em tempo real Yahoo! Financiamento. O que não fizemos no ano passado foi um conjunto de problemas, que permanece deixa de ser um favorito. Se você nunca foi para shuttle.cs50.net, você verá um usuário interagir um pouco com isso. Mas há dois anos, a classe implementado, usando o Google Maps e do Google Earth plug-in e um pouco de habilidade com a condução em torno do campus, de modo que o objectivo deste jogo era, como você pode ver alguns dos rostos, é a unidade em torno campus procurando funcionários, companheiros de ensino e CAs, e quando você, colocando-os em seu ônibus. Nenhum deles realmente parecem estar aqui, então vamos entrar em um código da fraude. [Risos] DAVID MALAN: Lá vamos nós. Tudo bem. E aqui é o pessoal atado em todo campus. E, como você pode ver, no lado direito lado da tela, o autocarro tem assentos vazios. E o objetivo foi o de escrever o código com o qual simular esta condução e pegando e largando fora de passageiros. Esse, também, usando uma linguagem chamado de JavaScript. Então percebemos que programas como o que vai estar na nossa mesma trajetória deste ano, também. Em termos, agora, de um apoio adicional, temos o horário de expediente. Como você pode ter visto em sua própria casa sala de jantar ou no Annenberg, estaremos em casa de jantar salões de quatro noites por semana - Leverett, Pfoho, Eliot e Annenberg este ano, 20:00-23:00. E o que nós pensamos em fazer este ano é algo um pouco diferente. Se você ouviu rumores no ano passado que era um pouco estressante, este o horário de expediente do ano, como iremos descrever na próxima semana, será mais orgânica, em que, à chegada, você será despachado para uma mesa especial onde vários membros da equipe esperam, e vamos fazer as coisas muito mais organicamente. Não há mais fila, não mais do iPad, mas prefiro ter mais íntima conversas em torno de uma mesa de apenas oito ou para que os alunos, de modo que aproximado a sensação de que caso contrário Seria uma classe muito menor. Oferecemos, assim, essas coisas que chamado orientações, vídeos filmados em avançar por um dos ensinamentos do curso companheiros, Zamyla, no qual ela percorre problema da semana conjuntos, oferecendo dicas e truques para o desafios que se colocam. E, inversamente, depois de conjuntos de problemas são devido, este ano, vamos também lançar pequenos clipes chamar post-mortem que realmente levá-lo através soluções representativas, tanto o bem como ruim, através do qual pode-se inferir como você poderia ter ou deveria ter implementou sua própria solução. E o que nós vamos oferecer pela primeira vez este ano, bem como, em particular para os alunos que fizerem uso do curso da outra recursos, mas mesmo assim estão lutando tudo muito, o curso si vai emparelhar os alunos, como os recursos permitirem, com os tutores para que você tem muito mais íntimo oportunidade de casa refeitórios permitir one-on-one assistência. Agora, um vislumbre final em alguns dos jogos fim à vista. Você pode estar familiarizado com o CS50 Hackathon. Bem, chegando em dezembro, a partir de 08:00 PM às 07h00, no início Período de leitura, será uma oportunidade para se reunir com os colegas - esta seria em torno de 9:00 PM - durante o qual você mergulha em sua última implementação do projeto ao lado de colegas, amigos, e alimentos. Isso seria em torno de 01h00, quando o primeiro lote de comida chegou. E isso é que cerca de 4h00 determinado ano no CS50 Hackathon. Mas o verdadeiro clímax do curso é destina-se a Feira do CS50, um campus-wide exposição de seus próprios projetos finais, para que a família e os amigos são tudo convidado, como os nossos recrutadores e os nossos amigos da indústria. Este, por exemplo, é um vislumbre do 2.000 pessoas-além de que já participei últimos anos. Expressões como esta não são incomuns, e da mesma forma fazer o seu colegas deliciar-se com as coisas você realizou. E na verdade, nesse sentido, temos um evento de início de mandato, também. Se as coisas como este apelo a você, ou você está, no mínimo, curioso para saber o que isso, saber que uma nova tradição do curso é chamado CS50 enigma dia. E isso foi instituído um par de anos atrás para realmente sinalizar para campus que a informática não é sobre programação, e não é certamente cerca de abraçar somente os estudantes que têm experiência prévia. É realmente sobre a resolução de problemas mais geral. E assim Enigma Dia, ao longo dos últimos anos, evoluiu para um bom parceria com nossos amigos da Facebook, através do qual haverá fabuloso prêmios e pizza outro lado do rio em o i-lab no próximo sábado. Dirija-se a URL com dois ou três amigos, se você gostaria de participar nesta nova tradição. Então eu gostaria de pedir que você mantenha um coisa em mente, e nós temos apenas um dois minutos clipe em que para fechar hoje. 73% é o número de lembrar. Cake, também, esperam por você fora dessa transepto como adiar em apenas um alguns momentos, o que é uma tradição do curso, bem. Mas esta é a citação chave do syllabus do curso para manter em mente. O que importa, em última análise, este curso não é tanto onde você acaba em relação a seus colegas de classe, mas onde você, na Semana de 12, acabam em relação ao se na semana 0. Mas a visão de que vamos deixá-lo com aqui, hoje, é esta última aqui pelo nosso mesmo Daniel, que fez o vídeo wrdly apenas um momento atrás. Deixo-vos com este vislumbre do que está por vir. E como fazemos isso, se pudéssemos ter CS50 pessoal a partir da frente da sala para vir até à fase de pintar tudo a mais de uma imagem visual de o que o espera neste ano - ficando estranho. Vamos concluir com este aqui na tela. [Música tocando] DAVID MALAN: Este é CS50. [MUSIC - MATT & KIM, "Está tudo bem"] COLUNA 1: Eu amo CS50 mais do que gatos. COLUNA 2: Whoaaaa! [Risos] DAVID MALAN: Este é, então, CS50. Vamos vê-lo na sexta-feira. [Aplausos e aclamações] Narrador: Na próxima CS50, um palco demo não saem como planejado. DAVID MALAN: Queremos encontrar Mike Smith no livro de telefone. Bem, quais são seus instintos? Eu poderia saltar aproximadamente para o meio o livro de telefone, olhar para baixo, ver que Estou em M, e agora eu sei que Mike Smith não é para a esquerda. Ele deve ser para a direita. E assim, neste momento, nós pode, literalmente, rasgar - Neste ponto, podemos literalmente rasgar - Neste ponto, podemos figurativamente rasgar o livro de telefone pela metade. [Dedilhando UKELELE]