quarta-feira, 20 de julho de 2011

Poliglota? Eu??

- Professor, qual é a melhor linguagem de programação?

Ai, meu santo padin Padre Cícero... vocês só fazem perguntas impossíveis???

Vou ter que me repetir, e responder... depende! Melhor pra que, bro?

Eu já esqueci mais linguagens de programação do que sei atualmente... incluindo algumas que aprendi quando a maioria de vocês ainda não estava nem na prancheta de desenho!

Senão vejamos: Fortran, Algol, Cobol, Basic, Miis/Mumps, dBase/Clipper, Linc,  Pascal, Delphi/Pascal, C/C++, Assembler '80, Assembler '86, Assembler PIC16, Assembler 8051, Assembler S08, Java... (as amarelas são as obsoletas, que já não uso há tanto tempo que certamente esqueci tudo!)

Putz, será que esqueci alguma?

Na década de '60, Niklaus Wirth, que considero um gênio na área da informática, tanto quanto considero meu ídolo Ferdinand Porsche na área da mecânica, desenhou o Algol, a primeira linguagem de programação estruturada.

O projeto do Algol é tão bom e consistente que, baseado nele, Wirth desenhou o Pascal, publicado em '70 e em uso até hoje e, 50 anos depois do Algol, todos programamos em C e Java, cujas estruturas e sintaxe são notavelmente parecidas com as do Algol e do Pascal.

Aliás, é interessante notar que o Unix tem a fama de ser o primeiro sistema operacional desenvolvido em linguagem de alto nível - C - mas muuuitos anos antes, na década de '60, os equipamentos Burroughs utilizavam um sistema operacional, o Burroughs MCP, totalmente desenvolvido em Algol.

Mas vamos simplificar, deixar de lado as reminiscências históricas, e responder à pergunta:

Programar sistemas comerciais em um PC é bem diferente de programar sistemas de automação em microcontroladores.

Em um PC, geralmente temos hardware sobrando, e estamos bastante isolados da camada física do hardware.  No máximo vemos a camada de APIs do SO.  Portanto não há razão para se utilizar um Assembler, e iremos sempre programar em alto nivel.  Se essa pergunta me fosse feita poucos anos atrás, eu não hesitaria em citar o Delphi/Pascal (e seu irmão Kylix para quem gera código para Linux) como a melhor alternativa.  É uma linguagem bem estruturada, poderosa, e extremamente bem documentada.

No entanto o Delphi, nos últimos anos, "parou no tempo", e seus recursos para programação web-based são muito fracos.  E ele começou a perder fôlego.  Aí apareceu o Java, já no fim dos anos '90.

Hesitei muito em utilizar o Java.  Em primeiro lugar, como programador "antigo" (aiii... que termo horrível!) tenho um enorme respeito pelos recursos de hardware, que são tratados pelos programadores modernos como inesgotáveis.  E o Java não é um código nativo - sua proposta é ser um código universal, que rode em qualquer plataforma.  Lindo isso - pena que não é verdade.  Até hoje não se conseguiu realizar a utopia de um código realmente independente da plataforma.  Sempre existe aquele pequeno detalhe diferente que nos obriga a particularizar o código.  Só que para ser universal ele roda sobre uma outra camada de software, a JVM (Java Virtual Machine).  Ou seja, no fundo é um código interpretado.  Daí bem menos eficiente.

Mas finalmente me rendi ao inevitável.  E o inevitável é utilizar o que o mundo todo utiliza.  Não adianta um dinossauro ficar falando que Cobol é a melhor linguagem do mundo, se nem compiladores Cobol se encontra mais para as plataformas modernas!  Assim passei a programar Java, feliz da vida - procuro sempre ver o lado bom das coisas - porque ele é bem estruturado, e sua sintaxe quase igual à do C, que conheço bem e utilizo muito.

Já quando se fala de microcontroladores...  Aqui, senhores, o buraco é mais embaixo!  Estamos programando em um ambiente pequeno.  Poucos recursos.  Hardware extremamente limitado.  Diretamente sobre o hardware, ou em um SO muito simples, basicamente um gerenciador de tarefas, algumas vezes nem mesmo preemptivo.

Nesse caso (sei que muitos discordam de mim, mas mantenho minha posição) é necessário conhecer muito bem o seu hardware!  Conhecer o Assembler do "core" utilizado, para ser capaz de otimizar os loop mais apertados - codificando em Assembler ou, no mínimo, verificando o código gerado pela linguagem de alto nivel.  Se olharem na lista ali em cima, vocês verão os "Assembler" de todos os "core" que eu utilizei a fundo até hoje.

E, claro, conhecer uma linguagem de mais alto nivel adequada, que ninguém é de ferro para desenvolver toda uma aplicação complexa em Assembler.  E aí, no domínio dos microcontroladores, a única opção atual - e parece que por mais um bom tempo - é o C.

Nenhum comentário:

Postar um comentário