DAVID MALAN: Bem-vindo de volta, todo mundo. Então, ontem, você vai lembrar que nós nos concentramos sobre estes temas aqui. Por isso, tivemos quatro topics-- global privacidade, segurança e sociedade; tecnologias de internet; computação em nuvem; e, finalmente, o desenvolvimento web. Alguém tem a largura de banda ou tempo para assistir a um pouco de John Oliver última noite? É realmente muito divertido, se não um pouco assustador. Quaisquer perguntas sobre qualquer coisa que fizemos ontem? Eventuais esclarecimentos? Todas as perguntas que você quer fazer Certifique-se que tocamos hoje de alguma forma? slate tão limpo. Então, o que está na agenda para hoje? Então eu pensei que ia começar hoje com um olhar para o que é geralmente conhecido como thinking-- computacional em o risco de simplificar demais, pensando como um computador, talvez pensar como um engenheiro, e tentando começar a organizar seus pensamentos ou para lhe dar uma melhor sensação de que está envolvido na verdade comandando um computador para fazer algo por meio de programação. E nós vamos mantê-lo em uma bonita de alto nível, muito bem Inglês, mas tentar usar de familiares exemplos de formalizar como você iria sobre a resolução de problemas. E vamos revisitar alguns CS tópicos, como abstração, que subiu um par de vezes ontem, algoritmos e, em seguida representação. E é aí que vamos começar hoje em apenas um momento. Então vamos dar uma olhada em programação. Vamos dar uma olhada em alguns construções fundamentais com o qual você pode estar familiarizado e pode até encontrar bastante intuitivo. Veremos, de fato, numa amostra de programação ambiente que é muito acessível, muito brincalhão, e de fato alvo para as idades de 12 e acima. Vamos passar alguns minutos há e, em seguida, levar as coisas a um nível mais baixo e realmente falar sobre algumas das os algoritmos e estruturas de dados, por assim dizer, que programadores costumam usar para resolver problemas muito mais eficientemente do que você pode ser capaz de fazer sem eles completamente. Em seguida, após o almoço, vamos dar uma olhada em pilhas de tecnologia, que é apenas uma maneira elegante de dizer coleções de tecnologias que você pode usar para resolver algum problema. E vamos falar sobre o alfabeto Sopa de línguas que existem today-- Java e Python e C ++ e PHP e Ruby e todos os tipos de outras coisas. Vamos dar uma breve olhada em padrões de projeto. Programadores, ao longo do tempo, têm metodologias adotadas que tendem a ajudá-los resolver os problemas mais facilmente. Quando você começar a ver-se escrever o mesmo tipo de código de novo e de novo, pessoas formalizar essas repetições e nomes atribuem a eles e, em seguida, usá-los e promovê-los, em última instância. E nós vamos falar um pouco sobre estratégias móveis, como o que significa, na verdade, fazer uma aplicação móvel ou um site móvel. Você fazê-lo para o Android? Você fazê-lo para iOS? Você fazer isso por tanto daqueles? E quais são as vantagens e desvantagens? E então, finalmente, vamos dar uma programação web olhar, que é um termo colectivo realmente descrevendo qualquer momento você escrever software que é destina-se a executar na web, se em telefones ou desktops ou laptops. Vamos dar uma breve olhada em bases de dados e o design nele, mesmo porque quase qualquer aplicativo baseado na web interessante nos dias de hoje tem algum tipo de banco de dados. Caso contrário, seria ser apenas conteúdo estático. E um banco de dados permite que você faça mudanças ao longo do tempo, se a si mesmo ou de usuários. E nós vamos considerar como você iria sobre a criação de esse banco de dados e do tipo de jargão que possa surgir em um engenheiro de discussão em um quadro branco quando realmente implementar um aplicativo pela primeira vez. Vamos falar brevemente sobre APIs, serviços úteis que você pode usar para ficar na ombros dos outros, se as empresas ou indivíduos, e resolver o seu próprios problemas mais rapidamente. E então nós vamos mexer talvez um pouco com JavaScript, uma linguagem de programação que é usado tanto em navegadores nos dias de hoje, mas também em servidores. E, talvez, nós vamos revisitar, se o tempo permitir, alguns dos hands-on que stuff web fez ontem e integrar os dois juntos, antes de encerrar. Assim, com isso-- que é ahead-- é Há alguma coisa faltando que você gostaria de ter certeza de que insira e tocar em em algum ponto. Se é vem à mente, trazê-lo antes do tempo. Mas por que não começar com um olhar pensamento computacional. E deixe-me propor que pensamento computacional é, novamente, uma espécie de descrição de alto nível de o que um cientista da computação pode fazer. E, de fato, vamos começar com três ingredientes que pode entrar em pensamento computacional. Esta é apenas uma maneira de descrevê-lo. Nós certamente poderia definir isto em qualquer número de maneiras. Mas deixe-me propor, por uma questão de hoje, que os problemas do mundo, todos os problemas do mundo, quando foi abordado por um cientista da computação poderia ser visto como o que vamos entradas de chamadas, os quais precisa se alimentado em que chamaremos algoritmos, que, em seguida, produzem saídas. Em outras palavras, a totalidade mundo da reivindicação I de solução de problemas pode ser destilada em estes três ingredientes. Então, o que quero dizer com entradas? Entradas é exatamente o que você está entregue, a fim de resolver. Por exemplo, aqui está um problema antigo da escola. Se eu tiver um livro de telefone aqui e Eu quero olhar algo dentro dele, esta é a minha entrada. Eu tenho 1.000 ou assim páginas de um livro de telefone. Esta é a entrada para o meu problema. E eu quero encontrar algo como Mike Smith, então um amigo cujo nome e número é espero que este livro de endereços. Este é antes dos dias de célula telefones, para que eu possa não só procurá-lo. Então eu tenho que fazê-lo de idade escola e, na verdade, a pesquisa estas entradas para alguma resposta. E essa resposta é só ir a ser chamado de saída. Assim, a entrada é a lista telefónica. O algoritmo é tudo o conjunto de passos que eu uso para encontrar Mike Smith. E a saída é, esperançosamente, número de telefone de Mike Smith. E este, em seguida, seria apenas representante de mais qualquer problema para com você são entradas handed e querem produzir resultados. Então, antes de considerar o processo pelo qual podemos resolver esse problema, encontrar Mike Smith e algo parecido, vamos considerar a primeira e as entradas e saídas last--. Fisicamente, é claro, a entrada aqui é um monte de papel coladas em conjunto sob a forma de uma lista telefónica. Mas os computadores, laptops course-- e desktops e até mesmo telefones estes são aqueles dias-- dispositivos eletrônicos. E no final do dia, o que está a única entrada para um computador? Bem, é algo como este cabo de alimentação aqui. Eu ligá-lo na parede, e Eu recebo um fluxo de elétrons, o que me permite executar a máquina. Ou talvez esses elétrons são criado por meio da minha bateria. Contudo, no final do dia, que é a única coisa que vai no meu laptop. E muito interessante material é, em última análise saindo, se por meio da impressora ou a tela ou audially ou semelhantes. Então, se tudo o que temos como nossa entrada fundamental para um computador é a eletricidade, então apenas elétrons entrando e ou para fora, e assim como podemos usar essa entrada para realmente representar a informação? Em outras palavras, como é que vamos chegar a partir de um simples fluxo de electricidade de representar real números ou letras reais ou imagens reais na tela ou filmes reais ou e-mails ou qualquer número dessas conceitos de nível superior, se quiserem, que, no final do dia, de alguma forma, têm de ser armazenados nesta dispositivo mecânico electrónico usando apenas aqueles simples ingredients-- elétrons que entram e saem? Assim, parece que, Na forma mais simples, o único tipo de estados Eu tenho no meu mundo, então para speak-- condições Na minha mundo-- seja Eu tenho elétrons fluindo, electricidade fluir, ou eu faço não-- assim por diante, off. E vamos formalizar dentro e fora, como um cientista da computação pode, com apenas 1 e 0. Vamos apenas descrever algumas arbitrária mas número consistente a ele. 1 significa em, 0 significa desligado. Ou você pode também ver isso como verdadeiro meio de falsos e meios. Você também pode fazer preto e branco ou vermelho e azul. Você só precisa de dois descritores. E um computador cientistas geralmente apenas usar 0 e 1. Portanto, se esse for o caso, o meu único alfabeto é constituído por 0 e 1 é, como eu poderia chegar até mesmo o número 2 em um computador, muito menos o número 3 ou uma letra do alfabeto ou uma imagem ou um filme? Como podemos tipo de inicializar -nos a este princípio básico de 0 e 1 e, na verdade, representar algo mais interessante? Bem, vamos colocar essa pergunta em espera por um momento e considerar algo espero familiarizado, mesmo se você realmente não tenho pensado sobre -lo em qualquer detalhe para 10, 20, 30, 40, 50 mais anos. Isso é o que? Como você pronuncia isso? Não é uma pergunta capciosa. Um número, mas o que é? 1, 2, 3, ou 123. E eu gostei de como você disse 1, 2, 3, porque essa é uma maneira de vê-lo. 1, 2, 3, que é uma sequência de três símbolos. É imagens que nós Agora temos palavras para. E se você tipo de lê-los todos em conjunto, um ser humano típico, em Inglês diria 123. E isso é uma espécie de conceito de nível superior, se sente como um número razoavelmente grande. Mas como é que vamos chegar lá? Bem, pode ser um tempo desde você já pensou nisso como este, mas volta no meu dia, eu tipo de aprendi isso como a coluna do 1, os 10 de coluna, e a coluna 100 de. Assim como diz Lakisa, é 1, 2, 3, mas também é 123. Mas como é que vamos começar a partir de a primeira para a segunda? Bem, você normalmente fazer em coluna a 100 do, eu tenho um 1. Então, isso é como dizer 100 vezes 1. E, em seguida, na coluna 10 do, eu tenho 2. Então, isso é como dizer 10 vezes 2. Na coluna 1 do, eu tenho 3. Então, isso é como dizer 1 vezes 3. E se eu adicionar essas coisas em conjunto, isto, é claro, é 100 mais o 10 mais 3. E oh, é por isso que eu recebo este maior noção de nível de 123. É apenas matemática básica, em que estes símbolos têm pesos a eles, se vai, espaço reservado ou valores da coluna. E uma vez que se multiplicam tudo para fora, eu recebo este número. Então, como muitos de vocês sabem como falar binary-- 0 e 1's-- como um computador? OK, perfeito, ninguém, ou nenhum de você acha que fazer. Mas eu gostaria de afirmar que você na verdade já sabem disso. Nós só precisamos tipo de ajustar o nosso modelo mental um pouco. Mas o processo é exactamente o mesmo. Deixe-me deixar um presente lá em cima e em vez puxar isto para baixo por um momento. No mundo dos computadores, temos apenas 0 e 1.. E assim a coisa que é vai mudar é o quê? Bem, no meu mundo humano, a sistema decimal, dezembro significado 10, Eu tenho quantos dígitos à minha disposição? 10, certo? 0 a 9, é claro. E é por isso que temos a lugar 10 do local e os 100 da. Onde é que vem? Bem, isto é 10 elevado à potência de 0. Este é 10 elevado à potência de 1, 10 para a potência de 2, e assim por diante. Você simplesmente continua multiplicando suas colunas em 10, começando com apenas 1 em o mais à direita aqui. Assim, no mundo de computadores, se você só tem significado bi binary-- 2-- ou 0 e 1., nós apenas realmente precisa mudar a base do que a matemática. Portanto, em outras palavras, agora vamos tem a coluna 1 e as-- onde está esse going-- coluna do 2, coluna do 4, e talvez mais além. Por que é que? Bem, este é 2 o poder 0-th. Este é 2 a 1. Esta é 2 a 2, e assim por diante. Assim, enquanto que aqui, nós temos 1, 10 do, 100, de 1000, de 10.000, 100.000 da de, 1 milhões, e assim por diante, aqui que tem 1, 2, 4, 8, 16, 32, 64. Você simplesmente continua multiplicando por 2, em vez de manter multiplicando por 10. Então, agora, se o objetivo de mão é representar números usando apenas 0 e 1s, vamos considerar como chegar lá. Isto, naturalmente, é o padrão de 0 0 0, mas o número conceitualmente que isso representa? Bem, 4 vezes 0, mais 2 vezes 0, mais 1 vezes 0, vamos adicionar os juntos. 4 0 vezes, é claro, 0, mais dois vezes 0 é, naturalmente, 0 mais 1 vezes 0 é, é claro, 0. Assim ah, isso representa o número que nós seres humanos sabem como 0. Bem, agora, vamos muito Avançar rapidamente rápido. Se eu não estou representando vez 0 0 0, mas vamos fazê-1 0 1, que poderia ser como Lakisa, mais cedo, seria apenas pronunciá-lo 1 0 1. Mas agora, como é que vamos levá-la ao maior nivelar o número de nós, seres humanos poderia saber? Então, qual é esse número? É 5, o número que conhecemos como 5. Bem, por que isso? muito bem, nós podemos tipo de atravessá-la metodicamente 4 vezes 1, 2 vezes 0, 1 vezes 1. Adicionar os juntos, então isto é 4 + 0 + 1. E isso é, na verdade, 5. Então, está ficando um pouco entediante agora fazendo a aritmética novamente e novamente. Mas o processo é exactamente o mesmo. A única coisa que tem mudado no nosso mundo é que as nossas colunas são 1, 2, 4, 8, 16, e assim por diante, em vez de 1, 10, 100, 1000. E isso é só porque o nosso alfabeto tem encolhido de 0 a 9 para apenas 0-1. Assim como um pequeno teste aqui, como seria Você representa o número 7 em binário? 0? Bem, 0, você quer dizer 0 0 0? Dizê-lo novamente, Karina. Perfeito. Por que é que? É efetivamente 4 mais 2 mais 1. Tão bom. Como representamos um pouco another-- como sobre o número 2? Close, mas para trás. Então, o que é isso? É 4 mais 1, de modo que é 5 novamente. Então what's-- Sinto muito, Karina? 0 1 0. 0 1 0 seria 2, porque mais uma vez, mesmo se ele espécie de não saltar para fora em você, apenas fazer a matemática. 4 vezes 0, 0, 2 vezes 1 é 2, 1 vezes 0? 0. Portanto, este é o número que conhecemos como 2. Como sobre o número 8? Hm? Boa. Então nós meio que precisa de outro espaço reservado. Precisamos 1 0 0 0. E isso é verdade de nossa espécie do sistema decimal da velha escola. Como você representar o número 1000? Bem, você pareceria ser tipo de em uma situação difícil, Se pedir-lhe para representar o número 1000, porque, mesmo se você se dá como 9 Destes, 9 destes, 0 Destes, que é o maior número que tem, você não chegou a chegar a 1.000. Então, se você 1.000, você só precisa de outro posição, de modo que você pode fazer 1 0 0 0, ergo o número 1.000. Então, agora, vamos mapear esse tipo de discussão conceitual de volta ao hardware, onde mais uma vez, a entrada era apenas este pequeno cabo de alimentação, eletricidade entrando e saindo. E assim, por que ser mapeados a partir daqui para lá, bem, o que nós realmente precisamos? Bem, você pode pensar de estar dentro de um computador, um monte de lâmpadas, Se você for. Eles estão realmente chamados transistores. E transistores são apenas muda que tanto pode ser ligado ou desligado. Assim, você pode pensar em um transistor que está em está permitindo que a eletricidade flua e um transistor que está fora como parar electricidade a partir de fluir. E em vez de tomar sobre as luzes aqui, por que não posso fazer esse tipo de novo estilo escola. Portanto, este pode ser um 1, uma lanterna estar em, apenas um pouco embora. E isso pode ser um 0, e agora ele está fora. Então, usando este dispositivo físico, eu podem agora representar o sistema binário. Eu só preciso de dois estados. Não importa o que colorir que é ou o que é. Tudo o que importa é que eu tenho um estado on e outro estado desligado. Então, usando o meu telefone aqui, como faço representam o número que conhecemos como 0? Ou, dito de forma equivalente, o que número que eu estou representando agora? 0, porque o dispositivo está desligado. E se eu fizer isso? E agora, como faço representam o número 2? Pode me emprestar o seu telefone aqui, como fizemos ontem? Então vamos ver, então se eu quiser representar o número 2, este é o número 2? Não. O número sou eu acidentalmente representando aqui? Este é realmente o número 3. Então, qual é que eu quero para desligar? O telefone preto ou- bem, se they're-- telefone preto ou o telefone branco? O telefone branco. Então, se eu desligar isso e nós alinhá-lo aqui, temos um 1 no lugar de 2 e um 0 no lugar a 1 de. E por isso estou agora representando o número 2. E isso, é claro, seria o número 3, porque agora ambas estas luzes estão no. E eu vou parar por aqui, mas é lógico se eu quiser representar o o número 4 ou 8 ou superior, Vou precisar de mais telefones. Mas isso é tudo o que está acontecendo. Então, se você já ouviu falar que dentro de um-- agradecer computador você-- é milhões de transistores, que é apenas a milhões de pequenos comutadores pouco. E eles não são luz lâmpadas que se ligam e desligam, mas eles não quer permitir que a eletricidade a fluir em algum lugar ou pará-lo. E então há o dois Unidos-- ligado ou desligado, ligado ou desligado. Por isso, parece agora ter essa capacidade para representar este conceito que nós gostaríamos de hardware real. Mas todos nós temos agora é a capacidade para representar números que parece. Então, como é que vamos representar letras do alfabeto, os quais Parece que o próximo tipo de recurso que você gostaria de adicionar a um computador moderno uma vez que você tem números? E, de fato, se você pensar sobre TI, historicamente, computadores foram introduzidas realmente para servir como calculadoras numericamente. Mas, claro, estes dias, eles fazem muito mais. Mesmo quando iniciar, você costuma ver uma ou mais palavras. Assim como você representar palavras, Se tudo que você tem é, novamente, electricidade no final do dia, ou equivalentemente 0 e 1.? Sim. Sim, quero dizer, nós meio que fez isso ontem de alguma forma, em que, em algum ponto, Eu acho que eu arbitrariamente disse que, se queremos representar o letra A, nós poderíamos apenas chamar aquilo de 1. Foi no contexto de criptografia, onde nós só precisava de algum tipo de código, algum tipo de mapeamento. Assim, talvez A será representada como um 1, e B será representada como um 2, e Z será representado como 26, por exemplo. E então a única ressalva é que, se eu sou indo para codificar letras em meus e-mails ou em minhas mensagens de texto como números, todos vocês tem que concorda em usar o mesmo conjunto de convenções. E, de fato, o mundo fez exatamente isso. Há um sistema no mundo chamado ASCII, American Standard Código para Intercâmbio de Informações, que é simplesmente uma decisão alguns anos atrás, que os seres humanos fez que decidiu que um vai ser igual, não 1, 2, e 26, e por isso é um forth-- pouco diferente-- mas 65, 66, 67. E eu vou puxar uma gráfico em apenas um momento. Mas é arbitrária. Mas isso não importa que é arbitrária. O mundo tem apenas ser consistente. Agora, mais recentemente, há algo mais extravagante chamado Unicode, porque o tipo do mundo que percebi, depois de inventar computadores, que há mais do que bem 256 símbolos no mundo que pode querer representar, especialmente quando você introduzir idiomas asiáticos e outras simbologias que precisam de mais expressividade do que você pode caber na versão mais antiga do este código, que foi chamado ASCII. Então Unicode realmente permite você use mais 0 e 2. Em particular, você fica ouvindo o bytes palavra na sociedade e até mesmo apenas ontem. E um byte é o que de novo? O que é um byte? É apenas 8 bits. E o que isso realmente significa? Bem, isso significa que, no início, quando estávamos falando de binário e eu estava usando arbitrariamente três bits quando estávamos falando binary-- lugar a 1 de, o 2 do lugar, ea 4 de lugar-- bem, um byte apenas significa que você está falando não em unidades de três mas quatro, cinco, seis, sete e oito, o que nos dá lugar 8 de, 16 de 32, de 64, de, e 128 do. Em outras palavras, um bit não é tudo tão útil uma unidade de medida, porque é apenas como um minúsculo pedaço de informação, ligado ou desligado. Então, há alguns anos, o mundo apenas decidiu É um pouco mais conveniente falar em termos de bytes, oito coisas ao mesmo tempo. E assim assim nasceu a noção de um byte. E assim temos oito bits aqui. E verifica-se, também, para semelhante razões, o mundo decidiu anos atrás que para representar uma carta ASCII, você está indo para usar unidades de 8 bits. Assim, mesmo se você não faz precisa que muitos, você está sempre vai usar 8 bits para representam uma letra do alfabeto. E isso é conveniente, porque então se você receber uma mensagem que tem um 0 0 0 1 1 1 1 0 seguido por outra 1 1 1 0 1 0 0 1, por isso, se você receber 16 bocados, o mundo pode apenas supor que o primeiro 8 é uma carta eo segundo 8 são outra carta. Não importa quantos existem. Só importa que estamos todos de acordo quando estamos interpretando estes bits. E este foi apenas aleatória. Isso significa alguma coisa, mas eu não fiz realmente pensar sobre o que significa. Portanto, é uma pequena mentira branca. Originalmente, ASCII realmente utilizado somente 7 bits. E o oitavo bit é chamado ASCII estendido. Mas o ponto é, em última análise, o mesmo. O mundo em geral padronizado em 8 bits. Portanto, este parece ser um pouco limitante, porque eu só posso representam o capital A, capital de B a Z. capitais Mas, na verdade não, se eu for a-- há um monte de recursos on-line, por exemplo, asciitable.com, este vai ser um pouco esmagadora em primeiro lugar. Mas vou salientar o que é importante aqui. Isso só acontece de ser-- e eu vou walk-- vamos ver, se eu passar por cima aqui. Aqui está, no decimal coluna, o número 65. E na carta coluna da direita caráter, Chr, é a letra A. E você pode ignorar, por agora, tudo no meio. Este é hexadecimal, octal, e um código HTML. Para este site está apenas tentando jogar um monte de informações para você de uma vez. Mas tudo o que nos interessa é o decimal coluna ea coluna de caracteres. Então, por esta lógica, o que é o número que o mundo decidiu representa uma minúscula um? Sim, 97. E apenas para confundir potencialmente um pouco, o número tem o mundo decidiu representaria o número 1? Certo, porque nós-- 49, parece aqui, para baixo no canto inferior esquerdo. Agora, o que quero dizer com isso? Assim, verifica-se que em sistemas de computador, existe geralmente um diferença fundamental entre um número e um personagem. Um número é a coisa que aprendeu crescendo quando nós super jovem na escola. É coisas que contam com. Mas um personagem é apenas uma forma, um glifo, por assim dizer, na tela. Agora, nós, humanos, espécie de ver algo que se parece com isso. E nós dizemos, oh, que é o número 2. Mas não, isso é apenas um símbolo que parece como o que nós sabemos como o número 2. E assim há essa distinção fundamental entre os números reais e personagens. Este é um número. Mas, geralmente, na contexto de um computador, Se você em vez ver algo como isto quoted-- e você nem sempre tem que ver citado, mas por uma questão de discussion-- se você vê aspas em torno do número, este é agora um personagem. Então esse número 2 por baixo a capa interior de um computador seria representada com um padrão de bits que representa o número 50 de acordo com o gráfico online. No entanto, se um computador apenas vê isso, essa seria representada com o padrão de bit 0 0 0 0 0 0 1 0. Considerando que, este personagem seria na verdade, ser representado as-- e agora, Eu tenho que pensar um pouco harder-- de modo que este personagem iria ser representado com 0 0 1-- o que eu preciso aqui? 0 0 1 1 0 0 1 0. Como eu fiz isso? Bem, este é o número 50, se você multiplicá-lo usando essas colunas, este é o número 2, e assim é por isso que existe essa dicotomia. E este é apenas um provocação agora para recursos que existem em linguagens de programação que nós vamos tocar em breve mais tarde hoje. Em linguagens de programação, você tem, geralmente, mas nem sempre, as coisas chamar diferentes tipos de dados. Em outras palavras, um programmer-- quando ele ou ela está escrevendo, um programador começa a decidir no que formato para armazenar seus dados. Você pode armazenar dados como números brutos, como o número 2. Ou pode armazená-los como cordas, ou sequências de caracteres que, em geral, expressa com citações em sua linguagem de programação. Você pode ter as coisas called-- Vou simplificar e chamá-los Números de real, de modo que os números não são números inteiros, como o número 2, mas os números como 4,56. Então números reais também pode têm pontos decimais, de modo que é uma pessoa diferente fundamentais pedaço de dados num computador. E então você pode até ter outros tipos de dados ainda. Então, isso é apenas um teaser realmente de a mais simples das decisões de design que um programador pode fazem debaixo do capô. Então dúvidas apenas ainda? Então, vamos tentar fazer isso um pouco mais real. Este equipamento não é muito mais em uso. Mas a maioria de todos nesta sala provavelmente cresci com e ainda usa discos rígidos de algum modo. Mesmo que a maioria dos nossos laptops não têm dispositivos que operam como este, em vez laptops hoje em geral têm drives de estado sólido sem partes móveis. E que tende a ser mais caros, infelizmente, mas um pouco mais rápido e um-- bem, muitas vezes, muito mais rápido, que é uma das razões. E também não faz gera tanto calor. Ele pode ser menor, pelo que é geralmente um líquido positivo. Mas isso nos permite mapear uma pouco mais concretamente o que nós estamos falando sobre a 0 e nível 1 da empresa a um dispositivo físico. É uma coisa para mim falar cerca de 0 e 1 em termos de do meu telefone ou abstratamente em termos de interruptores sendo ligado e desligado. Mas o que acontece com os discos rígidos? Em seus laptops, se você tem um mais velho um, ou no seu computador desktop, ou certamente em servidores hoje, onde você tem discos rígidos que têm um terabyte de espaço, 4 terabytes de espaço, bem o que isso significa? Um disco rígido com 1 terabyte de meios espaciais há 1 trilhão de bytes dentro dele de alguma forma, ou equivalentemente 8 trilhões de bits dentro. 1 terabyte seria 8 terabits ou 1 trilhão de bits, o que significa que se você tem um disco rígido, você tem de alguma forma ou outros de um trilhão de 0 do e 1 de dentro dele. E se nós basta dar uma olhada em um imagem arbitrária de um disco rígido representante, é isso que um disco unidade pode tipicamente olhar como no interior. É, também, é tipo como um leitor de fonógrafo velho mas geralmente com vários registros dentro, portanto, para speak-- múltipla travessas, como são chamados, discos circulares de metal, e em seguida, uma cabeça de leitura pouco, muito parecido com um jogador gravado idoso. E que a cabeça de leitura se move para trás e frente e de alguma forma lê os bits. E o que é sobre estas travessas, mesmo embora nós, humanos, não pode vê-los, quer na realidade ou, neste quadro, há minúsculas partículas magnéticas pequenas. E mesmo se você tiver tempo esquecido como a eletricidade funciona, uma partícula magnética que é cobrado em geral tem uma extremidade norte e um sul end-- tão norte e sul. E assim o mundo apenas decidiu há algum tempo atrás que, se um protocolo essencialmente magnética está alinhado como este, norte-sul, vamos chamar que uma 1. Se é em vez sul-norte, vamos chamar isso de um 0. E por isso, se você tem pelo sua disposição de um trilhão minúsculo magnética particles-- e, esperamos, a ingenuidade hardware em Para inverter aqueles ao seu redor como você vê fit-- se você quiser representam um grupo inteiro de 0 do, você só precisa de 8 partículas magnéticas todos alinhados assim. E se você quiser para representar oito 1s, você só precisa de 8 partículas magnéticas alinhadas volta para trás para fazer assim. O que quero dizer com a partículas magnéticas? Francamente, todos estes anos mais tarde, o coisa que ainda me vem à mente é esse cara, se você Cresci com essa coisa. Este é um little-- para aqueles unfamiliar-- um brinquedinho infância que tem este homem calvo aqui que tem todos esses pequenino preto partículas magnéticas que vêm com ele. E usar essa vara vermelho, que é apenas um ímã, você pode classificar de dar-lhe um bigode ou sobrancelhas ou o cabelo ou qualquer coisa sobre ele. Assim, na verdade, se aumentar em, por exemplo, esta é o tipo de jogo que você pode jogar com Wooly Willy. E isso é só para dizer que estes são partículas magnéticas muito maiores que são realmente em um disco rígido, e muito menos partículas magnéticas. Mas vamos realmente ver em seguida, se você tem minúsculas partículas magnéticas numa disco rígido, como você pode realmente use-os para representar dados. [REPRODUÇÃO DE VÍDEO] -A Unidade de disco rígido é onde o seu PC lojas maioria de seus dados permanentes. Para fazer isso, os dados viaja ao longo da RAM com sinais de software que contam a disco rígido como armazenar esses dados. Os circuitos do disco rígido traduzir os sinais em flutuações de voltagem. Estes, por sua vez, controla a unidade de disco de movendo parts-- alguns dos poucos em movimento partes deixado no computador moderno. Alguns dos sinais de controlo de um motor, que gira pratos revestidos por metal. Seus dados são, na verdade, armazenado nestas travessas. Outros sinais de mover as cabeças de leitura / gravação para ler ou gravar dados sobre os pratos. Esta máquina é tão preciso que um cabelo humano não poderia mesmo passar entre as cabeças e girando travessas. No entanto, tudo funciona em velocidades incríveis. [FIM DE REPRODUÇÃO] E você pode ver na extremidade da cauda do vídeo, geralmente há múltiplas travessas. E assim que a cabeça de leitura não é apenas a leitura do topo. É tipo como de três ou ou mais quatro cabeças de leitura esse movimento como este, a leitura de dados simultaneamente. Portanto, há um monte de complexidade e tipo de sincronismo que está envolvido em um disco rígido. E a coisa está girando muito danado rápido, então não há muita complexidade. Mas vamos ampliar um pouco mais profundo e veja onde estão essas partículas magnéticas e como é que está ficando para eles. [REPRODUÇÃO DE VÍDEO] olhar -Vamos para o que só vi em câmera lenta. Quando um breve pulso de electricidade é enviado para a cabeça de leitura / escrita, ele vira em uma pequena eletromagnética para uma fracção de um segundo. O ímã cria um campo, que muda a polaridade de um pequeno, pequenas porção das partículas de metal que revestir a superfície de cada prato. Uma série padrão de estes minúsculos carregadas de áreas no disco representa um único bit de dados no sistema numérico binário usado pelos computadores. Agora, se a corrente é enviada uma caminho através da cabeça de leitura / gravação, a área seja polarizada numa direcção. Se a corrente é enviado em no sentido oposto, a polarização é invertida. Como você obter dados fora do disco rígido? Basta inverter o processo. Por isso é que as partículas no disco que começa a corrente na cabeça de leitura / gravação em movimento. Juntos milhões de esses segmentos magnetizadas, e você tem um arquivo. Agora, as peças de um único arquivo pode ser espalhados por todo travessas de uma unidade, como o tipo de bagunça de papéis em sua mesa. Assim, um arquivo extra especial mantém o controle de onde está tudo. Você não gostaria de ter algo parecido? [FIM DE REPRODUÇÃO] Assim sendo aludido lá, talvez, é esse tópico de ontem de eliminação. Quando você exclui uma arquivo, ontem dissemos que um computador realmente faz o que, quando você arrastar algo para a Lixeira ou lata de lixo? Ela só esquece. Mas a 0 e 1s, as partículas magnéticas que se parecem com vermelho e azul coisas aqui, ou meu braço aqui, ainda estão lá no disco rígido. E assim existe software-- Norton Utilities e Yesteryear e outra mais moderna software-- que só fará a varredura de um disco rígido inteiro à procura para todos aqueles 0 e 1., porque Acontece que a maioria formatos-- arquivo documentos do Word, arquivos do Excel, imagens, vídeo files-- todos têm certa padrões que são comuns entre eles. Cada arquivo de vídeo pode ser de um vídeo diferente, mas o primeiro de vários os bits são geralmente o mesmo. Ou os últimos pedaços são geralmente o mesmo. E assim, com alta probabilidade, você pode olhar para esses padrões. E mesmo que o arquivo tenha sido esquecido, você pode dizer com grande probabilidade, mas isto parece um documento do Word, permite recuperá-lo e un-esquecê-lo, Se você for. E é assim que você pode recuperar dados que está ou foi acidentalmente suprimida ou eliminada ou deliberadamente suprimido, a qualquer título. Por outro lado, exclusão segura faz o que no contexto de um quadro como este? Exatamente, torna tudo aleatório. Por isso, tipo de move alguns dos -los para baixo, até algumas delas, deixa alguns deles inalterada e geralmente faz ruído aleatório fora dele, ou talvez apenas torna tudo deles 0 de ou todos eles 1s. E que também pode geralmente esfregue seus dados de distância. Então, vamos voltar agora para a questão de pensamento computacional, em que que tem as entradas de fórmula. E algoritmos dá você emite em última instância. Vamos nos concentrar agora nas entradas e saídas, porque agora, eu reivindicação temos uma forma de representando entradas e saídas. Nós apenas estamos indo para usar binário. E não importa o que nós querer representar hoje, se é um número ou uma letra ou milhares destes em um livro de telefone ou imagens ou filmes, no final do dia, é tudo 0 e 1s. E eu afirmo que, mesmo que este é um mundo super simples com apenas 0 do e 1 de, podemos construir-nos para cima. E nós vimos um exemplo de que, com letras até agora. Então, vamos nos concentrar agora na presente ingrediente meio, um algoritmo. E vamos voltar a este exemplo de Mike Smith. Portanto, neste livro de telefone, o que é certo, nós não usamos muito mais, há um problema a ser resolvido. Queremos encontrar alguém como Mike Smith. E o que eu poderia fazer para encontrar Mike? Bem, eu poderia simplesmente abrir este livro, começar na primeira página, e perceber, oh, eu estou na secção A. Mike não está lá. Eu preciso da secção S para Smith. Então, basta continuar girando uma página de cada vez. Deixe-me fingir que isto é tudo páginas brancas e páginas amarelas, não porque não estamos indo para encontrar Mike nas páginas amarelas de qualquer maneira. Mas estou nas páginas brancas. E agora, estou na secção B. Eu ainda não o encontrou. Então eu continuo virando uma página de cada vez. Este é um algoritmo. É um conjunto de instruções para resolver algum problema. Em outras palavras, olhar página, se Mike não é sobre ele, virar a página, e repete de novo e de novo e de novo, idealmente olhando para baixo enquanto você está fazendo isso. Então é esse algoritmo, Neste processo, correto? Desculpa. Não, eu ouvi alguns nos. OK, mas é-- sim, certamente é tedioso. Como, nós estaremos aqui durante todo o dia se eu manter a procura de Mike a esta velocidade. Mas deixe-me dizem que é correto. É estúpido, mas é correto. No fim do dia, desde que ele pode tomar, eu vou encontrar Mike se ele está lá e eu estou prestando atenção. E eu finalmente chegar a sua página. E se eu ficar muito longe, se I chegar à seção T, então eu posso ligeiramente otimizar e apenas dizer, hm, tudo feito. Eu nem sequer precisa perder tempo de ir para o Z de. Mas este é um muito abordagem linear, se você vai, muito espécie de esquerda para a direita abordagem, uma linha reta. E sua correta, mas lento. Então, eu me lembro da escola de classe, tipo de uma otimização de um aluno da primeira série, onde eu aprendi como contar não por outras mas por twos-- assim 2, 4, 6. É A, muito mais difícil de fazer, mas, em teoria, é faster-- 8, 10, 12, 14, e assim por diante. Como sobre esse algoritmo? É mais eficiente? É mais rápido? AUDIÊNCIA: É eficiente. DAVID MALAN: Sim, por isso é que é def-- literalmente duas vezes mais rápido, assumindo I não tropeçar com os dedos. É duas vezes mais rápido, porque Eu estou virando através de dois páginas ao mesmo tempo em vez de um, mas é potencialmente correta, por que? AUDIÊNCIA: Você está ignorando alguns. DAVID MALAN: Certo, e se Mike acontece a ser sandwiched-- talvez quando eu sou mais tarde no livro de telefone, Mike passa a ser ensanduichada entre estas duas páginas, e eu apenas cega ignorá-lo. Então, precisamos de um pouco de correção lá. Uma vez eu bati na seção T, I não pode simplesmente dizer com confiança, não encontramos Mike Smith. Eu provavelmente terá que dobrar para trás. Ou de facto, uma vez que eu falar com alguém chamado S-N, em vez de S-M para Smith, Imediatamente, eu poderia dobrar volta, porque talvez ele estava na página anterior. Mas não tem que dobrar para trás distante. Em teoria, se eu fizer isso à direita tempo, eu só voltar uma página. Por isso, está adicionando apenas uma etapa extra. Então eu fui duas vezes mais rápido, mas custou-me uma página extra. Mas isso parece uma vitória líquida. Mas isto não é como a maioria das pessoas em Este quarto resolveria este problema. O que seria uma pessoa normal, talvez um Há alguns anos fazer, para encontrar Mike Smith? Sim, não encontrou Mike. O que eu faço? Portanto, obter um pouco mais perto, mas eu faço sabe-- que é verdade sobre um livro de telefone? AUDIÊNCIA: É sequencial. DAVID MALAN: É sequencial. É alfabética. E por isso, se eu estou na secção M, Mike é claramente para a direita, I pode literalmente rasgar o problema em half-- é geralmente mais fácil do que lágrima isso-- o problema pela metade e jogá-lo fora, de modo que agora, eu tenho um problema que é não 1.000 pages-- que era difícil, porque eu acho que realmente rasgou o livro de telefone isso não tempo-- 1.000 páginas, mas 500. Portanto, o problema é, literalmente, metade do tamanho. E isso é muito atraente, porque com meus algoritmos anteriores, versão 1 e 2, eu estava apenas fazendo o problema uma página menores, duas páginas menores de uma vez. Enquanto que agora, eu fiz isso 500 páginas menor de uma só vez. OK, então agora, Karim propõe que eu vá para a metade direita. Então, eu estou indo para ir mais ou menos para o meio, mais ou menos. E se eu fiz isso matematicamente, Eu poderia ir para a direita para o meio. E agora, eu percebo, oh, Estou na seção T. Na verdade, eu fui longe demais. Mas eu posso, mais uma vez, rasgar o problema pela metade, jogá-lo fora. E meus bytes não tão grande. É apenas, o que, 256 páginas ou 250 páginas, mais ou menos no momento. Mas ainda é muito mais de uma página ou duas páginas. E então agora, eu vou aproximadamente ao meio. Oh, eu não ir muito longe o suficiente agora. Então eu repetir, repetir, repetir, repetir, até que eu sou esperamos deixou com apenas uma página. Assim que o convida a pergunta, se eu começou com cerca de 1.000 páginas, quantos passos demorou me com a versão 1 do meu algoritmo? Bem, se Mike está no S secção, no pior caso, isso é muito perto de o fim do alfabeto. Então, se o livro de telefone tem 1.000 páginas, Eu vou encontrar Mike dentro de 1.000 páginas, dar ou pegar. Talvez seja como 800 ou assim, mas é muito perto de 1.000. Considerando que, no segundo algoritmo, quantas viradas de página máximo pode I exigem para encontrar Mike Smith? Há 1.000 páginas, mas estou fazendo-os dois de uma vez. Certo, então max como 500ish, porque se eu passar por todo o livro de telefone, em que ponto, eu posso parar. Mas eu posso raspar alguns por apenas parando na seção T. Mas é na pior das hipóteses 500 páginas. Então, quantas vezes eu posso dividir uma 1,00o-página do livro de telefone no meio novamente e de novo e de novamente-- 1000 a 500 a 250-125? Quanto tempo antes de eu bater uma página? Sim, é cerca de 10. Dependendo arredondamento e tal, é cerca de 10 páginas necessidade total a ser transformaram ou livros de telefone precisa ser rasgado. Então, isso é muito poderoso. Começamos com um problema 1.000 páginas em todos os três destas histórias. Mas no primeiro algoritmo, ele Levei, pior dos casos, com 1.000 páginas volta-se para encontrar Mike. Segundo algoritmo, 500 páginas para encontrar Mike. Terceiro algoritmo, 10 páginas para encontrar Mike. E é ainda mais poderosa quando você pensa sobre uma espécie de cenário oposto. Suponha-se que a empresa de telefonia próxima ano talvez se funde duas cidades juntas, eo livro de telefone é de repente esta espessura, em vez de essa que, tão 2.000 páginas, em vez de 1.000. Bem, meu primeiro algoritmo procura Mike Smith em uma lista telefônica de 2.000 páginas, pior caso, ele vai levar quantas viradas de página no próximo ano? livro de telefone é de 2.000 páginas, assim-- bem, não mais um. Se a lista telefónica é duas vezes mais espessa em o primeiro algoritmo, primeiro algoritmo, 2.000, certo? No pior dos casos, o Mike é realmente Perto do fim do livro, por isso é 2.000 viradas de página. Segundo algoritmo passando por twos, como 1.000 páginas. Mas como sobre no meu terceiro e algoritmo mais recente? Se a empresa de telefonia dobra o número de páginas de 1000 a 2000, quantas vezes mais precisa Eu rasgo esse livro ao meio para encontrar Mike? AUDIÊNCIA: Apenas um. DAVID MALAN: Só mais uma, porque com uma página lágrima, Eu pode literalmente dividir e conquistar, se quiserem, esse problema ao meio tomada uma mordida enorme fora dele. E por isso este é um exemplo de eficiência e, sem dúvida, um algoritmo com o qual todos nós somos tipo de intuitivamente familiar. Mas é apenas como correta como os meus outros algoritmos com esse ajuste para O segundo algoritmo, mas é muito mais eficiente. E, de fato, o que é um computador cientista, ou por sua vez, um programador, que costuma fazer quando se escreve código é tentar descobrir, tudo bem, eu não quero que meu programa apenas para ser correto, Eu também quero que seja eficiente e resolver problemas bem. Imagine que no mundo real hoje, como o Google indexa, pesquisas como milhares de milhões de páginas, imagine se eles utilizado o primeiro algoritmo para encontrar gatos entre um bilhão pages-- olhando a primeira página em seu banco de dados, a segunda, a terceira, olhando apenas para um gato, à procura de um gato. Isso é muito danado lento que parece. Eles poderiam, em vez usar algo chamado pesquisa binária, que há bi coincidence-- significa dois, continuar a dividir algo em 2, em half-- eles poderiam usar busca binária e talvez encontrar gatos ainda mais rápido, ou seja o que for que você está procurando. E, francamente, não há mesmo algoritmos extravagantes que fazer muito mais do que apenas dividir as coisas pela metade a fim de encontrar informações rapidamente. E nós vamos falar um pouco sobre aqueles após o almoço hoje. Então deixe-me tentar representar isso. Nós não precisamos de ir para qualquer matemática ou números reais. Podemos falar sobre isso no resumo. Mas deixe-me apenas propor, se você estávamos tendo uma discussão agora com os engenheiros propondo este algoritmo e você está tentando fazer uma decisão calculada, devido talvez a engenheiro diz a você, você sabe, eu pode implementar um busca linear em como dois minutos. É assim tão fácil. busca binária que não é chique, mas ele vai me levar como 10 minutos, por isso 5 vezes mais tempo. Há um comércio aqui, mesmo em termos de decidir o software para escrever. Você escreve o algoritmo mais simples, que só vai levá-lo dois minutos? Ou você gastar mais tempo, 10 minutos, escrever o algoritmo mais sofisticado? Como você decide que tipo de pergunta? Ou você pode torná-lo um pouco mais real. I dizer ao meu chefe que vai demorar me quer uma semana ou 10 semanas para implementar o software desta forma, como você decide qual algoritmo para verde-luz? Karim? Público: O público, eu acho. DAVID MALAN: A audiência. O que você quer dizer com o público? AUDIÊNCIA: Se ele vai para ser utilizado por utilizadores que [inaudível] por usuários [inaudível]. Mas se é algo que você está apenas fazendo para si mesmo para facilitar um problema, [Inaudível] mais rápido. DAVID MALAN: Sim, é rápida e suja é uma boa maneira de descrevê-lo. Na verdade, se você estiver descrevendo muito do meu tempo na pós-graduação, sendo que muitas vezes, Eu escrevi um código ruim conscientemente assim-- pelo menos, é assim que eu racionalizada ele-- conscientemente assim, porque mesmo que eu estava escrevendo código que era relativamente lento para executar, Eu era capaz de escrever o próprio código muito rápido, gastando apenas alguns minutos ou não horas dias. E ele saiu, eu de vez em quando precisava dormir. Assim, mesmo se o meu código necessário 8 horas para ser executado, bem, isso é bom, Eu só vou dormir enquanto ele é executado. Então, no momento, eu pensei que este era muito inteligente, apesar de, aparentemente, trabalhou através do meu PhD muito lentamente. Mas o inverso do que é que, software, se eu estivesse escrevendo para outras pessoas que era mais importante do que eu, bem, tê-los esperar 8 horas para voltar seus resultados de busca Não é tudo o que atraente. E assim passar mais tempo na frente para escrever software que é mais eficiente, mais como o nosso terceiro algoritmo, provavelmente beneficia os usuários ao longo do tempo. Então, ele realmente depende mais tempo como esses custos se somam. Se você estiver indo para ser escrito software para usá-lo uma vez, provavelmente poderia muito bem fazer rápida e suja, como se costuma dizer. Simplesmente jogá-lo juntos. É um código que embaraça você, é tão ruim, mas ele começa o trabalho feito corretamente, mesmo que não é eficiente. Por outro lado, você gasta mais tempo em alguma coisa, obtê-lo apenas para a direita. E então amortizado ao longo do tempo, custo que upfront do tempo é provavelmente vale a pena, se você continuar otimização para o caso comum. E, de fato, isso é um tema em programação, ou computador ciência mais geralmente, tentando otimizar não para o caso incomum mas os case-- comuns que operação vai acontecer de novo e de novo? Se você estiver indo para ter bilhões dos usuários pesquisar em seu site, você provavelmente deve passar o extra semanas na frente de escrever melhor software, de modo que todos os seus usuários se beneficiam. Agora, vamos tentar capturar esta uma pouco pictorially, mas não tanto numericamente. Então aqui é apenas um gráfico da velha escola. E deixe-me dizer que este é o tempo. E não importa what-- na verdade, não há nem tempo. Vamos colocar isso no outro eixo. Vamos dizer que este é o momento, e este é o tamanho do problema. E um cientista da computação pode geralmente chamamos isso só n. n é como o nosso go-to variável, onde n é um número, n número, e é a número de quaisquer entradas que você tem. Portanto, neste caso, n é o número de páginas. Assim, pode ser 1.000 em o caso que acabamos disse. Assim, o tempo pode ser qualquer unidade de medida. Talvez, é segundo. Talvez, é dias. Talvez, é como página voltas. Não importa. Tudo o que você quer contar, para que a será tempo ou custo equivalente. Então, com isso primeiro algoritmo, se eu, por exemplo, tinha um livro de telefone 1.000 páginas, Eu estou indo para desenhar um ponto lá, porque se é de 1.000 páginas, levou cerca de 1.000 viradas de página, mais ou menos. E então se eu tivesse um livro de telefone de 2.000 páginas, e eu estou indo para desenhar um segundo dot aqui, porque para 2.000 páginas, é como 2.000 segundos ou viradas de página ou qualquer outra coisa. E assim, quando eu disse anteriormente, é tipo de uma relação linear, que foi deliberado, porque eu queria depois on-- direito agora-- para desenhar uma linha. É uma espécie de um straight relacionamento line. A inclinação é 1/1, se você quiser. Enquanto isso, o segundo algoritmo Dito isto, se você tem 1.000 páginas e você estava usando o segundo algoritmo, onde eu contado por 2, girando duas páginas de cada vez, eu deveria tirar uma ponto abaixo ou acima do meu ponto original? AUDIÊNCIA: Abaixo. DAVID MALAN: Abaixo, porque, como vimos, leva menos tempo, metade do tempo. Assim, o ponto deve ser metade tão alta quanto o outro. E mesmo negócio por aqui, este ponto provavelmente deve ser mais ou menos ali. E assim meu segundo algoritmo, da mesma forma, tem um relação linear com o tempo. E podemos desenhá-lo como tal. Então, agora, a terceira e última algoritmo é um pouco mais difícil de desenhar. Mas intuitivamente, se eu tenho 1,000 páginas com o meu terceiro algoritmo, ele só deve me levar uns 10 passos. E se eu tenho 2.000 páginas com o meu terceiro algoritmo, ele deve me levar não 10 passos, mas 11, apenas mais um. Então, nós estamos apenas um pouco vai ver isso. E acontece que, se I zoom isso, eu sou vai exagerar para o efeito, a forma da linha que, em última análise, não é uma linha reta linha-- porque, na verdade, se fosse, ele ficaria mais parecido com o outros- é ​​realmente uma linha curva que, se aumentar o zoom, vai a olhar muito mais como este. Ele-- bem, OK, ignorar esta parte. Essa foi a minha pena vai de ângulo. É uma linha curva que é sempre aumentando, sempre, sempre, sempre aumentar, mas apenas por pouco. E assim ao longo do tempo, você tem um relacionamento que é mais como este. Parece quase em linha reta. Mas é cada vez mais tão devagar. Mas, para quase todos os pontos ao longo o eixo x, eixo horizontal, é menor do que as outras linhas. Portanto, este pode ser um relacionamento n, em que se tem n páginas, leva-o n segundos. Esta poderia ser uma relação n / 2. Você tem n páginas, leva você n / 2 segundos, metade desse número. E esta é uma logarítmica relacionamento, que se você se lembra, base 2 de n capturas de log este tipo de crescimento, por assim dizer. Portanto, este é o tipo de santo graal entre os três destes aqui, porque é apenas muito mais eficiente, mas sem dúvida mais complexa implementar. Alguma pergunta? Bem, deixe-me fazer isso, deixe me abrir uma janela de texto só assim podemos tentar formalizar alguma coisa aqui. Então deixe-me ir em frente agora e implementar este algoritmo para encontrar Mike Smith em código, se você, código de pseudocódigo. Eu não vou usar Java ou C ++. Eu estou indo só para usar tipo de Inglês-como a sintaxe, que nós seria geralmente chamar código pseudocódigo. Aqui, eu tenho uma janela em branco. E eu estou dizendo etapa 1 do muito primeiro algoritmo é pegar o livro de telefone. Passo 2 é livro aberto para a primeira página. Passo 3 será veja A página de Mike Smith. Se na página, chame Mike. page e por sua vez, senão vai para o passo 3. Feito, digamos. E por isso não é muito perfeito, que veremos em um momento. Mas vamos considerar o que conceitos que eu tenho apresentado aqui. Assim, as etapas 1 e 2 e 3 são praticamente verbos. Eles são declarações, actions-- fazer isso. E assim, em uma programação linguagem, teríamos geral chamá-los de declarações ou funções ou procedimentos, chamá-los de qualquer número de coisas. Mas eles estão apenas actions-- fazer isso. Passo 4 é fundamentalmente diferente, porque ele é o tipo de fazer uma pergunta. É dizer que estamos tipo de em uma bifurcação na estrada. Se Mike está na página, chame ele, então vire à esquerda, se você quiser. E se não, voltará para alguma outra página-- ou melhor, desculpe, voltar para algum outro passo, que induz a algum tipo de construção de loop. E fazemos isso de novo e de novo e de novo. E, na verdade, você sabe o quê? Sim. else if no final da parada livro. Por isso, precisamos tipo de um terço condição, porque você não pode continuar girando o anúncio de página nauseum, porque, eventualmente, eu vou atingido o fim do livro. E um bug em um programa pode ser não antecipar esse cenário. E então eu percebi, oh, espere um minuto, eu preciso de um terceiro cenário. Se eu estou fora de páginas, deve realmente parar. Caso contrário, ela é indefinida. O que vai acontecer se eu continuar dizendo virar a página e voltar, Isto é, quando os computadores congelar ou falhar, quando você bate alguma situação inesperada como esse. Agora, o que acontece com Mike terceiro algorithm-- de Smith pegar o livro de telefone, livro aberto para first-- para Não, não é primeira página desta vez, para middle-- oh, bem, que tinha ser o segundo algoritmo. Vamos apenas passar para a terceira. AUDIÊNCIA: Oh, eu sinto muito. DAVID MALAN: Isso é bom. Vamos apenas saltar para o aberto third-- a meio e agora olhar para Mike Smith. se na página, chame Mike. E então o que queremos dizer aqui? então o quê? Podemos expressar esta em qualquer número de maneiras. Não há uma resposta certa. OK, se não de novo, mas precisamos ser-- OK, nós queremos dividir em dois, mas não queremos ir para a esquerda ou vá para a direita? Como podemos expressar essa noção? Bem, no caso de Mike, sim, isso é justo. Mas OK, então isso é realmente um bom ponto. Isso é bom. Nós vamos continuar com essa lógica. Assim-- AUDIÊNCIA: Menos da metade. DAVID MALAN: Yeah. Então else if página é, vamos dizer, a menos de Smith, à esquerda de Smith, entăo-- vamos ver, é isto vai complicar? else if página vem antes de Smith, lágrima no meio, jogue fora qual metade? AUDIÊNCIA: Eu pensei que foi [inaudível]. DAVID MALAN: Eu estou ouvindo ambas as respostas. AUDIÊNCIA: Esquerda. DAVID MALAN: OK, jogar afastado metade esquerda, como Lakisa disse anteriormente, a esquerda metade, então eu meio que quer apenas ir a-- que eu vá para a direita. Ou equivalentemente, e eu fiz um pouco bocado de uma confusão do começo aqui, Eu efetivamente quer vá para o passo 2 novamente, onde aberto ao middle-- ou open-- sim, vamos apenas dizer, páginas ao meio. E isso resolve o problema. Não é mais um livro. É apenas a metade de um livro, páginas para abrir a meio. else-- estavam quase lá. Passo 6, else if página vem depois de Smith, rasgar ao meio, jogar meia direita, em seguida, vá para o passo 2. outra coisa sair, um quarto cenário se não temos páginas que ainda pode virar. Assim, poderíamos limpar isso. E devemos limpar isso. Este é um código muito pseudocódigo, se você vai, descrição muito alto nível. Mas isso geralmente capturar a idéia. E, novamente, neste cenário, tem a noção de uma condição, um ramo, uma bifurcação na estrada, fazendo um decision-- se este, ir por este caminho, else if, ir por este caminho, else if, ir por esse caminho. E isso é muito comum técnica de programação para decidir qual direção para ir, por assim dizer. E também temos algum tipo looping de estrutura, onde estamos fazendo algo novo e de novo. Agora, ao que parece, muito como neste exemplo, ser super preciso é importante. Mas também vimos algo que continuar ligando abstração. O que significa para pegar livro de telefone? Estamos apenas uma espécie de tomar para concedido nesta sala que que tem algum significado semântico. Todos nós apenas uma espécie de sabe, oh, bem, pegar o livro de telefone. O que isso realmente significa? Bem, isso realmente significa estender lado, inclinar, a estender os dedos, beliscar livro entre os dedos, levantar, puxar a mão em sua direção. E nós poderíamos ser realmente pedante sobre isso, realmente ser super precisos como o que eu estou fazendo. Mas todos estes passos são colectivamente o que significa pegar um livro de telefone. E assim antes, quando eu disse, cada destas duas primeiras instruções pode ser pensado como um prosseguir ou uma função, realmente representa o que nós continuar chamando uma abstração. É como um alto nível conceitual Descrição de um problema que realmente envolve algumas etapas. E assim por isso, também, é uma Temas recorrentes na programação, em que eu poderia escrever um programa usando a sintaxe como isto-- pick_up_phone_book (). E, em seguida, sintaticamente, eu sou vai roubar alguma coisa da maioria das linguagens de programação. Agora, passo 1 parece ainda mais como uma função, como um programador iria chamá-lo. Parece que o código que alguém tem dado um nome para e dado -me de usar somehow-- em outra palavras, o que a linha Eu destacou representa a funcionalidade que talvez Eu nem sequer implementar mim. Alguém mais velho, mais sábio do que me já descobriu como você expressa a noção de pegar um livro de telefone. E é como as cinco etapas Eu só desfiou, fora do topo da minha cabeça. Mas ele ou ela já implementadas este, deu esses vários passos um nome, pick_up_phone_book. E os parênteses está apenas o que a maioria dos programadores fazer no final de declarações como essa. Agora eu posso ficar em seu ombros e nunca mais, pensar sobre o que isso significa para pegar um livro de telefone. Posso apenas dizer, pegar o livro de telefone. E isso é exatamente o que todos nós seres humanos fizeram aqui. Quando fomos provavelmente 1 anos de idade, 2 anos de idade, alguém tinha para nos ensinar o que significava para pegar um livro de telefone. E desde então, temos abstraída daqueles muito desinteressante passos mecânicos. E só temos um compreensão intuitiva do que significa a pegar um livro de telefone. E você pode extrapolar agora para coisas- mais complicado construir um edifício. Como, para algumas pessoas, que realmente tem significado. Para prestadores de serviços, para os arquitectos, que tem algum significado. E eles sabem o que fazer, se Eu disse, vai construir um edifício. Mas a maioria de nós no quarto não poderia lidar com esse nível de abstração. Você precisa dizer a nós como ir buscar a pá e ir buscar o concreto com unhas e os pedaços de madeira juntos e tudo o mais está envolvido na construção de um edifício. E isso é porque nós não temos ainda foi programado para entender o que significa construir um edifício. Não temos que abstração. Não temos essa funcionalidade. E então o que você verá em linguagens de programação, em geral, línguas especialmente mais modernos, como Java, PHP, Ruby e Python, eles são muito mais maduro de linguagens mais antigas, como C e C ++ e outros ainda. E assim eles vêm com mais funcionalidade incorporada. Mais código foi escrito por pessoas no passado que agora podemos chamar ou invocar ou usar, como eu estou insinuando no com esta linha destacada aqui. E por isso mesmo que nós não estamos falando sobre linguagens de programação por si só, código apenas pseudocódigo, todas as ideias ainda estão em que a discussão. E verifica-se a precisão é super importante, como é abstração. E vamos tentar comunicar que como se segue. Eu acidentalmente poderia ter estragado este, piscando um slide na tela prematuramente. Mas deixe-me pedir um voluntário corajoso, Se você não se importa chegando. Você ficaria na frente do câmera, se você estiver OK com isso. Alguém gostaria de vir para cima e dar instruções aos seus colegas aqui? Só tenho que vir aqui e ficar aqui e dizer algumas palavras. Victoria está sorrindo mais e evitando os meus olhos a mais. Você estaria disposto a vir em cima? ESTÁ BEM. E se todos os outros em seus lugares poderia tirar um pedaço de papel, Se você for. papel pautado é bom. Venha ao redor desta forma. Ou algum do papel que que lhe foi dada ontem, apenas qualquer folha em branco de papel, se pudesse. E se você não tem nenhum, apenas pergunte ao seu vizinho se pudesse. Então, no momento, para Neste exemplo, Victoria vai desempenhar o papel de um programador, um engenheiro, que precisa programar a todos, como os computadores, para fazer alguma coisa. E vamos ver o que suposições você decidir fazer. Vamos ver como preciso que ela escolhe para ser. E se esta demonstração vai pedagogicamente bem, muitos erros será feita, que vamos então usar que como uma oportunidade para a discussão. Mas o desafio para você deve ser o de evitar esses erros, ser um bom programador. E assim o desafio na mão, se você gostava de andar por aqui, está em frente de Victoria na tela aqui-- e, esperamos, nenhum de vocês lembre-se disso quando eu piscou na tela. E não virar-se em tudo, porque há uma outra tela nesta sala que eu posso desligar. Portanto, não se virar. Em frente de Victoria é que mesmo grito. E seu trabalho agora é dizer-lhe tudo em seu pedaço de papel o que desenhar. E veremos, com base em instruções verbais por si só, código de computador, se quiser, o grau de precisão de seus desenhos é-- suas implementações são. Faz sentido? AUDIÊNCIA: É. DAVID MALAN: OK, executar. AUDIÊNCIA: Desenhar um quadrado. [RISO] DAVID MALAN: E não perguntas podem ser feitas. só pode fazer o que você disse. Ah, e se você tem lâminas de hoje aberto em uma aba, não olhar para o seu guia. ok? AUDIÊNCIA: OK, desenhar um círculo. A slope-- posso dizer inclinação? DAVID MALAN: Até você. AUDIÊNCIA: Uma inclinação. E um triângulo. DAVID MALAN: Tudo bem. E ficar aqui por apenas um momento. E eu vou vir ao redor em apenas um momento. E não há necessidade de colocar seus nomes nele. Deixe-me ir ao redor e recolher os seus desenhos, Se você não se importa rasgar-los. Aqui está o que temos de volta. Vou projetá-la na tela. Vejo um quadrado, um círculo, uma ladeira, e um triângulo. Então isso foi uma resposta lá. E let's-- gritos. Obrigado. Aqui está uma outra variedade, e um atrás dele. Então, todos eles parecem capturar o espírito. Obrigado. Há outro, e aqui está outro. A interpretação inclinação é uma pouco diferente, pouco curvilínea. E o mais próximo, ou por causa da especificidade maravilhoso com o qual você descrito, ou talvez você tipo de vi isso antes, esta é realmente o que Victoria estava realmente descrevendo. Mas agora, aqueles que não entendi muito bem, vamos oferecer algumas objeções aqui. Então Victoria primeiro disse desenhar um quadrado. E agora, podemos assumir por uma questão de hoje que todos conhecem como desenhar um quadrado. Mas isso não é inteiramente clara, certo? De que outra forma você poderia ter desenhado um quadrado, ou quando pode ser algumas das ambiguidades aqui para o computador? AUDIÊNCIA: localização e tamanho. DAVID MALAN: Localização, certo? Todos vocês tiveram um papel de alguma forma, geralmente retângulos, mas ligeiramente tamanhos diferentes. Mas você certamente poderia ter tirado, se você queria, uma enorme praça, talvez uma pequena praça. Talvez, foi rodado. Eu não acho que nós vimos isso. Mas poderia ter sido mais diamante como, mas ainda, no entanto, Matematicamente um quadrado. Assim que foi indiscutivelmente ambígua. Então ela disse, desenhar um círculo. Alguns de vocês se desenhá-lo ao lado -lo, o que não é razoável, porque os seres humanos tendem a pensar ou ler direita para a esquerda na maioria dos idiomas, portanto, não um palpite ruim. Mas esse círculo poderia ter foi dentro do quadrado, poderia ter sido em torno do quadrado, poderia ter sido em outro lugar na folha, de modo que, sem dúvida, ambígua. Slope poderia ter sido talvez tendo a maioria das liberdades verbalmente com o que isso significa. E alguns de vocês interpretado -lo como uma linha ondulada ou uma linha recta ou semelhantes. E, em seguida, triângulo, também, pode ter sido orientado em qualquer número de maneiras. Assim, em breve, mesmo com algo que você olhar e você está como, uau, de modo simples, uma criança poderia desenhar esse, bem, não realmente, a menos que você está super, super-persuasiva e dizer ao computador exatamente o que fazer. Então, se nós poderíamos, se tiver outra folha de papel, vamos tente isso mais uma vez. E eu vou dar um Victoria outro exemplo no ecrã aqui. E, novamente, não se virar e não olhar para seus slides. E eu vou dar-lhe um momento para pensar em como descrever isso. Não deixá-los ver o medo em seus olhos. [RISO] E mais uma vez, desta vez alavancagem alguns desses delivery e tentar obter quase todos pelo menos, a resposta certa. AUDIÊNCIA: OK, dê uma pedaço de papel, procure no meio daquele pedaço de papel. No meio desse pedaço de papel, desenhar um cubo. [RISO] DAVID MALAN: o que aprendemos? Estávamos tão perto. OK, repita se pudesse, para todos. AUDIÊNCIA: No meio do pedaço de papel, desenhar um objeto, que se parece com um cubo. DAVID MALAN: OK, isso é tudo que você tem para trabalhar. Permita-me ser analítica e não muito crítica, mas para fazer o pedido que Victoria definitivamente parece estar pensando em muito abstrações de alto nível, que não é razoável. Porque, caso contrário, estaríamos todos ser bastante disfuncional, se tivéssemos de estar sempre tão preciso com tudo o que fazemos no mundo. Mas dizer ir para a I middle-- pensei que estávamos no bom caminho, tais ali, como ir até o meio da página, e depois desenhar um cubo. Então, ela está pensando em abstrações, porque ela ainda está visualizando o que está na tela como, aliás, um cubo. Mas há tantas oportunidades interpretação para lá. E, na verdade, há tantos outras maneiras que você pode expressar que, o que eu vou propor, em um momento. Portanto, temos aqui uma encarnação do um whoops-- picture-- encarnação da imagem, de modo a pouco tridimensionalidade a ele, que é bom. Aqui está mais um, onde você tem a mesma, mas é uma espécie de cubo aberto. Algumas pessoas tomou um pouco mais plana, bidimensional. E isso é bom. Portanto, há, de fato, no centro do papel. Esse eu acho que você vai como, porque se nós aqui, isto é o que ela estava descrevendo. Então, agora, deixe-me propor que outra poderíamos descrever esta situação. De volta ao dia, um dos mais formas mais comuns para aprender programação era escrever código, escreve linhas de instruções, que controlava um pouco tartaruga na tela. Logo e outras variantes deste foi o nome da linguagem. E a tartaruga vivia num mundo. Então suponho que isso rectangular o espaço é seu mundo. E você iria começar por assuming-- I realmente não sei como desenhar tartaruga, então vamos fazê-lo assim. E então ele tem um shell e então talvez alguns pés. Então você pode ter este pequeno personagem na tela. E o objeto deste linguagem de programação foi para impor a tartaruga para ir para cima, para baixo, esquerda, direita e de colocar a sua caneta para baixo ou pegar a caneta para cima, para que ele pudesse realmente desenhar na tela neste mundo rectangular muito plana. Então, onde eu achei que você poderia estar acontecendo, e onde você deve considerar mergulho mentalmente até ao descrever instruções de modo mais geral, Gostaria de afirmar, é colocar o seu caneta para baixo na middle-- e vamos nos livrar da tartaruga, porque eu realmente não posso manter puxando-o muito bem. E agora, como poderia Eu digo desenhar um cubo? Bem, poderíamos dizer algo como sorteio uma linha diagonal a nordeste, por exemplo, ou a um ângulo de 45 graus para cima. E que poderia ter me chegado aqui. E eu estou muito longe de um cubo. Mas agora, eu poderia dizer algo como virar 90 graus para a esquerda e desenhar uma linha de igual a noroeste comprimento. E eu poderia continuar com orientações semelhantes. E não vai ser fácil. E, francamente, é provável que aqui há cinco minutos. Mas talvez teríamos chegado a algo que, no final do dia, acaba sendo um cubo, mas nós mergulhou dentro dessa abstração para fazê-lo em tal um baixo nível que você não pode realmente ver o que você está fazendo até que toda coisa é realmente lá na página. E por isso este é um princípio geral, de novo, de programming-- esta ideia de abstração. É tão maravilhosamente poderoso, porque mais uma vez, ela apenas disse, desenhar um cubo, que todas -nos praticamente iria Grokar muito rapidamente. Nós só iria entender, OK, desenhar um cubo. Podemos não saber a orientação, por isso, poderia ser um pouco mais preciso, mas geralmente podemos imaginar ou saber o que um cubo é. E isso é útil, porque, se cada vez que você sentou-se como um programador em o teclado para escrever o código, se você tinha que pensar em tal um nível baixo, nenhum de nós jamais iria fazer nada. E, certamente, nenhum de nós apreciar o processo de escrever código. Seria como escrever em 0 e 1., que, francamente, não era tudo o que há muito tempo os seres humanos estavam escrevendo código em 0 e 1.. E nós muito rapidamente surgiu com estes maior languages-- nível C ++ e Java e outros. Então, vamos tentar isso mais uma vez apenas para virar as mesas, de modo a que todos nós têm a oportunidade de pensar em vez da mesma maneira. Poderíamos ficar mais um voluntário este tempo para vir até a placa e desenhar, não recitar? Sim, ok. Ben, vamos lá para cima. E, Ben, neste caso, uma vez que você enfrentar o conselho, não olhar para a esquerda, não parecem estar corretas. fazer apenas o que o seu colegas aqui dizer-lhe. E para todos os outros no quarto, você agora é o programador. Ele é o computador. E a imagem que eu escolhi aqui com antecedência é este aqui. Eles estão só-- eles estão pensando de uma piada engraçada é tudo. Então, seria que alguém gostaria de voluntariar a primeira instrução ou declaração que deve A caneta de comando Ben? E nós vamos fazer isso coletivamente, talvez uma instrução de cada pessoa. Eu sinto Muito? AUDIÊNCIA: Desenhe um círculo. DAVID MALAN: Desenhe um círculo é a primeira coisa que ouvi. AUDIÊNCIA: Acima da parte superior. DAVID MALAN: Acima da parte superior. OK, podemos deixá-lo apagar, desfazer. E agora, outra pessoa. Dan, você estaria confortável oferecendo a próxima instrução? AUDIÊNCIA: Claro, chamar o centro da parte inferior do círculo, com um small-- um pouco pequeno espaço do que, desenhar uma linha reta até três quartos do caminho para baixo a placa uma ligeira inclinação para a esquerda. DAVID MALAN: Good. AUDIÊNCIA: ângulo ligeira. DAVID MALAN: Undo, Control-Z. ESTÁ BEM. Andrew, que pretende oferecer até a próxima instrução? AUDIÊNCIA: Claro. A partir da parte inferior da referida linha, mais uma ligeira angle-- whoops-- talvez cerca de um terço do comprimento [inaudível], leve ângulo para baixo e como um terço do comprimento de [inaudível]. Então, sim, a partir desse ponto, desenhar uma linha um terço do comprimento da anterior linha mais à esquerda. DAVID MALAN: Isso OK? linha reta, que é OK? OK, Olivier, você quer para oferecer a próxima? AUDIÊNCIA: [inaudível] a partir do parte inferior do círculo, [inaudível]. Desenhe no lado direito de [inaudível] centímetros. [RISO] DAVID MALAN: Eu acho que você vai tem que converter isso é polegadas aqui. AUDIÊNCIA: Pare. [RISO] DAVID MALAN: OK. [? Ara,?] Você quer para oferecer a próxima? AUDIÊNCIA: Desenhar um [inaudível] o superior [inaudível] o mesmo. [Inaudível] círculo, chamar a [Inaudível] e desenhar [inaudível]. DAVID MALAN: OK, não mais desfazer. Vamos fazer mais uma ou duas instruções. Chris, que pretende oferecer um? AUDIÊNCIA: Na parte inferior do círculo, [inaudível] desenhar uma linha slopping igual para baixo, para a esquerda [inaudível]. DAVID MALAN: OK. Andrew? Nós fez-- Karim? AUDIÊNCIA: A partir da linha direita, o fim da linha esquerda, a parte inferior, você está indo para ir para a direita sobre o mesmo comprimento que a linha de você está, chegando ao o direito [inaudível]. [Inaudível] graus, de modo [inaudível] graus para o lado direito. DAVID MALAN: Tudo bem. Vamos fazer uma pausa. Não se vire ainda. Vamos fazer uma pausa, e vamos tente uma outra tentativa antes de revelar a Ben o que ele vem desenhando. você pode embaralhar Ben o direita-- ou realmente, não, vamos apenas dar-lhe outra placa, melhor ainda. Assim que alguém agora gostaria a ter mais da abordagem Victoria que levou anteriormente, onde nós falamos em uma abstração de nível superior e em apenas uma frase ou dois descrevem a Ben o que desenhar sem metendo as ervas daninhas, por assim dizer, neste um nível mais baixo? Victoria. [RISO] AUDIÊNCIA: Desenhe uma figura do homem a pé. E suas pernas e braços tem que ser o lado direito. DAVID MALAN: OK, isso é tudo que você começa. Tudo certo. Por que não vamos revelar a Ben o que ele fez. Assim, uma salva de palmas. Isso foi o mais difícil talvez. Assim, mesmo que estamos falando em termos bastante tolas sobre apenas um desenho fotos, espero que você pode realmente apreciar o grau de expressividade que pode ser necessário a fim de contar um computador o que fazer. E, na verdade, o facto de Ben foi capaz de desenhar esse tão rapidamente é uma espécie de testamento para utilizar um linguagem, talvez um nível mais elevado versão do Inglês, que permite que ele usar apenas palavras, ou ouvir palavras de Victoria, que lhe permitem estes abstractions-- apenas desenhar uma figura caminhando para o direita-- esse tipo de tem algum significado semântico para que isso não é quase tão óbvio quando você é apenas dizendo, coloque o seu caneta para baixo, desenhe à direita, desenhe para a esquerda. E assim por isso, também, é muito comum em programação. Este seria dito para ser como uma muito baixo linguagem de nível, programação em 0 e 1 do se você quiser. E este seria um nível mais elevado Linguagem de Programação em Java, ou algo assim. Um pouco de um simplificação exagerada, mas isso é o tipo de como emocional sentindo que você sente quando usando um tipo de coisa ou de outra. Um pouco de frustração aqui pela necessidade para tal precisão, mas a oportunidade a ser um pouco mais flexível com a interpretação aqui. Mas, claro, erros podem surgir como resultado. Se você gostaria de casa-- nós não vai fazer este em class-- mas se você gostaria de trazer um presente para casa, Pensei que iria mergulhar neste. Então, se você gostaria de jogar este jogo com seu outro significativo ou filhos ou similares, você pode aproveitar isso também. Então, vamos em frente e olhar para uma última coisa aqui para pensamento computacional. E isso nos leva a John Oliver, não para o clipe você pode ter visto na noite passada, mas a um problema relativamente recente. Alguns meses atrás, a Volkswagen tomou um pouco de críticas para o que razão, se você sabe? O que eles ficar em apuros para? Sim, então eles emissions-- estavam tentando vencer as emissões testes por ter essencialmente a sua carros poluem o ambiente menos quando seus carros foram sendo testado e poluir o ambiente mais quando os carros não estavam sendo testados. E o que é cada vez mais interessante no mundo, como você pode ter inferido das discussões sobre o que é como-- ele-- CarPlay, software da Apple para carros eo fato de que muitos de nós cada vez mais têm telas sensíveis ao toque em nossos carros, há uma quantidade assustadora de software no povo de carros de hoje, que francamente abre uma lata de vermes quando se trata de segurança e risco físico. Mas para hoje, vamos focar apenas o que é envolvido em software de gravação que pode ter caçado o sistema. Para a definição do problema, para quem não conhece, vamos dar uma olhada John Oliver. E para aqueles familiarizados com o problema, vamos olhar para ele em uma lente através de divertimento John Oliver bem. Então deixe-me bateu jogar sobre isso, eu acho que, a introdução de três minutos. Droga. [REPRODUÇÃO DE VÍDEO] -Cars-- DAVID MALAN: Obviamente, no YouTube, it's-- - --os personagens mais inteligentes os filmes Velozes e Furiosos. Esta semana, a montadora alemã Volkswagen encontrou-se no meio de um escândalo de proporções potencialmente criminais. -Volkswagen Está se preparando para bilhões em multas, possíveis acusações criminais para seus executivos, como a empresa pede desculpas para aparelhamento 11 milhões de carros para ajudá-la a vencer a testes de emissões. modelos diesel -Certos foram projetados com o software sofisticado que informações utilizadas, incluindo a posição do volante e do veículo velocidade, para determinar o carro era submetidos a testes de emissões. Nessa circunstância, o motor reduziria as emissões tóxicas. Mas o carro foi fraudada para ignorar que quando ele estava sendo conduzido. As emissões aumentaram 10 a 40 vezes acima dos níveis de EPA aceitáveis. -Nossa, 10 a 40 vezes maior do que a EPA permite. Essa é a pior coisa Volkswagen já fez, é algo que você pode dizer se você nunca tinha ouvido falar da Segunda Guerra Mundial. Mas talvez o sinal mais seguro de como muita dificuldade Volkswagen está em, é que as pessoas no muito top renunciaram. O CEO, renunciou na quarta-feira depois lutando para controlar os danos, dizendo que ele era infinitamente muito, que parecia ótimo até que ele acabou ele era apenas 10% desculpe mas tinha manipulado a boca para inflar artificialmente o seu arrependimento. E enquanto isso, US da Volkswagen chefe teve um pedido de desculpas de sua autoria. -Vamos Ser claro sobre isso, nossa empresa foi desonesto. E nas minhas palavras alemãs, nós têm totalmente asneira. -Sim, Mas totalmente aparafusado se não são obras alemãs. E a língua alemã tem muitas frases bonitas para descrever situações como esta, tais como [ALEMÃO], que significa aproximadamente, a tristeza que vem das mentiras de negócios relacionados, ou [Alemão], o que se traduz como envergonhar aqueles pai envolvendo nuvens de gasolina. É uma língua bonita. Ele só navega fora da língua. E, a propósito, enquanto que o do homem pedido de desculpas pode ter soado sincero, vale a pena notar que ele estava falando em uma festa oficial de lançamento para 2016 Volkswagen Passat, o que significa que em breve depois de dizer muito, ele disse isso. -Muito Obrigado por terem vindo. Aproveite a noite. O próximo é Lenny Kravitz. [REPRODUÇÃO DE MÚSICA] -OK, OK, terminando o seu pedido de desculpas com até próxima Lenny Kravitz não gritar contrição sóbrio. Ela grita, pedimos Bon Jovi, e ele disse que não. marca da Volkswagen tem foi muito danificado. E, francamente, o seu novo anúncio campanha não é exatamente ajudando. - [Alemão], nós da Volkswagen gostaria a pedir desculpas por enganar-lo com nossos veículos. [FIM DE REPRODUÇÃO] DAVID MALAN: Então esta foi uma forma indireta de-- sorry-- esta foi uma forma indireta de a introdução de um problema fundamental em software, o que é que você preciso detectar determinadas condições. E assim a questão em apreço aqui é, como é que um carro potencialmente, como implementado no software por estes programadores, detectar que ele realmente está sendo testado? Assim, para ser super claro, o que estavam fazendo foi, em ambientes onde os programadores figurado o carro estava sendo testados, eles de alguma forma o carro emitem menos emissões, menos emissões, fumos de modo menos tóxicos e tal. Mas quando é normalmente a condução na estrada, seria apenas emitem tanto a poluição, uma vez que queria. Assim como poderíamos escrever o pseudocódigo para este algoritmo? Como poderíamos escrever pseudocódigo para o software em execução no carro? Quer dizer, em poucas palavras, que ferve para baixo para algo como isto. se a ser testado, emitem menos. outra emite mais. Mas isso é um pouco nível muito alto, certo? Vamos tentar mergulhar, como o que este abstração do que significa ser testados. Em outras palavras, mesmo se você não sabe nada sobre carros, que tipo de perguntas pode você perguntar, a fim de determinar se você está sendo testado, se você é o carro? O que pode ser características apresentar se um carro está sendo testado? AUDIÊNCIA: Testando equipamento. DAVID MALAN: Equipamento de testes. Então, se o equipamento de teste nas proximidades, em seguida, emitem menos. Então eu poderia imaginar implementação que, com algum tipo de câmeras ou detectar o que está ao seu redor. E deixe-me propor, que só se sente muito complicado para realmente ter adicional hardware apenas para essa finalidade. Audiência: Se você estiver em parque, se o seu capô estiver aberto. DAVID MALAN: No parque ou capô aberto, de modo que é bom. AUDIÊNCIA: E carro de corrida. DAVID MALAN: Então, isso é um pouco mais concrete-- e carro de corrida. Portanto, esta seria a conjunção de um algumas condições diferentes, se você quiser. Então, se o carro está no parque, e até mesmo embora isso é uma coisa muito mecânica Normalmente, eu poderia imagine escrever software, especialmente porque não há muitas vezes uma luz lá estes dias, Eu poderia imaginar que haja software que pode consultar o shifter ou que não, você está no parque, são -lo na unidade, você está em sentido inverso. E eu posso voltar um responder a isso é tanto sim ou não para esses tipos de perguntas. E assim eu também poderia provavelmente responder uma pergunta como, é o capô aberto. Talvez, há algum tipo de sensor de que tanto me dá de volta um 1 ou 0, verdadeiro ou falso, o capô estiver aberto. E, em seguida, carro correndo, eu poderia detectar que de alguma forma através de qual mecanismo? Como, o carro está funcionando, eu poderia detectar que ela está ligada, Eu poderia detectar alguma forma que o carro está em movimento? Audiência: RPMs. DAVID MALAN: Sim, por isso há sempre que agulha que informa quantas rotações por hora as rodas estão experimentando. E assim eu poderia olhar para isso. E se não é 0, que, provavelmente, significa que o carro está em movimento. Mas temos de ser um pouco cuidado lá, porque-- vamos simplificar isto-- se acabou de dizer, se o carro de corrida, nós não queremos apenas emitem menos, queremos que se o carro está em execução e está sendo testado. Portanto, há algumas outras Ingredientes que pessoas têm a hipótese de o software está fazendo, porque ausente o código fonte real, você só pode tipo de inferir a partir da efeitos físicos do carro, como o que pode estar acontecendo por baixo o capô em software. Então, se carro funcionando e talvez, digamos, rodas traseiras não se movendo, isso pode ser um indicativo de algum tipo de teste? O que estou sugerindo aqui? É, talvez, é em um dessas coisas de rolos, onde como as rodas estão girando na parte da frente ou na parte de trás, dependendo se é roda da frente ou tração traseira, de modo a metade das rodas estão se movendo, mas o outros dois não são, o que é uma situação estranha no mundo real. Se você estiver dirigindo na estrada, que não deveria acontecer. Mas se você estiver em um armazém em algum tipo de sistema de rolos, que pode realmente acontecer. Eu acho que as pessoas também propôs que talvez, se o carro está em execução e direção não roda em movimento, que também pode ser um sinal, porque isso é razoável para como um imediatamente em uma estrada. Mas, mesmo assim, o humano está provavelmente movê-lo um pouco ou certamente durante alguns segundos. Ou o curso de um minutos, as chances são de que não vai ser fixado em exatamente na mesma posição. Assim, em outras palavras, nós pode levar a subtracção, você está sendo testado, e quebrar essa funcionalidade para estes ingredientes que o compõem. E isso é realmente o que a Volkswagen do engenheiros de alguma forma o fez. Eles escreveram software conscientemente detectar se o carro está sendo testado, portanto, emitem menos, outra emitem na maneira usual. E o problema aqui, também, é que o software não é algo que você pode realmente ver a menos tem o chamado código fonte. Portanto, há dois tipos diferentes de code--, pelo menos, dois tipos diferentes de código no mundo. Há algo chamado source de código, o que não é o que ao contrário que tenho escrito, o código fonte. Este é o código fonte escrito em uma linguagem chamada pseudo-código, que é apenas algo Inglês-like. Não há nenhuma definição formal do mesmo. Mas C e Java, C ++, os são todas as linguagens formais que, quando você escreve neles, o que você tem é um arquivo de texto contendo código fonte. Mas também há algo em o mundo chamado de código de máquina. E código de máquina, infelizmente, está apenas a 0 e 1.. Assim, o código de máquina é o que máquinas de entender, é claro. O código-fonte é o que os seres humanos entender. E, geralmente, não mas sempre, há um programa que usa um programador que leva fonte código e transforma-lo em código de máquina. E esse programa é geralmente chamado de um compilador. Portanto, sua entrada é código-fonte, sua saída é o código de máquina, eo compilador é um pedaço de software que faz esse processo. Então, isso realmente mapeia muito bem para nossos insumos, algoritmos saídas. Mas esta é uma encarnação muito específico de que, o que quer dizer que, mesmo se você possui um dos Volkswagen carros que é culpado disso, não é como você pode simplesmente abrir o exaustor ou abrir o manual do utilizador ou olhar o código-fonte, porque no momento em ele atinge o seu carro em sua garagem, Já foi convertido em 0 e 1.. E é muito difícil, não impossível, mas muito difícil de recolher muita coisa a partir de apenas olhando para o subjacente a 0 e 1 do. Assim, você pode descobrir isso, em última análise, se você entende como uma máquina operates-- Intel dentro-- se você entender a arquitetura Intel, mas é muito demorado. E mesmo lá, você pode não ser capaz de ver tudo que o código pode realmente fazer. Qualquer dúvida sobre este ou este tipo de processo mais geralmente? E, na verdade, podemos amarrar essa discussão a discussão de ontem da Apple. Isto, também, é por isso que o FBI não pode apenas ir e olhar no telefone do suspeito e encontrar as linhas de código, por exemplo, que permitem que o código de acesso ou permitam que essa demora 80 milisegundos. Porque no momento em que é no iPhone do companheiro, Já foi convertidos em 0 e 1.. Bem, vamos fazer uma pausa aqui para o nosso olhar pensamento computacional. Por que não vamos fazer uma pausa de 15 minutos. E quando voltar, vamos dar uma olhada em programação -se e começar a mapear alguns destes conceitos de alto nível a um real, se brincalhão, linguagem de programação.