Pesquisar

quinta-feira, 15 de outubro de 2009

Ser programador - parte 2

Este artigo é a continuação do tema "Ser programador". No primeiro, tratamos de uma visão geral sobre o tema e neste abordaremos a história da programação, evolução das linguagens de programação e dicas para leituras complementares importantes.

Programar computadores é criar soluções para problemas de forma que a máquina consiga executar. É criar a receita para que a máquina possa gerar o resultado esperado. Existem diversas metodologias de criação de sistemas, que dividem o processo em etapas (onde uma delas é a implementação do programa), de modo a construir soluções melhores. No entanto, nosso foco aqui é apenas a fase de implementação e, prioritariamente, discutir um pouco da história da programação.

Como tudo começou? De onde viemos e para onde vamos? "Será que lá tem internet  :) ?"

A história da programação, obviamente, confunde-se com a história da própria computação. Pode não parecer, mas a computação existe antes mesmo da máquina que hoje chamamos de computador. Digo isto, pois computar é contar e, assim, computador é contador. Nesse sentido, qualquer máquina que faça contagem é um computador. Pergunto: você é um computador?

Gosto de pensar que o primeiro computador foi o próprio ser humano, que utilizava as mãos para contar. Penso, ainda, que sempre buscamos mecanismos que pudessem ser mais eficientes do que nós para realizar a contagem - entendida como um processo simples e trabalhoso. Chegamos, então, ao ábaco. É uma calculadora manual, uma máquina que permite realizar cálculos matemáticos. Sendo assim, é um computador, mas que não consegue armazenar programas nem seguir uma receita para a solução de um determinado problema e mais: não é de propósito geral, podendo apenas resolver cálculos básicos. Mas, observe, é preciso um conjunto de regras para operá-lo e obter os resultados. Podemos, inclusive, descrever uma solução para um determinado problema utilizando o ábaco na forma de um conjunto de passos a serem seguidos (um programa?!?).

[caption id="" align="aligncenter" width="247" caption="Primeira calculadora utilizada pelo homem: um ábaco representando o número 6302715408."]Primeira calculadora utilizada pelo homem: um ábaco representando o número 6302715408.[/caption]

A imagem acima foi obtida na Wikipedia. Veja mais sobre o Ábaco aqui.

Hoje, entendemos a palavra computador como uma máquina eletrônica de processamento de dados. Assim, certamente, quando falamos de programação de computadores não estamos pensando em construir software para o ábaco ou outro dispositivo mecânico. Mas, de fato, programar é construir um conjunto de instruções para que se possa obter a solução do problema. Nem mesmo estamos falando aqui que este conjunto de instruções deve ser executado por uma máquina X, podendo, por exemplo, ser executado por um homem. Este conceito envolve a idéia de algoritmos que todos nós já trazemos conosco. Todos sabemos o que devemos fazer para resolver um problema e, quando não sabemos, somos capazes de seguir (executar) uma sequência de instruções.

Programar é criar esta sequência de comandos. Algoritmo é uma sequência de instruções escrita em linguagem próxima da linguagem humana, mas não compreendidas pelas as máquinas. É uma representação da solução. Uma linguagem de programação é a representação do algoritmo em uma linguagem que permite a conversão para a linguagem que a máquina entende.

É importante fazer o link com a história da computação, não sem antes entender que ciência é esta. Em termos simplificados, a Ciência da Computação estuda o comportamento dos algoritmos. É estudar a execução das instruções. Segundo a Wikipedia, "Ciência da computação é o estudo dos algoritmos, suas aplicações e de sua implementação, na forma de software, para executação em computadores eletrônicos."

O surgimento da computação está intimamente ligado à evulução de conceitos matemáticos no decorrer do tempo. Vários personagens contribuíram para esta evolução, por exemplo, Al-Khwarizm, em 825, com a difusão do livro "Calculando com numeriais hindus" pela Europa, onde aborda o  sistema de numeração hindu-arábico. Posteriormente, a tradução de seu livro levou ao termo Algortimo. Podemos destacar, nesse contexto, o surgimento da Lógica Matemática, os números binários, a ágebra booleana, o uso de cartões perfurados em máquinas de tear (programa armazenado), o engenho analítico de Babbage (primeiro computador mecânico para o qual Ada Lovelace desenvolveu os primeiros programas). São muitas as contribuições que pavimentaram o caminho da computação que culminou com Alan Matison Turing, em 1936, com a "Máquina de Turing". Turing, buscando responder uma questão-desafio de David Hilbert sobre procedimentos efetivos, acabou formalizando o Algoritmo, definindo os limites da computabilidade e um modelo puramente mecânico para a computação.

Melhor do que descrever aqui toda a história da computação é ler o excelente livro (gratuito e disponível online) do professor Cléuzio Fonseca Filho, abaixo:
Historia Da Computação

Pensando em Linguagens de Programação é interessante perceber que sua evolução acompanha a evolução dos conceitos e da máquina. Certamente, as linguagens buscam implementar os conceitos aprendidos e depende do poder de processamento dos computadores. "Uma linguagem de programação é um método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas e semânticas usadas para definir um programa de computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias."

Cursos Online 24 Horas

Cursos On-line com Certificado
- Cursos 24 Horas


Incialmente, antes do surgimento das linguagens de programação como conhecmos atualmente, a linguagem utilizada para programar um determinado computador era definida conforme a arquitetura da máquina, com instruções que eram interpretadas diretamente pelo processador. Neste caso, os programadores deveriam conhecer o funcionamento interno da máquina para escrever o programa (basicamete eram seus inventores). E mais, a linguagem era composta por dígitos binários - a linguagem do computador. Imagine escrever uma sequência de passos somente usando os dígitos zero e um. Cada instrução era uma sequência de zeros e uns. Esta linguagem é chamada linguagem de máquina.

Depois, visando produtividade foram criados programas em linguagem de máquina capazes de converter um código escrito em alguma linguagem de programação em linguagem de máquina. Isto permite que os programadores escrevam o código sem a necessidade de entender completamente o funcionamento interno da máquina, bem como possibilitou a criação de uma gama de linguagens diferentes, com propósitos e recursos próprios.

Para fins de estudo, as linguagens foram classificadas em gerações. As primeiras, também chamadas de linguagens de baixo nível, são classificadas na primeira geração. Aqui, As instruções de programação eram submetidas através dos interruptores localizados no painel frontal de sistemas de computadores. O principal benefício na primeira geração é que o código escrito pelo usuário é muito rápido e eficiente, desde que este código seja diretamente executado pela Unidade Central de Processamento (CPU em inglês).

A segunda geração é representada pela linguagem de montagem ou assembly, que é uma notação legível por humanos para o código de máquina que uma arquitetura de computador específica usa. A linguagem de máquina, que é um padrão de bits, torna-se legível pela substituição de sequências binárias por símbolos mnemônicos (que lembram algo). Enquanto um computador sabe o que uma  hipotética (10110000 01100001) faz, para os programadores é mais fácil recordar a representação equivalente em instruções mnemônicas (MOV AL, 61h), por exemplo.

Já a Terceira Geração agrupa linguagens projetadas para ser entendidas por seres humanos, mesmo não sendo linguagens complexas como a própria linguagem humana. São, ainda, linguagens procedurais, isto é, focadas na construção de uma solução para um determinado problema, onde o programador especifica os passos queo computador deve seguir. Nestas linguagens dizemos como se deve fazer. Fortran, ALGOL e COBOL são algumas das primeiras linguagens desse tipo. A maioria das linguagens "modernas" (BASIC, C, C++) são de terceira geração. A maioria das linguagens de terceira geração suportam programação estruturada.

O surgimento da Quarta Geração (note que a classificação é didática) advém das linguagens onde especificamos o que deve ser feito e a própria linguagem constrói a solução. São linguagens orientadas à aplicação que geram código a partir de expressões de alto nível. Estão incluídas aqui as linguagens de consulta a banco de dados, DBASE etc. A idéia é tornar a dependência de um programador menor e aproximar ainda mais da linguagem humana.

Quinta Geração: aqui se encontram as linguagens orientadas à inteligência artificial. São criadas bases de conhecimentos, obtidas a partir de especialistas, e as linguagens fazem deduções, inferências e tiram conclusões baseadas nas bases de conhecimento. São linguagens de programação que utilizam ainda mais sintaxe semelhante à do inglês do que as linguagens de quarta geração; algumas vezes é chamada de linguagem natural. Temos como componentes o Lisp, o Prolog, o Gofer.

Um artigo interessante sobre as linguagens de programação no tempo encontrado na net é o "Computadores e Programação: História e Conceitos" (aula em curso de pós-graduação na EEFEUSP), disponível em http://puig.pro.br/programming/Programming.jsp?Slide=1

Tim O’Reilly, conhecido como o criador da expressão Web 2.0, fundador do site O’Reilly, criou um pôster em PDF, chamado de History of Programming Languages. O pôster conta a História das Linguagens de Programação nós últimos 50 anos, onde atualmente são mais de 2.500 linguagens de programação diferentes.

History of Programming Languages

Percebe-se que existe uma vasta gama de linguagens de programação e a tarefa de escolher uma delas é árdua. O melhor é especializar-se em escrever soluções algorítmicas e nas características das linguagens. Assim, dado um problema e sua solução, deve-se analisar as características necessárias de uma linguagem para a implementação.

Note que um dos problemas da profissão é justamente acompanhar a evolução das linguagens ao mesmo tempo em que se especializa em alguma delas. Veja o ranking das linguagens de programação 2009 aqui.

No próximo artigo falaremos sobre os paradigmas de programação, suas características e representantes. Vale a pena conferir.

Nenhum comentário:

Postar um comentário