A Essência da Programação – Parte I

Qual é a melhor maneira de se aprender a programar? Através de algoritmos em português-estruturado (o famoso portugol)? Através de representações simbólicas, como o fluxograma? Indo direto treinando e programando em C? Ou através de uma linguagem muito bem estruturada, como o Pascal? Essa pergunta não possui resposta fácil, nem para alunos ou professores. Desses métodos citados, já se usou (e ainda se usa) pouco ou muito de cada.

O Pascal, a vejo como uma excelente linguagem para aprendizado, mas somente se o aluno souber inglês, pois programar em Pascal é como se estivesse escrevendo em um inglês estruturado. Se não souber inglês, a única vantagem do Pascal é a sua divisão estrutural em interfaces, implementação, tipos, variáveis, procedimentos, funções, etc., o que permite modularizar a programação e o aprendizado.

O C é a linguagem mais preferida da comunidade acadêmica, possuindo uma tradição de décadas no seu ensino e utilização. Mas, nem por isso, seria a mais indicada. A estrutura do C não é simples – principalmente se considerar a utilização de strings (cadeia de caracteres) e alocações de memórias –  e muitas vezes não apresenta nem mensagens de erro quando este acontece ou quando programamos alguma coisa inadequada.  Não possui tipo lógico, aceita atribuição até dentro de um comando lógico-condicional (if) e possui muitos operadores binários. Ele dá muita liberdade ao programador, o que é muito bom para programadores experientes, mas pode ser um problema para o pessoal que está começando a programar. Pode até ser a linguagem mais completa – nem vou discutir esse ponto – mas longe de ser uma linguagem para simples iniciantes. A sua própria proposta é de ser uma linguagem de baixo nível (mais perto do computador do que do usuário) e muito poderosa, o que a faz não recomendável para principiantes.

O português-estruturado, também muito utilizado para ensinar a elaboração de algoritmos, peca por não ser efetivamente uma linguagem e se parecer com uma. É um pseudo-código em português que procura utilizar as principais estruturas de programação utilizadas nas linguagens mais populares. Sua estrutura, se traduzida para o inglês, lembra o Pascal em alguns aspectos. A idéia é boa – aprender em um idioma nativo as principais estruturas das linguagens –  mas, por algum motivo não faz tanto sucesso como resultados no ensino e nem desperta muito interesse dos alunos.  Talvez porque eles, a vendo tão perto de uma linguagem real de programação,  busquem logo algo mais prático e que funcione, de fato. Fazê-los utilizarem uma pseudo-linguagem que lembra uma linguagem de programação é como só poder (e ter que) sentir o cheiro do doce em uma degustação de doces, sem comer o doce. O aluno vai preferir ir logo comer o doce.

O fluxograma é uma boa representação de lógica de programação. Talvez a maneira mais independente e direta de se aprender a lógica de programação, pois seus fluxos traçados são pura lógica e são independentes de qualquer linguagem de programação. O aluno não está lidando com uma linguagem de programação. Está lidando com a lógica pura de programação. Seu único problema é que um simples algoritmo pode caber em mais de uma folha de papel, o que dificulta sua visualização. Imagine uma representação de algoritmos maiores utilizando o fluxograma. Ficaria muito grande, provavelmente com várias folhas. Ou, se compactado em uma única folha, poderia ficar ilegível.

Este artigo é dividido em 3 partes. Esta é a primeira. Na parte 2 continuarei a desdobrar a idéia do artigo e irei expor a melhor maneira que acho para aprender (e ensinar) a programar.

12 Comentários para A Essência da Programação – Parte I

  • Sales

    Puxa!! Muito interessante o tema! Li só a introdução do artigo, mas já percebo que é uma assunto que dá “pano pra manga”! Vou querer ler as três partes. Quero saber sua opinião sobre o assunto, uma vez que este não é importante apenas para quem vai começar (alunos), mas também para profissionais que já estão na área há bastante tempo, mas dão aula, participam de projetos pedagógicos, opinando sobre a melhor abordagem e por aí vai…
    Interessa também aos desenvolvedores de ferramentas educacional, por exemplo…

    Bom nesse momento preferi logo comentar pq, como falei, gostei da “puxada” para o artigo. Devo ler amanhã talvez.
    Um abraço e continue inovando!!

    Sales

  • Gustavo Ramos

    Acho que a melhor alternativa é uma introdução aos conceitos de lógica com Fluxograma e depois a utilização da linguagem Pascal. Focar somente no fluxograma não anima o aluno, que quer ver seu algoritmo ter algum resultado prático.

    Em relação ao Pascal creio que o inglês contribui, em vez de atrapalhar. Pois o aluno desde cedo percebe o quanto este idioma é importante na nossa área.

  • Esta história já deu o que falar na Lista de profissionais de tecnologia.

    Este assunto é muito polemico, (por que tio?) Por que cada um tem um ponto de vista diferente. É como religião. É como adoradores do Linux. É como adoradores da M$ e assim por diante.

    Comecei pelo portugol junto ao C (do qual não é tão complexo como você diz ai em cima) para minha opinião MUITO PESSOA. Achei que a combinação foi perfeita. Pois eu tinha que exercitar meu raciocínio com muitos exercícios de lógica e fazer alguns em portugol, logo após escreve-los em linguagem C. Para mim foi muito fácil, não tive problemas com a linguagem C. Não tive problemas de alocação de Memória (no caso de ponteiros, etc, quando necessitei).

    Não aprendi a programar em uma IDE que facilita muito as coisa. E logo após passei a programar em várias outras linguagens sem problema algum, apenas buscando como é a sintaxe.

    A parte principal da programação é a lógica. Pois a linguagem nós aprendemos com manuais e o google, a lógica é mais difícil.

    Ruan Carlos
    http://www.ruancarlos.com.br

  • Reinaldo

    Discordo em alguns pontos.

    Acredito que se tenha que começar nesse ritmo mesmo, com portugol, pascal, c, java/.NET. Por mais entendiante que seja, portugol deixe o “gostinho” da programação, estimulando logo o iniciante a entender como funciona na prática. E isso é bom, ter estímulo! Pascal passa uma idéia de ser uma linguagem básica e c uma mais madura. Embora saibamos que são de baixo nível, é interessante mostrá-las para eles terem com o que comparar quando migrarem para plataformas robustas, de ambiente de produção, java/.NET. Não seguir essas etapas, é o mesmo que nascer em berço de ouro. Pouco se dá valor à suas origens, e nem consegue mensurar o valor real de sua estrutura. Acontece muito de em aulas de OO o professor se esguelar para tentar explicar as maravilhas e facilidades que esse paradigma trouxe, e o aluno ficar “voando” sem entender porque aquilo mesmo é uma melhoria. Você pode dizer, mostrar em vídeo, chorar, explicar o quanto foi emocionante pular de pára-quedas, mas se a pesssoa não pular, nunca saberá de fato!

  • Alan Carvalho

    Eu comecei a aprender a programar direto em BASIC. Fui ver o que era fluxograma (e para que precisaria disso) quando fui aprender COBOL. Acho o Pascal uma boa linguagem para se aprender (mesmo direto) pois requer uma boa dose de atenção por parte do aluno.

  • augusto

    o problema encontrado com o Pascal é o Inglês(!?!?) Mas lamentavelmente, ou não, não há como dessassociar a língua Inglesa da Computação. E as noções de inglês utilizadas no Pascal são muito básicas, não vejo isso como problema.

  • Rogerio Peres

    Não há dúvida: a melhor maneira de fazer um bom programa é colocá-lo no papel através dum português estruturado. Associado a um bom “teste de mesa” é imbatível!

  • Concordo que não há como desassociar o inglês da informática, Augusto. Afinal os EUA sempre foram o cérebro predominante desta área. Note que eu não falei que o problema é o inglês. Falei apenas que a o Pascal, com sua estrutura de inglês estruturado, não seria uma vantagem nos casos que os alunos - note também que eu estou sempre me referindo aos alunos iniciantes e seu aprendizado inicial – não soubessem inglês. E tenho passado muito por isso: grande número de alunos que não sabem nada de inglês (principalmente nos primeiros semestres) e reclamam disso. Incentivos a todos para procurarem um curso de inglês e começarem a ser auto-didata nas leituras de artigos técnicos em inglês. Já eles acham que a faculdade deveria ter uma disciplina como “Inglês para Computação”.

  • Oi, Reinaldo.
    Não falei que não se deve passar por estas linguagens, que servem hoje para bases de muitas outras linguagens e estruturas de programação. Acredito que deva-se passar por elas (C, Pascal) e até antes, talvez, pelo ASM (bem, aqui há controvérsias :-) ). Particularmente só ponho em cheque a necessidade do portugol.
    Minha idéia neste artigo é me referir apenas ao ponto inicial de aprendizado, o melhor lugar por onde começar para que o ensino seja mais eficiente, já que lógica de programação é o coração de toda a ciência da computação. Acho que todos os métodos que citei são válidos e possuem suas vantagens e desvantagens, como tentei mostrar no artigo.
    Valeu pelas suas observações.

  • Sales

    Concordo com o Rogério. Parece-me que o tradicional “papel e lápis” estão ficando esquecidos. Linguagem de programação A ou B são apenas ferramentas com particularidades e características próprias para expressar a nossa questão para a máquina que facilitará o processo de lidar com a referida questão que humanamente, digamos assim, seria enfadonho, desgastante ou impossível.
    Há uma tendência do aluno ou programador ao precisar desenvolver um programa, partir imediatamente para o computador como se este fosse o “Salvador da pátria”. E não é. Já ouvimos falar que o computador é burro, não é? Pois é… O máximo que pode acontecer é o compilador (a depender da linguagem) auxiliar na identificação de erros e oferecer algumas sugestões básicas. Aliás, quem começa de cara usando uma IDE, às vezes não compreende o que acontece no processo da edição de um código até a apresentação dos resultados. E perde muito com isso.
    Também defendo programar no papel e não podem faltar, de jeito nenhum, os testes de mesa.
    Logo, deveria ser compreensão e muita lógica de programação num português estruturado associado ao uso de fluxogramas. Depois disso talvez introduzisse conceitos de orientação objetos e partisse logo para Java. Alem do que, embora não seja de modo algum o foco, pode-se apresentar programação estruturada em Java.
    Por último, tomar conhecimento de outras linguagens enriquece o “cabedal computacional”. Ao menos para saber escolher qual linguagem se aplica melhor ao contexto.

  • Programar com papel e lápis (eu) acho a mesma coisa que se limpar no sanitário com uma notebook (huahua). Começar com ASM, as mesmas siglas dizem: Absolutamente Sado Masoquista.

    Cada um tem sua experiência e não existe uma fórmula, quem vai ser programador já sabe isso antes de botar por primeira vez uma linha de código. Eu, por exemplo, nunca quis saber de pseudocódigo e comecei com C sem problema nenhum, com os comandos lógicos (que não são muitos) e imprimindo na tela. Para começar a programar nem ponteiros se precisam, C é uma linguagem estruturada como muitas outras que permite fazer operações simples através das quais vc nunca vai esquecer qual é a lógica de escrever código. Uma vez que vc tem isto na cabeça, a linguagem é um problema menor, seja ela qual for.

    Os tempos mudam, acho que hoje uma linguagem para aprender as operacoes básicas poderia ser o javascript já que podemos executar ele em qualquer navegador sem precisar de um compilador externo e até publicar nosso código na web para poder acessar ele em qualquer outro lugar, até no celular.

  • (Rogerio Peres
    14/03/2009 às 10:04

    Não há dúvida: a melhor maneira de fazer um bom programa é colocá-lo no papel através dum português estruturado. Associado a um bom “teste de mesa” é imbatível!)²X2