Phil. Trans. R. Soc. A (2008) 366, 3717–3725 doi:10.1098/rsta.2008.0118 Published online 31 July 2008 Pensamento computacional e pensamento sobre computação BY JEANNETTE M. WING* Departamento de Ciência da Computação, Carnegie Mellon University, Pittsburgh, PA 15213, USA O pensamento computacional influenciará todos em todos os campos de atuação. Essa visão representa um novo desafio educacional para nossa sociedade, especialmente para nossos filhos. Ao pensar em computação, precisamos estar sintonizados com os três propulsores de nosso campo: ciência, tecnologia e sociedade. Acelerar os avanços tecnológicos e as demandas monumentais da sociedade nos força a revisitar as questões científicas mais básicas da computação. Palavras-chave: pensamento computacional; abstração; automação; Informática; computável; inteligência 1. Pensamento computacional O pensamento computacional está adotando uma abordagem para resolver problemas, projetar sistemas e entender o comportamento humano que se baseia em conceitos fundamentais para a computação1 (Wing 2006). O pensamento computacional é um tipo de pensamento analítico. Ele compartilha com o pensamento matemático das maneiras gerais pelas quais podemos abordar a solução de um problema. Ele compartilha com o pensamento de engenharia das maneiras gerais pelas quais podemos abordar o design e a avaliação de um sistema grande e complexo que opera dentro das restrições do mundo real. Ele compartilha com o pensamento científico das maneiras gerais pelas quais podemos abordar a compreensão da computabilidade, inteligência, mente e comportamento humano. (a) Computação: abstração e automação A essência do pensamento computacional é a abstração. Na computação, abstraímos noções além das dimensões físicas do tempo e do espaço. Nossas abstrações são extremamente gerais porque são simbólicas, onde abstrações numéricas são apenas um caso especial. De duas maneiras, nossas abstrações tendem a ser mais ricas e complexas do que as das ciências matemáticas e físicas. Primeiro, nossas abstrações não gozam necessariamente das propriedades algébricas limpas, elegantes ou facilmente definíveis da matemática. *[email protected] 1Por 'computação', quero dizer muito amplamente o campo que abrange ciência da computação, engenharia da computação, comunicações, ciência da informação e tecnologia da informação. Uma contribuição de 19 para uma edição da reunião de discussão 'De computadores à computação onipresente, até 2020'. 3717 Thisjournalisq2008TheRoyalSociety 3718 J. M. Wing abstrações, como números ou conjuntos reais, do mundo físico. Por exemplo, uma pilha de elementos é um tipo de dado abstrato comum usado na computação. Não pensaríamos em "adicionar" duas pilhas, assim como dois inteiros. Um algoritmo é uma abstração de um procedimento passo a passo para obter entrada e produzir alguma saída desejada. O que significa "intercalar" dois algoritmos, talvez para um processamento paralelo eficiente? Uma linguagem de programação é uma abstração de um conjunto de sequências de caracteres, cada uma das quais quando interpretada afeta algum cálculo. O que significa 'combinar' duas linguagens de programação? Esses tipos de combinadores são abstrações que exigem cuidadoso pensamento, talvez uma agenda de pesquisa inteira, para definir. Segundo, porque nossas abstrações são finalmente implementadas para funcionar dentro das restrições do mundo físico, precisamos nos preocupar com casos extremos e casos de falha. O que acontece quando o disco está cheio ou o servidor não está respondendo? O que acontece quando um programa encontra em tempo de execução um erro que deveria ter sido capturado em tempo de compilação? Como conseguimos que um robô se movesse por um corredor sem esbarrar nas pessoas? Ao trabalhar com abstrações ricas, é fundamental definir a abstração "correta". O processo de abstração - decidindo quais detalhes precisamos destacar e quais detalhes podemos ignorar - está subjacente ao pensamento computacional. O processo de abstração introduz camadas. Na computação, trabalhamos simultaneamente com pelo menos duas, geralmente mais camadas de abstração: a camada de interesse e a camada abaixo; ou a camada de interesse e a camada acima. Interfaces bem definidas entre camadas nos permitem construir sistemas grandes e complexos. Dada a interface de programação de aplicativos (API) de um componente de software, o usuário não precisa conhecer os detalhes da implementação do componente para saber como interagir com ele, e o implementador não precisa saber quem podem ser todos os usuários em potencial do componente para implementar corretamente. A arquitetura em camadas da Internet, em particular a camada de protocolo da Internet de "cintura fina", suporta a incorporação de novos dispositivos de computação e tecnologia de rede na parte inferior e a adição de novos aplicativos imprevistos na parte superior. Ao trabalhar com camadas de abstração, temos necessariamente em mente a relação entre cada par de camadas, seja definida por uma função de abstração, uma relação de simulação, uma transformação ou um tipo mais geral de mapeamento. Usamos esses mapeamentos para mostrar a equivalência observável entre uma máquina de estado abstrato e um de seus possíveis refinamentos, para provar a correção de uma implementação com relação a uma especificação e para compilar um programa escrito em uma linguagem de alto nível para um código de máquina mais eficiente . E assim, as porcas e os parafusos do pensamento computacional estão definindo abstrações, trabalhando com múltiplas camadas de abstração e entendendo os relacionamentos entre as diferentes camadas. Abstrações são as ferramentas "mentais" da computação. O poder de nossas ferramentas 'mentais' é amplificado pelo poder de nossas ferramentas 'metálicas'. Computar é a automação de nossas abstrações. Operamos mecanizando nossas abstrações, camadas de abstração e seus relacionamentos. A mecanização é possível devido às nossas notações e modelos precisos e exatos. A automação implica a necessidade de algum tipo de computador para interpretar as abstrações. O tipo mais óbvio de computador é uma máquina, ou seja, um dispositivo físico2 com processamento, armazenamento e 2 Os dispositivos físicos óbvios são os mecânicos ou elétricos de hoje. Também pretendo incluir os dispositivos físicos de amanhã, por exemplo. computadores nano e quântico; e até os dispositivos biológicos de amanhã, p. computadores orgânicos, de DNA e moleculares também.(cf. §2a). Phil. Trans. R. Soc. A (2008) Computational thinking 3719 capacidades de comunicação. Sim, um computador pode ser uma máquina, mas mais sutilmente pode ser um humano. Os seres humanos processam informações; computação dos humanos. Em outras palavras, o pensamento computacional não requer uma máquina. Além disso, quando consideramos a combinação de um humano e uma máquina como um computador, podemos explorar o poder de processamento combinado de um humano com o de uma máquina. Por exemplo, os humanos ainda são melhores do que as máquinas para analisar e interpretar imagens; por outro lado, as máquinas são muito melhores para executar certos tipos de instruções com muito mais rapidez do que os humanos e processar conjuntos de dados muito maiores do que um humano pode suportar. Operacionalmente, a computação está preocupada em responder 'Como eu conseguiria um computador para resolver esse problema?', Onde o computador poderia ser uma máquina, um humano, a combinação de uma máquina e um humano, ou recursivamente, a combinação (por exemplo, uma rede) desses computadores. Implícito na resposta a essa pergunta está a identificação de abstrações apropriadas e a escolha do tipo apropriado de computador para a tarefa. Infelizmente, é muito fácil responder a essa pergunta sem pensar muito em definir a abstração correta e depois escolher uma máquina com muita potência para resolver o problema usando força bruta. O pensamento computacional pode oferecer mais do que esse simples uso de computadores mecânicos. (b) Pensamento computacional em toda parte "O pensamento computacional está influenciando a pesquisa em quase todas as disciplinas, tanto nas ciências quanto nas humanidades" (Bundy 2007). As evidências da influência do pensamento computacional em outros campos são abundantes: o pensamento computacional está transformando a estatística, onde, com o aprendizado de máquina, a automação dos métodos bayesianos e o uso de modelos gráficos probabilísticos tornam possível identificar padrões e anomalias em conjuntos de dados volumosos tão diversos quanto os mapas astronômicos. , imagens funcionais de ressonância magnética, compras com cartão de crédito e recibos de supermercado (por exemplo, Machine Learning Department 2008). O pensamento computacional está transformando a biologia, primeiro com o algoritmo de sequenciamento de espingarda, acelerando nossa capacidade de sequenciar o genoma humano e agora com nossas abstrações que representam processos dinâmicos encontrados na natureza, do ciclo celular ao dobramento de proteínas (por exemplo, Fisher & Henzinger 2007). O pensamento computacional está transformando a economia, gerando um novo campo de microeconomia computacional, com aplicações como colocação de anúncios, leilões on-line, serviços de reputação e até a busca de doadores ideais para a troca renal nos dois sentidos (Abraham et al.2007 ). Em outros campos, o pensamento computacional ainda está na fase do pensamento computacional simples: gastar dias em ciclos de máquina para resolver problemas. Muitas ciências e disciplinas de engenharia contam com enormes simulações computacionais de modelos matemáticos de processos físicos encontrados na natureza. O setor aeroespacial conta com a capacidade de simular uma aeronave inteira ou missão espacial. As geociências se atrevem a querer simular a Terra, desde seu núcleo interno até sua superfície e o Sol. Nas ciências humanas e nas artes, as bibliotecas digitais de livros, coleções e artefatos criam oportunidades através de métodos computacionais, como mineração de dados e federação de dados, para descobrir novas tendências, padrões e links em nossa compreensão e valorização da humanidade. Olhando para o futuro, um pensamento computacional mais profundo - por meio da escolha de abstrações mais inteligentes ou sofisticadas - pode permitir que cientistas e engenheiros modelem e analisem seus sistemas em uma escala de ordens de magnitude maior do que são capazes de lidar atualmente. Com o uso de camadas de abstração, por exemplo, Phil. Trans. R. Soc. A (2008) 3720 J. M. Wing decomposição hierárquica, estamos ansiosos para quando pudermos: modelar sistemas em várias escalas de tempo e em várias resoluções das três dimensões espaciais; modelar as interações desses muitos sistemas complexos para identificar condições para pontos de inflexão e comportamento emergente; aumentar o número de parâmetros e conjuntos de condições iniciais nesses modelos; reproduzir esses modelos para trás e para frente no tempo; e validar esses modelos contra a verdade básica. Mais profundo pensamento computacional nos ajudará não só para modelar cada vez mais complexo de sistemas, mas também para analisar as enormes quantidades de dados que coletamos e gerar. Através da implantação de redes de sensores distribuídos, uso rotineiro de sistemas de monitoramento e vigilância, a prevalência de câmeras digitais em telefones (celulares) móveis, digitalização da informação do mundo, executando simulações de modelos de sistemas complexos, e assim por diante, estaremos coletando e gerando mais e mais dados para analisar. Será através de pensamentos e abstrações computacionais para representar e processar os dados - que seremos capazes de extrair o conhecimento enterrado dentro ou espalhados por todo os dados. Existe um ciclo de mentário aberto: esse conhecimento, despertando nossa curiosidade, nos levará a fazer novas perguntas que exigem a coleta de mais dados; e esse conhecimento nos ajudará a ajustar nossos modelos de simulação, gerando ainda mais dados. Visão no. 1. Eu imagino que o pensamento computacional será fundamental para novas descobertas e inovações em todos os campos de atuação. (c) Pensamento computacional para todos Se o pensamento computacional for usado em todos os lugares, ele tocará todos, direta ou indiretamente. Isso gera um desafio educacional. Se o pensamento computacional é adicionado ao repertório de habilidades de pensamento, como e quando as pessoas devem aprender esse tipo de pensamento e como e quando devemos ensiná-lo? Vamos supor que a tendência de usar o pensamento computacional na pesquisa em todos os campos já esteja ocorrendo. , já influenciando o treinamento de estudantes de pós-graduação. Vamos supor ainda que as universidades já começaram a incorporar o pensamento computacional em seus currículos de graduação, reconhecendo assim como a próxima geração terá que ser capaz de pensar para ter sucesso na sociedade moderna. Assim, vamos focar essa questão nos níveis de ensino fundamental e médio. De fato, se quiséssemos garantir uma base comum e sólida de entendimento e aplicação do pensamento computacional para todos, esse aprendizado deveria ser melhor realizado nos primeiros anos da infância. Faço o seguinte como um desafio para as comunidades de ciência da computação, ciências da aprendizagem e educação. Desafio no. 1. Quais são as formas eficazes de aprender (ensinar) o pensamento computacional das (para) crianças? Essa questão levanta questões ainda mais fundamentais: Quais são os conceitos elementares do pensamento computacional? Os educadores em computação responderam e continuam a responder a essa pergunta criando cursos, geralmente para alunos do primeiro ano do ensino médio, que se concentram nos princípios da computação e não apenas nas habilidades de programação de computadores. À medida que o campo da computação continua amadurecendo, vale a pena revisar novamente essa questão, com um foco específico nos anos anteriores. Phil. Trans. R. Soc. A (2008) Computational thinking 3721 Além disso, vale a pena revisar essa questão em colaboração com estudiosos no aprendizado de ciências e educação. Por exemplo, quais conceitos de pensamento computacional são tão inatos para a cognição humana quanto o conceito matemático de números? A visão humana é um processamento paralelo. Que tarefas naturalmente fazemos ou aprendemos a fazer em paralelo versus sequencialmente? As crianças experimentam noções de infinidade e recursão através da matemática e da linguagem; nomear e ensinar esses conceitos fundamentais desde o início em contextos formais de aprendizagem forneceria blocos de construção poderosos para o pensamento computacional. O que seria uma ordenação eficaz de conceitos no ensino de crianças à medida que sua capacidade de aprendizado progredir ao longo dos anos? Por analogia, ensinamos números a crianças no jardim de infância (quando têm 5 anos), álgebra no ensino fundamental (12 anos) e cálculo no ensino médio (18 anos). Pode haver muitas maneiras possíveis de estruturar a progressão dos conceitos de pensamento computacional; qual é o mais eficaz para qual tipo de aluno? Qual a melhor forma de integrar a ferramenta ao ensino dos conceitos? Aqui e a partir de agora, 'ferramenta' significa a máquina de computação (uma ferramenta específica de 'metal' do §1a). Nosso campo de computação está em uma situação única, pois não apenas existem conceitos computacionais para ensinar, mas também há uma ferramenta para ensinar. Essa ferramenta oferece alguns desafios e oportunidades. Um desafio é que não queremos que a ferramenta atrapalhe a compreensão dos conceitos. Também não queremos que as pessoas sejam capazes de usar a ferramenta, mas não tenham aprendido os conceitos (um caso em questão: usar uma calculadora versus entender aritmética). Pior, não queremos que as pessoas saiam pensando que entendem os conceitos porque são hábeis em usar a ferramenta. Um segundo desafio é que queremos acompanhar o aprendizado de como usar a ferramenta na ordem de aprendizado de conceitos. Em que momento apresentamos cada um dos poderosos recursos de uma máquina de computação? Em que momento expomos as crianças aos meandros de como a máquina funciona? Essas perguntas são análogas à escolha da abstração correta, onde agora os critérios são definidos pela capacidade de aprendizado. Uma oportunidade é que podemos usar a ferramenta para reforçar os conceitos que ensinamos. Computar é legal: trata-se de dar vida às abstrações! Através de visualização e animação eficazes, mesmo em séries iniciais, podemos mostrar visceralmente a diferença entre um algoritmo de tempo polinomial e um de tempo exponencial ou mostrar que uma árvore é um tipo especial de gráfico; nas séries posteriores, adquirindo habilidades de programação, os alunos podem automatizar suas próprias abstrações. De fato, essa ferramenta pode ser útil para reforçar não apenas conceitos de pensamento computacional, mas também conceitos de outros campos. Uma segunda oportunidade é que a maioria das crianças hoje é fácil com a mecânica do uso da ferramenta e não tem medo de explorar e brincar com ela. Atualmente, podemos tirar proveito da exposição de rotina que as crianças têm a dispositivos computacionais em casa e na escola. Dada essa última observação, também devemos explorar a aprendizagem informal e a formal. A aprendizagem ocorre de várias maneiras e fora da sala de aula: as crianças ensinam umas às outras; aprenda com os pais e a família; aprende em casa, em museus e em bibliotecas; e aprenda através de hobbies, superando as experiências da internet e da vida. Visão no. 2. Imagino que o pensamento computacional seja parte integrante da educação infantil. Phil. Trans. R. Soc. A (2008) 3722 J. M. Wing Sociedade Ciência Tecnologia Figura 1. Três direcionadores da computação: ciência, tecnologia e sociedade. Embargo. Existem muitas barreiras culturais, econômicas, políticas e sociais na concretização dessa visão, especialmente em países onde o sistema educacional não é controlado centralmente. Esforçar-se por essa visão ainda pode render benefícios valiosos. 2. Pensando em computação O campo da computação é impulsionado por questões científicas, inovação tecnológica e demandas da sociedade. Lembro-nos deste ponto por duas razões. Primeiro, em nosso campo, somos frequentemente tão empolgados com nossos avanços tecnológicos ou expectativas da sociedade que esquecemos que existem questões científicas profundas subjacentes ao nosso campo. Segundo, para outras pessoas fora da computação, é importante explicar que o peso de cada uma e, além disso, a combinação de nossos três fatores - ciência, tecnologia e sociedade - tornam nosso campo único, realmente distinto de outras ciências, matemática e engenharia. Por que não celebrar essa distinção? Além disso, como mostrado pelas setas bidirecionais na figura 1, há uma maravilhosa interação - empurrar e puxar - entre esses três fatores: no ciclo usual, a descoberta científica alimenta a inovação tecnológica, que alimenta novas aplicações sociais; na direção inversa, a nova tecnologia inspira novos usos sociais criativos, que podem exigir novas descobertas científicas. Um exemplo de como a sociedade exige novas ciências: a disseminação de nossas próprias máquinas de computação e comunicação, de mega data centers de dezenas de milhares de servidores a bilhões de telefones celulares, requer novos avanços na ciência para usar a energia de maneira mais eficiente. Um exemplo de como a sociedade exige novas tecnologias: o desejo de obter uma fi lidade mais alta e ambientes virtuais mais realistas está sobrecarregando nossa capacidade de rede para a transmissão simultânea em tempo real de vários fluxos de dados multimídia (áudio, vídeo e texto). Outro exemplo de atração tecnológica é como um desejo social fundamental de expressar sua identidade e conectar-se com outras pessoas com o mesmo raciocínio levou ao rápido crescimento de redes sociais, como o Facebook, MySpace e YouTube, que por sua vez adicionou uma nova indústria ao nosso economia. Nosso campo antecipa naturalmente as tendências tecnológicas e abraça as demandas e expectativas da sociedade; portanto, comecemos com os direcionadores de tecnologia, então sociais e científicos. a) Drivers de tecnologia Começando no nível do substrato computacional, estamos prevendo o fim da lei de Moore nos próximos 10 a 15 anos(Engadget 2006). A consequência imediata para a tecnologia baseada em silício é a produção de máquinas com arquitetura de múltiplos núcleos; Phil. Trans. R. Soc. A (2008) Computational thinking 3723 o desafio é entender como programá-los para usar efetivamente sua capacidade de processamento paralelo. Além do silício, observamos a nano-computação, a bio-computação e até a computação quântica. Em certo sentido, eles já chegaram. Nano está aqui: a IBM (2006) anunciou que seus pesquisadores construíram o primeiro circuito integrado completo em torno de uma única molécula de nanotubo de carbono. A biografia está aqui: Adleman (1994) resolveu o problema do caminho hamiltoniano de sete pontos com a computação de DNA; Benenson et al.(2004) descreveu na Nature a construção de um computador de DNA. Agora estamos construindo máquinas moleculares. Quantum está chegando? Os suíços (Messmer 2007) usar criptografia quântica para garantir cédulas em suas eleições. O design de nanoc-omputadores e computadores de inspiração biológica já deve levar em consideração os efeitos quânticos (por exemplo, Heller et al. 2005). No nível do dispositivo, Strukov et al.(2008) anunciaram que podem criar um memristor (Chua 1971), o quarto elemento que faltava, juntamente com o resistor, capacitor e indutor. Em escalas maiores, vemos um uso crescente de telefones celulares, etiquetas de identificação por radiofrequência, sensores, atuadores e robôs. Nossos automóveis estão cheios de computadores incorporados: um BMW é 'agora realmente uma rede de computadores' (Economist 2007). Em termos de dados, estamos nos afogando em dados (cf. §1b). Os sensores estão em toda parte, o armazenamento é barato e estamos em constante estado de sobrecarga de informações. Em termos de comunicação, a Web 3.0 ou a Web Semântica é uma área ativa de pesquisa. Veremos mundos virtuais mais sofisticados; O Second Life é o mosaico de hoje. Os cientistas e engenheiros de amanhã conduzirão seu trabalho através de organizações virtuais, facilitando a colaboração internacional. Em termos de máquinas tecnológicas de longo alcance, as pessoas aspiram a construir máquinas que modelam o cérebro humano. A IBM e a EPFL Blue Brain Project (2005) O objetivo é criar um modelo funcional e biologicamente preciso do cérebro. A empresa iniciante Numenta (2005) está construindo uma plataforma de software para computação inteligente modelada após o neocórtex humano. Estas são apenas algumas tendências tecnológicas de hoje; será interessante ler esta seção deste artigo em 10 anos para ver onde estávamos e até onde iremos. b) Condutores sociais O sucesso de nossa tecnologia da informação, incluindo computadores e comunicações, aumentou as expectativas da sociedade em relação a nós. As pessoas agora exigem disponibilidade, 24 horas por dia, todos os dias, 100% de confiabilidade, 100% de conectividade, resposta instantânea, capacidade de armazenar tudo e qualquer coisa para sempre e capacidade de qualquer pessoa acessar qualquer coisa de qualquer lugar a qualquer momento. As classes de usuários de nossa tecnologia não se limitam a cientistas e engenheiros. Em vez disso, nossos usuários são jovens e idosos, capazes e deficientes, ricos e pobres, alfabetizados e analfabetos. Nossa tecnologia também deve suportar uma gama no número de usuários: de indivíduos a grupos, a populações e a sociedade global. Os indivíduos querem dispositivos e serviços altamente personalizados; as empresas de pesquisa realizam esse desejo rastreando nossas consultas e personalizando os anúncios que vemos. Grupos de amigos levam a redes maiores de conhecimento, como o LinkedIn, ou redes sociais, como o Facebook. Diferentes populações podem usar a informação e a tecnologia de rede para preservar sua herança cultural. Phil. Trans. R. Soc. A (2008) 3724 J. M. Wing A Internet e a World Wide Web juntas são um ótimo equalizador. Por outro lado, permanecem desafios científicos e técnicos em relação à responsabilidade, anonimato, gerenciamento de identidade e privacidade. Desafio no. 2. Como tornamos nossa tecnologia e a riqueza de nossos aplicativos acessíveis a todos? Como equilibramos abertura e privacidade? c) Drivers científicos Wing (2008) apresentou cinco 'questões profundas em computação', como uma maneira de nos lembrar de que existem desafios científicos subjacentes às nossas pesquisas individuais ou inovações em tecnologia. Repito esse conjunto (ou seja, nenhuma ordem implícita) de perguntas para fins de completude neste artigo. Esse conjunto deve ser um ponto de partida, com novas perguntas adicionadas por toda a comunidade. - P é igual a NP? - O que é computável? - O que é inteligência? - O que é informação? - (Como) podemos construir sistemas complexos simplesmente? Pergunta final. Dada (i) a filosofia do §1a, que afirma que o pensamento computacional é informado pelo nosso desejo de automatizar abstrações, onde o computador pode ser humano e / ou máquina, e (ii) as tendências tecnológicas descritas no §2a, que Para testar a adequação da teoria da informação de Shannon e da máquina de Turing como modelo fundamental da computação, podemos até fazer a pergunta mais básica de todas: o que é um computador? Agradeço às muitas pessoas que leram meu ponto de vista do Communications of the ACM de março de 2006 ou me ouviram falar sobre o pensamento computacional. A manifestação de apoio de todos tem sido gratificante. Agradeço também aos meus colegas da Carnegie Mellon e da Microsoft Research, que desde o início apoiaram minha visão para tornar o pensamento computacional comum, e aos meus colegas da National Science Foundation que ajudaram a aprimorar e aprofundar as idéias por trás dessa visão. Este artigo foi baseado no trabalho parcialmente apoiado pela National Science Foundation, enquanto trabalhava na Fundação. Qualquer opinião, conclusão e conclusão ou recomendação expressa neste material são de responsabilidade do autor e não refletem necessariamente as opiniões da National Science Foundation. Referencias Abraham, D., Blum, A. & Sandholm, T. 2007 Clearing algorithms for barter exchange markets: enabling nationwide kidney exchanges. In Proc. 8th ACM Conf. on Electronic Commerce, pp. 295–304. New York, NY: Association for Computing Machinery. Adleman,L.M.1994Molecularcomputationofsolutionstocombinatorialproblems.Science266, 1021–1024. (doi:10.1126/science.7973651) Benenson, Y., Gil, B., Ben-Dor, U., Adar, R. & Shapiro, E. 2004 An autonomous molecular computerforlogicalcontrolofgeneexpression.Nature429,423–429.(doi:10.1038/nature02551) Blue Brain Project 2005 See http://bluebrain.epfl.ch/. Bundy, A. 2007 Computational thinking is pervasive. J. Scient. Pract. Comput. 1, 67–69. Chua,L.1971Memristor—themissing circuitelement. IEEETrans.Circuit Theory18,507–519. Phil.Trans.R.Soc.A(2008) Computational thinking 3725 Economist 2007 Quote from R. Achatz, Seimens, from ‘Revving up’. The Economist, 11 October 2007. Engadget2006Seehttp://www.engadget.com/2007/09/19/gordon-moore-predicts-end-to-moores- law-in-10-years/. Fisher,J.&Henzinger,T.A.2007Executablecellbiology.Nat.Biotechnol.25,1239–1249.(doi:10. 1038/nbt1356) Heller,M.J.,Sullivan,B.&Dehling,D.2005FabricationofphotonictransferDNA–quantumdot nanostructures. In Technical Proc. 2005 NSTI Nanotechnology Conference and Trade Show, vol. 1, ch. 12, pp. 769–772. IBM 2006 See http://domino.watson.ibm.com/comm/pr.nsf/pages/news.20060324_carbonnano- tube.html. MachineLearningDepartment2008Researchprojectshomepage,CarnegieMellonUniversity.See http://www.ml.cmu.edu/research/index.html. Messmer, E. 2007 Quantum cryptography to secure ballots in Swiss election. Network World, 11 October 2007. See http://www.networkworld.com/news/2007/101007-quantum-cryptography- secure-ballots.html. Numenta 2005 See http://www.numenta.com. Strukov,D.B.,Snider,G.S.,Stewart,D.R.&Williams,R.S.2008Themissingmemristorfound. Nature 453, 80–83. (doi:10.1038/nature06932) Wing, J. M. 2006 Computational thinking. Commun. ACM 49, 33–35. Wing, J. M. 2008 Five deep questions in computing. Commun. ACM 51, 58–60. (doi:10.1145/ 1327452.1327479) Phil.Trans.R.Soc.A(2008)