Todo o sistema que você usa, sistema operativo, navegador web, etc. é tudo programado por alguém, os programadores. Ora isso envolve apenas conhecimento de uma linguagem de programação e de arquitetura de sistemas. E o que é uma linguagem de programação?

O computador digital surgiu em resposta à necessidade do homem quanto a maneiras mais rápidas e eficientes de realizar grandes computações numéricas. Tais computações originam-se em situações práticas, como na solução de problemas de projeto de engenharia, bem como no decorrer de tentativas teóricas, tal como a de procurar localizar números primos. Tarefas como estas podiam ser executadas sem o auxilio da tecnologia do computador, mas em muitos exemplos seus valores seriam negados pelos seus custos em homem-horas e em resistência humana.

Qualquer pessoa que tenha vivido num período onde estas máquinas não eram assim tão populares consegue entender o quanto se evoluiu nesta área, atingindo-se um alto e crescente nível de automatização. 

Este nível de desenvolvimento da informática tem permitido acelerar a realização de tarefas e torna possível a realização de atividades impensáveis há alguns anos atrás. A automação bancária, os equipamentos informatizados para a medicina, as redes de computadores, os sistemas multimídias, os videogames, são apenas alguns poucos exemplos de serviços e de alternativas de lazer que os computadores têm oferecido ao ser humano. Neste artigo, será relatada uma parte da "aventura" que nos permitiu ter, nos dias as poderosas máquinas e aplicações que nos rodeiam, através de como funcionam as arquiteturas de computadores, desde os primórdios da informática ou da Ciência da Computação. 


Conceito de Computador Digital e Sua Estrutura

Mas o que seria um computador? - este pode ser definido como sendo uma máquina capaz de sistematicamente coletar, manipular e fornecer os resultados da manipulação de informações para um ou mais objetivos. Também pode ser definido como sendo uma máquina cuja função é resolver problemas através da execução de instruções que lhe são fornecidas. É constituído basicamente de dispositivos eletrônicos e eletromecânicos que permitem transmitir, guardar e manipular informações. Daí também ser chamado de equipamento de processamento eletrônico de dados.

O Processamento de dados consiste em extrair informação de dados. A extração de informação não é nada mais do que uma análise de conteúdo dos dados em questão e as relações retiradas dessa análise. Poderá também ser apenas a análise a frio, como por exemplo, número de dias do ano em que choveu número de cidades com problemas de tráfego, altura média de pessoas do sexo masculino em Portugal. A figura abaixo ilustra as etapas básicas de um processamento de dados. Dentro do contexto de computação, é importante diferenciar os termos dado e informação, embora, algumas vezes, eles possam ser tratados como sinônimos.

Os dados referem-se a uma recolha de informações organizadas, normalmente o resultado da experiência ou observação de outras informações dentro de um sistema de computador, ou um conjunto de instalações. Os dados podem consistir em números, palavras ou imagens, as medições e observações de um conjunto de variáveis; informações, registro que identifica alguma coisa tanto objeto ou animal. Informação é o resultado do processamento, manipulação e organização de dados, de tal forma que represente uma modificação (quantitativa ou qualitativa) no conhecimento do sistema (pessoa, animal ou máquina) que a recebe.

Dados os conceitos de dado e informação, podemos novamente definir computador como sendo um sistema coordenado de procedimentos e equipamentos capazes de manipular e transformar dados segundo um plano determinado, produzindo resultados informativos a partir destes dados. Tais resultados são utilizados para tomada de decisões mais precisas a cerca de pesquisas, planejamentos e gerenciamentos.

O que diferencia o computador de outras máquinas é o fato de não ter sua utilização pré-estabelecida em seu projeto, sua função é estabelecida conforme os procedimentos considerados para se alcançar determinados objetivos. Tais procedimentos controlam os equipamentos, sendo a parte lógica de um sistema de computação, o que é denominado software (soft: leve, intangível; ware: equipamentos). A parte física, visível de um computador (seus equipamentos eletromecânicos e circuitos eletrônicos) é denominada hardware (hard: duro, sólido e ware: equipamento).


Programação e o Conceito de Algoritmo

Programação é o processo de escrita, teste e manutenção de um programa de computador. O programa é escrito em uma linguagem de programação, embora seja possível, com alguma dificuldade, escrevê-lo diretamente em linguagem de máquina. Diferentes partes de um programa podem ser escritas em diferentes linguagens. Cada linguagem de programação tem a sua semâtica e sintaxe, como em qualquer linguagem, por exemplo, a lingua portuguesa. Por esse motivo, os programadores podem criar programas muito diferentes para diferentes linguagens; muito embora, teoricamente, a maioria das linguagens possa ser usada para criar qualquer programa.

Um Software é composto por instruções que podem ser executadas diretamente por um processador dizemos que está escrito em linguagem de máquina. A execução de um software também pode ser intermediada por um programa interpretador, responsável por interpretar e executar cada uma de suas instruções. Um programa de computador é composto por uma sequência de instruções (algoritmos), que é interpretada e executada por um processador ou por uma máquina virtual. Em um programa correto e funcional, essa sequência segue padrões específicos que resultam em um comportamento desejado. Um programa pode ser executado por qualquer dispositivo capaz de interpretar e executar as instruções de que é formado. Para realizar uma determinada ação, um computador necessita de instruções precisas, completas e finitas sobre cada passo a executar. Por exemplo, para um computador calcular a área do círculo usando a fórmula p.r2, com um valor numérico para o raio do circulo (r) como dado de entrada, temos os seguintes passos:

  1. Ler o valor numérico para o raio do circulo e armazená-lo na memória.
  2. Calcular o valor da área usando a fórmula p.r2 e armazená-lo na memória.
  3. Imprimir e/ou mostrar no monitor os valores dos raios e áreas correspondentes.
  4. Parar.


Os passos ordenados constituem o que é denominado algoritmo. Um algoritmo é um conjunto finito de regras que fornece uma sequência de operações para resolver um problema específico. Um algoritmo opera sobre um conjunto de entradas (no caso do bolo, farinha ovos, fermento, etc.) de modo a gerar uma saída que seja útil (ou agradável) para o usuário (o bolo pronto). Um algoritmo tem cinco características importantes:

Finitude: 
Um algoritmo deve sempre terminar após um número finito de passos.

Definição: 
Cada passo de um algoritmo deve ser precisamente definido. As ações devem ser definidas rigorosamente e sem ambiguidades.

Entradas: 
Um algoritmo deve ter zero ou mais entradas, isto é informações que são lhe são fornecidas antes do algoritmo iniciar.

Saídas: 
Um algoritmo deve ter uma ou mais saídas, isto é quantidades que tem uma relação específica com as entradas.

Efetividade: 
Um algoritmo deve ser efetivo. Isto significa que todas as operações devem ser suficientemente básicas de modo que possam ser em princípio executadas com precisão em um tempo finito por um humano usando papel e lápis. 

Os passos de um algoritmo são as instruções que serão executadas pelas máquinas, as quais devem ser com uma linguagem que o computador "entenda". Assim, “um programa é a formalização de um algoritmo em linguagem inteligível pelo computador” (Guimarães/Lages). Linguagem de computador é uma coleção de cadeias de símbolos, de comprimento finito. Estas cadeias são denominadas sentenças de linguagem e são formadas pela justaposição de elementos individuais ou símbolos. A linguagem de um computador é baseada em impulsos elétricos (desligado (0) e ligado (1)). É uma linguagem de difícil manipulação e entendimento pelo ser humano, por isso foram desenvolvidas linguagens de programação mais próximas da linguagem humana (Pascal, Fortran, C etc.). Estas linguagens apresentam uma sintaxe rígida sobre a qual são construídas as descrições de cada passo de um algoritmo e são denominados linguagens de alto nível. As linguagens de alto nível são transformadas em linguagem de computador (linguagem de baixo nível ou de máquina) por programas interpretadores e tradutores.

Programas tradutores substituem cada instrução da linguagem de maior nível por uma sequência equivalente de instruções em linguagem de baixo nível. O computador então executa o novo programa em linguagem de baixo nível em vez do programa em uma linguagem de maior nível. Programas interpretadores recebem os programas escritos em linguagem de maior nível como dados de entrada e efetuam a execução examinando uma instrução de cada vez e executando a sequência equivalente de instruções em linguagem de baixo nível diretamente.


Estrutura de Controle

Estrutura de controle refere-se à ordem em que instruções, expressões e chamadas de função são executadas ou avaliadas em programas de computador sob programação imperativa ou funcional.
Os tipos de estruturas de controle disponíveis diferem de linguagem para linguagem, mas podem ser cruamente caracterizados por seus efeitos. O primeiro é a continuação da execução em outra instrução, como na estrutura sequencial ou em uma instrução jump. O segundo é a execução de um bloco de código somente se uma condição é verdadeira, uma estrutura de seleção. O terceiro é a execução de um bloco de código enquanto uma condição é verdadeira, ou de forma a iterar uma coleção de dados, uma estrutura de repetição. O quarto é a execução de instruções distantes entre si, em que o controle de fluxo possivelmente volte para a posição original posteriormente, como chamadas de subrotinas e corotinas. O quinto é a parada do programa de computador. Em nível de linguagem de máquina, as instruções de estruturas de controle geralmente funcionam ao alterar o contador de programa. Para algumas CPUs, as únicas instruções de estruturas de controle disponíveis são os diversos tipos de jump condicional.


A importância dos Algoritmos para a Computação

No começo, quando alguém precisava desenvolver um programa, tinha que se preocupar com todos os aspectos relacionados ao seu desenvolvimento, desde como usar os recursos da máquina como disco, impressoras e tudo mais, até criar as soluções para o problema do usuário propriamente dito. Com o tempo começou-se a usar rotinas e bibliotecas bem definidas do sistema operacional para fazer a parte de mais baixo nível e os programadores passaram a se concentrar especificamente nos problemas de programas dos usuários. Em pouco tempo percebeu-se que muitas coisas eram feitas por todos os programadores com os mesmos objetivos, mas de formas um pouco diferentes, esse tipo de trabalho dobrado acabava por consumir muito tempo.

Então sabendo que um algoritmo é uma forma de resolver um problema podemos falar de sua importância. Se precisarmos resolver um problema para o qual existe um algoritmo, basta consultar os livros e materiais sem ter que se preocupar em inventar novamente a solução. Embora pareça óbvio pode não ser, muitas vezes as pessoas acabam refazendo as coisas que já estão documentadas por aí. Existem diversos motivos para isso acontecer e um dos mais fortes é a vontade individual de desenvolver uma ferramenta ou biblioteca que faz alguma coisa interessante. A maior parte do desenvolvimento que temos no mercado se concentra em criar soluções para problemas do usuário utilizando o máximo possível de ferramentas fornecidas por alguma empresa. O resultado é que alguns dos programadores acabam ficando frustrados por nunca fazer alguma coisa realmente desafiadora.

Conhecer os algoritmos existentes e (pelo menos onde encontrar) suas implementações pode economizar tempo precioso na entrega de um produto de software. Durante os cursos nas faculdades aprendemos, por exemplo, alguns algoritmos de ordenação de dados e como se aplicam as diversas estruturas de dados que existem. Em algumas linguagens de programação esses algoritmos já estão disponíveis, e quando não é o caso já existem bibliotecas para usá-los. Saber usar esse recurso torna-se vantajoso não só porque agiliza o desenvolvimento, mas porque muitas vezes aumenta a qualidade do produto final. Quando criamos um código inteiro por nossa conta, temos que executar muitos testes para garantir que tudo está funcionando como deveria, mas se estivermos criando uma biblioteca de funções ao mesmo tempo em que criamos um produto que se utiliza dessa biblioteca dificilmente teremos o tempo necessário para realizar a quantidade de testes necessária a garantir a qualidade esperada.

A mistura de visões pode ser um grande problema para o programador. É necessário conhecer bem os diferentes papéis que podemos exercer durante o desenvolvimento e conhecer as ferramentas a mão. O conhecimento de formas de solução de problemas á um grande aliado na entrega de produtos de forma rápida e com maior qualidade. O Computador é uma máquina capaz de executar variados tipos de tratamento automático de informações ou processamento de dados. Exemplos de computadores incluem o ábaco, a calculadora, o computador analógico e o computador digital. Um computador pode prover-se de inúmeros atributos, dentre eles armazenamento de dados, processamento de dados, cálculo em grande escala, desenho industrial, tratamento de imagens gráficas, realidade virtual, entretenimento e cultura.

No passado, o termo já foi aplicado a pessoas responsáveis por algum cálculo. Em geral, entende-se por computador um sistema físico que realiza algum tipo de computação. Existe ainda o conceito matemático rigoroso, utilizado na teoria da computação. Os computadores fazem parte da vida corrente e são, hoje em dia, aparelhos quase tão familiares como os telefones, os televisores e os frigoríficos. Se ainda há pessoas (cada vez menos) que os olham com desconfiança, é porque foram condicionadas nesse sentido. É um pouco como os peles-vermelhas, que tinham medo que os fotografassem, porque isso lhes roubava a alma. Quem quisesse mesmo tirar-lhes o retrato, ou o fazia às escondidas, ou explicava pacientemente que aquilo não interferia com a vida eterna.

Tal como os computadores, os programas são coisas diferentes para pessoas diferentes. Ou até coisas diferentes para a mesma pessoa, consoante a perspectiva em que ela se coloque. Uma definição circular: um computador é uma máquina programável e um programa é uma sequência de instruções para um computador! Não faz mal, que a gente percebe. No entanto, há uma certa vantagem em libertar a noção de programa da de computador.