Um computador pode ser abstraído como duas caixas pretas razoavelmente simples: um processador, e uma memória. Cada passo de execução pode ser resumido assim:
A memória pode executar duas operações: retornar o valor que está em um endereço M e guardar um valor no endereço M. O processador, no entanto, pode executar mais operações, como somar dois números, subtrair dois números, comparar dois números, ou mudar o valor de M dependendo de algum número armazenado em algum lugar.
Essa arquitetura permite que tanto o processador quanto a memória sejam razoavelmente simples, precisando realizar poucas operações para o bom funcionamento de um computador. Computadores de verdade são mais complexos que isso (as principais diferenças são em dispositivos de entrada/saída e execução simultânea de vários programas).
É bom notar que o que permite que esse modelo de computação possa, em princípio, computar qualquer resultado, é a interação entre um processador simples (com capacidade de decisão) e uma memória mutável. Por isso, em programação, falaremos de expressões como
x = x + 1que, nesse contexto, devem ser interpretadas como "guarde no valor de memória representado pela variável x o resultado do cálculo da expressão "x+1", onde "x" representa o valor atual no lugar de memória representado pela variável x.
Ao longo do curso, aprenderemos vários tipos diferentes de comandos, e sempre será interessante voltar para esse modelo simples (ou extensões dele) para entender como eles funcionam. Alguns exemplos são:
Um computador, então, precisa executar uma sequência de operações para fazer o que ele faz. Qualquer sequência de operações bem-definida e finita que resolve um problema é chamada de "algoritmo" para aquele problema. Por exemplo, um algoritmo pra você ordenar uma lista de números é você, enquanto tiver um par adjacente de números fora de ordem, trocá-los. Um exemplo de uma sequência de passos que não é um algoritmo é dizer que um chatbot é feito de três módulos: um que lê o que é dito pra ele, outro que elabora mentalmente as respostas e outro que escreve essas respostas de volta. Isso não é um algoritmo por ser mal-definido.
Ao longo desse curso, voltaremos à idéia de algoritmo ocasionalmente, mas por agora sugiro que vocês pensem em "sequências de passos que podem resolver problemas/fazer contas".
Date: 2010-08-03 08:10:01 BRT
HTML generated by org-mode 6.21b in emacs 23