Aprendendo a pensar como a máquina

 Não existe uma linguagem padrão para construção de algoritmos mas normalmente em escolas e faculdade brasileiras, onde são ministradas aulas de programação de computadores, constuma-se adotar uma pseudo-linguagem computacional chamada Portugol. O Portugol visa aproximar o aluno da forma de “pensar” dos computadores antes que ele ponha a mão na massa, programando computadores com linguagens mais complexas como Pascal ou C. Normalmente programas escritos em Portugol são executados nos chamados “testes de mesa” que consistem em programas escritos e testados no papel e lápis, sem auxílio de um computador. Nesse caso a lógica de depuração e execução fica totalmente a cargo do cérebro do aluno, forçando-o a pensar como uma máquina ao resolver um problema. Existem também alguns simuladores de Portugol onde é possível testar seus algoritmos no computador, facilitando o trabalho, como o programa exibido na figura abaixo (Portugol IDE 2.0).  

 Esse pequeno algoritmo tem o objetivo de exibir na tela a tabuada de um número escolhido previamente pelo usuário do programa. Ele tem inicio e fim bem definidos e logo na segunda linha temos as declarações das variáveis numero, resultado e i, a serem usadas no decorrer do programa. Essas variáveis são pedacinhos da memória do computador onde os dados são armazenados temporariamente até o fim de sua execução. Na terceira linha o programa escreve na tela a pergunta referente a qual numero o usuário deseja ver a tabuada. Em seguida ele especifica que o número que o usuário digitar deve ser armazenado na variável numero. Na quinta linha o programa exibe na tela o texto “Tabuada do” seguido do conteúdo da variável numero e depois especifica um pulo para a próxima linha da tela (realizado pelo carácter “\n”). O próximo comando consiste em um laço, ou seja, um trecho de instruções que é repetido até que uma condição seja alcançada. Nesse caso o comando “para i de 1 ate 10 passo 1” irá somar 1 à variável i a cada vez que as instruções contidas entre o “para” e “proximo” forem executadas. Quando i atingir o valor 10 o programa sai do laço e executa a primeira linha depois de “próximo”, que nesse caso finaliza a execução do programa. Isso significa que as instruções contidas no laço serão executadas dez vezes, e o i funciona como um contador. A primeira instrução do laço atribui a variável resultado o conteúdo da variável i vezes o conteúdo da variável numero, que foi escolhido pelo usuário. Em seguida a instrução imprime na tela os resultados que podem ser observados na figura acima.

Bem, o exemplo anterior já nos dá uma ideia do modo como devemos enviar instruções a um computador se quisermos construir programas nele. A linguagem se parece um pouco com a nossa mas não é muito amigável à pessoas não familiarizadas com programação, e é por isso que não é tão trivial programar computadores. Estamos acostumados a transmitir informações e instruções através da linguagem natural, que é aprimorada naturalmente ao longo da vida do ser humano, e consequentemente muito familiar a ele. As máquinas utilizam uma linguagem artificial, geralmente criada com base na linguagem natural, mas muito mais limitada e objetiva. Observe que levei as 26 linhas e 286 palavras do parágrafo anterior para explicar o que um programa de 10 linhas e aproximadamente 42 palavras em Portugol faz. É a isso que me refiro quando falo de objetividade.

É possível dar instruções aos computadores através de linguagem natural? Sim, e isso já ocorre em alguns projetos de robôs, carros, casas inteligentes e redes semânticas, mas existem limitações. Para Interpretar totalmente a complexidade envolvida na comunicação entre pessoas é necessário um nível de inteligência que um computador nativamente não possui. Acredito que, nesse caso, o principal problema com o modo como seres humanos se comunicam é a ambiguidade, ou seja, uma instrução pode levar a mais de uma interpretação dependendo de fatores como contexto da frase, expressão corporal, sarcasmo, entre outros. Computadores possuem sérios problemas com a ambiguidade já que são máquinas lógicas, determinísticas e sensorialmente muito limitadas. Em um exemplo simplista imagine uma máquina perguntando se você gostara de jantar mais cedo. Se a resposta for sim ou não tudo bem pois ela saberá o que fazer. Mas se você responder talvez? Isso é compreensível para nós, mas não para um computador, pelo menos não de forma direta.

Humanos me deixam confuso!

 

 Devido aos fatores já citados, a comunicação básica entre pessoas comuns e máquinas como computadores se dá de forma limitada às interfaces pré-definidas, usando de elementos simples como ícones e cliques de mouse, toques em uma tela, ou comandos em um prompt, que são facilmente identificáveis por ambos.

Como exemplo de ambiguidade na comunicação vou usar uma pequena piada geek tirada da internet:

Certa vez a mãe disse ao filho estudante de computação:

“Querido, por favor vá ao mercado e compre 1 caixa de leite. Se eles tiverem ovos, traga 6.

Ele retornou com 6 caixas de leite.

A mãe disse: “Porque diabos você comprou 6 caixas de leite?”.

Ele disse: “PORQUE ELES TINHAM OVOS!”.

Note que para uma pessoa comum, a ordem dada pela mãe significa que você deve trazer 1 caixa de leite, e caso haja ovos, trazer meia dúzia deles. Agora vamos analisar como um computador poderia interpretar tal instrução, que é o que o garoto da piada acabou por fazer:

Se tiverem ovos então
            traga 6 caixas de leite
senão
            traga 1 caixa de leite

Notou a diferença? O executor humano da instrução normalmente leva em consideração o contexto da frase e usa uma análise instantânea e involuntária para concluir que não faz muito sentido trazer 6 caixas de leite só porque há ovos no mercado. Esse tipo de interpretação provém de experiências anteriores do indivíduo com outras pessoas e a linguagem natural usada por elas, além de possuir um cérebro especializado em lidar com ambiguidades. Isso não é algo muito simples para uma máquina, pois ela não possui o recurso da experiência de vida nem dispõe de um cérebro tão complexo para tomar decisões frente à ambiguidades. Um segmento da ciência da computação conhecido como inteligencia artificial é o responsável por tentar atribuir esse tipo de característica aos computadores.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X