Pular para o conteúdo principal

Introduction to computers #tradução [sem revisão, em andamento]

Uma pequena observação sobre a tradução deste texto: Richard P. Feynman escreve de maneira bastante informal, algumas vezes usando xingamentos e palavras expressivas como "dumb", "stupid", "stretch our clerck" e, infelizmente, a moralzinha que mora dentro de mim não me deixa traduzir fielmente essas palavras e expressões. Ao longo do texto, elas são traduzidas de uma maneira menos ofensiva, mas vou procurar sempre tentar transmitir o pensamento do autor. A indicação é que as pessoas sempre leiam o original, afinal de contas, essa tradução é apenas para documentação específica dos meus estudos, mas deixo disponível aqui pra eventuais curiosos.



Introdução a computadores [em andamento]

Computadores podem fazer muitas coisas. Eles podem somar milhões de números num piscar de olhos. Eles podem enganar grandes mestres de xadrez. Eles podem guiar armas para seus alvos. Eles podem reservar seu assento em um avião entre um guitarrista e um professor de física não-fumante. É uma grande variedade! Então, se nós vamos falar sobre computadores, é melhor decidirmos agora sobre quais deles vamos falar e como.

Na verdade, nós não vamos gastar muito tempo falando sobre máquinas individualmente. A razão para isso é porque uma vez que você chega até as entranhas dos computadores, você percebe que eles, assim como as pessoas, são mais ou menos parecidos. Eles podem se diferenciar por suas funções, pela natureza de seus inputs e outputs - um pode produzir música, outro imagens, enquanto um pode funcionar através de um teclado, outro através da torção das rodas de um automóvel - mas no fundo, eles são muito similares. Nós vamos, portanto, permanecer apenas em suas entranhas. Além disso, nós não vamos presumir nada sobre suas estruturas específicas de Input/Output (I/O), sobre como as informações chegam e saem da máquina; tudo pelo que nos importamos é que, embora o input chegue, é através de uma forma digital, e seja o que for que acontece com o output, as últimas partes vistas dele, é digital também; por digital, eu quero dizer números binários: os 1 e 0.

Como que um computador parece por dentro? Cruamente, ele é construído de uma série de simples elementos básicos. Esses elementos não tem nada de especial - eles podem ser válvulas de controle, por exemplo, ou miçangas em um fio de ábaco [or beads on an abacus wire] - e existem muitas escolhas possíveis para a configuração básica. Tudo o que importa é que eles podem ser usados para construir tudo o que quisermos. Como eles são organizados? De novo, haverá muitas possíveis escolhas; a relevância da estrutura é possivelmente determinada por considerações como velocidade, dissipação de energia, estética ou o que você tiver/quiser. Deste modo, a varidade de computadores é meio como a variedade de casas: um apartamento em Bervely Hills pode parecer totalmente diferente de uma casa nos Yonkers, mas ambos são construídos com as mesmas coisas - tijolos, argamassa, madeira, suor - só que o apartamento tem mais disso, e é planejado de maneira diferente de acordo com a necessidade de seus donos. No fundo, eles são muito parecidos.

Deixe-nos pegar um pequeno resumo do momento e perguntar: como e com quais conjuntos de elementos você se conecta para fazer a maior parte das coisas? É uma pergunta profunda. A resposta, de novo, é que até certo ponto, isso não importa. Uma vez que você tem um computador que pode fazer algumas coisas - estritamente falando, um computador que tenha uma "configuração suficiente" de procedimentos básicos - ele pode fazer qualquer coisa que outro computador possa fazer. Isso, francamente, é a base para o grande princípio da "Universalidade". Uau! Você chora. Minha calculadora de bolso não pode simular o ponto vermelho em Júpiter como o banco de supercomputadores de Cray. Sim, ela pode: ela precisaria de uma religação e precisaria de melhorar a velocidade da memória, e seria muito lenta, mas se fosse longa o suficiente, ela poderia reproduzir qualquer coisa que os Cray podem fazer. Em geral, suponha que nós temos dois computadores A e B, e nós sabemos tudo sobre A - como funciona, suas regras de transmissão de dados, e tudo o mais. Presuma que a máquina B é capaz, apenas, de descrever o estado de A. Nós podemos, então, usar B para simular o processamento de A através da descrição de suas transições sucessivas; B irá, em outras palavras, imitar A. Pode levar uma eternidade fazendo isso se B é muito primário e A muito sofisticado, mas B será capaz, eventualmente, de fazer qualquer coisa que A é capaz. Nós provaremos isso mais tarde através de um computador B, conhecido como a máquina de Turing.

Vamos olhar para a universalidade de outra maneira. A linguagem fornece um útil código de analogia. Deixe-me perguntá-lo isso: qual é a melhor linguagem para descrever algo? Diga: veículo de quatro-rodas e operado a gasolina. Claro, a maioria das linguagens, pelo menos no Oeste, tem uma palavra simples para isso; nós temos "automóvel", o Inglês pode dizer "car", o Francês "voiture", e por aí vai. No entanto, existirão algumas linguagens que não vão ter uma palavra para "automóvel", e os falantes de tais línguas terão que inventar uma, possivelmente longa e complexa, uma descrição para o que eles vem, nos termos de seus elementos básicos da linguística. Ainda, nenhuma dessas descrições é inerentemente "melhor" do que qualquer outra: elas cumprem seu trabalho, e irão apenas diferenciar através da eficiência. Não precisamos introduzir a democracia apenas no nível das palavras. Nós podemos ir até o nível dos alfabetos. Qual, por exemplo, é o melhor alfabeto para Inglês? Ou seja, porque nos prendermos ao nosso comum de 26 letras? Tudo o que nós podemos fazer com essas, nós podemos fazer com três símbolos - o código Morse, ponto, traço e espaço; ou dois - cifra Baconiana, com A ao invés de Z representada através de números binários de 5 dígitos. Então, é possível ver que nós podemos escolher nossa configuração básica de elementos com muita liberdade, e toda essa escolha realmente afeta a eficiência em nossa linguagem, e, daí, o tamanho de nossos livros: não há "melhor" linguagem ou alfabeto - todas são logicamente universais, e qualquer uma pode modelar a outra. Voltando a computação, universalidade, na verdade, afirma que o conjunto de tarefas complexas podem ser realizadas usando um conjunto "suficiente" de procedimentos básicos e é independente da específica, detalhada estrutura do conjunto/configuração.

Para os computadores de hoje realizarem uma tarefa complexa, nós precisamos determinar e completar a descrição de como fazer a tarefa nos termos de uma sequência de simples procedimentos - o "software" - e nós precisamos que a máquina leve esses procedimento em uma ordem especificada - esse é o "hardware". Essas instruções tem que ser exatas e claras [unambiguous]. Na vida, claro, nós nunca dizemos uns aos outros exatamento que queremos dizer; nós nunca precisamos, com contexto, linguagem corporal, familiaridade com o interlocutor, e por aí vai, [essas coisas] permitem "preencher o vazio" e resolver qualquer ambiguidade que pode ser dita. Computadores, no entanto, ainda não podem "acompanhar" ao que é dito da maneira que as pessoas fazem. Eles precisam receber em mínimos detalhes [they need to be told in excruciating details] exatamente o que fazer. Talvez um dia nós tenhamos máquinas que possam lidar com descrições aproximadas das tarefas, mas por enquanto nós temos que ser muito certinhos sobre como dizer aos computadores o que fazer.

Vamos examinar como nós podemos construir instruções para um conjunto de elementos rudimentares. Obviamente, se a instrução para o conjunto B (digamos) é muito simples, então um processo complexo irá levar uma grande quantidade de descrições, e os "programas" resultantes serão muito longos e complicados. Nós podemos, por exemplo, querer que nosso computador realize todo tipo de cálculos numéricos, mas percebemos que a configuração de B não inclue a multiplicação como uma operação distinta. Se nós dissermos para nossa máquina multiplicar 3 por 35, ela vai zer "o quê?" Mas, digamos que B tenha adição; se você pensar neste sentido, perceberá que nós podemos fazê-la multiplicar através da adição várias vezes - neste caso, adicione 35 a ela mesmo duas vezes. No entanto, esclarecerá claramente a escrita de programas de B se nós aumentarmos a configuração de B com instruções separadas de "multiplicação", definidas por partes básicas de instruções de B, que irão fazer a multiplicação. Então, quando quisermos multiplicar dois números, nós diremos "computador, 3 vezes 35", e ele reconhecerá a palavra "vezes" - é apenas um monte de adição, que vai e funciona. A máquina quebra essas instruções compostas em elementos básicos, nos livrando de termos que lidar com os conceitos em seus níveis mais primários o tempo todo [saving us from getting bogged down in low level concepts all the time]. Procedimentos complexos são, portanto, construídos etapas por etapas. Um outro processo similar acontece na vida cotidiana; alguém substitui um conjunto de ideais e conexões entre elas por uma única palavra. Para referir-se a essas ideias e suas interconexões nós podemos usar apenas uma palavra, para evitar ter que voltar e trabalhar todos os níveis básicos de conceitos. Computadores são objetos tão complicados que simplificar ideias como essas é, geralmente, necessário, e um bom design [desenho] é essencial se você quer evitar ficar completamente perdido em detalhes.

Nós devemos começar pela construção da configuração de procedimentos primitivos e examinar como performar operações tais como adição de dois números ou transferência de dois números do armazenamento de uma memória a outra. Então iremos subir uma etapa, para a próxima ordem de complexidade, e usar essas instruções para produzir operações como multiplicação e assim por diante. Nós não devemos ir muito longe nessa hierarquia. Se você quiser ver até onde pode ir, o artigo em "Operating Systems" [sistemas operacionais] de P. J. Denning e R. L. Brown (Scientific American, Setembro, 1984, pp. 96-104) identifica treze etapas! Ele vai da etapa 1, que é dos circuitos eletrônicos - registros, portões, ônibus - ao número 13, o Sistema Operacional Shell, que manipula o ambiente de programação do usuário. Pela composição hierárquica de instruções, transferências básicas de 1s e 0s na etapa 1 são transformadas até o ponto em que chegamos à treze, em comandos que simulam aterrizagem de aeronaves em uma simulação ou que checam se um número de quarenta dígitos é primo. Nós vamos pular por essa hierarquia num nível/etapa bem baixo, mas no qual nós poderemos subir ou descer.

Também, nossa discussão estará restrita a computadores com a tão conhecida "arquitetura Von Neumann". Não se sinta intimidado (put off) pela palavra "arquitetura"; é apenas uma palavra grande para como nós organizamos as coisas, só que estamos organizando componentes eletrônicos ao invés de tijolos e colunas. Von Neumann foi um famoso matemático que, além de ter feito importantes contribuições para a fundação da mecânica quântica, também foi o primeiro a configurar, claramente, os princípios básicos dos computadores modernos. Nós também teremos a oportunidade de examinar o comportamento de vários computadores trabalhando no mesmo problema, e quando fizermos isso, nós nos restringiremos aos computadores que trabalham sequencialmente, ao invés de em paralelo; ou seja, aqueles que voltam para resolver partes de um problema ao invés de trabalhá-los simultaneamente. O que nós perderemos pela fala do "processamento paralelo" é velocidade, que não é nada fundamental.

Nós falamos antes sobre como a ciência da computação não é uma ciência realmente. Agora nós temos que renegar a palavra "computador" também! Veja, "computador" faz a gente pensar aritmeticamente - adicionar, subtrair, multiplicar, assim por diante - e é fácil assumir que isso é tudo que um computador faz. Na verdade, computadores convencionais, tipicamente, tem um lugar onde realizam suas matemáticas básicas, e o resto da máquina é para as tarefas restantes do computador, que é misturar bits de um papel por toda a parte [suffling bits of a paper around] - só que neste caso as notas do papel são sinais digitais eletrônicos. De várias formas, um computador é a reminisciência da burocracia de arquivos funcionários, correndo para trás e para frente com seus gabinetes de arquivos, tirando arquivos e colocando-os de volta, rabiscando bits de um papel, passando notas de um para o outro, e por aí vai; e essa metáfora, de um funcionário misturando os aquivos de um escritório, é um bom local para começar a pegar as primeiras ideias da estrutura de um computador. Nós iremos adentrar em alguns detalhes, e a sua impaciência talvez pense em muitos detalhes, mas esse é um modelo perfeito de comunicar a essência de o que um computador faz, e, portanto, vale a pena gastar algum tempo nisso.

1.1 O modelo arquivista
Vamos supor que nós temos uma grande companhia, que emprega muitos vendedores. Uma impressionante quantidade de informações sobre esses vendedores está guardada em um grande sistema de arquivos em algum lugar, e tudo isso é administrador por um arquivista/funcionário. Nós começamos com a ideia que o arquivista sabe como pegar a informação do sistema de arquivos. Os dados são guardados em cartões, e cada cartão tem o nome do vendedor, sua localização, o número e o tipo de vendas que ele faz, seu salário e assim por diante.



Agora, suponha que nós temos a seguinte pergunta, especificamente: "Qual é o total de vendas na Califórnia?" Muito tediosa e simples, e aqui está por quê escolhemos ela: você deve começar com perguntas simples para entender as difíceis depois. Então, como nosso arquivista encontra todas as vendas na Califórnia? Aqui está uma maneira que ele pode encontrá-las.

    Pegue o cartão
    Se "localização" é Califórnia, então
        Some os números de "vendas" em uma conta chamada
            "total"
    Coloque o cartão "vendas" de volta
    Pegue o próximo cartão e repita.

Obviamente você deve fazer isso até ter passado por todos os cartões. Agora, vamos supor que nós fomos azarados o suficiente para contratar, particularmente, funcionários obtusos, que conseguem ler, mas para os quais as instruções acima são mais do que conseguem: ou seja, eles não conseguem executar/manter as contas. Nós precisamos ajudá-los um pouco mais. Vamos inventar um cartão "total" para nosso funcionário usar. Ele vai usá-lo para ter uma execução total da seguinte maneira:

    Pegue o próximo cartão "vendas"
    Se Califórnia, então
        Pegue o cartão "total"
        Adicionei o número de vendas ao número no cartão
        Coloque o cartão "total" de volta
    Coloque o cartão "vendas" de volta
    Pegue o próximo cartão "vendas" e repita.

Essa é uma maneira muito mecânica de demonstrar quão cruamente um computador poderia resolver o problema da adição. Obviamente, os dados não estariam armazenados em cartões, e a máquina não teria que "pegar um cartão" - ela iria ler a informação armazenada a partir de um registro. Ela também poderia escrever um registro em um "cartão" sem ter que, fisicamente, colocá-lo de volta.

Agora nós vamos pressionar nosso funcionário! Vamos assumir que cada vendedor recebe não apenas o salário básico da companhia, mas também tem uma pequena comissão das vendas. Para descobrir quanto, nós multiplicamos suas vendas pela porcentagem apropriada. Nós queremos que nosso funcionário esteja ciente disso [to allow for this]. Agora ele é barato e rápido, mas, infelizmente, muito pateta para multiplicar. Se nós dizemos a ele para multiplicar 5 vezes 7 ele vai dizer "o quê?". Então nós temos que ensiná-lo a multiplicar. Para fazer isso, nós vamos explorar o fato de que tem uma coisa que ele faz bem: ele pode pegar os cartões muito muito rápido.

Tradução [grosseira] para fins de documentação pessoal de Lectures on Computation - Richard P Feynman. 1. Introduction to computers.

Comentários

Postagens mais visitadas deste blog

discussões da sociologia e psicologia #resumo

No centro destes capítulos estão: Lazarsfeld (sociologia) Lewin (psicologia) Seguindo os ânimos do capítulo anterior, senti que Heims continuou mostrando sua posição política nestes últimos capítulo - sutilmente. Ao iniciar o capítulo 8 com a frase "cybernetic ideas can be applied in the most diverse ideological context" ele anuncia o que está por vir. Os dois capítulos, assim como os anteriores, são separados por grupos de elite, que geralmente variam com temas focados em dois participantes com outros como satélites. No primeiro (8), temos um panorama geral das situações políticas nos Estados Unidos, os esforços, já anunciados, de intervenção governamentas dentro da produção acadêmica, levando, em alguns casos, à paralização da atividade acadêmica. Enquanto os encontro Macy não se abriam para as pessoas que pesquisam em torno de soluções para os problemas sociais relacionados ao racismo, ao anticomunismo, entre outros, houve uma discreta migração de pesquisadores qu

The Cybernetics Group - #resumo

Não foi fácil encontrar imagens de Heims, inclusive, esta foi a única que encontrei. As informações pessoais também vieram de apenas dois websites, que estão linkadas nesta apresentação. De acordo com a KeyWiki , Heims fugiu da Alemanha nazista para os Estados Unidos, onde conheceu sua esposa com a qual teve uma filha, a jornalista Leila McDowell-Head que, apoiada pelo seu pai, fez parte do Partido dos Pantera Negra. Segundo Wikipedia, os Pantera Negra tinha como finalidade original da organização era patrulhar guetos negros para proteger os residentes dos atos de brutalidade da polícia. Posteriormente, os Panteras Negras tornaram-se um grupo revolucionário marxista que defendia o armamento de todos os negros, a isenção dos negros de pagamento de impostos e de todas as sanções da chamada "América Branca", a libertação de todos os negros da cadeia e o pagamento de indenizações aos negros por "séculos de exploração branca". A ala mais radical do movimento defendia

A revolução vai acontecer na periferia - histórias e experiências do CCS em Vila Isabel

Apresento a vocês o vídeo "Histórias do Centro de Cultura Social - Vila Isabel (RJ)". Esse vídeo é uma edição de entrevistas realizadas para escrever o artigo de final de curso "A revolução vai acontecer na periferia - histórias e experiências do CCS em Vila Isabel", apresentado ao professor Henrique Cukierman, na disciplina de "Tópicos Especiais em Ciência-Tecnologia-Sociedade", do Programa de Pós-Graduação em História das Ciências e Técnicas e Epistemologia. Não sou profissional em edição ou gravação de vídeos, por isso peço que relevem a qualidade dos cortes e das gravações desfocadas. As músicas foram baixadas pela internet e estão disponíveis pelos próprios criadores das mesmas: FAQ (hip hop instrumental mix) - SoUnDWaVeS Salva a humanidade - Tom Zé Entrevistas: Davi Rodrigues Maurilio Rodrigues Beatrice Catarine Observação: a propaganda que aparece no vídeo é enviada pela gravadora do Tom Zé, porque utilizo um trecho de uma de suas músicas. Não mon