Capítulo V: Programação
Eduardo O C Chaves
No presente capítulo o nosso objetivo será levá-lo a:
-- entender o que é programação e o que é um programa;
-- compreender quais as várias etapas no desenvolvimento de um programa;
-- discernir a importância relativa de cada uma dessas etapas;
-- refletir sobre alguns critérios para a avaliação da qualidade de programas;
-- compreender a importância do aprendizado de programação.
1 - Etapas do Processo de Programação
Programação é o processo pelo qual se desenvolve a solução de um problema através do computador. E um programa é o conjunto das instruções que levam o computador a solucionar esse problema. O processo de programação envolve várias etapas, que, em linhas gerais, compreendem a identificação precisa e a definição do problema a ser resolvido, o desenvolvimento de uma solução para ele, através do computador, e a testagem dessa solução.
Mais esquematicamente teríamos:
- identificação e definição do problema;
- desenvolvimento de uma solução lógica para esse problema;
- codificação dessa solução em termos de uma linguagem aceitável a um computador;
- testagem e depuração da solução e de sua codificação;
- Preparação da documentação:
Muitas pessoas identificam programação apenas com a terceira das etapas descritas acima - a de codificação. Essa é uma atitude errônea, como veremos, pois na verdade a codificação de um programa é uma das fases mais simples, rápidas, e mesmo mais mecânicas da programação. É de certo modo lamentável que a partir da premissa (verdadeira) de que para escrever um programa para um computador é necessário conhecer uma linguagem de programação, tenha-se freqüentemente concluído (erroneamente) que quem conhece uma linguagem de programação é, em virtude desse fato, necessariamente, um programador.
Quem acabou de aprender sua primeira linguagem de programação fica freqüentemente preocupado diante do fato de que, embora tenha certeza de que conhece a linguagem, de que domina o seu vocabulário básico e compreende a sua sintaxe, tem grandes dificuldades para escrever um programa. Isso de certo modo é normal, pois conhecer uma linguagem e ter alguma coisa significativa para dizer naquela linguagem são coisas inteiramente distintas. Conhecer uma linguagem de programação, portanto, não implica, necessariamente, saber usá-la.
Vamos falar, brevemente, sobre cada uma das fases que são essenciais para o desenvolvimento de um programa, a fim de que você possa entender o que é, na realidade, programar.
A - Identificação e Definição do Problema
A primeira etapa no desenvolvimento de um programa é, naturalmente, ter um problema para resolver. Isso parece óbvio, e de fato é óbvio. Na prática, porém, constata-se que programadores iniciantes se deparam freqüentemente com a seguinte agonizante questão: sobre o que vou escrever meu programa? A questão não é tão fácil de resolver, pois, para escrever um programa, o programador precisa ter um problema que possa ser claramente identificado e definido e cuja solução através do computador possa, outras coisas sendo iguais, trazer mais vantagens do que sua solução por vias mais tradicionais.
A habilidade de programar é, pois, em grande parte, a habilidade de identificar problemas e de encontrar soluções eficientes, através do computador, para esses problemas.
Digamos, à guisa de exemplo, que eu seja muito esquecido, e que queira montar uma agenda de meus compromissos, com a ajuda do microcomputador. Esse um problema razoavelmente bem definido. Contudo, se meus compromissos do tipo "ir à escola todos os dias", "ir namorar aos sábados", e nada mais, pode não ser recomendável desenvolver uma agenda computadorizada (a menos que seja só para exercício) - é mais fácil fazer um quadro com os dias da semana numa folha de papel e colocar na porta do quarto.
Isso serve para mostrar que nem todo problema deve ou precisa ser solucionado com a ajuda do computador. Em alguns casos , como o que acabamos de ver, a solução mais eficiente do problema pode não ser a que emprega o computador.
Uma outra coisa de que você não deve se esquecer é que para escrever um programa que levará o computador a solucionar um problema, você tem que saber a solução primeiro. Vai ser impossível escrever um programa que efetue complicados cálculos científicos, se matemática avançada não é o seu forte. Vai ser difícil programar o computador para tocar uma fuga de Bach se você não entende nada de música. E assim por diante.
Procure, pois, para seus primeiros programas, problemas bem delimitados e com os quais você esteja relativamente bem familiarizado. Depois de alguma prática você pode progredir para problemas mais complicados, para cuja solução você terá até que fazer alguma pesquisa!
Aqui talvez seja o melhor lugar para eliminar um mal-entendido muito difundido sobre programação. Muitas pessoas acreditam que só conseguem programar um computador pessoas que têm facilidade com matemática. Não é verdade. Você pode escrever programas muito interessantes sem ser um gênio matemático. Na verdade, você precisa conhecer matemática apenas se os problemas que você quiser resolver com a ajuda do computador forem problemas matemáticos ou problemas que envolvam a matemática. Se não forem desse tipo, as únicas coisas realmente indispensáveis são: conhecer um determinado assunto relativamente bem (ou se dispor a aprender) e ter uma mente lógica (para ter uma mente lógica não e necessário, de modo algum, conhecer matemática, pois muito embora os matemáticos, em geral, sejam bons lógicos, há pessoas muito lógicas que pouco ou nada conhecem de matemática).
Você pode argumentar que conhecimento de uma linguagem de programação também é indispensável - e estaria fundamentalmente correto. Mas não é tão indispensável quanto os outros dois itens. Existem, hoje em dia, programas especiais que geram programas aplicativos em uma determinada linguagem a partir de especificações lógicas bastante precisas fornecidas pelo usuário. A lógica, portanto, é indispensável. O conhecimento da linguagem nem tanto. Mas já estamos entrando no assunto de nossa próxima seção!
B - Desenvolvimento da Solução Lógica
É virtualmente impossível fixar regras sobre como é que se encontra a solução de um problema. O desenvolvimento de uma solução para um determinado problema é realmente a parte mais criativa da programação. A melhor maneira de desenvolver certa habilidade nessa área é praticando. Identifique, de início, alguns problemas simples e ache a solução para eles. Você logo verá que, quanto mais problemas você solucionar, tanto mais desenvolvida e criativa se tornará sua habilidade de encontrar soluções para outros problemas.
Uma outra sugestão é estudar e analisar as soluções que outras pessoas encontraram para seu problemas. O estudo de programas escritos por outras pessoas freqüentemente nos ajuda a desenvolver certas técnicas e habilidades na área de programação. Compare a arte de programar com, por exemplo, a arte de escrever. Geralmente os bons escritores também são ávidos leitores, pois ao ler os trabalhos de outros escritores acabam por gerar uma série de idéias e por desenvolver determinadas técnicas que resultam no aperfeiçoamento de seu próprio trabalho. Na área de programação um fenômeno idêntico ocorre. Ao analisar o trabalho de terceiros, você freqüentemente descobre maneiras mais simples, mais eficientes, e, por que não, mais elegantes de resolver um determinado problema.
De qualquer modo, o desenvolvimento de uma solução se torna mais fácil quando:
- problema foi claramente delimitado e definido;
- você tem bom conhecimento do assunto;
- você tem bom conhecimento do computador com e para qual você vai escrever o programa (conhecimento do conjunto de suas instruções, ou da linguagem de programação nele implementada).
A solução de um problema terá que ser, em sua versão final, um conjunto de instruções ou procedimentos que, passo a passo e nos mínimos detalhes, levam o computador a executar as operações que são necessárias à resolução do problema. Uma seqüência de passos necessários à solução de um problema freqüentemente é chamada de um ALGORITMO.
Mas antes de chegar à versão final, o seu algoritmo pode passar por estágios intermediários, onde não terá tantos detalhes. À medida em que essas versões intermediárias se tornam aceitáveis, versões mais detalhadas de cada uma das partes da verão anterior podem ser desenvolvidas.
Vamos dar um exemplo de um problema que nunca seria solucionado através do computador, para que você possa se concentrar na busca de uma solução lógica.
Digamos que você esteja dirigindo seu carro na estrada e sinta que um pneu está furado. Você para o carro, verifica, e constata que seu pneu traseiro, da esquerda, está mesmo furado. Você terá que trocá-lo eis aí um problema.
Quais os passos necessários para resolver esse problema?
Em linhas gerais, você poderia escrever um algoritmo assim:
- levantar o carro;
- tirar o pneu furado;
- colocar o pneu sobressalente;
- abaixar o carro;
- fim.
Aí estaria uma primeira versão de um algoritmo. É uma versão errada? Não - a solução proposta é basicamente correta. A dificuldade está no fato de que não é muito detalhada. Alguém que não soubesse nada sobre o assunto possivelmente não conseguiria trocar seu pneu com essas instruções. O que fazer então? Temos que entrar em maiores detalhes, seja especificando mais pormenorizadamente as etapas já caracterizadas aqui, seja introduzindo novas etapas no processo.
Por exemplo: levantar o carro. Como é que se faz isso? É esta realmente a primeira coisa a fazer? Pode ser. Mas também pode ser necessário, antes disso, desligar o motor (caso ele esteja ainda ligado), acender a sinaleira de emergência, colocar o triângulo atrás do carro, colocar calço nas outras rodas (dependendo do lugar), etc. Está vendo como é possível pensar em várias outras coisas antes de começar a levantar o carro? Que tal verificar se há um pneu sobressalente no porta-mala? Se não houver, não há porque levantar o carro, não é mesmo? Nesse caso, a melhor solução para o problema talvez seja procurar um telefone e chamar um guincho. E assim por diante.
Até aqui lidamos com preliminares. Vamos dizer que tudo isso está em ordem, todas as precauções tomadas, há pneu sobressalente, ferramentas, etc.. Vamos para a fase de levantar o carro. O carro se levanta com um macaco. Há macaco no porta-mala? Se há, tudo bem - continue com o processo. Se não, chame o guincho. Suponhamos que haja um macaco. O que faz com ele? Onde ele é colocado? Depois de colocado, o que se faz? E assim por diante.
Passemos à etapa seguinte: tirar o pneu. Já concordamos que há ferramentas. Você pode escrever suas instruções de modo mais genérico dizendo "tirar as porcas" - como pode escrevê-las de maneira mais detalhada, como, por exemplo: tirar uma porca; verificar se há outras porcas a serem tiradas; caso não haja, tirar o pneu; caso ainda haja porcas a serem tiradas, repetir o processo de tirar uma porca, verificar se há outras porcas a serem tiradas, e assim por diante.
Acho que já deu para você entender "o espírito da coisa". Procure escrever um algoritmo bem detalhado para solucionar esse problema, ou um outro problema trivial qualquer - um algoritmo que mesmo o mais completo idiota possa entender a seguir.
Algo que você deve manter em mente ao preparar um algoritmo que represente uma solução para um dado problema é que embora certamente possa haver "soluções erradas" para um determinado problema (as quais, na realidade, não são soluções reais, pois, sendo erradas, ou não resolvem o problema ou o "resolvem" de maneira errônea, ou, o que às vezes acontece, resolvem um problema que não era o problema em questão), dificilmente haverá UMA solução que possa ser chamada de "a solução certa" e definitiva do problema. Qualquer solução que resolva o problema é, nessa ótica, uma solução certa.
Isso não quer dizer, porém, que não haja soluções melhores do que outras. Certamente há. Mas o sentido de "melhor", no caso, depende em grande parte do que se pretende com a solução em questão. As vezes precisamos de uma solução que tenha a forma de um programa que processe com grande rapidez - não tendo maiores preocupações com a quantidade de memória que essa solução venha a consumir no computador. Nesse caso, se há duas soluções alternativas para o nosso problema, vamos achar melhor a que processa mais rapidamente, mesmo que consuma mais espaço de memória, as demais coisas sendo iguais.
Se, porém, por outro lado, o seu computador tem memória reduzidíssima, um programa que possa "rodar" nele (isto é, que possa ser executado por ele) é preferível a um que não possa, mesmo que este último seja muito mais rápido, pois de que adianta um programa rapidíssimo que você não pode usar? E assim por diante. Há, portanto vários critérios, ou ângulos, a partir dos quais se pode avaliar um programa, ou uma solução proposta para um dado problema. De alguns desses ângulos, solução A pode ser melhor que solução B. De outros, o inverso pode ser verdadeiro. De outros, pode não ser muito fácil decidir entre as duas.
Ao procurar uma solução para um problema, portanto, você deve levar em consideração também fatores externos, como o tipo de equipamento em que o programa eventualmente vai ser utilizado, sua capacidade de memória, etc., pois pouca valia tem um programa que só poderá rodar em um computador que ainda está por ser inventado - para usar em exemplo extremo.
C - Codificação
Codificação é o processo de converter sua solução, que está na forma de um algoritmo, em um programa que o computador possa entender. O que você faz nessa etapa é "traduzir" o seu algoritmo para a linguagem de baixo ou alto nível que você vai usar para escrever seu programa.
Como já assinalamos acima, programação é algo bem mais amplo do que esse processo de codificação, muito embora um grande número de pessoas associe a atividade de programação apenas com a etapa de codificação. Na verdade, o processo de codificação normalmente consome não mais do que 20% do tempo total envolvido na programação, enquanto que as etapas anteriores, como a definição do problema e o desenvolvimento de sua solução lógica, consomem, em média, cerca de 40% do tempo real.
A maior parte dos programadores concordará que a etapa de codificação é a parte mais fácil da programação. Assim que você estiver bem familiarizado com o conjunto de instruções disponíveis em seu computador, ou com as características da linguagem que você vai usar, e com alguns "macetes" básicos de programação, a codificação vai fluir com naturalidade e rapidez. Sua experiência vai mostrar, por outro lado, que a definição do problema e a busca de uma solução lógica para ele são tarefas bem mais complexas e que nem sempre fluem com a naturalidade e a rapidez características do processo de codificação.
D - Testagem e Depuração
Assim que a codificação estiver terminada, você poderá digitar (i.e., datilografar) o programa ou o "código", como preferem alguns programadores...) no seu computador e testá-lo.
Testar um programa é verificar se ele funciona da maneira que você espera que ele funcione. Em caso positivo, tudo bem. Em caso contrário, vamos ver onde está o erro.
Mas antes de você concluir que tudo está bem, é necessário "espremer" bem o programa, isto é, submetê-lo a todas as condições de teste possíveis, até mesmo às mais absurdas e improváveis. Vamos supor, por exemplo, que seu programa comece pedindo que o operador digite a data. Meses acima de 12 são rejeitados? Dias acima de 29 para o mês de Fevereiro são aceitos pelo programa? Números negativos, como o mês - 5, são aceitos? Caracteres alfanuméricos, como "Jan" para o mês 01, são aceitos ou rejeitados? Note bem que há uma falha no programa se ele aceita um mês 13, na data. Por outro lado, o programa pode rejeitar "Jan" para o mês 01, sem que isto seja uma falha, se o programa exibe na tela algo como "DD/MM/AA", indicando claramente que se espera que o mês seja digitado na forma de dois caracteres - o que por sua vez sugere que "Jan" não seria aceitável (e que, provavelmente, também meramente 1 não seria aceitável). É sempre conveniente indicar na tela como é que se espera que os dados solicitados sejam fornecidos. Se se deseja o nome do operador, é sempre bom indicar o número máximo de caracteres permitidos, e assim por diante. Mas o importante, no momento de testar o programa, é submetê-lo a todas as condições possíveis e imagináveis, pois se há algum erro é melhor que ele apareça já do que quando outra pessoa estiver usando o programa - ou mesmo quando você mesmo estiver usando o programa, já com dados reais, pois poucas coisas são tão frustrantes como ver um programa "abandonar" você, no meio da execução, com a mensagem de que há algum erro na linha número tal.
Esteja preparado, ao testar o seu programa, para o fato de que, com raríssimas exceções, programas não funcionam corretamente na primeira vez que são usados. Há vários tipos de erro que podem aparecer. Estes vão desde ERROS DE SINTAXE, que são ou erros de ortografia nas palavras-chave da linguagem que você está usando, ou construções sintáticas ilegítimas, ou parênteses a mais ou a menos, etc., até os mais complicados ERROS DE LÓGICA. Erros de sintaxe são fáceis de detectar, pois o seu compilador ou interpretador normalmente os acusa e até aponta as linhas do programa em que se encontram. É só ir lá e corrigir. Erros de lógica, por outro lado, não são acusados pelo compilador ou interpretador. Você só percebe que eles existem porque o computador não está fazendo aquilo que você desejava e esperava que ele fizesse. Nesses casos é preciso examinar cuidadosamente o algoritmo e sua implementação para ver onde está o erro.
O processo de descoberta e eliminação de erros ("bugs") no programa é freqüentemente chamado de depuração (ou "debugging") do programa. Depuração, portanto, é o processo de procura e eliminação de erros e outros probleminhas menores que quase fatalmente se infiltram em um programa. Assim que o programa estiver totalmente depurado, estará em condições de ser usado.
E - Documentação
A etapa final do processo de programação é a preparação da documentação para o programa. Essa etapa é freqüentemente negligenciada por muitos programadores, pois o programa finalmente está depurado, pronto para ser usado, e parece uma enorme e injustificável perda de tempo ficar se preocupando em preparar e escrever a documentação. Tudo está tão fresco na memória que parece impossível que seja realmente necessário gastar tempo e energia preparando documentação para o programa.
Mas não se iluda: é realmente necessário fazer isso, porque, por incrível que pareça, você mesmo, algum tempo depois, já não vai se lembrar mais da razão de muitas das coisas que você fez ao escrever o seu programa. Imagine os outros.
Mas o que envolve, afinal, a documentação de um programa?
Em primeiro lugar, a definição do problema deve estar registrada por escrito, bem como a solução que você desenvolveu. Deixe registradas as razões que o, levaram a optar por esse ou aquele tipo de solução.
Em segundo lugar, guarde gráficos, desenhos, diagramas, etc., que você tenha usado - eles certamente serão úteis mais tarde.
Em terceiro lugar, procure manter arquivada uma listagem de cada uma das versões do seu programa, incluindo aquelas que apresentaram erros, numerando-as em ordem e indicando em que aspecto elas diferem das versões anteriores. Esse procedimento é muito útil quando você, ou alguma outra pessoa, mais tarde, estiver tentando entender porque é que algo foi feito assim e não de outra forma.
Em quarto lugar, prepare um relato detalhado explicando seu algoritmo e todos os procedimentos e rotinas utilizados em seu programa. Isso é importantíssimo para a MANUTENÇÃO DO PROGRAMA. Manter um programa significa atualizá-lo, mais tarde, seja porque você (ou alguém) deseja incluir nele algumas outras características, seja porque se descobriu algum erro, seja porque algumas de suas partes precisam ser ajustadas a novas condições (como, por exemplo, alterações nas alíquotas de dedução numa folha de pagamento). Muitas vezes a manutenção de um programa é feita por alguém que não é o programador original. Nesses casos, a manutenção é virtualmente impossível se o programa for razoavelmente complexo e não estiver bem documentado.
Afirmamos acima que as etapas de definição do problema e de desenvolvimento de uma solução lógica via de regra consomem, em média, cerca de 40% do tempo de desenvolvimento de um programa, e que a codificação consome cerca de 20%. Os restantes 40% do tempo geralmente são consumidos com a testagem e depuração e com a preparação da documentação. Não procure economizar tempo aí, por mais tentador que isso seja. O tempo que for economizado nesses estágios você, ou outra pessoa, vai gastar em dobro, mais tarde, quando precisar manter o programa.
O maior investimento, em um projeto de programação, é o tempo do programador. Uma quantidade significativa de tempo é exigida para se desenvolver um programa útil. Isso em parte explica porque é que bons programas são freqüentemente tão caros. Na verdade, em um sistema completo, o hardware acaba sendo o componente mais barato, a maior parte das vezes - o software é que se torna quase sempre o componente mais caro.
2 - Importância do Aprendizado de Programação
Existem, portanto, boas razões, do ponto de vista financeiro, para aprender programação. Se você não entende de programação, não poderá escrever seus programas, nem adaptar os que você adquirir, nem muito menos corrigir os erros eventualmente existentes em programas que você esteja usando. Você terá que comprar todos os seus programas, pagar, possivelmente, a terceiros, para adaptá-los às suas necessidades ou novas circunstâncias, ou para corrigir erros que porventura existiam neles. Tudo isso vai custar, provavelmente, bastante dinheiro - dinheiro que, pelo menos em parte, será economizado, se você souber programar.
Mas economizar dinheiro não é a principal razão para aprender a programar. Há outras, talvez até mais importantes.
Achamos oportuno terminar o presente livro com uma defesa da tese de que, numa sociedade informatizada, como a que descrevemos na capítulo inicial, todos, inclusive (ou, talvez, principalmente) as crianças, devem aprender a programar. Isso porque o aprendizado de programação traz, embutido em si, a aprendizagem de uma série de conceitos, habilidade e atitudes que são importantes, talvez até essenciais, para nossa sobrevivência com uma qualidade de vida superior à atual.
Afirmar que todos devem aprender a programar não significa, naturalmente, dizer que todos devem se tornar programadores profissionais. Significa, isto sim, que o aprendizado de programação tem características próprias que o tornam valiosos, não só para a tarefa de programação em si. E isso porque, como acabamos de ressaltar, aprendendo, a programar o computador um indivíduo aprende várias outras coisas, que são de grande valia.
Em primeiro lugar, aprende a desmistificar e a dominar o próprio equipamento.
Em segundo lugar, aprende várias técnicas e estratégias para a solução de problemas.
Em terceiro lugar, aprende a compreender com maior profundidade o assunto de que se ocupa o programa.
Comentemos, brevemente, e à guisa de conclusão, cada um desses pontos.
Um certo sentido de mistério e até mesmo de mágica geralmente cerca o primeiro contato de alguém com o computador. Embora no íntimo se possa saber que se trata apenas de uma máquina com circuitos, teclas, etc., há algo acerca do computador que o faz parecer não só quase vivo, como inteligente. A primeira coisa que o aprendizado de programação demonstra é que o computador só faz aquilo que você o ensina fazer. Como já dissemos, sem um programa, e, portanto, sem um programador, o computador é um perfeito idiota, que, entretanto, tem uma memória relativamente boa e uma capacidade servil de executar ordens com precisão e rapidez. No processo de aprender esse fato essencial acerca do computador, as pessoas, e, em especial as crianças, aprendem quem dá ordens a quem, nesse jogo, quem é que ensina, quem é que instrui, quem é que está em controle.
A descoberta dessa fato, juntamente com a descoberta do fato de que o computador não irá resolver nenhum problema que você não consiga resolver para ele, ajuda as pessoas, e sobretudo as crianças, a desenvolverem auto-confiança, a auto-confiança que vem do fato de que você é capaz de fazer uma máquina poderosa e até misteriosa obedecer às suas ordens. Essa sensação de auto-confiança e de domínio sobre a máquina é importante não só para crianças e demais pessoas que têm um grau baixo de auto-confiança, mas para todos, porque, em uma sociedade cada vez mais permeada pela tecnologia, é essencial que as pessoas, sobretudo as crianças, se convençam de que são elas que devem, até porque podem, controlar as máquinas - e não vice-versa.
Em segundo lugar, quem aprende a programar o computador desenvolve uma série de habilidades e estratégias para a solução de problemas - e de problemas bastante reais.
Embora as pessoas aprendam a solucionar problemas e a desenvolver certas estratégias para fazê-lo, simplesmente vivendo suas vidas, ou na "escola da vida", como dizem alguns, parece ser terrivelmente difícil ensinar, na escola propriamente dita, métodos e técnicas de solução de problemas. As razões dessa dificuldade provavelmente se relacionem com a diversidade das habilidades e dos conhecimentos, e com a profundidade da compreensão, que são exigidos para a solução de problemas - bem como com a complexidade inerente à avaliação das estratégias utilizadas para a solução de problemas.
As escolas preferem se concentrar em habilidades que podem ser facilmente identificadas, isoladas, e medidas, a se dedicar àquelas que são menos tangíveis e mais profundamente inter-relacionadas. Temos aqui um problema muito sério a afligir a nossa educação: ensina-se o que se pode mais facilmente identificar, isolar, e avaliar - não o que é mais importante (e que pode ser menos tangível, mais complexo, mais inter-relacionado, mais difícil de avaliar).
Computadores fornecem um contexto cheio de problemas excitantes e atraentes para as pessoas, e as desafiam a solucioná-los. Mesmo as tarefas mais simples de programação, aquelas voltadas para crianças e principiantes, como desenhar ou escrever algo na tela, são suficientemente ricas e complexas para ajudar no desenvolvimento de uma série de habilidades que levam à solução de problemas. Ao mesmo tempo há aspectos envolvidos nessa experiência que fazem com que a solução de problemas, nesse contexto, sejam mais fácil e mais facilmente inteligível do que no mundo real.
Ou vejamos. O computador, em primeiro lugar, torna possível dividir, com relativa facilidade, um problema em vários outros pequenos problemas. Essa estratégia é extremamente útil na solução de problemas, que, de início, parecem demasiadamente complexos para serem solucionados. Em segundo lugar, ao se propor a escrever um programa, a pessoa é forçada a fazer uma descrição explícita e formal do problema que irá resolver com aquele programa. Isso em si já é algo bastante positivo - especialmente numa época em que dada a premência e a urgência de tudo o que fazemos, freqüentemente começamos a tentar solucionar um problema sem saber exatamente qual é o problema que precisamos resolver ... Mas o mérito não para aí. Diferentemente de uma descrição meramente verbal ou escrita de alguma coisa, um programa de computador, que incorpora uma solução para o problema descrito, pode ser testado com facilidade, o seu resultado comparado com o que se esperava. Esse processo contínuo de descrição do problema, proposta de uma solução, testagem da solução, revisão, nova testagem, etc., é de enorme utilidade pedagógica. Nele está o cerne do método científico - e através dele a pessoa aprende a aprender, usando para isso os seus próprios erros.
O terceiro tipo de aprendizagem que decorre do aprendizado de programação é o do próprio conteúdo ou assunto sobre o qual se está programando. Todos os que ensinam já tiveram a experiência de que ao ensinar determinado conteúdo o professor freqüentemente aprende muito sobre o assunto. Em programação ocorre a mesma coisa: ao tentar fazer um programa que leve o computador a executar determinados gráficos, ou a reproduzir certos sons, ou notas musicais, o programador geralmente desenvolve uma compreensão ( e mesmo uma apreciação) bem mais profunda desses conteúdos do que tinha antes. Isso se aplica a qualquer conteúdo.
Programação, muitos já observaram, é uma mistura de arte e ciência, de intuição e lógica. Não há regra ou lógica alguma que nos ensine a ter boas idéias, a inventar ou descobrir boas soluções para nossos problemas. É aqui que a programação é uma arte, que tem que ver com o lado intuitivo e criativo das pessoas. Mas mesmo boas idéias precisam ser implementadas, testadas, depuradas. É aqui que entra a lógica. Para isso há regras, há métodos. O atrativo e a beleza da programação encontram-se no fato de que ela combina essas duas coisas. Intuição e lógica. Criatividade e rigor. Liberdade e método. Arte e ciência.
[Índice] [Capítulo IV] [Bibliografia]
© Copyright by Eduardo Chaves
Last revised: 02 May 2004